Skapa och använd en beständig volym dynamiskt med Azure Disks i Azure Kubernetes Service (AKS)

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

Anteckning

Azure-diskar kan bara monteras med accesslägestypenReadWriteOnce, vilket gör den tillgänglig för en nod i AKS. Om du behöver dela en beständig volym över flera noder använder du Azure Files.

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

Innan du börjar

Den här artikeln förutsätter att du har ett befintligt AKS-kluster med version 1.21 eller senare. Om du behöver ett AKS-kluster kan du läsa AKS-snabbstarten med Hjälp av Azure CLImed hjälp av Azure PowerShell eller med hjälp av Azure Portal.

Du behöver också Installera och konfigurera Azure CLI version 2.0.59 eller senare. Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Inbyggda lagringsklasser

En lagringsklass används för att definiera hur en lagringsenhet skapas dynamiskt med en beständig volym. Mer information om Kubernetes-lagringsklasser finns i Kubernetes Storage-klasser.

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

  • Standardlagringsklassen etablerar en Standard SSD Azure Disk.
    • Standardlagring backas upp av Standard SSD och ger kostnadseffektiv lagring samtidigt som den ger tillförlitlig prestanda.
  • Lagringsklassen managed-csi-premium etablerar en Premium Azure Disk.
    • Premiumdiskar backas upp av SSD-baserade diskar med höga prestanda och låg latens. Passar perfekt för virtuella datorer som kör produktionsarbetsbelastningar. Om AKS-noderna i klustret använder Premium Storage väljer du klassen managed-premium .

Om du använder någon av standardlagringsklasserna kan du inte uppdatera volymstorleken när lagringsklassen har skapats. Om du vill kunna uppdatera volymstorleken när en lagringsklass har skapats lägger du till raden allowVolumeExpansion: true i någon av standardlagringsklasserna eller så kan du skapa en egen anpassad lagringsklass. Det stöds inte för att minska storleken på en PVC (för att förhindra dataförlust). Du kan redigera en befintlig lagringsklass med hjälp kubectl edit sc av kommandot .

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 din egen lagringsklass finns i Lagringsalternativ för program i AKS.

Använd kommandot kubectl get sc för att se de förskapade lagringsklasserna. 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

Anteckning

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ändigt volymanspråk (PVC) används för att automatiskt etablera 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.

Skapa en fil med namnet azure-pvc.yamloch kopiera i följande manifest. Anspråket begär en disk med namnet azure-managed-disk5 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

Tips

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

Skapa det beständiga volymanspråket med kommandot kubectl apply 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 det beständiga volymanspråket har skapats och disken har etablerats kan en podd skapas med åtkomst till disken. Följande manifest skapar en grundläggande NGINX-podd som använder det beständiga volymanspråket 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:".

Skapa en fil med namnet azure-pvc-disk.yamloch kopiera i följande 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

Skapa podden med kommandot kubectl apply enligt följande exempel:

kubectl apply -f azure-pvc-disk.yaml

pod/mypod created

Nu har du en podd som körs med azure-disken /mnt/azure monterad i katalogen. Den här konfigurationen visas när du inspekterar din podd via kubectl describe pod mypod, som du ser i följande komprimerade exempel:

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ända Ultra Disks

Om du vill använda ultradisk läser du Använda Ultra Disks på Azure Kubernetes Service (AKS).

Säkerhetskopiera en beständig volym

Om du vill säkerhetskopiera data i en beständig volym tar du en ögonblicksbild av den hanterade disken för volymen. Sedan kan du använda ögonblicksbilden för att skapa en återställd disk och ansluta till poddar för att återställa data.

Hämta först volymnamnet med kubectl get pvc kommandot, till exempel för PVC med namnet azure-managed-disk:

$ kubectl get pvc azure-managed-disk

NAME                 STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
azure-managed-disk   Bound     pvc-faf0f176-8b8d-11e8-923b-deb28c58d242   5Gi        RWO            managed-premium   3m

Det här volymnamnet utgör det underliggande Azure Disk-namnet. Fråga efter disk-ID:t med az disk list och ange ditt PVC-volymnamn, som du ser i följande exempel:

