Skapa och använda en permanent volym med Azure-diskar i Azure Kubernetes service (AKS) dynamisktDynamically create and use a persistent volume with Azure disks in Azure Kubernetes Service (AKS)

En beständig volym representerar en lagrings enhet som har etablerats för användning med Kubernetes poddar.A persistent volume represents a piece of storage that has been provisioned for use with Kubernetes pods. En permanent volym kan användas av en eller flera poddar och kan vara dynamiskt eller statiskt etablerad.A persistent volume can be used by one or many pods, and can be dynamically or statically provisioned. Den här artikeln visar hur du dynamiskt skapar permanenta volymer med Azure disks för användning av en enda Pod i ett Azure Kubernetes service-kluster (AKS).This article shows you how to dynamically create persistent volumes with Azure disks for use by a single pod in an Azure Kubernetes Service (AKS) cluster.

Anteckning

Det går bara att montera en Azure-disk med åtkomst läges typen ReadWriteOnce, vilket gör den tillgänglig för en nod i AKS.An Azure disk can only be mounted with Access mode type ReadWriteOnce, which makes it available to one node in AKS. Om du behöver dela en permanent volym över flera noder använder du Azure Files.If you need to share a persistent volume across multiple nodes, use Azure Files.

Mer information om Kubernetes-volymer finns i lagrings alternativ för program i AKS.For more information on Kubernetes volumes, see Storage options for applications in AKS.

Innan du börjarBefore you begin

Den här artikeln förutsätter att du har ett befintligt AKS-kluster.This article assumes that you have an existing AKS cluster. Om du behöver ett AKS-kluster kan du läsa snabb starten för AKS med hjälp av Azure CLI eller Azure Portal.If you need an AKS cluster, see the AKS quickstart using the Azure CLI or using the Azure portal.

Du måste också ha Azure CLI-versionen 2.0.59 eller senare installerad och konfigurerad.You also need the Azure CLI version 2.0.59 or later installed and configured. Kör  az --version för att hitta versionen.Run az --version to find the version. Om du behöver installera eller uppgradera kan du läsa  Installera Azure CLI 2.0.If you need to install or upgrade, see Install Azure CLI.

Inbyggda lagrings klasserBuilt-in storage classes

En lagrings klass används för att definiera hur en lagrings enhet dynamiskt skapas med en permanent volym.A storage class is used to define how a unit of storage is dynamically created with a persistent volume. Mer information om Kubernetes lagrings klasser finns i Kubernetes Storage-klasser.For more information on Kubernetes storage classes, see Kubernetes Storage Classes.

Varje AKS-kluster innehåller fyra i förväg skapade lagrings klasser, två av dem som är konfigurerade för att fungera med Azure-diskar:Each AKS cluster includes four pre-created storage classes, two of them configured to work with Azure disks:

  • Standard lagrings klassen tillhandahåller en standard SSD Azure-disk.The default storage class provisions a standard SSD Azure disk.
    • Standard lagring backas upp av standard SSD och levererar kostnads effektiv lagring samtidigt som du ändå levererar tillförlitlig prestanda.Standard storage is backed by Standard SSDs and delivers cost-effective storage while still delivering reliable performance.
  • Den hanterade Premium Storage- klassen tillhandahåller en Premium Azure-disk.The managed-premium storage class provisions a premium Azure disk.
    • Premiumdiskar backas upp av SSD-baserade diskar med höga prestanda och låg latens.Premium disks are backed by SSD-based high-performance, low-latency disk. Passar perfekt för virtuella datorer som kör produktionsarbetsbelastningar.Perfect for VMs running production workload. Om AKS-noderna i klustret använder Premium Storage väljer du den hanterade-Premium- klassen.If the AKS nodes in your cluster use premium storage, select the managed-premium class.

Om du använder en av standard lagrings klasserna kan du inte uppdatera volym storleken när lagrings klassen har skapats.If you use one of the default storage classes, you can't update the volume size after the storage class is created. Om du vill kunna uppdatera volym storleken när en lagrings klass har skapats lägger du till den allowVolumeExpansion: true i en av standard lagrings klasserna, eller så kan du skapa en egen anpassad lagrings klass.To be able to update the volume size after a storage class is created, add the line allowVolumeExpansion: true to one of the default storage classes, or you can create you own custom storage class. Observera att det inte finns stöd för att minska storleken på en PVC (för att förhindra data förlust).Note that it's not supported to reduce the size of a PVC (to prevent data loss). Du kan redigera en befintlig lagrings klass med hjälp av kubectl edit sc kommandot.You can edit an existing storage class by using the kubectl edit sc command.

