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) en Azure. Este grupo de recursos contiene los recursos compartidos de Azure Files que crearon el aprovisionamiento dinámico de Red Hat OpenShift en 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 volumen persistente de OpenShift requiere la funcionalidad de lectura de 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
En este paso se crea una instancia de StorageClass con un aprovisionador 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 de varios inquilinos, es muy recomendable establecer el valor de secretNamespace explícitamente; de lo contrario, otros usuarios podrían 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.