Condividi tramite


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

In questo articolo, crei una StorageClass per Azure Red Hat OpenShift 4 che effettua il provisioning dinamico dell'archiviazione ReadWriteMany (RWX) usando Azure Files. Scopri 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. Per trovare la versione, eseguire il comando az --version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.

Prima di iniziare

Distribuire un cluster Azure Red Hat OpenShift 4 nella sottoscrizione, vedere Creare un cluster Azure Red Hat OpenShift 4.

Configurare l'account di archiviazione di Azure

Questo passaggio crea un gruppo di risorse all'esterno del gruppo di risorse del cluster Azure Red Hat OpenShift. Questo gruppo di risorse contiene le condivisioni di File di Azure che hanno creato il provisioner 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

Il principale servizio richiede listKeys l'autorizzazione nel gruppo di risorse del nuovo account di archiviazione Azure. Assegnare il ruolo Collaboratore.

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

L'account del servizio persistent-volume-binder di OpenShift richiede la capacità di leggere i segreti. Creare e assegnare un ruolo del cluster 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

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 storageClass sono necessari i dettagli dell'account di archiviazione in modo che il cluster 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 potrebbero 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 mappare i collegamenti simbolici in una forma che il client può utilizzare
  • 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 superiore) 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'oggetto StorageClass predefinito in è denominato managed-premium e usa il provisioner azure-disk. Modificare questa impostazione eseguendo i comandi patch sui manifesti dei 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.

Annotazioni

Per utilizzare il modello httpd-example, è necessario implementare il cluster 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 filetest.txt è visibile 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. Ecco cosa hai imparato a fare:

  • 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.