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

Een permanent volume vertegenwoordigt een stuk opslag dat is ingericht voor gebruik met Kubernetes-pods. U kunt een permanent volume met een of meer pods gebruiken en u kunt het dynamisch of statisch inrichten. In dit artikel leest u hoe u dynamisch permanente volumes maakt met Azure Disks in een AKS-cluster (Azure Kubernetes Service).

Notitie

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

Dit artikel laat het volgende zien:

  • Werk met een dynamisch permanent volume (PV) door het CSI-stuurprogramma (Container Storage Interface) te installeren en dynamisch een of meer door Azure beheerde schijven te maken die aan een pod moeten worden gekoppeld.
  • Werk met een statische HW door een of meer door Azure beheerde schijven te maken of een bestaande schijf te gebruiken en deze aan een pod te koppelen.

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

Voordat u begint

  • 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. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren.

  • Het Azure Disk CSI-stuurprogramma heeft een volumelimiet per knooppunt. Het aantal volumes verandert 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) maakt gebruik van het opslagklasseobject om een Azure Disk Storage-container dynamisch in te richten.

Parameters van opslagklasse voor dynamische PersistentVolumes

De volgende tabel bevat parameters die u kunt gebruiken om een aangepaste opslagklasse te definiëren voor uw PersistentVolumeClaim.

Naam Betekenis Beschikbare waarde Verplicht Default value
skuName Azure Disks-opslagaccounttype (alias: storageAccountType) Standard_LRS, , Premium_LRSStandardSSD_LRS, PremiumV2_LRS, , UltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS Nee StandardSSD_LRS
fsType Bestandstype ext4, , ext3ext2, xfsvoor btrfs Linux, ntfs voor Windows Nee ext4 voor Linux, ntfs voor Windows
cachingMode Azure Data Disk Host Cache-instelling None, , ReadOnlyReadWrite Nee ReadOnly
resourceGroup De resourcegroep voor de Azure-schijven opgeven Naam van bestaande resourcegroep Nee Als het stuurprogramma leeg is, gebruikt het stuurprogramma dezelfde naam van de resourcegroep als het huidige AKS-cluster
DiskIOPSReadWrite UltraSSD-schijf of Premium SSD v2 IOPS-mogelijkheid (minimaal: 2 IOPS/GiB) 100~160000 Nee 500
DiskMBpsReadWrite UltraSSD-schijf of Premium SSD v2-doorvoermogelijkheid (minimaal: 0,032/GiB) 1~2000 Nee 100
LogicalSectorSize Grootte van logische sector 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 De eigenschap NetworkAccessPolicy om het genereren van de SAS-URI voor een schijf of een momentopname te voorkomen AllowAll, , DenyAllAllowPrivate 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-schijf en wanneer de schijfgrootte 512 GB is > . Ultra- en gedeelde schijf wordt niet ondersteund. Bursting is standaard uitgeschakeld. true, false Nee false
Useragent Gebruikersagent die wordt gebruikt voor het toewijzen 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 schijven 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 door Azure beheerde schijf delen voor ondersteunde waarden. Nee 1
maxMountReplicaCount Het aantal replicabijlagen dat moet worden onderhouden. Deze waarde moet zich in het bereik [0..(maxShares - 1)] Nee Als accessMode dat het is ReadWriteMany, is de standaardwaarde 0. Anders is de standaardwaarde maxShares - 1

Ingebouwde opslagklassen

Opslagklassen 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, twee die zijn geconfigureerd voor gebruik met Azure Disks:

  1. De standaardopslagklasse richt een standaard-SSD Azure Disk in.
    • Standard-SCHIJVEN maken back-ups van Standard-opslag en leveren rendabele opslag, terwijl er nog steeds betrouwbare prestaties worden geleverd.
  2. De klasse managed-csi-Premium Storage richt een Premium Azure Disk in.
    • Ssd-schijven met hoge prestaties en lage latentie back Premium-schijven. 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 verkleinen van een PVC wordt niet ondersteund vanwege het risico op gegevensverlies. 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 van grootte 4 TiB wilt gebruiken, moet u een opslagklasse maken die definieert cachingmode: None omdat schijfcaching niet wordt ondersteund voor schijven 4 TiB en groter. Zie Opslagopties voor toepassingen in AKS voor meer informatie over opslagklassen en het maken van uw eigen opslagklasse.

