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.
Feljegyzés
Vegye figyelembe, hogy az Azure File CSI-illesztő csak kulcsalapú (NTLM v2) hitelesítéssel engedélyezi az SMB-fájlmegosztások csatlakoztatását, ezért nem támogatja az Azure-fájlmegosztási beállítások maximális biztonsági profilját. Az NFS-fájlmegosztások csatlakoztatásához azonban nincs szükség kulcsalapú hitelesítésre.
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 dirMode alapé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.yaml
fá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.
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
Az állandó kötet jogcíméhez nagyobb kötetet kérhet. Szerkessze az állandó kötet jogcíme objektumot, és adjon meg egy nagyobb méretet. Ez a módosítás elindítja az állandó kötetet támogató mögöttes kötet kiterjesztését.
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.yaml
fá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.yaml
fá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 mountOptions
listájáért tekintse meg az NFS csatlakoztatási beállításait.
Feljegyzés
vers
, minorversion
sec
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
- Ha tudni szeretné, hogyan használhatja a CSI-illesztőprogramot az Azure Diskshez, olvassa el az Azure Disks használata a CSI-illesztőprogrammal című témakört.
- Az Azure Blob Storage-hoz készült CSI-illesztőprogram használatáról az Azure Blob Storage használata a CSI-illesztőprogrammal című témakörben olvashat.
- A tárolási ajánlott eljárásokról további információt az Azure Kubernetes Service tárolási és biztonsági mentési ajánlott eljárásaiban talál.
Azure Kubernetes Service