Skapa och använd en volym manuellt med Azure-diskar i AKS (Azure Kubernetes Service)

En beständiga volym representerar en lagringsdel som har etablerats för användning med Kubernetes-poddar. Du kan använda en beständig volym med en eller flera poddar och du kan etablera den dynamiskt eller statiskt. Den här artikeln visar hur du dynamiskt skapar beständiga volymer med Azure Disks i ett AKS-kluster (Azure Kubernetes Service).

Kommentar

En Azure-disk kan bara monteras med accesslägestypenReadWriteOnce, vilket gör den tillgänglig för en nod i AKS. Det här åtkomstläget tillåter fortfarande flera poddar att komma åt volymen när poddarna körs på samma nod. Mer information finns i Kubernetes PersistentVolume-åtkomstlägen.

Den här artikeln visar hur du gör följande:

  • Arbeta med en dynamisk beständig volym (PV) genom att installera CSI-drivrutinen (Container Storage Interface) och dynamiskt skapa en eller flera Azure-hanterade diskar som ska anslutas till en podd.
  • Arbeta med en statisk PV genom att skapa en eller flera Azure-hanterade diskar eller använda en befintlig och koppla den till en podd.

Mer information om Kubernetes-volymer finns i Lagringsalternativ för program i AKS.

Innan du börjar

  • Kontrollera att Azure CLI version 2.0.59 eller senare har installerats och konfigurerats. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

  • Azure Disk CSI-drivrutinen har en volymgräns per nod. Antalet volymer ändras baserat på storleken på nod-/nodpoolen. Kör kommandot kubectl get för att fastställa antalet volymer som kan allokeras per nod:

    kubectl get CSINode <nodename> -o yaml
    

Etablera en volym dynamiskt

Det här avsnittet innehåller vägledning för klusteradministratörer som vill etablera en eller flera beständiga volymer som innehåller information om Azure Disk Storage för användning av en arbetsbelastning. Ett beständiga volymanspråk (PVC) använder lagringsklassobjektet för att dynamiskt etablera en Azure Disk Storage-container.

Lagringsklassparametrar för dynamiska PersistentVolumes

Följande tabell innehåller parametrar som du kan använda för att definiera en anpassad lagringsklass för din PersistentVolumeClaim.

Name Innebörd Tillgängligt värde Obligatorisk Default value
skuName Azure Disks-lagringskontotyp (alias: storageAccountType) Standard_LRS, Premium_LRS, StandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , , Premium_ZRSStandardSSD_ZRS Nej StandardSSD_LRS
fsType Filsystemtyp ext4, ext3, ext2, xfs, btrfs för Linux, ntfs för Windows Nej ext4 för Linux, ntfs för Windows
cachingMode Cacheinställning för Azure Data Disk-värd None, , ReadOnlyReadWrite Nej ReadOnly
resourceGroup Ange resursgruppen för Azure Disks Befintligt resursgruppsnamn Nej Om det är tomt använder drivrutinen samma resursgruppnamn som det aktuella AKS-klustret
DiskIOPSReadWrite UltraSSD-disk eller Premium SSD v2 IOPS-kapacitet (minst: 2 IOPS/GiB) 100~160000 Nej 500
DiskMBpsReadWrite UltraSSD-disk eller Premium SSD v2-dataflödeskapacitet (minst: 0,032/GiB) 1~2000 Nej 100
LogicalSectorSize Logisk sektorstorlek i byte för ultradisk. Värden som stöds är 512 ad 4096. 4096 är standardvärdet. 512, 4096 Nej 4096
taggar Azure Disk-taggar Taggformat: key1=val1,key2=val2 Nej ""
diskEncryptionSetID ResourceId för diskkrypteringsuppsättningen som ska användas för att aktivera kryptering i vila Format: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} Nej ""
diskEncryptionType Krypteringstypen för diskkrypteringsuppsättningen. EncryptionAtRestWithCustomerKey(som standard) EncryptionAtRestWithPlatformAndCustomerKeys Nej ""
writeAcceleratorEnabled Skriva accelerator på Azure-diskar true, false Nej ""
networkAccessPolicy NetworkAccessPolicy-egenskapen för att förhindra generering av SAS-URI:n för en disk eller en ögonblicksbild AllowAll, , DenyAllAllowPrivate Nej AllowAll
diskAccessID Azure-resurs-ID för DiskAccess-resursen för att använda privata slutpunkter på diskar Nej ``
enableBursting Aktivera burst-prestanda på begäran utöver diskens etablerade prestandamål. Bursting på begäran bör endast tillämpas på Premium-disken och när diskstorleken > är 512 GB. Ultra- och delad disk stöds inte. Bursting är inaktiverat som standard. true, false Nej false
Useragent Användaragent som används för kundanvändningsatribution Nej Genererad useragent formaterad driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Ange Azure-prenumerations-ID där Azure Disks skapas. Azure-prenumerations-ID Nej Om den inte är tom resourceGroup måste den anges.
--- Följande parametrar är endast för v2 --- --- ---
maxShares Det totala antalet delade diskmonteringar som tillåts för disken. Om värdet anges till 2 eller fler aktiveras repliker för bifogade filer. Värden som stöds beror på diskstorleken. Mer information om värden som stöds finns i Dela en Hanterad Azure-disk . Nej 1
maxMountReplicaCount Antalet repliker som ska underhållas. Det här värdet måste ligga i intervallet [0..(maxShares - 1)] Nej Om accessMode är ReadWriteManyär är 0standardvärdet . Annars är standardvärdet maxShares - 1