U kunt de vooraf gemaakte opslagklassen zien met behulp van de kubectl get sc opdracht. In het volgende voorbeeld ziet u de vooraf gemaakte opslagklassen die beschikbaar zijn 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 azure managed disks worden gefactureerd door 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 de SKU en 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) richt automatisch opslag in 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.yaml en kopieer dit in het volgende manifest. De claim vraagt een schijf met de naam azure-managed-disk5 GB aan met ReadWriteOnce-toegang . De beheerde 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 Storage, gebruikt storageClassName: managed-csi-premium u in plaats van managed-csi.

  1. Maak de permanente volumeclaim met behulp van de kubectl apply opdracht en geef het 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

Nadat u de permanente volumeclaim hebt gemaakt, moet u controleren of deze de status Pendingheeft. De Pending status geeft aan dat deze gereed is voor gebruik door een pod.

  1. Controleer de status van het PVC met behulp van de kubectl describe pvc opdracht.

    kubectl describe pvc azure-managed-disk
    

    De uitvoer van de opdracht lijkt op het volgende verkorte voorbeeld:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Maak een bestand met de naam azure-pvc-disk.yaml en kopieer dit in het volgende manifest. Met dit manifest maakt u een eenvoudige NGINX-pod die gebruikmaakt van de permanente volumeclaim met de naam azure-beheerde schijf om de Azure-schijf aan het pad /mnt/azurete koppelen. Geef voor Windows Server-containers een mountPath op met behulp van de Windows-padconventie, zoals 'D:'.

    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
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  3. Maak de pod met behulp van de kubectl apply opdracht.

     kubectl apply -f azure-pvc-disk.yaml
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    pod/mypod created
    
  4. U hebt nu een actieve pod waarop uw Azure-schijf is gekoppeld in de /mnt/azure map. Controleer de podconfiguratie met behulp van de kubectl describe opdracht.

     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 Ultraschijven gebruiken in Azure Kubernetes Service (AKS) als u Azure Ultra Disks wilt gebruiken.

Azure-tags gebruiken

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

Statisch een volume inrichten

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

Statische inrichtingsparameters voor een permanent volume

De volgende tabel bevat parameters die u kunt gebruiken om een permanent volume te definiëren.

Naam Betekenis Beschikbare waarde Verplicht Default value
volumeHandle Azure-schijf-URI /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Ja N.v.t.
volumeAttributes.fsType Bestandstype ext4, , ext3ext2, xfsvoor btrfs Linux, ntfs voor Windows Nee ext4 voor Linux, ntfs voor Windows
volumeAttributes.partition Partitienummer van de bestaande schijf (alleen ondersteund in Linux) 1, , 23 Nee Leeg (geen partitie):
zorg ervoor dat de partitie-indeling er ongeveer als volgt uitziet -part1
volumeAttributes.cachingMode Instelling voor schijfhostcache None, , ReadOnlyReadWrite 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 maakt, moet u de door Azure Kubernetes Service (AKS) beheerde identiteit voor uw cluster de Contributor rol verlenen aan de resourcegroep van de schijf.

  1. Identificeer de naam van de resourcegroep met behulp van de az aks show opdracht en voeg de --query nodeResourceGroup parameter toe.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    De uitvoer van de opdracht lijkt op het volgende voorbeeld:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Maak een schijf met behulp van de az disk create opdracht. Geef de naam van de knooppuntresourcegroep en een naam op 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 door 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 schijfresource-id wordt weergegeven zodra de opdracht is voltooid, zoals wordt weergegeven in de volgende voorbeelduitvoer. U gebruikt de schijf-id om de schijf in de volgende sectie te koppelen.

    /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 resource-id van de schijf uit de vorige stap. Geef voor Windows Server-containers ntfs op voor de parameter fsType.

    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
        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 die gebruikmaakt van het PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Maak het PersistentVolume en PersistentVolumeClaim met behulp van de kubectl apply opdracht en verwijs naar de twee YAML-bestanden die u hebt gemaakt.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Controleer of uw PersistentVolumeClaim is gemaakt en gebonden aan het PersistentVolume met behulp van de kubectl get pvc opdracht.

    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 azure-disk-pod.yaml-bestand om te verwijzen naar uw PersistentVolumeClaim. Geef voor Windows Server-containers een mountPath op met behulp van de Windows-padconventie, zoals 'D:'.

    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. Pas de configuratie toe en koppel het volume met behulp van de kubectl apply opdracht.

    kubectl apply -f azure-disk-pod.yaml
    

Resources opschonen

Wanneer u klaar bent met de resources die in dit artikel zijn gemaakt, kunt u ze verwijderen met behulp van de kubectl delete opdracht.

# Remove the pod
kubectl delete -f azure-pvc-disk.yaml

# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml

Volgende stappen