Az Azure Files Container Storage Interface (CSI) illesztő használata az Azure Kubernetes Service-ben (AKS)

Az Azure Files Container Storage Interface (CSI) illesztő az Azure Kubernetes Service (AKS) által az Azure-fájlmegosztások életciklusának kezelésére használt CSI specifikációnak megfelelő illesztőprogram. A CSI egy szabvány, amely tetszőleges blokk- és fájltároló rendszereket tár fel a Kubernetes tárolóalapú számítási feladatai számára.

A CSI alkalmazásával és használatával az AKS mostantól képes beépülő modulok írására, üzembe helyezésére és iterálására a Kubernetes új vagy meglévő tárolórendszereinek elérhetővé tételéhez. A CSI-illesztőprogramok használata az AKS-ben elkerüli, hogy megérintse az alapvető Kubernetes-kódot, és várja meg a kiadási ciklusokat.

A CSI-illesztőprogramok támogatásával rendelkező AKS-fürt létrehozásához tekintse meg a CSI-illesztőprogramok engedélyezése az AKS-en című témakört.

Feljegyzés

A faalapú illesztőprogramok azokra az aktuális tárolóillesztőkre utalnak, amelyek az alapvető Kubernetes-kód részét képezik, szemben az új CSI-illesztőprogramokkal, amelyek beépülő modulok.

Az Azure Files CSI-illesztőprogram új funkciói

Az Azure Files CSI-illesztőprogram az eredeti fa illesztőfunkciók mellett a következő új funkciókat is támogatja:

  • Hálózati fájlrendszer (NFS) 4.1-es verziója
  • Privát végpont
  • A fájlmegosztások nagy csatlakoztatásának párhuzamos létrehozása.

Állandó kötet használata az Azure Files használatával

Az állandó kötet (PV) egy tárterületet jelöl, amely a Kubernetes-podokkal való használatra van kiépítve. A PV-t egy vagy több pod is használhatja, és dinamikusan vagy statikusan kiépítheti. Ha több podnak egyszerre kell hozzáférnie ugyanahhoz a tárkötethez, az Azure Files használatával csatlakozhat a kiszolgálói üzenetblokk (SMB) vagy az NFS protokoll használatával. Ez a cikk bemutatja, hogyan hozhat létre dinamikusan egy Azure Files-megosztást egy AKS-fürt több podja számára. A statikus kiépítésről lásd : Kötet manuális létrehozása és használata Azure Files-megosztással.

Az Azure Files-megosztások esetében nincs korlátozás arra vonatkozóan, hogy hányan csatlakoztathatók egy csomóponthoz.

A Kubernetes-kötetekkel kapcsolatos további információkért tekintse meg az AKS-alkalmazások tárolási lehetőségeit.

Azure Files PV-k dinamikus létrehozása a beépített tárosztályok használatával

A tárosztály az Azure-fájlmegosztás létrehozásának módját határozza meg. A rendszer automatikusan létrehoz egy tárfiókot a csomópont erőforráscsoportjában az Azure-fájlmegosztás tárolására szolgáló tárosztályhoz. Válasszon az alábbi Azure Storage-redundancia termékváltozatok közül az skuName-hoz:

  • Standard_LRS: Standard helyileg redundáns tárolás
  • Standard_GRS: Standard georedundáns tárolás
  • Standard_ZRS: Standard zónaredundáns tárolás
  • Standard_RAGRS: Szabványos olvasási hozzáférésű georedundáns tárolás
  • Standard_RAGZRS: Szabványos olvasási hozzáférésű geozónára redundáns tárolás
  • Premium_LRS: Helyileg redundáns prémium szintű tárolás
  • Premium_ZRS: Prémium zónaredundáns tárolás

Feljegyzés

Az Azure Files támogatja az Azure Premium-fájlmegosztásokat. A minimális fájlmegosztási kapacitás 100 GiB. A Standard fájlmegosztások helyett az Azure Premium-fájlmegosztások használatát javasoljuk, mivel a prémium szintű fájlmegosztások nagyobb teljesítményt és alacsony késésű lemeztámogatást biztosítanak az I/O-igényes számítási feladatokhoz.

