Share via


Creación de una clase StorageClass de Azure Files en Red Hat OpenShift en Azure 4

En este artículo, creará instancia de StorageClass para Red Hat OpenShift 4 en Azure que aprovisiona de forma dinámica el almacenamiento ReadWriteMany (RWX) mediante Azure Files. Aprenderá a:

  • Configurar los requisitos previos e instalar las herramientas necesarias
  • Creación de una instancia de StorageClass de Red Hat OpenShift 4 en Azure con el aprovisionador de Azure Files

Si decide instalar y usar la CLI localmente, en este tutorial es preciso que ejecute la versión 2.6.0 u otra posterior. Ejecute az --version para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure.

Antes de empezar

Implemente un clúster de Red Hat OpenShift 4 en Azure en la suscripción; vea Creación de un clúster de Red Hat OpenShift 4 en Azure

Configuración de una cuenta de almacenamiento de Azure

Este paso crea un grupo de recursos fuera del grupo de recursos del clúster de Red Hat OpenShift (ARO) de Azure. Este grupo de recursos contiene los recursos compartidos de Azure Files que crearon el aprovisionamiento dinámico de Red Hat OpenShift de Azure.

AZURE_FILES_RESOURCE_GROUP=aro_azure_files
LOCATION=eastus

az group create -l $LOCATION -n $AZURE_FILES_RESOURCE_GROUP

AZURE_STORAGE_ACCOUNT_NAME=aroazurefilessa

az storage account create \
	--name $AZURE_STORAGE_ACCOUNT_NAME \
	--resource-group $AZURE_FILES_RESOURCE_GROUP \
	--kind StorageV2 \
	--sku Standard_LRS

Establecimiento de permisos

Establecimiento de permisos de grupo de recursos

La entidad de servicio ARO requiere el permiso "listKeys" en el nuevo grupo de recursos de la cuenta de almacenamiento de Azure. Para lograrlo, asigne el rol "Colaborador".

ARO_RESOURCE_GROUP=aro-rg
CLUSTER=cluster
ARO_SERVICE_PRINCIPAL_ID=$(az aro show -g $ARO_RESOURCE_GROUP -n $CLUSTER --query servicePrincipalProfile.clientId -o tsv)

az role assignment create --role Contributor --scope /subscriptions/mySubscriptionID/resourceGroups/$AZURE_FILES_RESOURCE_GROUP --assignee $ARO_SERVICE_PRINCIPAL_ID

Establecimiento de permisos de clúster de ARO

La cuenta de servicio del enlazador de volúmenes persistente de OpenShift requiere la capacidad de leer secretos. Para conseguirlo, cree y asigne un rol de clúster de OpenShift.

ARO_API_SERVER=$(az aro list --query "[?contains(name,'$CLUSTER')].[apiserverProfile.url]" -o tsv)

oc login -u kubeadmin -p $(az aro list-credentials -g $ARO_RESOURCE_GROUP -n $CLUSTER --query=kubeadminPassword -o tsv) $ARO_API_SERVER

oc create clusterrole azure-secret-reader \
	--verb=create,get \
	--resource=secrets

oc adm policy add-cluster-role-to-user azure-secret-reader system:serviceaccount:kube-system:persistent-volume-binder

Creación de una instancia de StorageClass con el aprovisionador de Azure Files

Este paso crea una clase StorageClass con un aprovisionamiento de Azure Files. En el manifiesto de StorageClass, los detalles de la cuenta de almacenamiento son necesarios para que el clúster de ARO sepa que debe examinar una cuenta de almacenamiento que está fuera del grupo de recursos actual.

Durante el aprovisionamiento del almacenamiento, se crea un secreto denominado secretName para las credenciales de montaje. En un contexto multiinquilino, se recomienda establecer explícitamente el valor de secretNamespace; de lo contrario, otros usuarios pueden leer las credenciales de la cuenta de almacenamiento.

cat << EOF >> azure-storageclass-azure-file.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: azure-file
provisioner: file.csi.azure.com
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - noperm
parameters:
  location: $LOCATION
  secretNamespace: kube-system
  skuName: Standard_LRS
  storageAccount: $AZURE_STORAGE_ACCOUNT_NAME
  resourceGroup: $AZURE_FILES_RESOURCE_GROUP
reclaimPolicy: Delete
volumeBindingMode: Immediate
EOF

oc create -f azure-storageclass-azure-file.yaml

Las opciones de montaje de Azure Files normalmente dependerán de la carga de trabajo que va a implementar y los requisitos de la aplicación. Específicamente para los archivos de Azure, hay otros parámetros que debe considerar usar.

Parámetros obligatorios:

  • "mfsymlinks" para asignar vínculos simbólicos a un formulario que el cliente puede usar
  • "noperm" para deshabilitar las comprobaciones de permisos en el lado cliente

Parámetros recomendados:

  • "nossharesock" para deshabilitar la reutilización de sockets si el cliente ya está conectado a través de un punto de montaje existente
  • "actimeo=30" (o superior) para aumentar el tiempo que el cliente CIFS almacena en caché los atributos de archivo y directorio.
  • "nobrl" para deshabilitar el envío de solicitudes de bloqueo de intervalo de bytes al servidor y para las aplicaciones que tienen desafíos con bloqueos posix

Cambio del valor predeterminado de StorageClass (opcional)

El valor predeterminado de StorageClass en ARO se denomina managed-premium y usa el aprovisionador azure-disk. Para cambiarlo, emita comandos patch en los manifiestos de StorageClass.

oc patch storageclass managed-premium -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'

oc patch storageclass azure-file -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'

Comprobación de StorageClass en Azure Files (opcional)

Cree una aplicación y asígnele almacenamiento.

Nota:

Para usar la plantilla httpd-example, debe implementar el clúster de ARO con el secreto de extracción habilitado. Para obtener más información, vea Obtención de un secreto de extracción de Red Hat (opcional).

oc new-project azfiletest
oc new-app httpd-example

#Wait for the pod to become Ready
curl $(oc get route httpd-example -n azfiletest -o jsonpath={.spec.host})

#If you have set the storage class by default, you can omit the --claim-class parameter
oc set volume dc/httpd-example --add --name=v1 -t pvc --claim-size=1G -m /data --claim-class='azure-file'

#Wait for the new deployment to rollout
export POD=$(oc get pods --field-selector=status.phase==Running -o jsonpath={.items[].metadata.name})
oc exec $POD -- bash -c "echo 'azure file storage' >> /data/test.txt"

oc exec $POD -- bash -c "cat /data/test.txt"
azure file storage

El archivo test.txt también será visible a través del Explorador de Storage en Azure Portal.

Pasos siguientes

En este artículo, ha creado almacenamiento persistente dinámico mediante Microsoft Azure Files y Red Hat OpenShift 4 en Azure. Ha aprendido a:

  • Creación de una cuenta de almacenamiento
  • Configuración de StorageClass en un clúster de Red Hat OpenShift 4 en Azure mediante el aprovisionador de Azure Files

Vaya al artículo siguiente para aprender sobre los recursos compatibles con Red Hat OpenShift en Azure 4.