Dynamické vytváření a používání trvalého svazku s disky Azure v Azure Kubernetes Service (AKS)

Trvalý svazek představuje část úložiště, která byla zřízena pro použití s pody Kubernetes. Trvalý svazek může používat jeden nebo mnoho podů a může být dynamicky nebo staticky zřízen. V tomto článku se dozvíte, jak dynamicky vytvářet trvalé svazky s disky Azure pro použití jedním podem v clusteru Azure Kubernetes Service (AKS).

Poznámka

Disk Azure je možné připojit pouze s typem Režimu přístupuReadWriteOnce, který ho zpřístupní pro jeden uzel v AKS. Pokud potřebujete sdílet trvalý svazek mezi více uzly, použijte Azure Files.

Další informace o svazcích Kubernetes najdete v tématu Storage možnosti aplikací v AKS.

Než začnete

Tento článek předpokládá, že máte existující cluster AKS. Pokud potřebujete cluster AKS, podívejte se na rychlý start AKS pomocí Azure CLI nebo pomocí Azure Portal.

Potřebujete také nainstalované a nakonfigurované Rozhraní příkazového řádku Azure CLI verze 2.0.59 nebo novější. Verzi zjistíte spuštěním příkazu az --version. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.

Předdefinované třídy úložiště

Třída úložiště slouží k definování dynamického vytváření jednotky úložiště s trvalým svazkem. Další informace o třídách úložiště Kubernetes najdete v tématu Kubernetes Storage Třídy.

Každý cluster AKS obsahuje čtyři předem vytvořené třídy úložiště, dvě z nich nakonfigurované pro práci s disky Azure:

  • Výchozí třída úložiště zřídí disk Azure SSD úrovně Standard.
    • Úložiště úrovně Standard je podporováno disky SSD úrovně Standard a poskytuje nákladově efektivní úložiště a zároveň zajišťuje spolehlivý výkon.
  • Třída služby Managed-Premium Storage zřídí disk Azure úrovně Premium.
    • Disky Premium jsou založené na vysoce výkonných discích SSD s nízkou latencí. Jsou ideální pro virtuální počítače s produkčními úlohami. Pokud uzly AKS ve vašem clusteru používají službu Premium Storage, vyberte spravovanou třídu Premium .

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. Pokud chcete mít možnost 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ě. Všimněte si, že není podporováno zmenšení velikosti PVC (aby se zabránilo ztrátě dat). Pomocí příkazu můžete upravit existující třídu kubectl edit sc úložiště.

Pokud například chcete použít disk s velikostí 4 TiB, musíte vytvořit třídu úložiště, která definuje cachingmode: None , protože ukládání do mezipaměti na disku není podporováno pro disky 4 TiB a větší.

Další informace o třídách úložiště a vytváření vlastní třídy úložiště najdete v tématu Storage možnosti pro aplikace v AKS.

Pomocí příkazu kubectl get sc zobrazte předem vytvořené třídy úložiště. Následující příklad ukazuje předem vytvořené třídy úložiště dostupné v clusteru AKS:

$ kubectl get sc

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

Poznámka

Deklarace trvalých svazků jsou zadané v GiB, ale spravované disky Azure se účtují skladovou jednotkou za konkrétní velikost. Tyto skladové položky jsou 32GiB pro disky S4 nebo P4 až 32TiB pro disky S80 nebo P80 (ve verzi Preview). Výkon propustnosti a IOPS spravovaného disku Premium závisí na skladové posílce i velikosti instancí uzlů v clusteru AKS. Další informace najdete v tématu Ceny a výkon Spravované disky.

Vytvoření trvalé deklarace identity svazku

Trvalá deklarace objemu (PVC) se používá k automatickému zřizování úložiště na základě třídy úložiště. V tomto případě může PVC použít jednu z předem vytvořených tříd úložiště k vytvoření standardního nebo prémiového spravovaného disku Azure.

