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.
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. Připojení sdílených složek NFS na druhou stranu nevyžaduje ověřování založené na klíčích.
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.yaml
a 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á 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.yaml
a 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.yaml
a 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
, minorversion
sec
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
- Informace o použití ovladače CSI pro disky Azure najdete v tématu Použití disků Azure s ovladačem CSI.
- Informace o použití ovladače CSI pro úložiště objektů blob v Azure najdete v tématu Použití služby Azure Blob Storage s ovladačem CSI.
- Další informace o osvědčených postupech úložiště najdete v tématu Osvědčené postupy pro ukládání a zálohování ve službě Azure Kubernetes Service.
Azure Kubernetes Service