Creare una classe di archiviazione File di Azure in Azure Red Hat OpenShift 4

In questo articolo viene creata una classe di archiviazione per Azure Red Hat OpenShift 4 che esegue il provisioning dinamico dell'archiviazione usando File di Azure. Scopri come:

  • Configurare i prerequisiti e installare gli strumenti necessari
  • Creare una classe di archiviazione Azure Red Hat OpenShift 4 con il provisioner File di Azure

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

Prima di iniziare

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

Configurare un 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 File di Azure che hanno creato il Azure Red Hat OpenShift provisioner dinamico.

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 e impostare le autorizzazioni del cluster.

Per quanto riguarda le autorizzazioni del gruppo di risorse, l'entità servizio deve disporre dell'autorizzazione listKeys nel gruppo di risorse del nuovo account di archiviazione di Azure. Assegna il ruolo di 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

Per le autorizzazioni del cluster, l'account del servizio di associazione di volumi persistente richiede la possibilità di leggere i segreti. Creare e assegnare un ruolo del cluster in 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

Creare una classe di archiviazione con File di Azure provisioner

Questo passaggio crea una classe di archiviazione con un provisioner File di Azure. È necessario includere i dettagli dell'account di archiviazione nel manifest della classe di archiviazione. Con questi dettagli, il cluster è in grado di esaminare un account di archiviazione all'esterno del gruppo di risorse corrente.

Durante il provisioning dell'archiviazione, secretName specifica un segreto utilizzato per le credenziali di montaggio. In un contesto multitenant, impostare esplicitamente il valore del parametro secretNamespace. In caso contrario, altri utenti potrebbero leggere le credenziali dell'account di archiviazione.

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 in genere dipendono dal carico di lavoro che si sta distribuendo e dai requisiti dell'applicazione. In particolare per File di Azure, è consigliabile usare altri parametri.

Parametri obbligatori:

  • mfsymlinks per mappare symlinks in un modulo che il client può utilizzare.

  • noperm per disabilitare i controlli delle autorizzazioni sul lato client.

Parametri consigliati:

  • nossharesock per disattivare il riutilizzo dei socket se il client è già connesso tramite un punto di montaggio esistente.

  • actimeo=30 (o superiore) per aumentare la durata per cui il client del protocollo Common Internet File System (CIFS) mantiene nella cache gli attributi di file e directory.

  • nobrl per disattivare l'invio di richieste di blocco dell'intervallo di byte al server. Questo parametro è consigliato anche per le applicazioni che presentano problemi con i blocchi nell'interfaccia del sistema operativo portabile per Unix (POSIX).

Modificare la classe di archiviazione predefinita (facoltativo)

La classe di archiviazione predefinita è denominata premium gestita e usa il azure-disk provisioner. Modificare questa impostazione eseguendo comandi patch sui manifesti della classe di archiviazione.

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 la classe di archiviazione 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 ulteriori informazioni, consultare Ottenere un pull secret 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

È possibile visualizzare il file ditest.txt tramite il Storage Explorer nel portale di Azure.