Vytvořte soubor s názvem azure-premium.yamla zkopírujte ho v následujícím manifestu. Deklarace identity požaduje disk s názvem azure-managed-disk5 GB s přístupem ReadWriteOnce . Třída úložiště managed-Premium je určena jako třída úložiště.

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ý používá úložiště úrovně Standard, použijte storageClassName: default místo spravované úrovně Premium.

Vytvořte trvalou deklaraci identity svazku pomocí příkazu kubectl apply a zadejte soubor azure-premium.yaml :

$ kubectl apply -f azure-premium.yaml

persistentvolumeclaim/azure-managed-disk created

Použití trvalého svazku

Po vytvoření trvalé deklarace identity svazku a úspěšném zřízení disku je možné vytvořit pod s přístupem k disku. Následující manifest vytvoří základní pod NGINX, který používá deklarace trvalého svazku s názvem azure-managed-disk k připojení disku Azure k cestě /mnt/azure. Pro kontejnery Windows Server zadejte cestu mountPath pomocí konvence cesty Windows, například D:.

Vytvořte soubor s názvem azure-pvc-disk.yamla zkopírujte ho v následujícím manifestu.

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 pomocí příkazu kubectl apply , jak je znázorněno v následujícím příkladu:

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

pod/mypod created

Teď máte spuštěný pod s připojeným diskem Azure v /mnt/azure adresáři. Tuto konfiguraci můžete vidět při kontrole podu prostřednictvím kubectl describe pod mypod, jak je znázorněno v následujícím zhuštěném příkladu:

$ 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žití disků Úrovně Ultra

Pokud chcete využít disk úrovně Ultra, podívejte se na článek Použití disků Ultra na Azure Kubernetes Service (AKS).

Zálohování trvalého svazku

Pokud chcete zálohovat data na trvalém svazku, pořiďte snímek spravovaného disku svazku. Tento snímek pak můžete použít k vytvoření obnoveného disku a připojení k podům jako prostředek obnovení dat.

Nejprve pomocí příkazu získejte název svazku kubectl get pvc , například pro PVC s názvem 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. Zadejte 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:

$ 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í příkazu 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). K problémům s oprávněními může dojít, pokud vytváříte snímky a obnovujete disky ve skupinách prostředků, ke kterým cluster AKS nemá přístup.

$ 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 vytvoření snímku trvat několik minut.

Obnovení a použití snímku

Pokud chcete disk obnovit a použít ho s podem Kubernetes, použijte snímek jako zdroj při vytváření disku pomocí příkazu az disk create. Tato operace zachová původní prostředek, pokud pak potřebujete získat přístup k původnímu snímku dat. Následující příklad vytvoří disk s názvem pvcRestored ze snímku s názvem pvcSnapshot:

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

Chcete-li použít obnovený disk s podem, zadejte ID disku v manifestu. Pomocí příkazu az disk show získejte ID disku. Následující příklad získá ID disku pro pvcRestored vytvořené v předchozím kroku:

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

Vytvořte manifest podu s názvem azure-restored.yaml a zadejte identifikátor URI disku získaný v předchozím kroku. Následující příklad vytvoří základní webový server NGINX s obnoveným diskem připojeným jako svazek v /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 pomocí příkazu kubectl apply , jak je znázorněno v následujícím příkladu:

$ kubectl apply -f azure-restored.yaml

pod/mypodrestored created

Můžete použít kubectl describe pod mypodrestored k zobrazení podrobností o podu, například v následujícím zhuštěném příkladu, který zobrazuje informace o svazku:

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

Použití značek Azure

Další podrobnosti o používání značek Azure najdete v tématu Použití značek Azure v Azure Kubernetes Service (AKS).

Další kroky

Přidružené osvědčené postupy najdete v tématu Osvědčené postupy pro ukládání a zálohování v AKS.

Přečtěte si další informace o trvalých svazcích Kubernetes pomocí disků Azure.