Ha tárolóCSI-illesztőprogramokat használ az AKS-en, két további beépített StorageClasses eszköz is van, amelyek az Azure Files CSI-tárolóillesztőket használják. A rendszer a többi CSI-tárolási osztályt a fürttel együtt hozza létre a fákon belüli alapértelmezett tárolási osztályok mellett.

  • azurefile-csi: Azure-fájlmegosztás létrehozása az Azure Standard Storage használatával.
  • azurefile-csi-premium: Azure-fájlmegosztás létrehozása az Azure Premium Storage használatával.

A mindkét tárolási osztályra vonatkozó visszaigénylési szabályzat biztosítja, hogy az alapul szolgáló Azure-fájlmegosztás törlődik a megfelelő PV törlésekor. A tárolási osztályok úgy is konfigurálják a fájlmegosztásokat, hogy bővíthetők legyenek, csak szerkesztenie kell az állandó kötet jogcímét (PVC) az új mérettel.

Ezeknek a tárolási osztályoknak a használatához hozzon létre egy PVC-t és a megfelelő podot, amely hivatkozik és használja őket. A PVC használatával automatikusan kiépíteni a tárolót egy tárolási osztály alapján. A PVC az egyik előre létrehozott tárolási osztályt vagy felhasználó által definiált tárolási osztályt használhat egy Azure-fájlmegosztás létrehozásához a kívánt termékváltozathoz és mérethez. Poddefiníció létrehozásakor a PVC meg van adva a kívánt tároló kéréséhez.

Hozzon létre egy példa PVC-t és podot, amely az aktuális dátumot a outfile kubectl apply parancsok futtatásával nyomtatja ki:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/pvc-azurefile-csi.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/nginx-pod-azurefile.yaml

A parancs kimenete a következő példához hasonlít:

persistentvolumeclaim/pvc-azurefile created
pod/nginx-azurefile created

Miután a pod futó állapotban van, ellenőrizheti, hogy a fájlmegosztás megfelelően van-e csatlakoztatva az alábbi parancs futtatásával, és ellenőrizheti, hogy a kimenet tartalmazza-e a következőt outfile:

kubectl exec nginx-azurefile -- ls -l /mnt/azurefile

A parancs kimenete a következő példához hasonlít:

total 29
-rwxrwxrwx 1 root root 29348 Aug 31 21:59 outfile

Egyéni tárosztály létrehozása

Az alapértelmezett tárolási osztályok megfelelnek a leggyakoribb forgatókönyveknek, de nem mindegyiknek. Bizonyos esetekben előfordulhat, hogy saját tárolóosztályt szeretne testreszabni a saját paramétereivel. A fájlmegosztás konfigurálásához használja például az mountOptions alábbi jegyzékfájlt.

A fileMode és a dirModealapértelmezett értéke a Kuberneteshez csatlakoztatott fájlmegosztások esetében 0777. A tárolási osztály objektumán különböző csatlakoztatási beállításokat adhat meg.

Hozzon létre egy nevű azure-file-sc.yamlfájlt, és illessze be a következő példajegyzéket:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0640
  - file_mode=0640
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict # https://linux.die.net/man/8/mount.cifs
  - nosharesock
parameters:
  skuName: Standard_LRS

Hozza létre a tárosztályt a kubectl apply parancs futtatásával:

kubectl apply -f azure-file-sc.yaml

A parancs kimenete a következő példához hasonlít:

storageclass.storage.k8s.io/my-azurefile created

Az Azure Files CSI-illesztőprogram támogatja az állandó kötetek és a mögöttes fájlmegosztások pillanatképeinek létrehozását.

Feljegyzés

