Freigeben über


Erstellen einer Azure Files Storage-Klasse in Azure Red Hat OpenShift 4

In diesem Artikel erstellen Sie eine StorageClass für Azure Red Hat OpenShift 4, die ReadWriteMany (RWX)-Speicher dynamisch mithilfe von Azure Files bereitstellen. Hier erfahren Sie, wie Sie:

  • Einrichten der erforderlichen Komponenten und Installieren der erforderlichen Tools
  • Erstellen einer Storage-Klasse in Azure Red Hat OpenShift 4 mithilfe der Azure Files-Bereitstellung

Wenn Sie die CLI lokal installieren und verwenden möchten, müssen Sie für dieses Tutorial mindestens die Azure CLI-Version 2.6.0 ausführen. Führen Sie den Befehl az --version aus, um die Version zu ermitteln. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.

Bevor Sie anfangen

Stellen Sie einen Azure Red Hat OpenShift 4-Cluster in Ihrem Abonnement bereit, siehe Erstellen eines Azure Red Hat OpenShift 4-Clusters.

Einrichten des Azure-Speicherkontos

In diesem Schritt wird eine Ressourcengruppe außerhalb der Ressourcengruppe des Azure Red Hat OpenShift-Clusters erstellt. Diese Ressourcengruppe enthält die Azure Files-Freigaben, die vom dynamischen Bereitsteller von Azure Red Hat OpenShift erstellt wurden.

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

Festlegen von Berechtigungen

Festlegen der Ressourcengruppenberechtigungen

Der Dienstprinzipal benötigt listKeys Berechtigungen für die neue Ressourcengruppe des Azure-Speicherkontos. Weisen Sie die Rolle "Mitwirkender" zu.

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

Festlegen von Clusterberechtigungen

Das OpenShift-Binderdienstkonto für persistente Volumes muss Geheimnisse lesen können. Erstellen und Zuweisen einer OpenShift-Clusterrolle

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

Erstellen einer Storage-Klasse mit einer Azure Files-Bereitstellung

In diesem Schritt wird eine Storage-Klasse (StorageClass) mit einer Azure Files-Bereitstellung erstellt. Innerhalb des StorageClass-Manifests sind die Details des Speicherkontos erforderlich, damit der Cluster weiß, ein Speicherkonto außerhalb der aktuellen Ressourcengruppe anzuzeigen.

Während der Speicherbereitstellung wird für die Einbindungsanmeldeinformationen ein durch „secretName“ benanntes Geheimnis erstellt. In einem Mandantenkontext wird empfohlen, den Wert für secretNamespace explizit festzulegen, andernfalls könnten die Anmeldeinformationen des Speicherkontos von anderen Benutzern gelesen werden.

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

Einbindungsoptionen für Azure Files hängen in der Regel von der Workload, die Sie bereitstellen, und den Anforderungen der Anwendung ab. Speziell für Azure-Dateien gibt es weitere Parameter, die Sie ggf. verwenden sollten.

Erforderliche Parameter:

  • mfsymlinks zum Zuordnen von Symlinks zu einem Formular, das der Client verwenden kann
  • noperm zum Deaktivieren von Berechtigungsprüfungen auf clientseitiger Seite

Empfohlene Parameter:

  • nossharesock um die erneute Wiederverwendung von Sockets zu deaktivieren, wenn der Client bereits über einen vorhandenen Bereitstellungspunkt verbunden ist
  • actimeo=30 (oder höher) um die Zeit zu erhöhen, die der CIFS-Client Datei- und Verzeichnisattribute zwischenspeichert
  • nobrl zum Deaktivieren des Sendens von Bytebereichssperranforderungen an den Server und für Anwendungen, die Probleme mit Posix-Sperren haben

Ändern der standardmäßigen Storage-Klasse (optional)

Die Standardmäßige StorageClass on wird als managed-premium bezeichnet und verwendet den Azure-Disk-Provisioner. Ändern Sie diese Einstellung, indem Sie Patchbefehle für die StorageClass-Manifeste ausgeben.

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

Überprüfen der Azure Files Storage-Klasse (optional)

Erstellen Sie eine neue Anwendung, und weisen Sie ihr Speicher zu.

Hinweis

Um die httpd-example Vorlage zu verwenden, müssen Sie Ihren Cluster bereitstellen und dabei das Pull-Secret aktivieren. Weitere Informationen finden Sie unter Abrufen eines Red Hat-Pullgeheimnisses (optional).

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

Die test.txt Datei ist über den Speicher-Explorer im Azure-Portal sichtbar.

Nächste Schritte

In diesem Artikel haben Sie mithilfe von Microsoft Azure Files und Azure Red Hat OpenShift 4 einen dynamischen beständigen Speicher erstellt. Sie haben gelernt, wie Sie:

  • Erstellen eines Speicherkontos
  • Konfigurieren einer Storage-Klasse in einem Azure Red Hat OpenShift 4-Cluster mithilfe der Azure Files-Bereitstellung

Im nächsten Artikel erfahren Sie mehr über die von Azure Red Hat OpenShift 4 unterstützten Ressourcen: