Použití ovladače azure Files Container Storage Interface (CSI) ve službě Azure Kubernetes Service (AKS)

Ovladač rozhraní CSI (Azure Files Container Storage Interface) je ovladač kompatibilní se specifikací CSI používaný službou Azure Kubernetes Service (AKS) ke správě životního cyklu sdílených složek Azure. CsI je standard pro zveřejnění libovolných systémů blokového a souborového úložiště pro kontejnerizované úlohy v Kubernetes.

Díky přijetí a používání csI teď může AKS psát, nasazovat a iterovat moduly plug-in, aby zpřístupnil nové nebo vylepšené existující systémy úložiště v Kubernetes. Použití ovladačů CSI v AKS se vyhne tomu, že se nebudete muset dotýkat základního kódu Kubernetes a čekat na jeho cykly vydávání.

Pokud chcete vytvořit cluster AKS s podporou ovladačů CSI, přečtěte si téma Povolení ovladačů CSI v AKS.

Poznámka:

Ovladače ve stromu odkazují na aktuální ovladače úložiště, které jsou součástí základního kódu Kubernetes a nové ovladače CSI, které jsou moduly plug-in.

Nové funkce ovladače CSI služby Azure Files

Kromě původních funkcí ovladačů ve stromové struktuře podporuje ovladač CSI služby Azure Files následující nové funkce:

  • Systém souborů NFS (Network File System) verze 4.1
  • Privátní koncový bod
  • Paralelní vytváření velkých připojení sdílených složek

Použití trvalého svazku se službou Azure Files

Trvalý svazek (PV) představuje část úložiště zřízenou pro použití s pody Kubernetes. Pv může používat jeden nebo více podů a může být dynamicky nebo staticky zřízen. Pokud více podů potřebuje souběžný přístup ke stejnému svazku úložiště, můžete se pomocí služby Soubory Azure připojit pomocí protokolu SMB (Server Message Block) nebo NFS. V tomto článku se dozvíte, jak dynamicky vytvořit sdílenou složku Azure Pro použití několika pody v clusteru AKS. Informace o statickém zřizování najdete v tématu Ruční vytvoření a použití svazku se sdílenou složkou Azure Files.

U sdílených složek Azure Files neexistuje žádné omezení počtu připojení k uzlu.

Další informace o svazcích Kubernetes najdete v tématu Možnosti úložiště pro aplikace v AKS.

Dynamické vytváření virtuálních počítačů azure Files pomocí předdefinovaných tříd úložiště

Třída úložiště slouží k definování způsobu vytvoření sdílené složky Azure. Účet úložiště se automaticky vytvoří ve skupině prostředků uzlu pro použití s třídou úložiště pro uložení sdílené složky Azure. Jako SKUName zvolte jednu z následujících skladových položekúložiště Azure Storage:

  • Standard_LRS: Místně redundantní úložiště úrovně Standard
  • Standard_GRS: Standardní geograficky redundantní úložiště
  • Standard_ZRS: Zónově redundantní úložiště úrovně Standard
  • Standard_RAGRS: Geograficky redundantní úložiště s přístupem pro čtení úrovně Standard
  • Standard_RAGZRS: Standardní geograficky zónově redundantní úložiště s přístupem pro čtení
  • Premium_LRS: Místně redundantní úložiště Úrovně Premium
  • Premium_ZRS: Zónově redundantní úložiště úrovně Premium

Poznámka:

Azure Files podporuje sdílené složky Azure Premium. Minimální kapacita sdílené složky je 100 GiB. Doporučujeme místo sdílených složek úrovně Standard používat sdílené složky Azure Premium, protože sdílené složky Úrovně Premium nabízejí vyšší výkon a podporu disků s nízkou latencí pro úlohy náročné na vstupně-výstupní operace.

Pokud používáte ovladače csI úložiště v AKS, jsou k dispozici další dva integrované StorageClasses ovladače úložiště, které používají ovladače úložiště CSI služby Soubory Azure. Ostatní třídy úložiště CSI se vytvářejí společně s výchozími třídami úložiště ve stromu.

  • azurefile-csi: Používá Azure Standard Storage k vytvoření sdílené složky Azure.
  • azurefile-csi-premium: Používá Azure Premium Storage k vytvoření sdílené složky Azure.

Zásady uvolnění prostředků v obou třídách úložiště zajišťují, že se po odstranění příslušné sdílené složky Azure odstraní příslušná sdílená složka. Třídy úložiště také nakonfigurují sdílené složky tak, aby byly rozšiřitelné, stačí upravit trvalou deklaraci identity svazku (PVC) s novou velikostí.

Chcete-li tyto třídy úložiště použít, vytvořte PVC a odpovídající pod, který odkazuje a používá je. PVC se používá k automatickému zřizování úložiště na základě třídy úložiště. PVC může použít jednu z předem vytvořených tříd úložiště nebo uživatelem definovanou třídu úložiště k vytvoření sdílené složky Azure pro požadovanou skladovou položku a velikost. Při vytváření definice podu je pvc určen k vyžádání požadovaného úložiště.