Om du till exempel vill använda en disk med storlek 4 TiB måste du skapa en lagrings klass som definierar cachingmode: None eftersom diskcachelagring inte stöds för disk 4 TIB och större.For example, if you want to use a disk of size 4 TiB, you must create a storage class that defines cachingmode: None because disk caching isn't supported for disks 4 TiB and larger.

Mer information om lagrings klasser och hur du skapar en egen lagrings klass finns i lagrings alternativ för program i AKS.For more information about storage classes and creating your own storage class, see Storage options for applications in AKS.

Använd kommandot kubectl get SC för att se de i förväg skapade lagrings klasserna.Use the kubectl get sc command to see the pre-created storage classes. I följande exempel visas de för hands skapa lagrings klasser som är tillgängliga i ett AKS-kluster:The following example shows the pre-create storage classes available within an AKS cluster:

$ kubectl get sc

NAME                PROVISIONER                AGE
default (default)   kubernetes.io/azure-disk   1h
managed-premium     kubernetes.io/azure-disk   1h

Anteckning

Beständiga volym anspråk anges i GiB, men Azure Managed disks debiteras per SKU för en viss storlek.Persistent volume claims are specified in GiB but Azure managed disks are billed by SKU for a specific size. Dessa SKU: er sträcker sig från 32GiB för S4-eller P4-diskar till 32TiB för S80-eller P80-diskar (för hands version).These SKUs range from 32GiB for S4 or P4 disks to 32TiB for S80 or P80 disks (in preview). Genomflödet och IOPS-prestanda för en Premium-hanterad disk beror på både SKU: n och instans storleken för noderna i AKS-klustret.The throughput and IOPS performance of a Premium managed disk depends on the both the SKU and the instance size of the nodes in the AKS cluster. Mer information finns i pris-och prestanda för Managed disks.For more information, see Pricing and Performance of Managed Disks.

Skapa ett beständigt volym anspråkCreate a persistent volume claim

Ett permanent volym anspråk (PVC) används för att automatiskt etablera lagring baserat på en lagrings klass.A persistent volume claim (PVC) is used to automatically provision storage based on a storage class. I det här fallet kan en PVC använda en av de i förväg skapade lagrings klasserna för att skapa en standard-eller Premium Azure-hanterad disk.In this case, a PVC can use one of the pre-created storage classes to create a standard or premium Azure managed disk.

Skapa en fil med namnet azure-premium.yaml och kopiera i följande manifest.Create a file named azure-premium.yaml, and copy in the following manifest. Anspråket begär en disk med namnet azure-managed-disk 5 GB som är i storlek med ReadWriteOnce -åtkomst.The claim requests a disk named azure-managed-disk that is 5GB in size with ReadWriteOnce access. Lagrings klassen för Managed Premium har angetts som lagrings klass.The managed-premium storage class is specified as the storage class.

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

Tips

Använd storageClassName: default i stället för hanterad Premiumom du vill skapa en disk som använder standard lagring.To create a disk that uses standard storage, use storageClassName: default rather than managed-premium.

Skapa ett beständigt volym anspråk med kommandot kubectl Apply och ange din Azure-Premium. yaml -fil:Create the persistent volume claim with the kubectl apply command and specify your azure-premium.yaml file:

$ kubectl apply -f azure-premium.yaml

persistentvolumeclaim/azure-managed-disk created

Använd beständig volymUse the persistent volume

När beständiga volym anspråk har skapats och disken har etablerats kan du skapa en POD med åtkomst till disken.Once the persistent volume claim has been created and the disk successfully provisioned, a pod can be created with access to the disk. Följande manifest skapar en grundläggande NGINX-Pod som använder det beständiga volym anspråket med namnet Azure-hanterad disk för att montera Azure-disken på sökvägen /mnt/azure .The following manifest creates a basic NGINX pod that uses the persistent volume claim named azure-managed-disk to mount the Azure disk at the path /mnt/azure. För Windows Server-behållare anger du en mountPath med hjälp av Windows Sök vägs konvention, till exempel ":".For Windows Server containers, specify a mountPath using the Windows path convention, such as 'D:'.

Skapa en fil med namnet azure-pvc-disk.yaml och kopiera i följande manifest.Create a file named azure-pvc-disk.yaml, and copy in the following manifest.

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: nginx:1.15.5
    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 Pod med kommandot kubectl Apply , som du ser i följande exempel:Create the pod with the kubectl apply command, as shown in the following example:

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

pod/mypod created