Ez az illesztőprogram csak a pillanatképek létrehozását támogatja, a pillanatképből való visszaállítást ez az illesztőprogram nem támogatja. A pillanatképek visszaállíthatók az Azure Portalról vagy a parancssori felületről. A pillanatképek létrehozásával és visszaállításával kapcsolatos további információkért tekintse meg az Azure Files megosztási pillanatképeinek áttekintését.

Hozzon létre egy mennyiségi pillanatkép-osztályt a kubectl apply paranccsal:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yaml

A parancs kimenete a következő példához hasonlít:

volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc created

Hozzon létre egy mennyiségi pillanatképet az oktatóanyag elején dinamikusan létrehozott PVC-ből. pvc-azurefile

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yaml

A parancs kimenete a következő példához hasonlít:

volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot created

Ellenőrizze, hogy a pillanatkép megfelelően lett-e létrehozva a következő parancs futtatásával:

kubectl describe volumesnapshot azurefile-volume-snapshot

A parancs kimenete a következő példához hasonlít:

Name:         azurefile-volume-snapshot
Namespace:    default
Labels:       <none>
Annotations:  API Version:  snapshot.storage.k8s.io/v1beta1
Kind:         VolumeSnapshot
Metadata:
  Creation Timestamp:  2020-08-27T22:37:41Z
  Finalizers:
    snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
    snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
  Generation:        1
  Resource Version:  955091
  Self Link:         /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot
  UID:               c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
Spec:
  Source:
    Persistent Volume Claim Name:  pvc-azurefile
  Volume Snapshot Class Name:      csi-azurefile-vsc
Status:
  Bound Volume Snapshot Content Name:  snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
  Ready To Use:                        false
Events:                                <none>

Állandó kötet átméretezése

A PVC-hez nagyobb kötetet kérhet. Szerkessze a PVC-objektumot, és adjon meg nagyobb méretet. Ez a módosítás a PV-t háttérként szolgáló mögöttes kötet bővítését váltja ki.

Feljegyzés

A rendszer soha nem hoz létre új PV-t a jogcím kielégítése érdekében. Ehelyett a rendszer átméretez egy meglévő kötetet.

Az állandó kötetek zsugorítása jelenleg nem támogatott.

Az AKS-ben a beépített azurefile-csi tárolási osztály már támogatja a bővítést, ezért használja a korábban ezzel a tárolási osztálysal létrehozott PVC-t. A PVC 100 GiB-fájlmegosztást kért. Ezt a következő futtatásával erősíthetjük meg:

kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile

A parancs kimenete a következő példához hasonlít:

Filesystem                                                                                Size  Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  100G  128K  100G   1% /mnt/azurefile

Bontsa ki a PVC-t a spec.resources.requests.storage mező növelésével:

kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'

A parancs kimenete a következő példához hasonlít:

persistentvolumeclaim/pvc-azurefile patched

Ellenőrizze, hogy a PVC és a podon belüli fájlrendszer is megjeleníti-e az új méretet:

kubectl get pvc pvc-azurefile
NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
pvc-azurefile   Bound    pvc-5e5d9980-da38-492b-8581-17e3cad01770   200Gi      RWX            azurefile-csi   64m

kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
Filesystem                                                                                Size  Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  200G  128K  200G   1% /mnt/azurefile

Állandó kötet használata privát Azure Files-tárhellyel (privát végpont)

Ha az Azure Files-erőforrások privát végponttal vannak védve, saját tárosztályt kell létrehoznia. Győződjön meg arról, hogy konfigurálta a DNS-beállításokat a privát végpont IP-címének a kapcsolati sztring teljes tartománynevére való feloldásához. Szabja testre a következő paramétereket:

  • resourceGroup: Az az erőforráscsoport, amelyben a tárfiók üzembe van helyezve.
  • storageAccount: A tárfiók neve.
  • server: A tárfiók privát végpontjának teljes tartományneve.

Hozzon létre egy nevű private-azure-file-sc.yamlfájlt, majd illessze be a következő példajegyzéket a fájlba. Cserélje le a következő értékeket <resourceGroup> : és <storageAccountName>.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: private-azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  resourceGroup: <resourceGroup>
  storageAccount: <storageAccountName>
  server: <storageAccountName>.file.core.windows.net
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduce probability of reconnect race
  - actimeo=30  # reduce latency for metadata-heavy workload

