CSI-stuurprogramma (Azure Files Container Storage Interface) gebruiken in Azure Kubernetes Service (AKS)
Het CSI-stuurprogramma (Azure Files Container Storage Interface) is een CSI-stuurprogramma dat voldoet aan de specificatie die wordt gebruikt door Azure Kubernetes Service (AKS) om de levenscyclus van Azure-bestandsshares te beheren. De CSI is een standaard voor het beschikbaar maken van willekeurige blok- en bestandsopslagsystemen voor workloads in containers in Kubernetes.
Door CSI te gebruiken en te gebruiken, kan AKS nu invoegtoepassingen schrijven, implementeren en herhalen om nieuwe of verbeterde bestaande opslagsystemen in Kubernetes beschikbaar te maken of 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 als u een AKS-cluster wilt maken met ondersteuning voor CSI-stuurprogramma's.
Notitie
Stuurprogramma's in de structuur verwijzen naar de huidige opslagstuurprogramma's die deel uitmaken van de kubernetes-kerncode en de nieuwe CSI-stuurprogramma's, die invoegtoepassingen zijn.
Nieuwe functies voor Het CSI-stuurprogramma van Azure Files
Naast de oorspronkelijke functies van stuurprogramma's in de structuur ondersteunt het Azure Files CSI-stuurprogramma de volgende nieuwe functies:
- Network File System (NFS) versie 4.1
- Privé-eindpunt
- Het maken van een grote koppeling van bestandsshares parallel.
Een permanent volume gebruiken met Azure Files
Een permanent volume (PV) 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 leest u hoe u dynamisch een Azure Files-share maakt voor gebruik door meerdere pods in een AKS-cluster. Zie Voor statische inrichting handmatig een volume maken en gebruiken met een Azure Files-share.
Notitie
Houd er rekening mee dat het Azure File CSI-stuurprogramma alleen het koppelen van SMB-bestandsshares met behulp van verificatie op basis van sleutels (NTLM v2) toestaat en daarom geen ondersteuning biedt voor het maximale beveiligingsprofiel van azure-bestandsshare-instellingen. Aan de andere kant vereist het koppelen van NFS-bestandsshares geen verificatie op basis van sleutels.
Met Azure Files-shares is er geen limiet voor het aantal dat op een knooppunt kan worden gekoppeld.
Zie Opslagopties voor toepassingen in AKS voor meer informatie over Kubernetes-volumes.
Dynamisch Azure Files-VM's maken met behulp van de ingebouwde opslagklassen
Er wordt een opslagklasse 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: Lokaal redundante standaardopslag
- Standard_GRS: Standaard geografisch redundante opslag
- Standard_ZRS: Standaard zone-redundante opslag
- Standard_RAGRS: Geografisch redundante opslag met leestoegang
- Standard_RAGZRS: Geografisch zone-redundante opslag met leestoegang
- Premium_LRS: Lokaal redundante Premium-opslag
- Premium_ZRS: Premium zone-redundante opslag
Notitie
Azure Files ondersteunt Azure Premium-bestandsshares. De minimale bestandssharecapaciteit is 100 GiB. We raden u aan Om Azure Premium-bestandsshares te gebruiken in plaats van Standard-bestandsshares, omdat Premium-bestandsshares hogere prestaties bieden, schijfondersteuning met lage latentie voor I/O-intensieve workloads.
Wanneer u CSI-stuurprogramma's voor opslag in AKS gebruikt, zijn er nog twee ingebouwde stuurprogramma's die gebruikmaken van de Azure Files CSI-opslagstuurprogramma's StorageClasses
. 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
: Maakt gebruik van Azure Premium Storage om een Azure-bestandsshare te maken.
Het claimbeleid voor beide opslagklassen zorgt ervoor dat de onderliggende Azure-bestandsshare wordt verwijderd wanneer de respectieve HW wordt verwijderd. De opslagklassen configureren ook dat de bestandsshares kunnen worden uitgebreid. 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 respectieve pod die ernaar verwijst en gebruikt. Een PVC wordt gebruikt om automatisch opslag 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 pods die de huidige datum in een outfile
afdrukt door de kubectl-opdrachten 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 het outfile
volgende 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 allemaal. In sommige gevallen wilt u mogelijk uw eigen opslagklasse aanpassen met uw eigen parameters. Gebruik bijvoorbeeld het volgende manifest om de mountOptions
bestandsshare te configureren.
De standaardwaarde voor fileMode en dirMode is 0777 voor gekoppelde Kubernetes-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 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 CSI-stuurprogramma van Azure Files ondersteunt het maken van momentopnamen van permanente volumes en de onderliggende bestandsshares.
Maak een volumemomentopnameklasse met de opdracht 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 volumemomentopname van het PVC dat we dynamisch aan het begin van deze zelfstudiepvc-azurefile
hebben gemaakt.
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 resulteert in de uitbreiding van het onderliggende volume dat het PV ondersteuning biedt.
Notitie
Er wordt nooit een nieuwe PV gemaakt om aan de claim te voldoen. In plaats daarvan wordt het formaat van een bestaand volume gewijzigd.
Het verkleinen van permanente volumes wordt momenteel niet ondersteund.
In AKS ondersteunt de ingebouwde azurefile-csi
opslagklasse al uitbreiding, dus gebruik het PVC dat eerder is gemaakt met deze opslagklasse. De 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 tonen:
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 persoonlijke Azure Files-opslag (privé-eindpunt)
Als uw Azure Files-resources zijn 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 in de FQDN van de verbindingsreeks. Pas de volgende parameters aan:
resourceGroup
: De resourcegroep waarin het opslagaccount is 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 de PVC met behulp van de opdracht kubectl apply :
kubectl apply -f private-pvc.yaml
NFS-bestandsshares
Azure Files ondersteunt het NFS v4.1-protocol. Ondersteuning voor NFS versie 4.1 voor Azure Files biedt u een volledig beheerd NFS-bestandssysteem als een service die is gebouwd op een maximaal beschikbaar en zeer duurzaam gedistribueerd opslagplatform.
Deze optie is geoptimaliseerd voor workloads voor willekeurige toegang met in-place gegevensupdates en biedt volledige ondersteuning voor het POSIX-bestandssysteem. In deze sectie wordt beschreven hoe u NFS-shares gebruikt met het Azure File CSI-stuurprogramma op 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 in het VNet en NetworkSecurityGroup.
- De service-principal of managed service identity (MSI) van uw AKS-cluster moet worden toegevoegd aan de rol Inzender voor het opslagaccount.
Notitie
U kunt een privé-eindpunt gebruiken in plaats van toegang tot het geselecteerde VNet toe te staan.
Opties voor lees- en schrijfgrootte optimaliseren
In deze sectie vindt u informatie over het benaderen van prestatieafstemming van NFS met het Azure Files CSI-stuurprogramma met de rsize - en wsize-opties . Met de opties voor rsize en wsize wordt de maximale overdrachtsgrootte van een NFS-bewerking ingesteld. Als rsize of wsize niet is opgegeven bij koppelen, onderhandelen de client en server over de grootste grootte die door de twee wordt ondersteund. Momenteel ondersteunen zowel Azure NetApp Files als moderne Linux-distributies lees- en schrijfgrootten zo groot als 1.048.576 bytes (1 MiB).
Optimale prestaties zijn gebaseerd op efficiënte client-servercommunicatie. Als u de waarden voor lees - en schrijfbewerkingen voor koppelen verhoogt of verlaagt, kunnen de prestaties van NFS worden verbeterd. De standaardgrootte van de lees-/schrijfpakketten die worden overgedragen tussen client en server, zijn 8 kB voor NFS versie 2 en 32 KB voor NFS versie 3 en 4. Deze standaardwaarden kunnen te groot of te klein zijn. Het verminderen van de rsize en wsize kan de NFS-prestaties in een overbelast netwerk verbeteren door kleinere pakketten te verzenden voor elke NFS-leesantwoord- en schrijfaanvraag. Dit kan echter het aantal pakketten verhogen dat nodig is om gegevens over het netwerk te verzenden, waardoor het totale netwerkverkeer en het CPU-gebruik op de client en server worden verhoogd.
Het is belangrijk dat u tests uitvoert om een rsize en wsize te vinden die de efficente pakketoverdracht ondersteunt, waarbij de doorvoer niet wordt verlaagd en de latentie toeneemt.
Zie de aanbevolen procedures voor koppelen van Linux NFS voor Azure NetApp Files voor meer informatie over het optimaliseren van rsize en wsize.
Als u bijvoorbeeld een maximale rsize en wsize van 256-KiB wilt configureren, configureert u de mountOptions
opslagklasse als volgt:
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
Opslagklasse voor NFS-bestandsshares maken
Maak een bestand met de naam nfs-sc.yaml
en kopieer het onderstaande manifest. Zie NFS-koppelingsopties voor een lijst met ondersteunde mountOptions
opties.
Notitie
vers
, minorversion
sec
worden geconfigureerd door het Azure File CSI-stuurprogramma. Het opgeven van een waarde in uw manifest voor deze eigenschappen wordt niet ondersteund.
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
Nadat u het bestand hebt bewerkt en opgeslagen, maakt u de opslagklasse met de opdracht 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 worden opgeslagen in een bestand data.txt
met de opdracht 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 bestandsgrootte 100 GiB. Als u een PVC maakt met een kleine opslaggrootte, kan er een fout optreden die vergelijkbaar is met het volgende: kan geen bestandsshare maken ... grootte (5)....
Windows-containers
Het CSI-stuurprogramma van Azure Files 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 stateful set op basis van Windows implementeren waarmee tijdstempels in een bestand data.txt
worden opgeslagen door de opdracht 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-opslag gebruiken met CSI-stuurprogramma voor meer informatie over het gebruik van het CSI-stuurprogramma voor Azure Blob Storage.
- Zie Best practices voor opslag en back-ups in Azure Kubernetes Service voor meer informatie over aanbevolen procedures voor opslag.
Azure Kubernetes Service