Megosztás a következőn keresztül:


Migrálás a faalapú tárolási osztályból a CSI-illesztőprogramokra az Azure Kubernetes Service-ben (AKS)

A Container Storage Interface (CSI) illesztő implementációját az Azure Kubernetes Service (AKS) 1.21-es verziójától kezdve vezettük be. A CSI szabványként való alkalmazásával és használatával a meglévő állapotalapú számítási feladatokat a fákon belüli állandó köteteket (PV-ket) kell migrálni vagy frissíteni a CSI-illesztőprogram használatához.

A folyamat lehető legegyszerűbbé tételéhez és az adatvesztések hiányának biztosításához ez a cikk különböző migrálási lehetőségeket biztosít. Ezek a lehetőségek olyan szkripteket tartalmaznak, amelyekkel zökkenőmentesen migrálhat a fáról az Azure Disksre és az Azure Files CSI-illesztőprogramokra.

Mielőtt elkezdené

  • Az Azure CLI 2.37.0-s vagy újabb verziója. Futtassa az --version a verziót, és futtassa az upgrade a verzió frissítéséhez. Ha telepíteni vagy frissíteni szeretne: Az Azure CLI telepítése.
  • A Kubectl és a fürtgazdák hozzáférhetnek a PVC-hez vagy PV-hez, a kötet pillanatképéhez vagy a kötet pillanatkép-tartalmához, lekéréséhez, listázásához, törléséhez. Microsoft Entra RBAC-kompatibilis fürtök esetén Ön az Azure Kubernetes Service RBAC-fürt rendszergazdai szerepkörének tagja.

Lemezkötetek migrálása

Feljegyzés

A címkék failure-domain.beta.kubernetes.io/zone elavultak failure-domain.beta.kubernetes.io/region az AKS 1.24-ben, és el lettek távolítva az 1.28-ban. Ha a meglévő állandó kötetek továbbra is a nodeAffinity függvényt használják, az új állandó kötetbeállításban módosítania kell azokat topology.kubernetes.io/zone és topology.kubernetes.io/region a címkéket.

A fáról a CSI-ra való migrálás két áttelepítési lehetőséggel támogatott:

  • Statikus kötet létrehozása
  • Dinamikus kötet létrehozása

Statikus kötet létrehozása

Ezzel a beállítással statikusan hozzárendel claimRef egy PV-t egy később létrehozandó új PVC-hez, és megadja a volumeName PersistentVolumeClaim értéket.

Statikus kötet munkafolyamat-diagramja.

Ennek a megközelítésnek az előnyei a következők:

  • A folyamat egyszerű és automatizálható.
  • Nincs szükség az eredeti konfiguráció eltávolítására a fastruktúrájú tárolóosztály használatával.
  • A kockázat alacsony, mivel csak a Kubernetes PV/PVC logikai törlését hajtja végre, a tényleges fizikai adatok nem törlődnek.
  • Nem merült fel többletköltség, mivel nem kellett további Azure-objektumokat létrehoznia, például lemezeket, pillanatképeket stb.

Az alábbiakat érdemes megfontolni:

  • Az eredeti, dinamikus stílusú kötetekről statikus kötetekre való áttéréshez manuálisan kell létrehozni és kezelni a PV-objektumokat minden beállításhoz.
  • Számolni kell az alkalmazás lehetséges állásidejével, amikor az új alkalmazás ismételt üzembe helyezése az új PVC-objektumra vonatkozó hivatkozással történik.

