Creare un'istanza di StorageClass di File di Azure in Azure Red Hat OpenShift 4

In questo articolo verrà creata un'istanza di StorageClass per Azure Red Hat OpenShift 4 che effettua il provisioning dinamico dell'archiviazione di ReadWriteMany (RWX) con File di Azure. Verrà descritto come:

  • Configurare i prerequisiti e installare gli strumenti necessari
  • Creare un'istanza di StorageClass di Azure Red Hat OpenShift 4 con lo strumento di provisioning di File di Azure

Se si sceglie di installare e usare l'interfaccia della riga di comando in locale, per questa esercitazione è necessario eseguire l'interfaccia della riga di comando di Azure versione 2.6.0 o successiva. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Operazioni preliminari

Prima di distribuire un cluster di Azure Red Hat OpenShift 4 nella sottoscrizione, vedere Creare un cluster di Azure Red Hat OpenShift 4

Configurare l'account di archiviazione di Azure

In questo passaggio viene creato un gruppo di risorse all'esterno del gruppo di risorse del cluster di Azure Red Hat OpenShift (ARO). Questo gruppo di risorse contiene le condivisioni di File di Azure che hanno creato lo strumento di provisioning dinamico di 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

Impostare le autorizzazioni

Impostare le autorizzazioni del gruppo di risorse

L'entità servizio di ARO richiede l'autorizzazione 'listKeys' per il nuovo gruppo di risorse dell'account di archiviazione di Azure. Assegnare il ruolo 'Collaboratore' per ottenere questo risultato.

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

Impostare le autorizzazioni del cluster di ARO

L'account del servizio persistent-volume-binder di OpenShift richiede la capacità di leggere i segreti. Creare e assegnare un ruolo del cluster OpenShift per ottenere questo risultato.

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

Creare l'istanza di StorageClass con lo strumento di provisioning di File di Azure

In questo passaggio viene creata un'istanza di StorageClass con uno strumento di provisioning di File di Azure. Nel manifesto di StorageClass sono necessari i dettagli dell'account di archiviazione in modo che il cluster di ARO sappia esaminare un account di archiviazione all'esterno del gruppo di risorse corrente.

Durante il provisioning dell'archiviazione viene creato un segreto denominato secretName per le credenziali di montaggio. In un contesto multi-tenancy è consigliabile impostare il valore per secretNamespace in modo esplicito, altrimenti le credenziali dell'account di archiviazione possono essere lette da altri utenti.

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

Le opzioni di montaggio per File di Azure dipenderanno in genere dal carico di lavoro da distribuire e dai requisiti dell'applicazione. In particolare per File di Azure è possibile scegliere di usare altri parametri.

Parametri obbligatori:

  • "mfsymlinks" per eseguire il mapping dei collegamenti simbolici a un modulo utilizzabile dal client
  • "noperm" per disabilitare i controlli delle autorizzazioni sul lato client

Parametri consigliati:

  • "nossharesock" per disabilitare il riutilizzo dei socket se il client è già connesso tramite un punto di montaggio esistente
  • "actimeo=30" (o un valore maggiore) per aumentare il tempo in cui il client CIFS memorizza nella cache gli attributi di file e directory
  • "nobrl" per disabilitare l'invio di richieste di blocco dell'intervallo di byte al server e per le applicazioni che presentano problemi con i blocchi POSIX

Modificare l'istanza predefinita di StorageClass (facoltativo)

L'istanza predefinita di StorageClass in ARO è denominata managed-premium e usa lo strumento di provisioning azure-disk. Per modificarla, eseguire comandi patch sui manifesti di 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"}}}'

Verificare l'istanza di StorageClass di File di Azure (facoltativo)

Creare una nuova applicazione e assegnarvi spazio di archiviazione.

Nota

Per usare il modello httpd-example, è necessario distribuire il cluster di ARO con il segreto pull abilitato. Per altre informazioni, vedere Ottenere un segreto pull di 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

Il file test.txt sarà visibile anche tramite Storage Explorer nel portale di Azure.

Passaggi successivi

In questo articolo è stata creata una risorsa di archiviazione permanente dinamica usando File di Microsoft Azure e Azure Red Hat OpenShift 4. Contenuto del modulo:

  • Creare un account di archiviazione
  • Configurare un'istanza di StorageClass in un cluster di Azure Red Hat OpenShift 4 con lo strumento di provisioning di File di Azure

Passare all'articolo successivo per informazioni sulle risorse supportate di Azure Red Hat OpenShift 4.