Erstellen einer Azure Files Speicherklasse auf Azure Red Hat OpenShift 4

In diesem Artikel erstellen Sie eine Speicherklasse für Azure Red Hat OpenShift 4, die speicher dynamisch mithilfe von Azure Files bereitgestellt. Hier erfahren Sie, wie Sie:

  • Einrichten der erforderlichen Komponenten und Installieren der erforderlichen Tools
  • Erstellen einer Azure Red Hat OpenShift 4 Speicherklasse mit dem Azure Files Provisioner

Wenn Sie die CLI lokal installieren und verwenden möchten, erfordert dieses Lernprogramm die Azure CLI Version 2.6.0 oder höher. Führen Sie den Befehl az --version aus, um die Version zu ermitteln. Wenn Sie die Azure CLI installieren oder aktualisieren müssen, siehe Installieren der Azure CLI.

Bevor Sie anfangen

Stellen Sie einen Azure Red Hat OpenShift 4 Cluster in Ihrem Abonnement bereit. Weitere Informationen finden Sie unter Erstellen eines Azure Red Hat OpenShift 4-Clusters.

Richten Sie ein Azure-Speicherkonto ein

In diesem Schritt wird eine Ressourcengruppe außerhalb der Ressourcengruppe Azure Red Hat OpenShift Cluster erstellt. Diese Ressourcengruppe enthält die Azure Files-Freigaben, die von der dynamischen Bereitstellung von Azure Red Hat OpenShift erstellt werden.

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

Legen Sie Ressourcengruppenberechtigungen fest, und legen Sie Clusterberechtigungen fest.

Für Berechtigungen auf Ressourcengruppen benötigt der Dienstprinzipal die Berechtigung listKeys für die Ressourcengruppe des neuen 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

Für Clusterberechtigungen benötigt das Dienstkonto des persistenten Volume-Binders die Berechtigung, Geheimnisse zu lesen. Erstellen und Zuweisen einer Clusterrolle 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

Erstellen einer Speicherklasse mit Azure Files Provisioner

In diesem Schritt wird eine Speicherklasse mit einem Azure Files Provisioner erstellt. Sie müssen die Details des Speicherkontos innerhalb des Speicherklassenmanifests einschließen. Anhand dieser Details weiß der Cluster, dass er nach einem Speicherkonto außerhalb der aktuellen Ressourcengruppe suchen muss.

Während der Speicherbereitstellung benennt die Spezifikation secretName ein Geheimnis, das für die Bereitstellungsanmeldeinformationen verwendet wird. Legen Sie in einem Mehrinstanzenkontext den Wert für den secretNamespace Parameter explizit fest. Andernfalls lesen andere Benutzer möglicherweise die Anmeldeinformationen für das Speicherkonto.

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

Bereitstellungsoptionen für Azure Files hängen in der Regel von der Arbeitsauslastung ab, die Sie bereitstellen, und den Anforderungen der Anwendung. Berücksichtigen Sie speziell für Azure Files die Verwendung anderer Parameter.

Erforderliche Parameter:

  • mfsymlinks, um symlinks in ein Format zu überführen, das der Client verwenden kann.

  • noperm um Berechtigungsprüfungen auf clientseitiger Seite zu deaktivieren.

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-Protokollclient (Common Internet File System) Datei- und Verzeichnisattribute zwischenspeichert.

  • nobrl um das Senden von Bytebereichssperranforderungen an den Server zu deaktivieren. Dieser Parameter wird auch für Anwendungen empfohlen, die Herausforderungen mit Sperren in Portable Operating System Interface for Unix (POSIX) haben.

Ändern der Standardspeicherklasse (optional)

Die Standardspeicherklasse wird als verwalteter Premium bezeichnet und verwendet den azure-disk Provisioner. Ändern Sie diese Einstellung, indem Sie Patchbefehle für die Speicherklassenmanifeste 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 Speicherklasse (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 So erhalten Sie ein Red Hat-Pull-Secret.

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

Sie können die test.txt-Datei über den Storage-Explorer im Azure-Portal anzeigen.