az disk list --query '[].id | [?contains(@,`pvc-faf0f176-8b8d-11e8-923b-deb28c58d242`)]' -o tsv

/subscriptions/<guid>/resourceGroups/MC_MYRESOURCEGROUP_MYAKSCLUSTER_EASTUS/providers/MicrosoftCompute/disks/kubernetes-dynamic-pvc-faf0f176-8b8d-11e8-923b-deb28c58d242

Använd disk-ID:t för att skapa en ögonblicksbilddisk med az snapshot create. I följande exempel skapas en ögonblicksbild med namnet pvcSnapshot i samma resursgrupp som AKS-klustret (MC_myResourceGroup_myAKSCluster_eastus). Du kan stöta på behörighetsproblem om du skapar ögonblicksbilder och återställer diskar i resursgrupper som AKS-klustret inte har åtkomst till.

az snapshot create \
    --resource-group MC_myResourceGroup_myAKSCluster_eastus \
    --name pvcSnapshot \
    --source /subscriptions/<guid>/resourceGroups/MC_myResourceGroup_myAKSCluster_eastus/providers/MicrosoftCompute/disks/kubernetes-dynamic-pvc-faf0f176-8b8d-11e8-923b-deb28c58d242

Beroende på mängden data på disken kan det ta några minuter att skapa ögonblicksbilden.

Återställa och använda en ögonblicksbild

Om du vill återställa disken och använda den med en Kubernetes-podd använder du ögonblicksbilden som källa när du skapar en disk med az disk create. Den här åtgärden bevarar den ursprungliga resursen om du behöver komma åt den ursprungliga ögonblicksbilden senare. I följande exempel skapas en disk med namnet pvcRestored från ögonblicksbilden med namnet pvcSnapshot:

az disk create --resource-group MC_myResourceGroup_myAKSCluster_eastus --name pvcRestored --source pvcSnapshot

Om du vill använda den återställde disken med en podd anger du diskens ID i manifestet. Hämta disk-ID:t med kommandot az disk show . I följande exempel hämtas disk-ID:t för pvcRestored som skapades i föregående steg:

az disk show --resource-group MC_myResourceGroup_myAKSCluster_eastus --name pvcRestored --query id -o tsv

Skapa ett poddmanifest med namnet azure-restored.yaml och ange den disk-URI som hämtades i föregående steg. I följande exempel skapas en grundläggande NGINX-webbserver med den återställde disken monterad som en volym på /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: mypodrestored
spec:
  containers:
  - name: mypodrestored
    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
      azureDisk:
        kind: Managed
        diskName: pvcRestored
        diskURI: /subscriptions/<guid>/resourceGroups/MC_myResourceGroupAKS_myAKSCluster_eastus/providers/Microsoft.Compute/disks/pvcRestored

Skapa podden med kommandot kubectl apply enligt följande exempel:

$ kubectl apply -f azure-restored.yaml

Kommandots utdata liknar följande exempel:

pod/mypodrestored created

Du kan använda kubectl describe pod mypodrestored för att visa information om podden, till exempel följande komprimerade exempel som visar volyminformationen:

kubectl describe pod mypodrestored

Kommandots utdata liknar följande exempel:

[...]
Volumes:
  volume:
    Type:         AzureDisk (an Azure Data Disk mount on the host and bind mount to the pod)
    DiskName:     pvcRestored
    DiskURI:      /subscriptions/19da35d3-9a1a-4f3b-9b9c-3c56ef409565/resourceGroups/MC_myResourceGroupAKS_myAKSCluster_eastus/providers/Microsoft.Compute/disks/pvcRestored
    Kind:         Managed
    FSType:       ext4
    CachingMode:  ReadWrite
    ReadOnly:     false
[...]

Använda Azure-taggar

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

Nästa steg

Rekommenderade metoder finns i Metodtips för lagring och säkerhetskopiering i AKS.

Läs mer om Kubernetes-beständiga volymer med Hjälp av Azure Disks.