Inbyggda lagringsklasser

Lagringsklasser definierar hur en lagringsenhet skapas dynamiskt med en beständig volym. Mer information om Kubernetes-lagringsklasser finns i Kubernetes-lagringsklasser.

Varje AKS-kluster innehåller fyra förskapade lagringsklasser, varav två har konfigurerats för att fungera med Azure Disks:

  1. Standardlagringsklassen etablerar en Standard SSD Azure Disk.
    • Standard SSD backar standardlagringen och levererar kostnadseffektiv lagring samtidigt som den ger tillförlitliga prestanda.
  2. Lagringsklassen managed-csi-premium etablerar en Premium Azure Disk.
    • SSD-baserade premiumdiskar med höga prestanda och låg latens. De är idealiska för virtuella datorer som kör produktionsarbetsbelastningar. När du använder Azure Disk CSI-drivrutinen på AKS kan du också använda lagringsklassen managed-csi , som backas upp av Lokalt redundant standard SSD-lagring (LRS).

Att minska storleken på en PVC stöds inte på grund av risken för dataförlust. Du kan redigera en befintlig lagringsklass med kommandot kubectl edit sc eller skapa en egen anpassad lagringsklass. Om du till exempel vill använda en disk med storlek 4 TiB måste du skapa en lagringsklass som definierar cachingmode: None eftersom diskcachelagring inte stöds för diskar 4 TiB och större. Mer information om lagringsklasser och hur du skapar en egen lagringsklass finns i Lagringsalternativ för program i AKS.

Du kan se de förskapade lagringsklasserna med kommandot kubectl get sc . I följande exempel visas de förskapade lagringsklasserna som är tillgängliga i ett AKS-kluster:

kubectl get sc

Kommandots utdata liknar följande exempel:

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

Kommentar

Beständiga volymanspråk anges i GiB, men Azure-hanterade diskar debiteras av SKU för en viss storlek. Dessa SKU:er sträcker sig från 32GiB för S4- eller P4-diskar till 32TiB för S80- eller P80-diskar (i förhandsversion). Dataflödet och IOPS-prestandan för en Premium-hanterad disk beror på både SKU:n och instansstorleken för noderna i AKS-klustret. Mer information finns i Priser och prestanda för hanterade diskar.

Skapa ett beständigt volymanspråk

Ett beständiga volymanspråk (PVC) etablerar automatiskt lagring baserat på en lagringsklass. I det här fallet kan en PVC använda en av de förskapade lagringsklasserna för att skapa en Standard- eller Premium Azure-hanterad disk.

  1. Skapa en fil med namnet azure-pvc.yaml och kopiera i följande manifest. Anspråket begär en disk med namnet azure-managed-disk 5 GB i storlek med ReadWriteOnce-åtkomst. Lagringsklassen managed-csi anges som lagringsklass.

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

Dricks

Om du vill skapa en disk som använder premiumlagring använder du storageClassName: managed-csi-premium i stället för managed-csi.

  1. Skapa det beständiga volymanspråket kubectl apply med kommandot och ange filen azure-pvc.yaml .

    kubectl apply -f azure-pvc.yaml
    

    Kommandots utdata liknar följande exempel:

    persistentvolumeclaim/azure-managed-disk created
    

Använd den beständiga volymen

När du har skapat det beständiga volymanspråket måste du kontrollera att det har statusen Pending. Statusen Pending anger att den är redo att användas av en podd.

  1. Kontrollera statusen för PVC med hjälp av kubectl describe pvc kommandot .

    kubectl describe pvc azure-managed-disk
    

    Kommandots utdata liknar följande komprimerade exempel:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Skapa en fil med namnet azure-pvc-disk.yaml och kopiera i följande manifest. Det här manifestet skapar en grundläggande NGINX-podd som använder det beständiga volymanspråket med namnet azure-managed-disk för att montera Azure Disk på sökvägen /mnt/azure. För Windows Server-containrar anger du en mountPath med hjälp av Windows-sökvägskonventionen, till exempel "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. Skapa podden med kommandot kubectl apply .

     kubectl apply -f azure-pvc-disk.yaml
    

    Kommandots utdata liknar följande exempel:

    pod/mypod created
    
  4. Nu har du en podd som körs med din Azure Disk monterad i /mnt/azure katalogen. Kontrollera poddkonfigurationen kubectl describe med kommandot .

     kubectl describe pod mypod
    

    Kommandots utdata liknar följande exempel:

    [...]
    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"
    [...]
    

