Dynamické vytvoření a použití trvalého svazku s disky Azure ve službě Azure Kubernetes Service (AKS)Dynamically create and use a persistent volume with Azure disks in Azure Kubernetes Service (AKS)

Trvalý svazek představuje část úložiště, která byla zřízena pro použití s Kubernetes lusky.A persistent volume represents a piece of storage that has been provisioned for use with Kubernetes pods. Trvalý svazek lze použít v jednom nebo mnoha luskech a lze jej dynamicky nebo staticky zřídit.A persistent volume can be used by one or many pods, and can be dynamically or statically provisioned. V tomto článku se dozvíte, jak dynamicky vytvářet trvalé svazky s disky Azure, které používá jeden z nich v clusteru Azure Kubernetes Service (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.

Poznámka

Disk Azure se dá připojit jenom k typu režimu přístupu ReadWriteOnce, který je dostupný pro jeden uzel v AKS.An Azure disk can only be mounted with Access mode type ReadWriteOnce, which makes it available to one node in AKS. Pokud potřebujete sdílet trvalý svazek mezi více uzly, použijte soubory Azure.If you need to share a persistent volume across multiple nodes, use Azure Files.

Další informace o Kubernetes svazcích najdete v tématu Možnosti úložiště pro aplikace v AKS.For more information on Kubernetes volumes, see Storage options for applications in AKS.

Než začneteBefore you begin

V tomto článku se předpokládá, že máte existující cluster AKS.This article assumes that you have an existing AKS cluster. Pokud potřebujete cluster AKS, přečtěte si rychlý Start AKS a použijte Azure CLI nebo Azure Portal.If you need an AKS cluster, see the AKS quickstart using the Azure CLI or using the Azure portal.

Potřebujete také nainstalované a nakonfigurované rozhraní Azure CLI verze 2.0.59 nebo novější.You also need the Azure CLI version 2.0.59 or later installed and configured. Verzi zjistíte spuštěním příkazu az --version.Run az --version to find the version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.If you need to install or upgrade, see Install Azure CLI.

Předdefinované třídy úložištěBuilt-in storage classes

Třída úložiště se používá k definování způsobu, jakým se jednotka úložiště dynamicky vytvoří s trvalým svazkem.A storage class is used to define how a unit of storage is dynamically created with a persistent volume. Další informace o třídách úložiště Kubernetes naleznete v tématu třídy úložiště Kubernetes.For more information on Kubernetes storage classes, see Kubernetes Storage Classes.

Každý cluster AKS obsahuje čtyři předem vytvořené třídy úložiště, dva z nich jsou nakonfigurovány pro práci s disky Azure:Each AKS cluster includes four pre-created storage classes, two of them configured to work with Azure disks:

  • Výchozí třída úložiště zřídí standardní disk SSD Azure.The default storage class provisions a standard SSD Azure disk.
    • Služba Storage úrovně Standard je založená na standardu SSD a poskytuje nákladově efektivní úložiště, a přitom stále poskytuje spolehlivý výkon.Standard storage is backed by Standard SSDs and delivers cost-effective storage while still delivering reliable performance.
  • Třída úložiště Managed-Premium zřídí disk Azure úrovně Premium.The managed-premium storage class provisions a premium Azure disk.
    • Disky Premium jsou založené na vysoce výkonných discích SSD s nízkou latencí.Premium disks are backed by SSD-based high-performance, low-latency disk. Jsou ideální pro virtuální počítače s produkčními úlohami.Perfect for VMs running production workload. Pokud uzly AKS v clusteru používají Storage úrovně Premium, vyberte třídu Managed-Premium .If the AKS nodes in your cluster use premium storage, select the managed-premium class.

Pokud používáte jednu z výchozích tříd úložiště, nemůžete po vytvoření třídy úložiště aktualizovat velikost svazku.If you use one of the default storage classes, you can't update the volume size after the storage class is created. Aby bylo možné aktualizovat velikost svazku po vytvoření třídy úložiště, přidejte řádek allowVolumeExpansion: true do jedné z výchozích tříd úložiště, nebo můžete vytvořit vlastní třídu úložiště.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. Počítejte s tím, že není podporováno snížení velikosti trvalého virtuálního počítače (aby nedošlo ke ztrátě dat).Note that it's not supported to reduce the size of a PVC (to prevent data loss). Existující třídu úložiště můžete upravit pomocí kubectl edit sc příkazu.You can edit an existing storage class by using the kubectl edit sc command.

Pokud například chcete použít disk o velikosti 4 TiB, musíte vytvořit třídu úložiště, která definuje, cachingmode: None protože ukládání disku do mezipaměti není podporováno pro disky 4 TIB a větší.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.

Další informace o třídách úložiště a vytváření vlastních tříd úložiště najdete v tématu Možnosti úložiště pro aplikace v AKS.For more information about storage classes and creating your own storage class, see Storage options for applications in AKS.

Pomocí příkazu kubectl Get SC zobrazte předem vytvořené třídy úložiště.Use the kubectl get sc command to see the pre-created storage classes. Následující příklad ukazuje třídy úložiště před vytvořením dostupné v rámci clusteru AKS: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

Poznámka

V GiB se zadává deklarace trvalého svazku, ale Azure Managed disks se fakturuje podle skladové jednotky za konkrétní velikost.Persistent volume claims are specified in GiB but Azure managed disks are billed by SKU for a specific size. Tyto SKU jsou v rozsahu od 32GiB pro disky S4 nebo P4 do 32TiB pro disky S80 nebo P80 (ve verzi Preview).These SKUs range from 32GiB for S4 or P4 disks to 32TiB for S80 or P80 disks (in preview). Výkon propustnosti a IOPS na spravovaném disku úrovně Premium závisí na skladové jednotce (SKU) i na velikosti instancí uzlů v clusteru AKS.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. Další informace najdete v tématu ceny a výkon Managed disks.For more information, see Pricing and Performance of Managed Disks.

Vytvoření deklarace identity trvalého svazkuCreate a persistent volume claim

Deklarace identity trvalého svazku (PVC) se používá k automatickému zřízení úložiště na základě třídy úložiště.A persistent volume claim (PVC) is used to automatically provision storage based on a storage class. V takovém případě může virtuální okruh použít jednu z předem vytvořených tříd úložiště k vytvoření spravovaného disku Azure úrovně Standard nebo Premium.In this case, a PVC can use one of the pre-created storage classes to create a standard or premium Azure managed disk.

Vytvořte soubor s názvem azure-premium.yaml a zkopírujte ho do následujícího manifestu.Create a file named azure-premium.yaml, and copy in the following manifest. Deklarace identity vyžádá disk s názvem azure-managed-disk , který má velikost 5 GB přístup ReadWriteOnce .The claim requests a disk named azure-managed-disk that is 5GB in size with ReadWriteOnce access. Třída úložiště Managed-Premium je zadaná jako třída úložiště.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

Tip

Pokud chcete vytvořit disk, který využívá úložiště úrovně Standard, použijte storageClassName: default místo spravovaného na Premium.To create a disk that uses standard storage, use storageClassName: default rather than managed-premium.

Pomocí příkazu kubectl Apply vytvořte deklaraci trvalého svazku a zadejte soubor Azure-Premium. yaml :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

Použití trvalého svazkuUse the persistent volume

Po vytvoření deklarace identity trvalého svazku a úspěšném zřízení disku je možné vytvořit pod s přístupem k disku.Once the persistent volume claim has been created and the disk successfully provisioned, a pod can be created with access to the disk. Následující manifest vytvoří základní NGINX pod, který používá deklaraci trvalého svazku s názvem Azure-Managed-disk k připojení disku Azure v cestě /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. V případě kontejnerů Windows serveru určete mountPath pomocí konvence cesty Windows, třeba :.For Windows Server containers, specify a mountPath using the Windows path convention, such as 'D:'.

Vytvořte soubor s názvem azure-pvc-disk.yaml a zkopírujte ho do následujícího manifestu.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: 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

Vytvořte pod příkazem kubectl Apply , jak je znázorněno v následujícím příkladu:Create the pod with the kubectl apply command, as shown in the following example:

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

pod/mypod created

Teď máte spuštěný pod diskem Azure připojeným k /mnt/azure adresáři.You now have a running pod with your Azure disk mounted in the /mnt/azure directory. Tato konfigurace se může zobrazit při kontrole pod tím kubectl describe pod mypod , jak je znázorněno v následujícím zhuštěném příkladu: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"
[...]

Použít disky UltraUse Ultra Disks

Pokud chcete využít Ultra disk, přečtěte si téma použití Ultra Discs ve službě Azure Kubernetes Service (AKS).To leverage ultra disk see Use Ultra Disks on Azure Kubernetes Service (AKS).

Zálohování trvalého svazkuBack up a persistent volume

Pokud chcete zálohovat data v trvalém svazku, požádejte o tento svazek snímek spravovaného disku.To back up the data in your persistent volume, take a snapshot of the managed disk for the volume. Pak můžete pomocí tohoto snímku vytvořit obnovený disk a připojit se k luskům jako způsob obnovení dat.You can then use this snapshot to create a restored disk and attach to pods as a means of restoring the data.

Nejdřív Získejte název svazku pomocí kubectl get pvc příkazu, například pro okruh PVC s názvem 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

Tento název svazku tvoří základní název disku Azure.This volume name forms the underlying Azure disk name. Dotaz na ID disku pomocí příkazu AZ disk list a zadejte název svazku PVC, jak je znázorněno v následujícím příkladu: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

Pomocí ID disku vytvořte snímek disku pomocí AZ Snapshot Create.Use the disk ID to create a snapshot disk with az snapshot create. Následující příklad vytvoří snímek s názvem pvcSnapshot ve stejné skupině prostředků jako cluster AKS (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). Pokud vytvoříte snímky a obnovíte disky ve skupinách prostředků, ke kterým cluster AKS nemá přístup, může dojít k problémům s oprávněním.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

V závislosti na množství dat na disku může trvat několik minut, než se snímek vytvoří.Depending on the amount of data on your disk, it may take a few minutes to create the snapshot.

Obnovení a použití snímkuRestore and use a snapshot

Pokud chcete disk obnovit a použít ho s Kubernetes pod, při vytváření disku pomocí AZ disk Createpoužijte snímek jako zdroj.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. Tato operace zachová původní prostředek, pokud budete potřebovat přístup k původnímu snímku dat.This operation preserves the original resource if you then need to access the original data snapshot. Následující příklad vytvoří z snímku s názvem pvcSnapshot disk s názvem pvcRestored :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

Chcete-li použít obnovený disk s pod, zadejte ID disku v manifestu.To use the restored disk with a pod, specify the ID of the disk in the manifest. ID disku získáte pomocí příkazu AZ disk show .Get the disk ID with the az disk show command. Následující příklad získá ID disku pro pvcRestored vytvořené v předchozím kroku: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

Vytvořte manifest pod názvem azure-restored.yaml a zadejte identifikátor URI disku, který jste získali v předchozím kroku.Create a pod manifest named azure-restored.yaml and specify the disk URI obtained in the previous step. Následující příklad vytvoří základní webový server NGINX s obnoveným diskem připojeným jako svazek na /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: 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

Vytvořte pod příkazem kubectl Apply , jak je znázorněno v následujícím příkladu:Create the pod with the kubectl apply command, as shown in the following example:

$ kubectl apply -f azure-restored.yaml

pod/mypodrestored created

Můžete použít kubectl describe pod mypodrestored k zobrazení podrobností na poli pod, jako je například následující zhuštěný příklad, který ukazuje informace o svazku: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
[...]

Další krokyNext steps

Související osvědčené postupy najdete v tématu osvědčené postupy pro úložiště a zálohování v AKS.For associated best practices, see Best practices for storage and backups in AKS.

Přečtěte si další informace o Kubernetes trvalých svazcích pomocí disků Azure.Learn more about Kubernetes persistent volumes using Azure disks.