Sdílet prostřednictvím


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 plug-iny, aby zpřístupnil nové systémy úložiště nebo vylepšil stávající v Kubernetes. Použití ovladačů CSI v AKS se vyhne nutnosti dotýkat se základního kódu Kubernetes a čekat na jeho vydávací cykly.

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.

Použijte trvalý svazek s 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. Tento článek ukazuje, jak dynamicky vytvořit sdílený svazek Azure Files 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.

Poznámka:

Mějte na paměti, že ovladač CSI služby Azure File umožňuje připojení sdílených složek SMB pouze pomocí ověřování založeného na klíči (NTLM v2), a proto nepodporuje maximální profil zabezpečení nastavení sdílené složky Azure. Na druhou stranu, připojení sdílených složek NFS nevyžaduje autentizaci pomocí klíčů.

U sdílených složek Azure Files neexistuje žádné omezení na počet sdílených složek, které mohou být připojeny k uzlu.

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

Dynamické vytváření perzistentních svazků Azure Files pomocí vestavěný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 Azure storage SKU s redundancí:

  • 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: Standardní geograficky redundantní úložiště s přístupem pro čtení
  • 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 úložiště CSI v AKS, jsou k dispozici další dva integrované StorageClasses, které používají úložišťové ovladače CSI služby Azure Files. Ostatní třídy úložiště CSI se vytvářejí spolu s výchozími integrovanými třídami úložiště v rámci systému, když je vytvořen cluster.

  • 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 základní sdílené úložiště Azure odstraní při odstranění příslušného perzistentního svazku (PV). 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é na ně odkazují a používají 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 specifikován pro vyžádání požadovaného úložiště.

Vytvořte příklad PVC a pod, který vytiskne aktuální datum do outfile spuštěním příkazů 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, zda je sdílená složka správně připojená, spuštěním následujícího příkazu a ověřením, že výstup obsahuje 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.

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ý trvalý svazek (PV) se nikdy nevytváří, aby uspokojil požadavek. 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 již integrovaná azurefile-csi třída úložiště podporuje rozšíření, proto použijte PVC vytvořené dříve s touto třídou úložiště. PVC požádal o sdílení souborů 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

Rozšiřte PVC zvýšením pole spec.resources.requests.storage.

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ího řetězce. 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 systém souborů NFS jako plně spravovanou službu postavenou na vysoce dostupné a vysoce odolné platformě distribuovaného 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 optimalizovat výkon 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 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í čtení a zápisu připojení může zlepšit výkon 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 NFS v zahlcené síti odesíláním menších paketů pro každou NFS odpověď na č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.

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řte třídu úložiště pro sdílený soubor NFS

Vytvořte soubor s názvem nfs-sc.yaml a zkopírujte níže uvedený manifest. Pro seznam podporovaných mountOptions, viz možnosti připojení NFS.

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řit nasazení se sdíleným diskem podporovaným NFS

Pomocí příkazu kubectl apply můžete nasadit ukázkovou stavovou sadu, která ukládá časová razítka do souborudata.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 malým úložným prostorem, může dojít k chybě podobné následující: nepodařilo se vytvořit sdílení souborů ... 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