Migrálás

  1. Frissítse a meglévő PV-t ReclaimPolicy a Törlésről a Megtartás értékre a következő parancs futtatásával:

    kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
    

    Cserélje le a pvName nevet a kijelölt PersistentVolume nevére. Másik lehetőségként, ha több virtuális gép esetében szeretné frissíteni a reclaimPolicy szolgáltatást, hozzon létre egy patchReclaimPVs.sh nevű fájlt, és másolja a következő kódba.

    #!/bin/bash
    # Patch the Persistent Volume in case ReclaimPolicy is Delete
    NAMESPACE=$1
    i=1
    for PVC in $(kubectl get pvc -n $NAMESPACE | awk '{ print $1}'); do
      # Ignore first record as it contains header
      if [ $i -eq 1 ]; then
        i=$((i + 1))
      else
        PV="$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.spec.volumeName}')"
        RECLAIMPOLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
        echo "Reclaim Policy for Persistent Volume $PV is $RECLAIMPOLICY"
        if [[ $RECLAIMPOLICY == "Delete" ]]; then
          echo "Updating ReclaimPolicy for $pv to Retain"
          kubectl patch pv $PV -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
        fi
      fi
    done
    

    Futtassa a szkriptet a paraméterrel a namespace fürt névterének ./PatchReclaimPolicy.sh <namespace>megadásához.

  2. Az alábbi parancs futtatásával lekérheti a névtérben lévő összes PVC listáját a creationTimestamp szerint rendezve. Állítsa be a névteret az --namespace argumentum és a tényleges fürtnévtér használatával.

    kubectl get pvc -n <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage
    

    Ez a lépés akkor hasznos, ha nagy számú, migrálandó virtuális gépe van, és egyszerre néhányat át szeretne migrálni. A parancs futtatásával azonosíthatja, hogy mely PVC-k lettek létrehozva egy adott időkeretben. A CreatePV.sh szkript futtatásakor a két paraméter a kezdési és a befejezési idő, amelyek lehetővé teszik, hogy csak ebben az időszakban migrálja a PVC-ket.

  3. Hozzon létre egy CreatePV.sh nevű fájlt, és másolja a következő kódba. A szkript a következőket teszi:

    • Létrehoz egy új PersistentVolume-t a storage osztály storageClassNamenévtereiben lévő összes PersistentVolume nevévelexisting-pv-csi.
    • Új PVC-név konfigurálása a következőképpen existing-pvc-csi: .
    • Létrehoz egy új PVC-t a megadott PV-névvel.
    #!/bin/bash
    #kubectl get pvc -n <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage
    # TimeFormat 2022-04-20T13:19:56Z
    NAMESPACE=$1
    FILENAME=$(date +%Y%m%d%H%M)-$NAMESPACE
    EXISTING_STORAGE_CLASS=$2
    STORAGE_CLASS_NEW=$3
    STARTTIMESTAMP=$4
    ENDTIMESTAMP=$5
    i=1
    for PVC in $(kubectl get pvc -n $NAMESPACE | awk '{ print $1}'); do
      # Ignore first record as it contains header
      if [ $i -eq 1 ]; then
        i=$((i + 1))
      else
        PVC_CREATION_TIME=$(kubectl get pvc  $PVC -n $NAMESPACE -o jsonpath='{.metadata.creationTimestamp}')
        if [[ $PVC_CREATION_TIME >= $STARTTIMESTAMP ]]; then
          if [[ $ENDTIMESTAMP > $PVC_CREATION_TIME ]]; then
            PV="$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.spec.volumeName}')"
            RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
            STORAGECLASS="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.storageClassName}')"
            echo $PVC
            RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
            if [[ $RECLAIM_POLICY == "Retain" ]]; then
              if [[ $STORAGECLASS == $EXISTING_STORAGE_CLASS ]]; then
                STORAGE_SIZE="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.capacity.storage}')"
                SKU_NAME="$(kubectl get storageClass $STORAGE_CLASS_NEW -o jsonpath='{.parameters.skuname}')"
                DISK_URI="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.azureDisk.diskURI}')"
                PERSISTENT_VOLUME_RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
    
                cat >$PVC-csi.yaml <<EOF
        apiVersion: v1
        kind: PersistentVolume
        metadata:
          annotations:
            pv.kubernetes.io/provisioned-by: disk.csi.azure.com
          name: $PV-csi
        spec:
          accessModes:
          - ReadWriteOnce
          capacity:
            storage: $STORAGE_SIZE
          claimRef:
            apiVersion: v1
            kind: PersistentVolumeClaim
            name: $PVC-csi
            namespace: $NAMESPACE
          csi:
            driver: disk.csi.azure.com
            volumeAttributes:
              csi.storage.k8s.io/pv/name: $PV-csi
              csi.storage.k8s.io/pvc/name: $PVC-csi
              csi.storage.k8s.io/pvc/namespace: $NAMESPACE
              requestedsizegib: "$STORAGE_SIZE"
              skuname: $SKU_NAME
            volumeHandle: $DISK_URI
          persistentVolumeReclaimPolicy: $PERSISTENT_VOLUME_RECLAIM_POLICY
          storageClassName: $STORAGE_CLASS_NEW
    ---
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: $PVC-csi
      namespace: $NAMESPACE
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: $STORAGE_CLASS_NEW
      resources:
        requests:
          storage: $STORAGE_SIZE
      volumeName: $PV-csi
    EOF
                kubectl apply -f $PVC-csi.yaml
                LINE="PVC:$PVC,PV:$PV,StorageClassTarget:$STORAGE_CLASS_NEW"
                printf '%s\n' "$LINE" >>$FILENAME
              fi
            fi
          fi
        fi
      fi
    done
    
  4. Ha új PersistentVolume-t szeretne létrehozni a névtérben lévő összes PersistentVolume számára, hajtsa végre a szkriptet CreatePV.sh a következő paraméterekkel:

    • namespace – A fürt névtere
    • sourceStorageClass - A faalapú tároló illesztőprogram-alapú StorageClass
    • targetCSIStorageClass - A CSI-tároló illesztőprogram-alapú StorageClass, amely lehet az egyik alapértelmezett tárolási osztály, amelynek kiépítési beállítása disk.csi.azure.com vagy file.csi.azure.com. Egyéni tárolási osztályt is létrehozhat, ha a két kiépítés valamelyikére van beállítva.
    • startTimeStamp - Adja meg a kezdési időpont előtt PVC létrehozási idő formátumban yyy-mm-ddthh:mm:ssz
    • endTimeStamp- Adjon meg egy befejezési időpontot yyyyy-mm-ddthh:mm:ssz formátumban.
    ./CreatePV.sh <namespace> <sourceIntreeStorageClass> <targetCSIStorageClass> <startTimestamp> <endTimestamp>
    
  5. Frissítse az alkalmazást az új PVC használatára.