Använd ultradiskar i Azure

Information om hur du använder Azure Ultra Disk finns i Använda ultradiskar på Azure Kubernetes Service (AKS).

Använda Azure-taggar

Mer information om hur du använder Azure-taggar finns i Använda Azure-taggar i Azure Kubernetes Service (AKS).

Statiskt etablera en volym

Det här avsnittet innehåller vägledning för klusteradministratörer som vill skapa en eller flera beständiga volymer som innehåller information om Azure Disks för användning av en arbetsbelastning.

Statiska etableringsparametrar för en beständig volym

Följande tabell innehåller parametrar som du kan använda för att definiera en beständig volym.

Name Innebörd Tillgängligt värde Obligatorisk Default value
volumeHandle Azure-disk-URI /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Ja Ej tillämpligt
volumeAttributes.fsType Filsystemtyp ext4, ext3, ext2, xfs, btrfs för Linux, ntfs för Windows Nej ext4 för Linux, ntfs för Windows
volumeAttributes.partition Partitionsnummer för den befintliga disken (stöds endast i Linux) 1, , 23 Nej Tom (ingen partition)
– Kontrollera att partitionsformatet är som -part1
volumeAttributes.cachingMode Cacheinställning för diskvärd None, , ReadOnlyReadWrite Nej ReadOnly

Skapa en Azure-disk

När du skapar en Azure-disk för användning med AKS kan du skapa diskresursen i nodresursgruppen . Med den här metoden kan AKS-klustret komma åt och hantera diskresursen. Om du i stället skapar disken i en separat resursgrupp måste du bevilja den hanterade identiteten Azure Kubernetes Service (AKS) för klustret Contributor rollen till diskens resursgrupp.

  1. Identifiera resursgruppens namn med kommandot az aks show och lägg till parametern --query nodeResourceGroup .

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

    Kommandots utdata liknar följande exempel:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Skapa en disk med kommandot az disk create . Ange nodresursgruppens namn och ett namn för diskresursen, till exempel myAKSDisk. I följande exempel skapas en 20GiB-disk och utdata för diskens ID när den har skapats. Om du behöver skapa en disk för användning med Windows Server-containrar lägger du till parametern --os-type windows för att formatera disken korrekt.

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

    Kommentar

    Azure-diskar debiteras av SKU för en viss storlek. Dessa SKU:er sträcker sig från 32GiB för S4- eller P4-diskar till 32TiB för S80- eller P80-diskar (i förhandsversion). Dataflödet och IOPS-prestandan för en Premium-hanterad disk beror på både SKU:n och instansstorleken för noderna i AKS-klustret. Se Priser och prestanda för hanterade diskar.

    Diskresurs-ID:t visas när kommandot har slutförts, enligt följande exempelutdata. Du använder disk-ID:t för att montera disken i nästa avsnitt.

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

Montera disken som en volym

  1. Skapa en pv-azuredisk.yaml-fil med en PersistentVolume. Uppdatera volumeHandle med diskresurs-ID från föregående steg. För Windows Server-containrar anger du ntfs för parametern 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. Skapa en pvc-azuredisk.yaml-fil med en PersistentVolumeClaim som använder PersistentVolume.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-azuredisk
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 20Gi
      volumeName: pv-azuredisk
      storageClassName: managed-csi
    
  3. Skapa PersistentVolume och PersistentVolumeClaim med kommandot kubectl apply och referera till de två YAML-filer som du skapade.

    kubectl apply -f pv-azuredisk.yaml
    kubectl apply -f pvc-azuredisk.yaml
    
  4. Kontrollera att PersistentVolumeClaim har skapats och bundits till PersistentVolume med hjälp av kubectl get pvc kommandot .

    kubectl get pvc pvc-azuredisk
    

    Kommandots utdata liknar följande exempel:

    NAME            STATUS   VOLUME         CAPACITY    ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pv-azuredisk   20Gi        RWO                           5s
    
  5. Skapa en azure-disk-pod.yaml-fil för att referera till din PersistentVolumeClaim. För Windows Server-containrar anger du en mountPath med hjälp av Windows-sökvägskonventionen, till exempel "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. Använd konfigurationen och montera volymen med kommandot kubectl apply .

    kubectl apply -f azure-disk-pod.yaml
    

Rensa resurser

När du är klar med resurserna som skapas i den här artikeln kan du ta bort dem med hjälp av kubectl delete kommandot .

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

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

Nästa steg