Azure Files CSI-stuurprogramma (Container Storage Interface) gebruiken in Azure Kubernetes Service (AKS)
Het stuurprogramma Azure Files Container Storage Interface (CSI) is een stuurprogramma dat voldoet aan de CSI-specificatie die door Azure Kubernetes Service (AKS) wordt gebruikt om de levenscyclus van Azure-bestandsshares te beheren. De CSI is een standaard voor het beschikbaar maken van willekeurige blok- en bestandsopslagsystemen voor in containers geplaatste workloads in Kubernetes.
Door CSI te gebruiken en te gebruiken, kan AKS nu invoegtoepassingen schrijven, implementeren en herhalen om nieuwe opslagsystemen beschikbaar te maken of bestaande opslagsystemen in Kubernetes te verbeteren. Als u CSI-stuurprogramma's in AKS gebruikt, hoeft u de Kubernetes-kerncode niet aan te raken en te wachten op de releasecycli.
Zie CSI-stuurprogramma's inschakelen op AKS voor informatie over het maken van een AKS-cluster met ondersteuning voor CSI-stuurprogramma's.
Notitie
In-tree-stuurprogramma's verwijst naar de huidige opslagstuurprogramma's die deel uitmaken van de kubernetes-kerncode, versus de nieuwe CSI-stuurprogramma's, die invoegtoepassingen zijn.
nieuwe functies van het CSI-stuurprogramma Azure Files
Naast de oorspronkelijke functies van het stuurprogramma in de structuur ondersteunt Azure Files CSI-stuurprogramma de volgende nieuwe functies:
- Network File System (NFS) versie 4.1
- Privé-eindpunt
- Grote koppeling van bestandsshares parallel maken.
Een permanent volume gebruiken met Azure Files
Een permanent volume (HW) vertegenwoordigt een stuk opslag dat is ingericht voor gebruik met Kubernetes-pods. Een HW kan worden gebruikt door een of meer pods en kan dynamisch of statisch worden ingericht. Als meerdere pods gelijktijdige toegang tot hetzelfde opslagvolume nodig hebben, kunt u Azure Files gebruiken om verbinding te maken met behulp van het SMB- of NFS-protocol(Server Message Block). In dit artikel wordt beschreven hoe u dynamisch een Azure Files share maakt voor gebruik door meerdere pods in een AKS-cluster. Zie Handmatig een volume maken en gebruiken met een Azure Files share voor statische inrichting.
Met Azure Files shares is er geen limiet voor het aantal shares dat aan een knooppunt kan worden gekoppeld.
Zie Opslagopties voor toepassingen in AKS voor meer informatie over Kubernetes-volumes.
Dynamisch Azure Files-tv's maken met behulp van de ingebouwde opslagklassen
Een opslagklasse wordt gebruikt om te definiëren hoe een Azure-bestandsshare wordt gemaakt. Er wordt automatisch een opslagaccount gemaakt in de knooppuntresourcegroep voor gebruik met de opslagklasse voor het opslaan van de Azure-bestandsshare. Kies een van de volgende Azure Storage-redundantie-SKU's voor skuName:
- Standard_LRS: Standaard lokaal redundante opslag
- Standard_GRS: Standaard geografisch redundante opslag
- Standard_ZRS: Standaard zone-redundante opslag
- Standard_RAGRS: standaard geografisch redundante opslag met leestoegang
- Standard_RAGZRS: standaard geografisch zone-redundante opslag met leestoegang
- Premium_LRS: Lokaal redundante Premium-opslag
- Premium_ZRS: Premium zone-redundante opslag
Notitie
Azure Files ondersteunt Azure Premium Storage. De minimale capaciteit van de Premium-bestandsshare is 100 GiB.
Wanneer u CSI-stuurprogramma's voor opslag op AKS gebruikt, zijn er nog twee ingebouwde stuurprogramma's die gebruikmaken van de Azure Files CSI-opslagstuurprogramma'sStorageClasses
. De andere CSI-opslagklassen worden gemaakt met het cluster naast de standaardopslagklassen in de structuur.
azurefile-csi
: maakt gebruik van Azure Standard Storage om een Azure-bestandsshare te maken.azurefile-csi-premium
: gebruikt Azure Premium Storage om een Azure-bestandsshare te maken.
Het beleid voor vrijmaken voor beide opslagklassen zorgt ervoor dat de onderliggende Azure-bestandsshare wordt verwijderd wanneer de respectieve HW wordt verwijderd. De opslagklassen configureren ook de bestandsshares om uitbreidbaar te zijn. U hoeft alleen de permanente volumeclaim (PVC) te bewerken met de nieuwe grootte.
Als u deze opslagklassen wilt gebruiken, maakt u een PVC en de bijbehorende pod die ernaar verwijst en gebruikt. Een PVC wordt gebruikt om opslag automatisch in te richten op basis van een opslagklasse. Een PVC kan een van de vooraf gemaakte opslagklassen of een door de gebruiker gedefinieerde opslagklasse gebruiken om een Azure-bestandsshare te maken voor de gewenste SKU en grootte. Wanneer u een poddefinitie maakt, wordt het PVC opgegeven om de gewenste opslag aan te vragen.
Maak een voorbeeld van pvc en pod die de huidige datum in een outfile
afdrukken door de opdrachten [kubectl apply][kubectl-apply] uit te voeren:
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
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
persistentvolumeclaim/pvc-azurefile created
pod/nginx-azurefile created
Nadat de pod de status Actief heeft, kunt u controleren of de bestandsshare correct is gekoppeld door de volgende opdracht uit te voeren en te controleren of de uitvoer de outfile
bevat:
kubectl exec nginx-azurefile -- ls -l /mnt/azurefile
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
total 29
-rwxrwxrwx 1 root root 29348 Aug 31 21:59 outfile
Een aangepaste opslagklasse maken
De standaardopslagklassen zijn geschikt voor de meest voorkomende scenario's, maar niet voor alle. In sommige gevallen wilt u mogelijk uw eigen opslagklasse aanpassen met uw eigen parameters. Gebruik bijvoorbeeld het volgende manifest om de mountOptions
van de bestandsshare te configureren.
De standaardwaarde voor fileMode en dirMode is 0777 voor aan Kubernetes gekoppelde bestandsshares. U kunt de verschillende koppelingsopties voor het opslagklasseobject opgeven.
Maak een bestand met de naam azure-file-sc.yaml
en plak het volgende voorbeeldmanifest:
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
Maak de opslagklasse door de opdracht [kubectl apply][kubectl-apply] uit te voeren:
kubectl apply -f azure-file-sc.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
storageclass.storage.k8s.io/my-azurefile created
Het Azure Files CSI-stuurprogramma ondersteunt het maken van momentopnamen van permanente volumes en de onderliggende bestandsshares.
Notitie
Dit stuurprogramma ondersteunt alleen het maken van momentopnamen. Herstellen vanuit momentopname wordt niet ondersteund door dit stuurprogramma. Momentopnamen kunnen worden hersteld vanuit Azure Portal of CLI. Zie Overzicht van momentopnamen van delen voor Azure Files voor meer informatie over het maken en herstellen van een momentopname.
Maak een klasse voor volumemomentopnamen met de opdracht [kubectl apply][kubectl-apply]:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc created
Maak een momentopname van het volume van het PVC dat we aan het begin van deze zelfstudie dynamisch hebben gemaakt, pvc-azurefile
.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot created
Controleer of de momentopname juist is gemaakt door de volgende opdracht uit te voeren:
kubectl describe volumesnapshot azurefile-volume-snapshot
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
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>
Het formaat van een permanent volume wijzigen
U kunt een groter volume aanvragen voor een PVC. Bewerk het PVC-object en geef een groter formaat op. Deze wijziging activeert de uitbreiding van het onderliggende volume dat de HW-ondersteuning biedt.
Notitie
Er wordt nooit een nieuwe HW gemaakt om aan de claim te voldoen. In plaats daarvan wordt het formaat van een bestaand volume gewijzigd.
In AKS ondersteunt de ingebouwde azurefile-csi
opslagklasse al uitbreiding, dus gebruik het PVC dat u eerder hebt gemaakt met deze opslagklasse. Het PVC heeft een 100 GiB-bestandsshare aangevraagd. We kunnen dit bevestigen door het volgende uit te voeren:
kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
Filesystem Size Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770 100G 128K 100G 1% /mnt/azurefile
Vouw het PVC uit door het spec.resources.requests.storage
veld te vergroten:
kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
persistentvolumeclaim/pvc-azurefile patched
Controleer of zowel het PVC als het bestandssysteem in de pod de nieuwe grootte weergeven:
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
Een permanent volume gebruiken met privéopslag Azure Files (privé-eindpunt)
Als uw Azure Files resources worden beveiligd met een privé-eindpunt, moet u uw eigen opslagklasse maken. Zorg ervoor dat u uw DNS-instellingen hebt geconfigureerd om het IP-adres van het privé-eindpunt om te zetten naar de FQDN van de connection string. die is aangepast met de volgende parameters:
resourceGroup
: de resourcegroep waarin het opslagaccount wordt geïmplementeerd.storageAccount
: de naam van het opslagaccount.server
: De FQDN van het privé-eindpunt van het opslagaccount.
Maak een bestand met de naam private-azure-file-sc.yaml
en plak het volgende voorbeeldmanifest in het bestand. Vervang de waarden voor <resourceGroup>
en <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
Maak de opslagklasse met behulp van de kubectl apply
opdracht :
kubectl apply -f private-azure-file-sc.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
storageclass.storage.k8s.io/private-azurefile-csi created
Maak een bestand met de naam private-pvc.yaml
en plak het volgende voorbeeldmanifest in het bestand:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: private-azurefile-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: private-azurefile-csi
resources:
requests:
storage: 100Gi
Maak het PVC met behulp van de opdracht [kubectl apply][kubectl-apply]:
kubectl apply -f private-pvc.yaml
NFS-bestandsshares
Azure Files ondersteunt het NFS v4.1-protocol. NFS versie 4.1-ondersteuning voor Azure Files biedt u een volledig beheerd NFS-bestandssysteem als een service die is gebouwd op een maximaal beschikbaar en zeer duurzaam gedistribueerd tolerant opslagplatform.
Deze optie is geoptimaliseerd voor workloads met willekeurige toegang met in-place gegevensupdates en biedt volledige ondersteuning voor posix-bestandssysteem. In deze sectie wordt beschreven hoe u NFS-shares gebruikt met het Azure File CSI-stuurprogramma in een AKS-cluster.
Vereisten
- De identiteit van het AKS-clusterbesturingsvlak (dat wil gezegd, de naam van uw AKS-cluster) wordt toegevoegd aan de rol Inzender op het VNet en NetworkSecurityGroup.
- De service-principal of beheerde service-identiteit (MSI) van uw AKS-cluster moet worden toegevoegd aan de rol Inzender aan het opslagaccount.
Notitie
U kunt een privé-eindpunt gebruiken in plaats van toegang tot het geselecteerde VNet toe te staan.
Opslagklasse voor NFS-bestandsshares maken
Maak een bestand met de naam nfs-sc.yaml
en kopieer het onderstaande manifest.
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
Nadat u het bestand hebt bewerkt en opgeslagen, maakt u de opslagklasse met de opdracht [kubectl apply][kubectl-apply]:
kubectl apply -f nfs-sc.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
storageclass.storage.k8s.io/azurefile-csi-nfs created
Een implementatie maken met een bestandsshare met NFS-ondersteuning
U kunt een voorbeeld van een stateful set implementeren waarmee tijdstempels in een bestand data.txt
worden opgeslagen met de opdracht [kubectl apply][kubectl-apply]:
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
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
statefulset.apps/statefulset-azurefile created
Valideer de inhoud van het volume door de volgende opdracht uit te voeren:
kubectl exec -it statefulset-azurefile-0 -- df -h
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
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
...
Notitie
Omdat de NFS-bestandsshare zich in een Premium-account bevindt, is de minimale grootte van de bestandsshare 100 GiB. Als u een PVC met een kleine opslaggrootte maakt, kan er een fout optreden die vergelijkbaar is met het volgende: kan de bestandsshare niet maken... grootte (5)....
Windows-containers
Het stuurprogramma Azure Files CSI ondersteunt ook Windows-knooppunten en -containers. Als u Windows-containers wilt gebruiken, volgt u de quickstart voor Windows-containers om een Windows-knooppuntgroep toe te voegen.
Nadat u een Windows-knooppuntgroep hebt, gebruikt u de ingebouwde opslagklassen zoals azurefile-csi
of maakt u een aangepaste. U kunt een voorbeeld van een op Windows gebaseerde stateful set implementeren waarmee tijdstempels in een bestand data.txt
worden opgeslagen door de opdracht [kubectl apply][kubectl-apply] uit te voeren:
kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yaml
De uitvoer van de opdracht lijkt op het volgende voorbeeld:
statefulset.apps/busybox-azurefile created
Valideer de inhoud van het volume door de volgende kubectl exec-opdracht uit te voeren:
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
De uitvoer van de opdrachten lijkt op het volgende voorbeeld:
2020-08-27 22:11:01Z
2020-08-27 22:11:02Z
2020-08-27 22:11:04Z
(...)
Volgende stappen
- Zie Azure Disks gebruiken met CSI-stuurprogramma voor meer informatie over het gebruik van het CSI-stuurprogramma voor Azure Disks.
- Zie Azure Blob Storage gebruiken met CSI-stuurprogramma voor meer informatie over het gebruik van het CSI-stuurprogramma voor Azure Blob Storage.
- Zie Aanbevolen procedures voor opslag en back-ups in Azure Kubernetes Service voor meer informatie over aanbevolen procedures voor opslag.