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

En beständig volym representerar en lagringsplats 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-diskar för användning av en enskild podd i ett Azure Kubernetes Service-kluster (AKS).

Anteckning

En Azure-disk kan bara monteras med åtkomstlägestypen ReadWriteOnce, 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. Om du behöver ett AKS-kluster kan du gå till AKS-snabbstarten med Hjälp av Azure CLI eller använda Azure Portal.

Du måste också ha installerat och konfigurerat 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-lagringsklasser.

Varje AKS-kluster innehåller fyra förskapade lagringsklasser, två av dem konfigurerade för att fungera med Azure-diskar:

  • Standardlagringsklassen tillhandahåller en Standard SSD Azure-disk.
    • Standard Storage backas upp av Standard-STANDARD-STANDARD OCH levererar kostnadseffektiv lagring samtidigt som du levererar tillförlitliga prestanda.
  • Managed-Premium Storage-klassen tillhandahåller 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 en 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 i någon av standardlagringsklasserna, eller så kan du skapa en allowVolumeExpansion: true egen anpassad lagringsklass. Observera att det inte stöds för att minska storleken på en PV (för att förhindra dataförlust). Du kan redigera en befintlig lagringsklass med hjälp av kubectl edit sc kommandot .

Om du till exempel vill använda en disk med storleken 4 TiB måste du skapa en lagringsklass som definierar eftersom diskcachelagring inte stöds för cachingmode: None diskar 4 TiBoch större .

Mer information om lagringsklasser och hur du skapar en 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 lagringsklasser som är tillgängliga i ett AKS-kluster i förväg:

$ kubectl get sc

NAME                PROVISIONER                AGE
default (default)   kubernetes.io/azure-disk   1h
managed-premium     kubernetes.io/azure-disk   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 Prissättning och prestanda för Managed Disks.

Skapa ett beständigt volymanspråk

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

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

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

Tips

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

Skapa det beständiga volymanspråk med kommandot kubectl apply och ange filen azure-premium.yaml:

$ kubectl apply -f azure-premium.yaml

persistentvolumeclaim/azure-managed-disk created

Använda 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åk som heter azure-managed-disk för att montera Azure-disken på sökvägen /mnt/azure . För Windows Server-containrar anger du en mountPath med hjälp av Windows sökvägskonvention, till exempel "D:".

Skapa en fil med azure-pvc-disk.yaml namnet och kopiera 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, som du ser i följande exempel:

$ kubectl apply -f azure-pvc-disk.yaml

pod/mypod created

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

$ kubectl describe pod mypod

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

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

Backa upp en beständig volym

Om du vill säkerhetskopiera data i den beständiga volymen tar du en ögonblicksbild av den hanterade disken för volymen. Du kan sedan använda den här ögonblicksbilden för att skapa en återställd disk och ansluta till poddar som ett sätt att återställa data.

Först hämtar du volymnamnet med kommandot kubectl get pvc , till exempel för PV 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-disknamnet. Fråga efter disk-ID:t med az disk list och ange ditt PV-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 ögonblicksbildsdisk med az snapshot create. I följande exempel skapas en ögonblicksbild med namnet pvSnapshot 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 sedan behöver komma åt den ursprungliga ögonblicksbilden av data. I följande exempel skapas en disk med namnet pvRestored från ögonblicksbilden med namnet pvSnapshot:

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

Om du vill använda den återställda 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ämtar disk-ID:t för pvRestored 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 azure-restored.yaml med namnet och ange den disk-URI som du fick i föregående steg. I följande exempel skapas en grundläggande NGINX-webbserver med den återställda 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, som du ser i följande exempel:

$ kubectl apply -f azure-restored.yaml

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

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

Nästa steg

Tillhörande metodtips finns i Metodtips för lagring och säkerhetskopieringar i AKS.

Läs mer om Beständiga Kubernetes-volymer med Hjälp av Azure-diskar.