Creare un'istanza di StorageClass di File di Azure in Azure Red Hat OpenShift 4
In questo articolo si creerà una Archiviazione Class per Azure Red Hat OpenShift 4 che effettua il provisioning dinamico dell'archiviazione ReadWriteMany (RWX) usando File di Azure. Verrà descritto come:
- Configurare i prerequisiti e installare gli strumenti necessari
- Creare un'istanza di Azure Red Hat OpenShift 4 Archiviazione Class con il provisioner 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
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 (ARO). Questo gruppo di risorse contiene le condivisioni 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
L'entità servizio 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 ARO
L'account del servizio di associazione di volumi permanenti OpenShift richiede la possibilità 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 Archiviazione Class con File di Azure provisioner
Questo passaggio crea una Archiviazione Class con un provisioner File di Azure. All'interno del manifesto Archiviazione Class, i dettagli dell'account di archiviazione sono necessari in modo che il cluster ARO sappia esaminare un account di archiviazione all'esterno del gruppo di risorse corrente.
Durante il provisioning dell'archiviazione, viene creato un segreto denominato da 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 dipendono in genere dal carico di lavoro che si sta distribuendo e dai requisiti dell'applicazione. In particolare per i file di Azure, è consigliabile usare altri parametri.
Parametri obbligatori:
- "mfsymlinks" per mappare i collegamenti simbolici a un modulo che il client può usare
- "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 il Archiviazione Class predefinito (facoltativo)
Il valore predefinito Archiviazione Class in ARO è denominato managed-premium e usa il provisioner azure-disk. Modificare questa impostazione eseguendo i comandi patch rispetto ai manifesti Archiviazione Class.
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 Archiviazione Classe file di Azure (facoltativo)
Creare una nuova applicazione e assegnarvi spazio di archiviazione.
Nota
Per usare il httpd-example
modello, è necessario distribuire il cluster 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 Esplora Archiviazione nel portale di Azure.
Passaggi successivi
In questo articolo è stata creata l'archiviazione permanente dinamica usando Microsoft File di Azure e Azure Red Hat OpenShift 4. Contenuto del modulo:
- Creare un account di archiviazione
- Configurare una Archiviazione Class in un cluster Azure Red Hat OpenShift 4 usando il provisioner File di Azure
Passare all'articolo successivo per informazioni sulle risorse supportate di Azure Red Hat OpenShift 4.