Hozza létre a tárosztályt a kubectl apply következő paranccsal:

kubectl apply -f private-azure-file-sc.yaml

A parancs kimenete a következő példához hasonlít:

storageclass.storage.k8s.io/private-azurefile-csi created

Hozzon létre egy nevű private-pvc.yamlfájlt, majd illessze be a következő példajegyzéket a fájlba:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: private-azurefile-pvc
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: private-azurefile-csi
  resources:
    requests:
      storage: 100Gi

Hozza létre a PVC-t a kubectl apply paranccsal:

kubectl apply -f private-pvc.yaml

NFS-fájlmegosztások

Az Azure Files támogatja az NFS v4.1 protokollt. Az Azure Files NFS 4.1-es verziójának támogatása teljes körűen felügyelt NFS-fájlrendszert biztosít egy magas rendelkezésre állású és rendkívül tartós elosztott rugalmas tárolási platformra épülő szolgáltatásként.

Ez a beállítás véletlenszerű hozzáférésű számítási feladatokhoz van optimalizálva helyszíni adatfrissítésekkel, és teljes POSIX-fájlrendszer-támogatást nyújt. Ez a szakasz bemutatja, hogyan használhat NFS-megosztásokat az Azure File CSI-illesztővel egy AKS-fürtön.

Előfeltételek

  • Az AKS-fürt vezérlősíkjának identitása (vagyis az AKS-fürt neve) hozzá lesz adva a közreműködői szerepkörhöz a VNeten és a NetworkSecurityGroupon.
  • Az AKS-fürt szolgáltatásnevét vagy felügyeltszolgáltatás-identitását (MSI) hozzá kell adni a közreműködői szerepkörhöz a tárfiókhoz.

Feljegyzés

A kijelölt virtuális hálózathoz való hozzáférés engedélyezése helyett privát végpontot is használhat.

Olvasási és írási méret beállításainak optimalizálása

Ez a szakasz arról nyújt tájékoztatást, hogyan közelíthet meg teljesítmény-finomhangolási NFS-t az Azure Files CSI-illesztővel az rsize és wsize beállításokkal. Az rsize és wsize beállítások az NFS-műveletek maximális átviteli méretét adják meg. Ha az rsize vagy a wsize nincs megadva a csatlakoztatáson, az ügyfél és a kiszolgáló egyezteti a kettő által támogatott legnagyobb méretet. Az Azure NetApp Files és a modern Linux-disztribúciók jelenleg 1 048 576 bájt (1 MiB) méretű olvasási és írási méretet támogatnak.

Az optimális teljesítmény a hatékony ügyfél-kiszolgáló kommunikáción alapul. A csatlakoztatási olvasási és írási beállítás méretének növelése vagy csökkentése javíthatja az NFS teljesítményét. Az ügyfél és a kiszolgáló között átvitt olvasási/írási csomagok alapértelmezett mérete 8 KB az NFS 2-es verziójához, az NFS 3- és 4-es verziójához pedig 32 KB. Ezek az alapértelmezett értékek túl nagyok vagy túl kicsiek lehetnek. Az rsize és a wsize csökkentése javíthatja az NFS teljesítményét egy túlterhelt hálózatban azáltal, hogy kisebb csomagokat küld minden NFS-olvasási válasz- és írási kéréshez. Ez azonban növelheti az adatok hálózaton keresztüli küldéséhez szükséges csomagok számát, ezáltal növelve a teljes hálózati forgalmat és a cpu-kihasználtságot az ügyfélen és a kiszolgálón.

Fontos, hogy tesztelést végezzen egy olyan rsize és wsize megtalálása érdekében, amely támogatja a hatékony csomagátvitelt, ahol nem csökkenti az átviteli sebességet és növeli a késést.

