Een volume maken en gebruiken met Azure Disks in Azure Kubernetes Service (AKS)

Een permanent volume vertegenwoordigt een stuk opslag dat is ingericht voor gebruik met Kubernetes-pods. Een permanent volume kan worden gebruikt door een of meer pods en kan dynamisch of statisch worden ingericht. In dit artikel wordt beschreven hoe u dynamisch permanente volumes maakt met Azure Disks in een AKS-cluster (Azure Kubernetes Service).

Notitie

Een Azure-schijf kan alleen worden gekoppeld met het type Access-modusReadWriteOnce, waardoor deze beschikbaar is voor één knooppunt in AKS. Met deze toegangsmodus kunnen nog steeds meerdere pods toegang krijgen tot het volume wanneer de pods op hetzelfde knooppunt worden uitgevoerd. Zie Kubernetes PersistentVolume-toegangsmodi voor meer informatie.

In dit artikel leest u informatie over:

  • Werk met een dynamisch permanent volume (HW) door het CSI-stuurprogramma (Container Storage Interface) te installeren en dynamisch een of meer beheerde Azure-schijven te maken om aan een pod te koppelen.
  • Werk met een statische pv door een of meer beheerde Azure-schijven te maken of gebruik een bestaande schijf en koppel deze aan een pod.

Zie Opslagopties voor toepassingen in AKS voor meer informatie over Kubernetes-volumes.

Voordat u begint

  • U hebt een Azure-opslagaccount nodig.

  • Zorg ervoor dat Azure CLI versie 2.0.59 of hoger is geïnstalleerd en geconfigureerd. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

  • Het Azure Disk CSI-stuurprogramma heeft een volumelimiet per knooppunt. Het aantal volumes wordt gewijzigd op basis van de grootte van de knooppunt-/knooppuntgroep. Voer de opdracht kubectl get uit om het aantal volumes te bepalen dat per knooppunt kan worden toegewezen:

    kubectl get CSINode <nodename> -o yaml
    

Een volume dynamisch inrichten

Deze sectie bevat richtlijnen voor clusterbeheerders die een of meer permanente volumes willen inrichten met details van Azure Disk Storage voor gebruik door een workload. Een permanente volumeclaim (PVC) gebruikt het opslagklasseobject om dynamisch een Azure Disk Storage-container in te richten.

Dynamische inrichtingsparameters