Nu har du en igång-Pod med Azure-disken monterad i /mnt/azure katalogen.You now have a running pod with your Azure disk mounted in the /mnt/azure directory. Den här konfigurationen kan ses när du inspekterar din POD via kubectl describe pod mypod , som du ser i följande komprimerade exempel:This configuration can be seen when inspecting your pod via kubectl describe pod mypod, as shown in the following condensed example:

$ 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änd Ultra disksUse Ultra Disks

Om du vill använda Ultra disk ser du Använd Ultra disks på Azure Kubernetes service (AKS).To leverage ultra disk see Use Ultra Disks on Azure Kubernetes Service (AKS).

Säkerhetskopiera en beständig volymBack up a persistent volume

Ta en ögonblicks bild av den hanterade disken för volymen om du vill säkerhetskopiera data i den beständiga volymen.To back up the data in your persistent volume, take a snapshot of the managed disk for the volume. Du kan sedan använda den här ögonblicks bilden för att skapa en återställd disk och ansluta till poddar som ett sätt att återställa data.You can then use this snapshot to create a restored disk and attach to pods as a means of restoring the data.

Börja med att hämta volym namnet med kubectl get pvc kommandot, till exempel för den PVC som heter Azure-Managed-disk:First, get the volume name with the kubectl get pvc command, such as for the PVC named 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 volym namnet utgör det underliggande namnet för Azure-disken.This volume name forms the underlying Azure disk name. Fråga efter disk-ID med AZ disk List och ange PVC-volymens namn, som du ser i följande exempel:Query for the disk ID with az disk list and provide your PVC volume name, as shown in the following example:

$ 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 för att skapa en ögonblicks bild disk med AZ Snapshot Create.Use the disk ID to create a snapshot disk with az snapshot create. I följande exempel skapas en ögonblicks bild med namnet pvcSnapshot i samma resurs grupp som AKS-klustret (MC_myResourceGroup_myAKSCluster_eastus).The following example creates a snapshot named pvcSnapshot in the same resource group as the AKS cluster (MC_myResourceGroup_myAKSCluster_eastus). Du kan stöta på behörighets problem om du skapar ögonblicks bilder och återställer diskar i resurs grupper som AKS-klustret inte har åtkomst till.You may encounter permission issues if you create snapshots and restore disks in resource groups that the AKS cluster does not have access to.

$ 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 ögonblicks bilden.Depending on the amount of data on your disk, it may take a few minutes to create the snapshot.

Återställa och använda en ögonblicks bildRestore and use a snapshot

Du återställer disken och använder den med en Kubernetes-Pod genom att använda ögonblicks bilden som källa när du skapar en disk med AZ disk Create.To restore the disk and use it with a Kubernetes pod, use the snapshot as a source when you create a disk with az disk create. Den här åtgärden bevarar den ursprungliga resursen om du behöver komma åt den ursprungliga data ögonblicks bilden.This operation preserves the original resource if you then need to access the original data snapshot. I följande exempel skapas en disk med namnet pvcRestored från ögonblicks bilden med namnet pvcSnapshot:The following example creates a disk named pvcRestored from the snapshot named pvcSnapshot:

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

Om du vill använda den återställda disken med en POD anger du ID för disken i manifestet.To use the restored disk with a pod, specify the ID of the disk in the manifest. Hämta disk-ID: t med kommandot AZ disk show .Get the disk ID with the az disk show command. I följande exempel hämtas disk-ID: t för pvcRestored som skapats i föregående steg:The following example gets the disk ID for pvcRestored created in the previous step:

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

Skapa ett Pod-manifest med namnet azure-restored.yaml och ange disk-URI: n som hämtades i föregående steg.Create a pod manifest named azure-restored.yaml and specify the disk URI obtained in the previous step. I följande exempel skapas en grundläggande NGINX-webbserver med den återställda disken monterad som en volym på /mnt/Azure:The following example creates a basic NGINX web server, with the restored disk mounted as a volume at /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: mypodrestored
spec:
  containers:
  - name: mypodrestored
    image: nginx:1.15.5
    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 Pod med kommandot kubectl Apply , som du ser i följande exempel:Create the pod with the kubectl apply command, as shown in the following example:

$ kubectl apply -f azure-restored.yaml

pod/mypodrestored created

Du kan använda kubectl describe pod mypodrestored för att visa information om pod, till exempel följande komprimerade exempel som visar volym informationen:You can use kubectl describe pod mypodrestored to view details of the pod, such as the following condensed example that shows the volume information:

$ 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 stegNext steps

För associerade metod tips, se metod tips för lagring och säkerhets kopiering i AKS.For associated best practices, see Best practices for storage and backups in AKS.

Läs mer om Kubernetes-beständiga volymer med Azure-diskar.Learn more about Kubernetes persistent volumes using Azure disks.