Vytvořte příklad PVC a podu, který vytiskne aktuální datum do outfile spuštění příkazu kubectl apply:

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

Výstup příkazu se podobá následujícímu příkladu:

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

Jakmile je pod ve spuštěném stavu, můžete ověřit, jestli je sdílená složka správně připojená, spuštěním následujícího příkazu a ověřením výstupu outfile:

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

Výstup příkazu se podobá následujícímu příkladu:

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

Vytvoření vlastní třídy úložiště

Výchozí třídy úložiště odpovídají nejběžnějším scénářům, ale ne všem. V některých případech můžete chtít mít vlastní třídu úložiště přizpůsobenou vlastními parametry. Ke konfiguraci mountOptions sdílené složky použijte například následující manifest.

Výchozí hodnota pro fileMode a dirMode je 0777 pro připojené sdílené složky Kubernetes. U objektu třídy úložiště můžete zadat různé možnosti připojení.

Vytvořte soubor s názvem azure-file-sc.yamla vložte následující ukázkový manifest:

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

Vytvořte třídu úložiště spuštěním příkazu kubectl apply :

kubectl apply -f azure-file-sc.yaml

Výstup příkazu se podobá následujícímu příkladu:

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

Ovladač CSI služby Soubory Azure podporuje vytváření snímků trvalých svazků a základních sdílených složek.

Poznámka:

Tento ovladač podporuje pouze vytváření snímků. Tento ovladač nepodporuje obnovení ze snímku. Snímky je možné obnovit z webu Azure Portal nebo rozhraní příkazového řádku. Další informace o vytváření a obnovování snímku najdete v tématu Přehled snímků sdílených složek pro Soubory Azure.

Vytvořte třídu snímku svazku pomocí příkazu kubectl apply:

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

Výstup příkazu se podobá následujícímu příkladu:

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

Vytvořte snímek svazku z PVC, který jsme dynamicky vytvořili na začátku tohoto kurzu . pvc-azurefile

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

Výstup příkazu se podobá následujícímu příkladu:

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

Spuštěním následujícího příkazu ověřte, že se snímek vytvořil správně:

kubectl describe volumesnapshot azurefile-volume-snapshot

Výstup příkazu se podobá následujícímu příkladu:

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>

Změna velikosti trvalého svazku

Můžete požádat o větší objem pro PVC. Upravte objekt PVC a zadejte větší velikost. Tato změna aktivuje rozšíření podkladového svazku, který zálohuje trvalý svazek.

Poznámka:

Nová hodnota PV se nikdy nevytvořila k uspokojení deklarace identity. Místo toho se změní velikost existujícího svazku.

Zmenšování trvalých svazků se v současné době nepodporuje.

V AKS integrovaná azurefile-csi třída úložiště již podporuje rozšíření, takže použijte PVC vytvořené dříve s touto třídou úložiště. PVC požádal o sdílenou složku 100 GiB. To můžeme potvrdit spuštěním příkazu:

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

Výstup příkazu se podobá následujícímu příkladu:

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

Rozbalte PVC zvýšením spec.resources.requests.storage pole:

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

Výstup příkazu se podobá následujícímu příkladu:

persistentvolumeclaim/pvc-azurefile patched

Ověřte, že pvc i systém souborů uvnitř podu zobrazují novou velikost:

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

Použití trvalého svazku s privátním úložištěm Azure Files (privátní koncový bod)

Pokud jsou vaše prostředky Azure Files chráněné privátním koncovým bodem, musíte vytvořit vlastní třídu úložiště. Ujistěte se, že jste nakonfigurovali nastavení DNS tak, aby přeložila IP adresu privátního koncového bodu na plně kvalifikovaný název domény připojovací řetězec. Přizpůsobte si následující parametry:

  • resourceGroup: Skupina prostředků, ve které je nasazený účet úložiště.
  • storageAccount: Název účtu úložiště.
  • server: Plně kvalifikovaný název domény privátního koncového bodu účtu úložiště.

Vytvořte soubor s názvem private-azure-file-sc.yamla vložte do souboru následující ukázkový manifest. Nahraďte hodnoty pro <resourceGroup> a <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

Pomocí příkazu vytvořte třídu kubectl apply úložiště:

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

Výstup příkazu se podobá následujícímu příkladu:

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

Vytvořte soubor s názvem private-pvc.yamla vložte do souboru následující ukázkový manifest:

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

Vytvořte PVC pomocí příkazu kubectl apply :

kubectl apply -f private-pvc.yaml

Sdílené složky NFS

Azure Files podporuje protokol NFS verze 4.1. Podpora systému souborů NFS verze 4.1 pro Azure Files poskytuje plně spravovaný systém souborů NFS jako službu postavenou na vysoce dostupné a vysoce odolné platformě odolného úložiště.