Naam Betekenis Beschikbare waarde Verplicht Standaardwaarde
skuName Azure Disks-opslagaccounttype (alias: storageAccountType) Standard_LRS, Premium_LRS, StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, Premium_ZRS, StandardSSD_ZRS Nee StandardSSD_LRS
fsType Bestandssysteemtype ext4, ext3, ext2, xfs, voor btrfs Linux, ntfs voor Windows Nee ext4 voor Linux, ntfs voor Windows
cachingMode Cache-instelling voor Azure Data Disk-host None, ReadOnly, ReadWrite Nee ReadOnly
resourceGroup Geef de resourcegroep op waarin de Azure-schijven worden gemaakt Naam van bestaande resourcegroep Nee Als dit leeg is, gebruikt het stuurprogramma dezelfde resourcegroepnaam als het huidige AKS-cluster
DiskIOPSReadWrite UltraSSD-schijf IOPS-mogelijkheid (minimaal: 2 IOPS/GiB) 100~160000 Nee 500
DiskMBpsReadWrite UltraSSD-schijf Doorvoermogelijkheid (minimaal: 0,032/GiB) 1~2000 Nee 100
LogicalSectorSize Logische sectorgrootte in bytes voor ultraschijf. Ondersteunde waarden zijn 512 ad 4096. 4096 is de standaardwaarde. 512, 4096 Nee 4096
tags Azure Disk-tags Labelindeling: key1=val1,key2=val2 Nee ""
diskEncryptionSetID ResourceId van de schijfversleutelingsset die moet worden gebruikt voor het inschakelen van versleuteling at rest Formaat: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} Nee ""
diskEncryptionType Versleutelingstype van de schijfversleutelingsset. EncryptionAtRestWithCustomerKey(standaard), EncryptionAtRestWithPlatformAndCustomerKeys Nee ""
writeAcceleratorEnabled Write Accelerator op Azure Disks true, false Nee ""
networkAccessPolicy Eigenschap NetworkAccessPolicy om te voorkomen dat de SAS-URI voor een schijf of momentopname wordt gegenereerd AllowAll, DenyAll, AllowPrivate Nee AllowAll
diskAccessID Azure-resource-id van de DiskAccess-resource voor het gebruik van privé-eindpunten op schijven Nee ``
enableBursting Schakel bursting op aanvraag in buiten het ingerichte prestatiedoel van de schijf. Bursting op aanvraag mag alleen worden toegepast op Premium-schijven en wanneer de schijfgrootte > 512 GB is. Ultra- en gedeelde schijven worden niet ondersteund. Bursting is standaard uitgeschakeld. true, false Nee false
Useragent Gebruikersagent die wordt gebruikt voor toeschrijving van klantgebruik Nee Gegenereerde useragent opgemaakt driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Geef de Azure-abonnements-id op waarin de Azure-schijven worden gemaakt. Azure-abonnements-id Nee Indien niet leeg, resourceGroup moet worden opgegeven.
--- De volgende parameters zijn alleen voor v2 --- --- ---
maxShares Het totale aantal gedeelde schijfkoppelingen dat is toegestaan voor de schijf. Als u de waarde instelt op 2 of meer, worden bijlagereplica's ingeschakeld. Ondersteunde waarden zijn afhankelijk van de schijfgrootte. Zie Een beheerde Azure-schijf delen voor ondersteunde waarden. Nee 1
maxMountReplicaCount Het aantal replica's dat bijlagen moet worden onderhouden. Deze waarde moet zich in het bereik [0..(maxShares - 1)] Nee Als accessMode is ReadWriteMany, is 0de standaardwaarde . Anders is de standaardwaarde maxShares - 1

Ingebouwde opslagklassen

Een opslagklasse wordt gebruikt om te definiëren hoe een opslageenheid dynamisch wordt gemaakt met een permanent volume. Zie Kubernetes-opslagklassen voor meer informatie over Kubernetes-opslagklassen.

Elk AKS-cluster bevat vier vooraf gemaakte opslagklassen, waarvan er twee zijn geconfigureerd voor gebruik met Azure Disks:

  1. De standaardopslagklasse richt een standaard SSD Azure Disk in.
    • Standard-opslag wordt ondersteund door Standard-SSD's en biedt kosteneffectieve opslag terwijl er nog steeds betrouwbare prestaties worden geleverd.
  2. De managed-csi-premium-opslagklasse richt een premium Azure-schijf in.
    • Premium-schijven worden ondersteund door hoogwaardige SSD-schijven met een lage latentie. Ze zijn ideaal voor VM's waarop productieworkloads worden uitgevoerd. Wanneer u het Azure Disk CSI-stuurprogramma op AKS gebruikt, kunt u ook de managed-csi opslagklasse gebruiken, die wordt ondersteund door Standard SSD lokaal redundante opslag (LRS).

Het wordt niet ondersteund om de grootte van een PVC te verkleinen (om gegevensverlies te voorkomen). U kunt een bestaande opslagklasse bewerken met behulp van de kubectl edit sc opdracht of u kunt uw eigen aangepaste opslagklasse maken. Als u bijvoorbeeld een schijf met een grootte van 4 TiB wilt gebruiken, moet u een opslagklasse maken die definieert cachingmode: None omdat schijfcaching niet wordt ondersteund voor schijven van 4 TiB en hoger. Zie Opslagopties voor toepassingen in AKS voor meer informatie over opslagklassen en het maken van uw eigen opslagklasse.

Gebruik de opdracht kubectl get sc om de vooraf gemaakte opslagklassen weer te geven. In het volgende voorbeeld ziet u de opslagklassen die vooraf zijn gemaakt in een AKS-cluster:

kubectl get sc

De uitvoer van de opdracht lijkt op het volgende voorbeeld:

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

Notitie