Az rsize és a wsize optimalizálásával kapcsolatos további információkért tekintse meg a Linux NFS csatlakoztatási beállításainak ajánlott eljárásait az Azure NetApp Fileshoz.

Ha például 256 KiB maximális rsize-t és wsize-t szeretne konfigurálni, konfigurálja az mountOptions alábbi tárolási osztályt:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30
  - rsize=262144
  - wsize=262144

NFS-fájlmegosztási tárosztály létrehozása

Hozzon létre egy elnevezett nfs-sc.yaml fájlt, és másolja az alábbi jegyzékfájlt. A támogatottak mountOptionslistájáért tekintse meg az NFS csatlakoztatási beállításait.

Feljegyzés

vers, minorversionsec az Azure File CSI-illesztő konfigurálja. A jegyzékben szereplő értékek megadása nem támogatott.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30

A fájl szerkesztése és mentése után hozza létre a tárosztályt a kubectl apply paranccsal:

kubectl apply -f nfs-sc.yaml

A parancs kimenete a következő példához hasonlít:

storageclass.storage.k8s.io/azurefile-csi-nfs created

Üzembe helyezés létrehozása NFS-alapú fájlmegosztással

A kubectl apply paranccsal üzembe helyezhet egy példa állapotalapú készletet, amely időbélyegeket ment egy fájlba data.txt:

kubectl apply -f

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-azurefile
  labels:
    app: nginx
spec:
  podManagementPolicy: Parallel  # default is OrderedReady
  serviceName: statefulset-azurefile
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: statefulset-azurefile
          image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
          command:
            - "/bin/bash"
            - "-c"
            - set -euo pipefail; while true; do echo $(date) >> /mnt/azurefile/outfile; sleep 1; done
          volumeMounts:
            - name: persistent-storage
              mountPath: /mnt/azurefile
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: nginx
  volumeClaimTemplates:
    - metadata:
        name: persistent-storage
      spec:
        storageClassName: azurefile-csi-nfs
        accessModes: ["ReadWriteMany"]
        resources:
          requests:
            storage: 100Gi

A parancs kimenete a következő példához hasonlít:

statefulset.apps/statefulset-azurefile created

Ellenőrizze a kötet tartalmát a következő parancs futtatásával:

kubectl exec -it statefulset-azurefile-0 -- df -h

A parancs kimenete a következő példához hasonlít:

Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sda1                                                                                 29G   11G   19G  37% /etc/hosts
accountname.file.core.windows.net:/accountname/pvc-fa72ec43-ae64-42e4-a8a2-556606f5da38  100G     0  100G   0% /mnt/azurefile
...

Feljegyzés

Vegye figyelembe, hogy mivel az NFS-fájlmegosztás prémium szintű fiókban van, a fájlmegosztás minimális mérete 100 GiB. Ha kis méretű PVC-t hoz létre, az alábbihoz hasonló hibaüzenet jelenhet meg: nem sikerült létrehozni a fájlmegosztást ... méret (5)....

Windows-tárolók

Az Azure Files CSI-illesztőprogram a Windows-csomópontokat és -tárolókat is támogatja. A Windows-tárolók használatához kövesse a Windows-tárolók rövid útmutatót a Windows-csomópontkészlet hozzáadásához.

Windows-csomópontkészlet használata után használja a beépített tárosztályokat, például azurefile-csi egyénit, vagy hozzon létre egyet. A kubectl apply parancs futtatásával üzembe helyezhet egy Windows-alapú állapotalapú példát, amely időbélyegeket ment egy fájlbadata.txt:

kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yaml

A parancs kimenete a következő példához hasonlít:

statefulset.apps/busybox-azurefile created

Ellenőrizze a kötet tartalmát a következő kubectl exec parancs futtatásával:

kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux/MacOS Bash
kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell/CMD

A parancsok kimenete a következő példához hasonlít:

2020-08-27 22:11:01Z
2020-08-27 22:11:02Z
2020-08-27 22:11:04Z
(...)

Következő lépések