Dinamikus kötet létrehozása

Ezzel a beállítással dinamikusan hozhat létre állandó kötetet egy állandó kötet jogcíméből.

Dinamikus kötet munkafolyamat-diagramja.

Ennek a megközelítésnek az előnyei a következők:

  • Ez kevésbé kockázatos, mert minden új objektum létrejön, miközben más másolatokat is megőriz pillanatképekkel.

  • Nem kell külön összeállítani a PV-ket, és hozzáadni a kötet nevét a PVC-jegyzékhez.

Az alábbiakat érdemes megfontolni:

  • Bár ez a megközelítés kevésbé kockázatos, több objektumot hoz létre, amelyek növelik a tárolási költségeket.

  • Az új kötet(ek) létrehozása során az alkalmazás nem érhető el.

  • A törlési lépéseket körültekintően kell végezni. Az ideiglenes erőforrás-zárolások az áttelepítés befejezéséig és az alkalmazás sikeres ellenőrzéséig alkalmazhatók az erőforráscsoportra.

  • Végezzen adatérvényesítést/-ellenőrzést, ahogy új lemezek jönnek létre a pillanatképekből.

Migrálás

A folytatás előtt ellenőrizze a következőket:

  • Azokban a számítási feladatokban, ahol az adatok a lemezre való írás előtt a memóriába vannak írva, le kell állítani az alkalmazást, és engedélyezni kell a memóriában lévő adatok lemezre való kiürítét.

  • VolumeSnapshot osztálynak a következő YAML-példában látható módon kell léteznie:

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: custom-disk-snapshot-sc
    driver: disk.csi.azure.com
    deletionPolicy: Delete
    parameters:
      incremental: "false"
    
  1. Az alábbi parancs futtatásával lekérheti egy megadott névtérben lévő összes PVC listáját a creationTimestamp szerint rendezve. Állítsa be a névteret az --namespace argumentum és a tényleges fürtnévtér használatával.

    kubectl get pvc --namespace <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage
    

    Ez a lépés akkor hasznos, ha nagy számú, migrálandó virtuális gépe van, és egyszerre néhányat át szeretne migrálni. A parancs futtatásával azonosíthatja, hogy mely PVC-k lettek létrehozva egy adott időkeretben. A MigrateCSI.sh szkript futtatásakor a két paraméter a kezdési és a befejezési idő, amelyek lehetővé teszik, hogy csak ebben az időszakban migrálja a PVC-ket.

  2. Hozzon létre egy MigrateToCSI.sh nevű fájlt, és másolja a következő kódba. A szkript a következőket teszi:

    • Teljes lemezes pillanatkép létrehozása az Azure CLI használatával
    • Létrehoz VolumesnapshotContent
    • Létrehoz VolumeSnapshot
    • Új PVC-t hoz létre a VolumeSnapshot
    • Létrehoz egy új fájlt a fájlnévvel <namespace>-timestamp, amely tartalmazza a törölni kívánt régi erőforrások listáját.
    #!/bin/bash
    #kubectl get pvc -n <namespace> --sort-by=.metadata.creationTimestamp -o custom-columns=NAME:.metadata.name,CreationTime:.metadata.creationTimestamp,StorageClass:.spec.storageClassName,Size:.spec.resources.requests.storage
    # TimeFormat 2022-04-20T13:19:56Z
    NAMESPACE=$1
    FILENAME=$NAMESPACE-$(date +%Y%m%d%H%M)
    EXISTING_STORAGE_CLASS=$2
    STORAGE_CLASS_NEW=$3
    VOLUME_STORAGE_CLASS=$4
    START_TIME_STAMP=$5
    END_TIME_STAMP=$6
    i=1
    for PVC in $(kubectl get pvc -n $NAMESPACE | awk '{ print $1}'); do
      # Ignore first record as it contains header
      if [ $i -eq 1 ]; then
        i=$((i + 1))
      else
        PVC_CREATION_TIME=$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.metadata.creationTimestamp}')
        if [[ $PVC_CREATION_TIME > $START_TIME_STAMP ]]; then
          if [[ $END_TIME_STAMP > $PVC_CREATION_TIME ]]; then
            PV="$(kubectl get pvc $PVC -n $NAMESPACE -o jsonpath='{.spec.volumeName}')"
            RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
            STORAGE_CLASS="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.storageClassName}')"
            echo $PVC
            RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
            if [[ $STORAGE_CLASS == $EXISTING_STORAGE_CLASS ]]; then
              STORAGE_SIZE="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.capacity.storage}')"
              SKU_NAME="$(kubectl get storageClass $STORAGE_CLASS_NEW -o jsonpath='{.parameters.skuname}')"
              DISK_URI="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.azureDisk.diskURI}')"
              TARGET_RESOURCE_GROUP="$(cut -d'/' -f5 <<<"$DISK_URI")"
              echo $DISK_URI
              SUBSCRIPTION_ID="$(echo $DISK_URI | grep -o 'subscriptions/[^/]*' | sed 's#subscriptions/##g')"
              echo $TARGET_RESOURCE_GROUP
              PERSISTENT_VOLUME_RECLAIM_POLICY="$(kubectl get pv $PV -n $NAMESPACE -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
              az snapshot create --resource-group $TARGET_RESOURCE_GROUP --name $PVC-$FILENAME --source "$DISK_URI" --subscription ${SUBSCRIPTION_ID}
              SNAPSHOT_PATH=$(az snapshot list --resource-group $TARGET_RESOURCE_GROUP --query "[?name == '$PVC-$FILENAME'].id | [0]" --subscription ${SUBSCRIPTION_ID})
              SNAPSHOT_HANDLE=$(echo "$SNAPSHOT_PATH" | tr -d '"')
              echo $SNAPSHOT_HANDLE
              sleep 10
              # Create Restore File
              cat <<EOF >$PVC-csi.yml
        apiVersion: snapshot.storage.k8s.io/v1
        kind: VolumeSnapshotContent
        metadata:
          name: $PVC-$FILENAME
        spec:
          deletionPolicy: 'Delete'
          driver: 'disk.csi.azure.com'
          volumeSnapshotClassName: $VOLUME_STORAGE_CLASS
          source:
            snapshotHandle: $SNAPSHOT_HANDLE
          volumeSnapshotRef:
            apiVersion: snapshot.storage.k8s.io/v1
            kind: VolumeSnapshot
            name: $PVC-$FILENAME
            namespace: $1
    ---
        apiVersion: snapshot.storage.k8s.io/v1
        kind: VolumeSnapshot
        metadata:
          name: $PVC-$FILENAME
          namespace: $1
        spec:
          volumeSnapshotClassName: $VOLUME_STORAGE_CLASS
          source:
            volumeSnapshotContentName: $PVC-$FILENAME
    ---
        apiVersion: v1
        kind: PersistentVolumeClaim
        metadata:
          name: csi-$PVC
          namespace: $1
        spec:
          accessModes:
          - ReadWriteOnce
          storageClassName: $STORAGE_CLASS_NEW
          resources:
            requests:
              storage: $STORAGE_SIZE
          dataSource:
            name: $PVC-$FILENAME
            kind: VolumeSnapshot
            apiGroup: snapshot.storage.k8s.io
    
    EOF
              kubectl create -f $PVC-csi.yml
              LINE="OLDPVC:$PVC,OLDPV:$PV,VolumeSnapshotContent:volumeSnapshotContent-$FILENAME,VolumeSnapshot:volumesnapshot$FILENAME,OLDdisk:$DISK_URI"
              printf '%s\n' "$LINE" >>$FILENAME
            fi
          fi
        fi
      fi
    done
    
  3. A lemezkötetek migrálásához hajtsa végre a szkriptet MigrateToCSI.sh a következő paraméterekkel:

    • namespace – A fürt névtere
    • sourceStorageClass - A faalapú tároló illesztőprogram-alapú StorageClass
    • targetCSIStorageClass - A CSI-tároló illesztőprogram-alapú StorageClass
    • volumeSnapshotClass - A kötet pillanatképosztályának neve. Például: custom-disk-snapshot-sc.
    • startTimeStamp- Adja meg a kezdési időpontot yyyyy-mm-ddthh:mm:ssz formátumban.
    • endTimeStamp- Adjon meg egy befejezési időpontot yyyyy-mm-ddthh:mm:ssz formátumban.
    ./MigrateToCSI.sh <namespace> <sourceStorageClass> <TargetCSIstorageClass> <VolumeSnapshotClass> <startTimestamp> <endTimestamp>
    
  4. Frissítse az alkalmazást az új PVC használatára.

  5. Törölje manuálisan a régebbi erőforrásokat, köztük a fán belüli PVC-t/PV-t, a VolumeSnapshot-ot és a VolumeSnapshotContentet. Ellenkező esetben a fában lévő PVC/PC és a pillanatkép-objektumok fenntartása több költséget fog eredményezni.