Permanente volumeclaims worden opgegeven in GiB, maar beheerde Azure-schijven worden gefactureerd per SKU voor een specifieke grootte. Deze SKU's variëren van 32GiB voor S4- of P4-schijven tot 32TiB voor S80- of P80-schijven (in preview). De doorvoer en IOPS-prestaties van een beheerde Premium-schijf zijn afhankelijk van zowel de SKU als de instantiegrootte van de knooppunten in het AKS-cluster. Zie Prijzen en prestaties van beheerde schijven voor meer informatie.

Een permanente volumeclaim maken

Een permanente volumeclaim (PVC) wordt gebruikt om automatisch opslag in te richten op basis van een opslagklasse. In dit geval kan een PVC een van de vooraf gemaakte opslagklassen gebruiken om een standaard of premium beheerde Azure-schijf te maken.

  1. Maak een bestand met de naam azure-pvc.yamlen kopieer in het volgende manifest. De claim vraagt om een schijf met de naam azure-managed-disk die 5 GB groot is met ReadWriteOnce-toegang . De managed-csi-opslagklasse wordt opgegeven als de opslagklasse.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
        name: azure-managed-disk
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: managed-csi
      resources:
        requests:
          storage: 5Gi
    

Tip

Als u een schijf wilt maken die gebruikmaakt van Premium-opslag, gebruikt storageClassName: managed-csi-premium u in plaats van managed-csi.

  1. Maak de permanente volumeclaim met de opdracht kubectl apply en geef uw bestand azure-pvc.yaml op :

    kubectl apply -f azure-pvc.yaml
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    persistentvolumeclaim/azure-managed-disk created
    

Het permanente volume gebruiken

Zodra de permanente volumeclaim is gemaakt en de schijf is ingericht, kan een pod worden gemaakt met toegang tot de schijf. Met het volgende manifest wordt een eenvoudige NGINX-pod gemaakt die gebruikmaakt van de permanente volumeclaim met de naam azure-managed-disk om de Azure-schijf te koppelen aan het pad /mnt/azure. Geef voor Windows Server-containers een koppelingspad op met behulp van de Windows-padconventie, zoals 'D:'.

  1. Maak een bestand met de naam azure-pvc-disk.yamlen kopieer in het volgende manifest:

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: "/mnt/azure"
              name: volume
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  2. Maak de pod met de opdracht kubectl apply , zoals wordt weergegeven in het volgende voorbeeld:

     kubectl apply -f azure-pvc-disk.yaml
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    pod/mypod created
    
  3. U hebt nu een actieve pod met uw Azure-schijf gekoppeld in de /mnt/azure map. Deze configuratie kan worden gezien bij het inspecteren van uw pod met behulp van de opdracht kubectl describe , zoals wordt weergegeven in het volgende verkorte voorbeeld:

     kubectl describe pod mypod
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
       default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
     Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

Azure-ultraschijven gebruiken

Zie Ultra Disks on Azure Kubernetes Service (AKS) gebruiken als u Azure Ultra Disk wilt gebruiken.

Azure-tags gebruiken

Zie Azure-tags gebruiken in Azure Kubernetes Service (AKS) voor meer informatie over het gebruik van Azure-tags.

Een volume statisch inrichten

Deze sectie bevat richtlijnen voor clusterbeheerders die een of meer permanente volumes willen maken met details van Azure Disks-opslag voor gebruik door een workload.

Parameters voor statische inrichting

Naam Betekenis Beschikbare waarde Verplicht Standaardwaarde
volumeHandle Azure-schijf-URI /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Ja N.v.t.
volumeAttributes.fsType Bestandssysteemtype ext4, ext3, ext2, xfs, btrfs voor Linux, ntfs voor Windows Nee ext4 voor Linux, ntfs voor Windows
volumeAttributes.partition Partitienummer van de bestaande schijf (alleen ondersteund in Linux) 1, 2, 3 Nee Leeg (geen partitie):
zorg ervoor dat de partitieindeling er ongeveer als volgt uitziet -part1
volumeAttributes.cachingMode Cache-instelling van schijfhost None, ReadOnly, ReadWrite Nee ReadOnly

