Créer une classe de stockage Azure Files sur Azure Red Hat OpenShift 4

Dans cet article, vous allez créer une classe de stockage pour Azure Red Hat OpenShift 4 qui approvisionne dynamiquement le stockage à l’aide de Azure Files. Vous apprenez à :

  • Configurer les prérequis et installer les outils nécessaires
  • Créer une classe de stockage Azure Red Hat OpenShift 4 avec le provisionneur Azure Files

Si vous choisissez d’installer et d’utiliser l’interface CLI localement, ce didacticiel nécessite l’Azure CLI version 2.6.0 ou ultérieure. Pour trouver la version, exécutez la commande az --version. Si vous devez effectuer une installation ou une mise à niveau, consultez Installer Azure CLI.

Avant de commencer

Déployez un cluster Azure Red Hat OpenShift 4 dans votre abonnement. Pour plus d’informations, consultez Créer un cluster Azure Red Hat OpenShift 4.

Configurer un compte de stockage Azure

Cette étape crée un groupe de ressources en dehors du groupe de ressources du cluster Azure Red Hat OpenShift. Ce groupe de ressources contient les partages Azure Files qui ont créé le provisionneur dynamique Azure Red Hat OpenShift.

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

Définir des autorisations

Définissez des autorisations de groupe de ressources et définissez des autorisations de cluster.

Pour les autorisations de groupe de ressources, le principal de service requiert l’autorisation listKeys sur le nouveau groupe de ressources de compte de stockage Azure. Attribuez le rôle de contributeur.

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

Pour les autorisations de cluster, le compte de service de classeur de volumes persistants nécessite la possibilité de lire des secrets. Créez et attribuez un rôle de cluster dans Azure Red Hat 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

Créer une classe de stockage avec Azure Files provisionneur

Cette étape crée une classe de stockage avec un provisionneur Azure Files. Vous devez inclure les détails du compte de stockage dans le manifeste de classe de stockage. Avec ces détails, le cluster sait examiner un compte de stockage en dehors du groupe de ressources actuel.

Lors de l’approvisionnement du stockage, la spécification secretName spécifie un secret utilisé pour les identifiants de montage. Dans un contexte multilocataire, définissez explicitement la valeur du paramètre secretNamespace. Sinon, d’autres utilisateurs peuvent lire les informations d’identification du compte de stockage.

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

Les options de montage pour Azure Files dépendent généralement de la charge de travail que vous déployez et des exigences de l'application. Plus précisément pour Azure Files, envisagez d’utiliser d’autres paramètres.

Paramètres obligatoires :

  • mfsymlinks pour mapper symlinks à un formulaire que le client peut utiliser.

  • noperm pour désactiver les vérifications d’autorisation côté client.

Paramètres recommandés :

  • nossharesock pour désactiver la réutilisation des sockets si le client est déjà connecté via un point de montage existant.

  • actimeo=30 (ou version ultérieure) pour augmenter la durée pendant laquelle le client du protocole CIFS (Common Internet File System) conserve en cache les attributs des fichiers et des répertoires.

  • nobrl pour désactiver l’envoi de demandes de verrouillage de plage d’octets au serveur. Ce paramètre est également recommandé pour les applications qui présentent des difficultés avec les verrous dans l’interface de système d’exploitation portable pour Unix (POSIX).

Modifier la classe de stockage par défaut (facultatif)

La classe de stockage par défaut est appelée premium managée et utilise le azure-disk provisionneur. Modifiez ce paramètre en émettant des commandes correctives sur les manifestes de classe de stockage.

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"}}}'

Vérifier la classe de stockage Azure Files (facultatif)

Créez une nouvelle application et attribuez-lui le stockage.

Remarque

Pour utiliser le httpd-example modèle, vous devez déployer votre cluster avec le secret d’extraction activé. Pour plus d’informations, reportez-vous à Obtenir un pull secret Red Hat.

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

Vous pouvez voir le fichier test.txt via le Explorateur Stockage dans le portail Azure.