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 outfileafdrukken 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 outfilebevat:

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.yamlen 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.yamlen 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.yamlen 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