Fájlmegosztási kötetek migrálása

A fáról a CSI-ra való migrálás statikus kötet létrehozásával támogatott:

  • Nincs szükség az eredeti konfiguráció eltávolítására a fastruktúrájú tárolóosztály használatával.
  • A kockázat alacsony, mivel csak a Kubernetes PV/PVC logikai törlését hajtja végre, a tényleges fizikai adatok nem törlődnek.
  • Nem merült fel többletköltség, mivel nem kellett további Azure-objektumokat létrehoznia, például fájlmegosztásokat stb.

Migrálás

  1. Frissítse a meglévő PV-t ReclaimPolicy a Törlésről a Megtartás értékre a következő parancs futtatásával:

    kubectl patch pv pvName -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
    

    Cserélje le a pvName nevet a kijelölt PersistentVolume nevére. Másik lehetőségként, ha több virtuális gép esetében szeretné frissíteni a reclaimPolicy szolgáltatást, hozzon létre egy patchReclaimPVs.sh nevű fájlt, és másolja a következő kódba.

    #!/bin/bash
    # Patch the Persistent Volume in case ReclaimPolicy is Delete
    namespace=$1
    i=1
    for pvc in $(kubectl get pvc -n $namespace | awk '{ print $1}'); do
      # Ignore first record as it contains header
      if [ $i -eq 1 ]; then
        i=$((i + 1))
      else
        pv="$(kubectl get pvc $pvc -n $namespace -o jsonpath='{.spec.volumeName}')"
        reclaimPolicy="$(kubectl get pv $pv -n $namespace -o jsonpath='{.spec.persistentVolumeReclaimPolicy}')"
        echo "Reclaim Policy for Persistent Volume $pv is $reclaimPolicy"
        if [[ $reclaimPolicy == "Delete" ]]; then
          echo "Updating ReclaimPolicy for $pv to Retain"
          kubectl patch pv $pv -p '{"spec":{"persistentVolumeReclaimPolicy":"Retain"}}'
        fi
      fi
    done
    

    Futtassa a szkriptet a paraméterrel a namespace fürt névterének ./PatchReclaimPolicy.sh <namespace>megadásához.

  2. Hozzon létre egy új tárosztályt a kiépítési beállítással file.csi.azure.com, vagy használhatja az alapértelmezett StorageClasses egyikét a CSI-fájlkiépítési eszközzel.

  3. secretName A meglévő PersistentVolumes-fájlok lekérése és shareName lekérése a következő parancs futtatásával:

    kubectl describe pv pvName
    
  4. Hozzon létre egy új PV-t az új StorageClass, valamint a shareName fán belüli PV használatával secretName . Hozzon létre egy azurefile-mount-pv.yaml nevű fájlt, és másolja a következő kódba. Alatt csi, frissítés resourceGroup, volumeHandleés shareName. Csatlakoztatási beállítások esetén a fileMode és a dirMode alapértelmezett értéke 0777.

    Az alapértelmezett érték a fileMode dirMode 0777.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: file.csi.azure.com
      name: azurefile
    spec:
      capacity:
        storage: 5Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: azurefile-csi
      csi:
        driver: file.csi.azure.com
        readOnly: false
        volumeHandle: unique-volumeid  # make sure volumeid is unique for every identical share in the cluster
        volumeAttributes:
          resourceGroup: EXISTING_RESOURCE_GROUP_NAME  # optional, only set this when storage account is not in the same resource group as the cluster nodes
          shareName: aksshare
        nodeStageSecretRef:
          name: azure-secret
          namespace: default
      mountOptions:
        - dir_mode=0777
        - file_mode=0777
        - uid=0
        - gid=0
        - mfsymlinks
        - cache=strict
        - nosharesock
        - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    
  5. Hozzon létre egy azurefile-mount-pvc.yaml nevű fájlt egy PersistentVolumeClaim fájllal, amely a PersistentVolume-t használja az alábbi kóddal.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: azurefile-csi
      volumeName: azurefile
      resources:
        requests:
          storage: 5Gi
    
  6. Használja a kubectl parancsot a PersistentVolume létrehozásához.

    kubectl apply -f azurefile-mount-pv.yaml
    
  7. Használja a kubectl parancsot a PersistentVolumeClaim létrehozásához.

    kubectl apply -f azurefile-mount-pvc.yaml
    
  8. Az alábbi parancs futtatásával ellenőrizze, hogy a PersistentVolumeClaim létrejött-e, és a PersistentVolume-hoz van-e kötve.

    kubectl get pvc azurefile
    

    A kimenet a következőhöz hasonló:

    NAME        STATUS   VOLUME      CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    azurefile   Bound    azurefile   5Gi        RWX            azurefile      5s
    
  9. Frissítse a tároló specifikációját a PersistentVolumeClaim hivatkozásához, és frissítse a podot. Másolja például a következő kódot, és hozzon létre egy azure-files-pod.yaml nevű fájlt.

    ...
      volumes:
      - name: azure
        persistentVolumeClaim:
          claimName: azurefile
    
  10. A pod specifikációja nem frissíthető a helyén. A pod törléséhez és újbóli létrehozásához használja az alábbi kubectl parancsokat.

    kubectl delete pod mypod
    
    kubectl apply -f azure-files-pod.yaml
    

Következő lépések