Een Azure-schijf maken

Wanneer u een Azure-schijf maakt voor gebruik met AKS, kunt u de schijfresource maken in de knooppuntresourcegroep. Met deze methode kan het AKS-cluster toegang krijgen tot de schijfresource en deze beheren. Als u in plaats daarvan de schijf in een afzonderlijke resourcegroep hebt gemaakt, moet u de beheerde identiteit Azure Kubernetes Service (AKS) voor uw cluster de Contributor rol verlenen aan de resourcegroep van de schijf. In deze oefening maakt u de schijf in dezelfde resourcegroep als uw cluster.

  1. Identificeer de naam van de resourcegroep met behulp van de opdracht az aks show en voeg de --query nodeResourceGroup parameter toe. In het volgende voorbeeld wordt de knooppuntresourcegroep voor de AKS-clusternaam myAKSCluster opgehaald in de naam van de resourcegroep myResourceGroup:

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    
    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Maak een schijf met de opdracht az disk create . Geef de naam van de knooppuntresourcegroep op die in de vorige opdracht is verkregen en vervolgens een naam voor de schijfresource, zoals myAKSDisk. In het volgende voorbeeld wordt een 20GiB-schijf gemaakt en wordt de id van de schijf uitgevoerd nadat deze is gemaakt. Als u een schijf wilt maken voor gebruik met Windows Server-containers, voegt u de --os-type windows parameter toe om de schijf correct te formatteren.

    az disk create \
      --resource-group MC_myResourceGroup_myAKSCluster_eastus \
      --name myAKSDisk \
      --size-gb 20 \
      --query id --output tsv
    

    Notitie

    Azure Disks worden gefactureerd per SKU voor een specifieke grootte. Deze SKU's variëren van 32GiB voor S4- of P4-schijven tot 32TiB voor S80- of P80-schijven (in preview). De doorvoer en IOPS-prestaties van een beheerde Premium-schijf zijn afhankelijk van zowel de SKU als de instantiegrootte van de knooppunten in het AKS-cluster. Zie Prijzen en prestaties van Managed Disks.

    De schijfbron-id wordt weergegeven zodra de opdracht is voltooid, zoals wordt weergegeven in de volgende voorbeelduitvoer. Deze schijf-id wordt gebruikt om de schijf te koppelen in de volgende sectie.

    /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
    

Schijf koppelen als volume

  1. Maak een pv-azuredisk.yaml-bestand met een PersistentVolume. Werk volumeHandle bij met de schijfresource-id uit de vorige stap. Bijvoorbeeld:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: disk.csi.azure.com
      name: pv-azuredisk
    spec:
      capacity:
        storage: 20Gi
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: managed-csi
      csi:
        driver: disk.csi.azure.com
        readOnly: false
        volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
        volumeAttributes:
          fsType: ext4
    
  2. Maak een pvc-azuredisk.yaml-bestand met een PersistentVolumeClaim dat gebruikmaakt van het PersistentVolume. Bijvoorbeeld:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Gebruik de opdrachten kubectl apply om persistentVolume en PersistentVolumeClaim te maken, waarbij wordt verwezen naar de twee YAML-bestanden die u eerder hebt gemaakt:

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Voer de volgende opdracht uit om te controleren of uw PersistentVolumeClaim is gemaakt en afhankelijk is van het PersistentVolume:

    kubectl get pvc pvc-azuredisk
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Maak een bestand azure-disk-pod.yaml om te verwijzen naar uw PersistentVolumeClaim. Bijvoorbeeld:

    apiVersion: v1
    kind: Pod
    metadata:
      name: mypod
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        name: mypod
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
          - name: azure
            mountPath: /mnt/azure
      volumes:
        - name: azure
          persistentVolumeClaim:
            claimName: pvc-azuredisk
    
  6. Voer de opdracht kubectl apply uit om de configuratie toe te passen en het volume te koppelen, waarbij wordt verwezen naar het YAML-configuratiebestand dat u in de vorige stappen hebt gemaakt:

    kubectl apply -f azure-disk-pod.yaml
    

Volgende stappen