Tato možnost je optimalizovaná pro úlohy náhodného přístupu s místní aktualizací dat a poskytuje úplnou podporu systému souborů POSIX. V této části se dozvíte, jak používat sdílené složky NFS s ovladačem Azure File CSI v clusteru AKS.

Požadavky

  • Identita řídicí roviny clusteru AKS (tj. název clusteru AKS) se přidá do role Přispěvatel ve virtuální síti a skupině NetworkSecurityGroup.
  • Instanční objekt nebo identita spravované služby (MSI) vašeho clusteru AKS musí být přidána do role Přispěvatel do účtu úložiště.

Poznámka:

Místo povolení přístupu k vybrané virtuální síti můžete použít privátní koncový bod.

Optimalizace možností velikosti čtení a zápisu

Tato část obsahuje informace o tom, jak přistupovat k ladění výkonu NFS pomocí ovladače CSI služby Soubory Azure s možnostmi rsize a wsize . Možnosti rsize a wsize nastavují maximální velikost přenosu operace NFS. Pokud nejsou při připojení zadány rsize nebo wsize, klient a server vyjednávají největší velikost podporovanou dvěma servery. Azure NetApp Files i moderní linuxové distribuce v současné době podporují velikosti čtení a zápisu tak velké jako 1 048 576 bajtů (1 MiB).

Optimální výkon je založený na efektivní komunikaci mezi klientem a serverem. Zvýšení nebo snížení hodnoty velikosti možností pro čtení a zápis připojení může zlepšit výkon systému souborů NFS. Výchozí velikost paketů pro čtení a zápis přenášených mezi klientem a serverem je 8 kB pro systém souborů NFS verze 2 a 32 kB pro systém souborů NFS verze 3 a 4. Tyto výchozí hodnoty můžou být příliš velké nebo příliš malé. Snížení velikosti rsize a wsize může zlepšit výkon systému souborů NFS v zahlcené síti odesláním menších paketů pro každou odpověď nfs pro čtení a požadavek na zápis. To ale může zvýšit počet paketů potřebných k odesílání dat přes síť, což zvyšuje celkový síťový provoz a využití procesoru na klientovi a serveru.

Je důležité provést testování, abyste našli rsize a wsize, která udržuje efektivní přenos paketů, kde nezmenšuje propustnost a zvyšuje latenci.

Další informace o optimalizaci rsize a wsize najdete v tématu Osvědčené postupy pro možnosti připojení systému Souborů NFS pro Linux pro Azure NetApp Files.

Pokud chcete například nakonfigurovat maximální velikost rsize a wsize 256-KiB, nakonfigurujte mountOptions ve třídě úložiště následujícím způsobem:

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

Vytvoření třídy úložiště sdílené složky NFS

Vytvořte soubor s názvem nfs-sc.yaml a zkopírujte níže uvedený manifest. Seznampodporovaných mountOptions

Poznámka:

vers, minorversionsec jsou nakonfigurovány ovladačem CSI služby Azure File. Zadání hodnoty v manifestu pro tyto vlastnosti se nepodporuje.

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

Po úpravě a uložení souboru vytvořte třídu úložiště pomocí příkazu kubectl apply :

kubectl apply -f nfs-sc.yaml

Výstup příkazu se podobá následujícímu příkladu:

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

Vytvoření nasazení se sdílenou složkou se systémem souborů NFS

Pomocí příkazu kubectl apply můžete nasadit ukázkovou stavovou sadu, která ukládá časová razítka do souboru 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

Výstup příkazu se podobá následujícímu příkladu:

statefulset.apps/statefulset-azurefile created

Spuštěním následujícího příkazu ověřte obsah svazku:

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

Výstup příkazu se podobá následujícímu příkladu:

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
...

Poznámka:

Mějte na paměti, že protože sdílená složka NFS je v účtu Premium, minimální velikost sdílené složky je 100 GiB. Pokud vytvoříte PVC s malou velikostí úložiště, může dojít k chybě podobné následující: nepodařilo se vytvořit sdílenou složku ... velikost (5)....

Kontejnery Windows

Ovladač CSI služby Soubory Azure také podporuje uzly a kontejnery Windows. Pokud chcete použít kontejnery Windows, postupujte podle rychlého startu pro kontejnery Windows a přidejte fond uzlů Windows.

Jakmile máte fond uzlů Windows, použijte předdefinované třídy úložiště, jako jsou azurefile-csi nebo vytvořte vlastní. Můžete nasadit ukázkovou stavovou sadu založenou na Windows, která ukládá časové razítka do souboru data.txt spuštěním příkazu kubectl apply :

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

Výstup příkazu se podobá následujícímu příkladu:

statefulset.apps/busybox-azurefile created

Spuštěním následujícího příkazu kubectl exec ověřte obsah svazku:

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

Výstup příkazů vypadá podobně jako v následujícím příkladu:

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

Další kroky