Skapa en Azure Files lagringsklass på Azure Red Hat OpenShift 4

I den här artikeln skapar du en lagringsklass för Azure Red Hat OpenShift 4 som dynamiskt etablerar lagring med hjälp av Azure Files. Du lär dig att:

  • Konfigurera förutsättningarna och installera nödvändiga verktyg
  • Skapa en Azure Red Hat OpenShift 4-lagringsklass med Azure Files provisioner

Om du väljer att installera och använda CLI:t lokalt, förutsätter den här självstudien Azure CLI version 2.6.0 eller senare. Kör kommandot az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Innan du börjar

Distribuera ett Azure Red Hat OpenShift 4-kluster till din prenumeration. Mer information finns i Skapa ett Azure Red Hat OpenShift 4-kluster.

Skapa ett Azure-lagringskonto

Det här steget skapar en resursgrupp utanför Azure Red Hat OpenShift klustrets resursgrupp. Den här resursgruppen innehåller de Azure Files-fildelningar som skapades av Azure Red Hat OpenShifts dynamiska provisionerare.

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

Ange behörigheter

Ange behörigheter för resursgrupper och ange klusterbehörigheter.

För behörigheter för resursgruppen kräver tjänsthuvudnamnet behörigheten listKeys för resursgruppen för det nya Azure-lagringskontot. Tilldela deltagarrollen.

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 klusterbehörigheter måste tjänstkontot för bindning av beständiga volymer kunna läsa Secrets. Skapa och tilldela en klusterroll i 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

Skapa en lagringsklass med Azure Files provisioner

Det här steget skapar en lagringsklass med en Azure Files provisioner. Du måste inkludera information om lagringskontot i lagringsklassmanifestet. Med den här informationen vet klustret att de ska titta på ett lagringskonto utanför den aktuella resursgruppen.

Vid etablering av lagring anger specifikationen secretName en hemlighet som används för autentiseringsuppgifterna för montering. I en kontext med flera klientorganisationer anger du värdet för parametern secretNamespace explicit. Annars kan andra användare läsa autentiseringsuppgifterna för lagringskontot.

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

Monteringsalternativ för Azure Files beror vanligtvis på den arbetsbelastning som du distribuerar och programmets krav. Mer specifikt för Azure Files bör du överväga att använda andra parametrar.

Obligatoriska parametrar:

  • mfsymlinks för att mappa symlinks till ett formulär som klienten kan använda.

  • noperm för att inaktivera behörighetskontroller på klientsidan.

Rekommenderade parametrar:

  • nossharesock för att inaktivera återanvändning av socketar om klienten redan är ansluten via en befintlig monteringspunkt.

  • actimeo=30 (eller högre) för att öka tiden som CIFS-protokollets klient cachelagrar fil- och katalogattribut.

  • nobrl för att stänga av begäranden om byteintervalllås till servern. Den här parametern rekommenderas också för program som har problem med lås i Portable Operating System Interface for Unix (POSIX).

Ändra standardlagringsklassen (valfritt)

Standardlagringsklassen kallas managed premium och använder provisioneraren azure-disk. Ändra den här inställningen genom att utfärda korrigeringskommandon mot lagringsklassmanifesten.

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

Kontrollera Azure Files lagringsklassen (valfritt)

Skapa ett nytt program och tilldela lagring till det.

Anmärkning

Om du vill använda mallen httpd-example måste du distribuera klustret med pull-hemligheten aktiverad. Mer information finns i Skaffa en pull secret från 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

Du kan se test.txt-filen via Storage Explorer i Azure-portalen.