Možnosti úložiště pro aplikace ve službě Azure Kubernetes Service (AKS)

Aplikace spuštěné ve službě Azure Kubernetes Service (AKS) můžou potřebovat ukládat a načítat data. I když některé úlohy aplikací můžou používat místní, rychlé úložiště na nepotřebných, vyprázdněných uzlech, jiné vyžadují úložiště, které se v rámci platformy Azure zachová na častějších datových svazcích.

Může být potřeba provést několik podů:

  • Sdílejte stejné datové svazky.
  • Znovu připojte datové svazky, pokud je pod přeplánovaný na jiném uzlu.

Můžete také potřebovat shromažďovat a ukládat citlivá data nebo informace o konfiguraci aplikace do podů.

Tento článek představuje základní koncepty, které poskytují úložiště aplikacím v AKS:

Diagram možností úložiště pro aplikace v clusteru Azure Kubernetes Services (AKS)

Dočasný disk s operačním systémem

Azure ve výchozím nastavení automaticky replikuje disk operačního systému pro virtuální počítač do úložiště Azure, aby se zabránilo ztrátě dat při přemístění virtuálního počítače na jiného hostitele. Vzhledem k tomu, že kontejnery nejsou navržené tak, aby měly trvalý místní stav, nabízí toto chování omezenou hodnotu a zároveň poskytuje určité nevýhody. Mezi tyto nevýhody patří, ale nejsou omezené na pomalejší zřizování uzlů a vyšší latenci čtení a zápisu.

Naproti tomu dočasné disky s operačním systémem se ukládají jenom na hostitelském počítači, stejně jako dočasný disk. Díky této konfiguraci získáte nižší latenci čtení a zápisu spolu s rychlejším škálováním uzlů a upgrady clusteru.

Poznámka:

Pokud pro operační systém explicitně nepožadujete spravované disky Azure, AKS pro danou konfiguraci fondu uzlů ve výchozím nastavení nastaví dočasný operační systém.

Požadavky na velikost a doporučení pro dočasné disky s operačním systémem jsou k dispozici v dokumentaci k virtuálnímu počítači Azure. Tady jsou některé obecné aspekty velikosti:

  • Pokud jste se rozhodli použít výchozí velikost virtuálního počítače AKS Standard_DS2_v2 skladové položky s výchozí velikostí disku s operačním systémem 100 GiB, výchozí velikost virtuálního počítače podporuje dočasný operační systém, ale velikost mezipaměti má pouze 86 GiB. Pokud ji explicitně nezadáte, tato konfigurace se ve výchozím nastavení nastaví na spravované disky. Pokud požadujete dočasný operační systém, zobrazí se chyba ověření.

  • Pokud požádáte o stejnou skladovou položku Standard_DS2_v2 s diskem s operačním systémem 60 GiB, bude tato konfigurace ve výchozím nastavení dočasného operačního systému. Požadovaná velikost 60 GiB je menší než maximální velikost mezipaměti 86 GiB.

  • Pokud vyberete skladovou položku Standard_D8s_v3 s diskem s operačním systémem 100 GB, tato velikost virtuálního počítače podporuje dočasný operační systém a má 200 GiB místa v mezipaměti. Pokud nezadáte typ disku s operačním systémem, fond uzlů bude ve výchozím nastavení přijímat dočasný operační systém.

Nejnovější generace řady virtuálních počítačů nemá vyhrazenou mezipaměť, ale pouze dočasné úložiště. Pokud jste například vybrali velikost virtuálního počítače Standard_E2bds_v5 s výchozí velikostí disku s operačním systémem 100 GiB, podporuje dočasné disky s operačním systémem, ale má pouze 75 GB dočasného úložiště. Pokud ji explicitně nezadáte, tato konfigurace se ve výchozím nastavení nastaví na spravované disky s operačním systémem. Pokud požadujete dočasný disk s operačním systémem, zobrazí se chyba ověření.

  • Pokud požadujete stejnou velikost virtuálního počítače Standard_E2bds_v5 s diskem s operačním systémem 60 GiB, tato konfigurace ve výchozím nastavení používá dočasné disky s operačním systémem. Požadovaná velikost 60 GiB je menší než maximální dočasné úložiště 75 GiB.

  • Pokud vyberete Standard_E4bds_v5 skladovou položku s diskem s operačním systémem 100 GiB, tato velikost virtuálního počítače podporuje dočasný operační systém a má 150 GiB dočasného úložiště. Pokud typ disku s operačním systémem nezadáte, Azure ve výchozím nastavení zřídí dočasný disk s operačním systémem do fondu uzlů.

Klíče spravované zákazníkem

Šifrování dočasného disku s operačním systémem můžete spravovat pomocí vlastních klíčů v clusteru AKS. Další informace najdete v tématu Použití klíče spravovaného zákazníkem s diskem Azure v AKS.

Množství

Kubernetes obvykle zpracovává jednotlivé pody jako dočasné a jednorázové prostředky. Aplikace mají k dispozici různé přístupy k používání a uchovávání dat. Svazek představuje způsob, jak ukládat, načítat a uchovávat data napříč pody a prostřednictvím životního cyklu aplikace.

Tradiční svazky se vytvářejí jako prostředky Kubernetes zálohované službou Azure Storage. Můžete ručně vytvořit datové svazky, které se mají přiřadit přímo podům, nebo je Kubernetes automaticky vytvořit. Datové svazky můžou používat: Disk Azure, Soubory Azure, Azure NetApp Files nebo Objekty blob Azure.

Poznámka:

V závislosti na SKU virtuálního počítače, který používáte, může mít ovladač CSI disku Azure limit svazku pro jednotlivé uzly. U některých vysoce výkonných virtuálních počítačů (například 16 jader) je limit 64 svazků na uzel. Pokud chcete zjistit limit na skladovou položku virtuálního počítače, projděte si sloupec Maximální počet datových disků pro každou nabízenou skladovou položku virtuálního počítače. Seznam nabízených skladových položek virtuálních počítačů a jejich odpovídajících podrobných limitů kapacity najdete v tématu Velikosti virtuálních počítačů pro obecné účely.

Informace uvedené v článku o službě Soubory Azure a Azure NetApp Files vám pomůžou určit nejvhodnější řešení pro vaše úlohy.

Azure Disk

K vytvoření prostředku Datového disku Kubernetes použijte Azure Disk. Mezi typy disků patří:

  • Disky úrovně Ultra
  • Disky SSD úrovně Premium
  • Disky SSD úrovně Standard
  • Disky HDD úrovně Standard

Tip

Pro většinu produkčních a vývojových úloh použijte SSD úrovně Premium.

Vzhledem k tomu, že je Disk Azure připojený jako ReadWriteOnce, jsou k dispozici pouze pro jeden uzel. Pro svazky úložiště přístupné pody na více uzlech současně použijte službu Azure Files.

Soubory Azure

Azure Files slouží k připojení sdílené složky SMB (Server Message Block) verze 3.1.1 nebo systému souborů NFS (Network File System) verze 4.1 zálohované účtem úložiště Azure k podům. Soubory Azure umožňují sdílet data mezi několika uzly a pody a můžou používat:

  • Azure Premium Storage založené na vysoce výkonných discích SSD
  • Azure Standard Storage zálohované běžnými pevnými disky

Azure NetApp Files

  • Úložiště úrovně Ultra
  • Premium Storage
  • Storage úrovně Standard

Azure Blob Storage

Pomocí služby Azure Blob Storage vytvořte kontejner úložiště objektů blob a připojte ho pomocí protokolu NFS verze 3.0 nebo BlobFuse.

  • Objekty blob bloku

Typy svazků

Svazky Kubernetes představují více než jen tradiční disk pro ukládání a načítání informací. Svazky Kubernetes je také možné použít jako způsob, jak vložit data do podu pro použití kontejnery.

Mezi běžné typy svazků v Kubernetes patří:

emptyDir

Běžně se používá jako dočasný prostor pro pod. Všechny kontejnery v podu mají přístup k datům na svazku. Data zapsaná do tohoto typu svazku se uchovávají pouze po dobu životnosti podu. Po odstranění podu se svazek odstraní. Tento svazek obvykle používá základní diskové úložiště místního uzlu, i když může existovat pouze v paměti uzlu.

Tajný kód

Tajné svazky můžete použít k vložení citlivých dat do podů, jako jsou hesla.

  1. Vytvořte tajný klíč pomocí rozhraní Kubernetes API.
  2. Definujte pod nebo nasazení a požádejte o konkrétní tajný klíč.
    • Tajné kódy se poskytují jenom uzlům s naplánovaným podem, který je vyžaduje.
    • Tajný kód je uložen v tmpfs, není zapsán na disk.
  3. Když odstraníte poslední pod na uzlu vyžadujícím tajný klíč, tajný klíč se odstraní z tmpfs uzlu.
    • Tajné kódy jsou uložené v daném oboru názvů a jsou přístupné pouze pody ve stejném oboru názvů.

configMap

Objekt configMap můžete použít k vložení vlastností páru klíč-hodnota do podů, jako jsou například informace o konfiguraci aplikace. Definujte informace o konfiguraci aplikace jako prostředek Kubernetes, snadno se aktualizují a použijí na nové instance podů při jejich nasazení.

Podobně jako použití tajného kódu:

  1. Vytvořte objekt ConfigMap pomocí rozhraní API Kubernetes.
  2. Při definování podu nebo nasazení požádejte objekt ConfigMap.
    • Konfigurace Mapy jsou uloženy v daném oboru názvů a jsou přístupné pouze pody ve stejném oboru názvů.

Trvalé svazky

Svazky definované a vytvořené jako součást životního cyklu podů existují pouze tehdy, dokud pod neodstraníte. Pody často očekávají, že jejich úložiště zůstane, pokud se pod během události údržby přeplánuje na jiném hostiteli, zejména v StatefulSets. Trvalý svazek (PV) je prostředek úložiště vytvořený a spravovaný rozhraním API Kubernetes, který může existovat po celou dobu životnosti jednotlivého podu.

K poskytování persistentVolume můžete použít následující datové služby Azure Storage:

Jak je uvedeno v části Svazky, volba disků nebo souborů je často určena potřebou souběžného přístupu k datům nebo úrovni výkonu.

Diagram trvalých svazků v clusteru Azure Kubernetes Services (AKS)

Správce clusteru může staticky vytvořit TrvalýVolume nebo se svazek dynamicky vytvoří serverem rozhraní API Kubernetes. Pokud je pod naplánovaný a aktuálně nedostupné úložiště, může Kubernetes vytvořit základní úložiště Disků Azure nebo File a připojit ho k podu. Dynamické zřizování používá třídu StorageClass k identifikaci typu úložiště Azure, který se má vytvořit.

Důležité

Trvalé svazky nemůžou sdílet pody s Windows a Linuxem kvůli rozdílům v podpoře systému souborů mezi těmito dvěma operačními systémy.

Třídy úložiště

Pokud chcete definovat různé úrovně úložiště, například Premium a Standard, můžete vytvořit třídu StorageClass.

Třída StorageClass také definuje uvolnitPolicy. Když odstraníte trvalý svazek, funkce reclaimPolicy řídí chování základního prostředku úložiště Azure. Základní prostředek úložiště je možné odstranit nebo ponechat pro použití s budoucím podem.

Pro clustery používající ovladače rozhraní úložiště kontejnerů (CSI) se vytvoří následující další StorageClasses :

Třída úložiště Popis
managed-csi K vytvoření spravovaného disku používá místně redundantní úložiště Azure StandardSSD (LRS). Zásady uvolnění paměti zajistí, že se základní disk Azure odstraní, když se odstraní trvalý svazek, který ho použil. Třída úložiště také nakonfiguruje trvalé svazky tak, aby byly rozšiřitelné, stačí upravit deklaraci trvalého svazku s novou velikostí.
managed-csi-premium K vytvoření spravovaného disku používá místně redundantní úložiště Azure Premium (LRS). Zásada uvolnění znovu zajistí, že se základní disk Azure odstraní, když se odstraní trvalý svazek, který ho použil. Podobně tato třída úložiště umožňuje rozšíření trvalých svazků.
azurefile-csi Používá úložiště Azure Standard k vytvoření sdílené složky Azure. Zásada uvolnění prostředků zajišťuje, že se základní sdílená složka Azure odstraní, když se odstraní trvalý svazek, který ji použil.
azurefile-csi-premium Používá Azure Premium Storage k vytvoření sdílené složky Azure. Zásada uvolnění prostředků zajistí, že se základní sdílená složka Azure odstraní, když se odstraní trvalý svazek, který ho použil.
azureblob-nfs-premium Používá Azure Premium Storage k vytvoření kontejneru úložiště objektů blob v Azure a připojení pomocí protokolu NFS v3. Zásada uvolnění paměti zajišťuje, že se základní kontejner úložiště objektů blob v Azure odstraní, když se odstraní trvalý svazek, který ho použil.
azureblob-fuse-premium Používá Azure Premium Storage k vytvoření kontejneru azure Blob Storage a připojení pomocí BlobFuse. Zásada uvolnění paměti zajišťuje, že se základní kontejner úložiště objektů blob v Azure odstraní, když se odstraní trvalý svazek, který ho použil.

Pokud pro trvalý svazek nezadáte třídu StorageClass, použije se výchozí třída StorageClass. Zajistěte, aby svazky používaly příslušné úložiště, které potřebujete při vyžádání trvalých svazků.

Důležité

Počínaje Kubernetes verze 1.21 používá AKS ve výchozím nastavení pouze ovladače CSI a migrace csI je povolená. I když stávající trvalé svazky ve stromu nadále fungují, počínaje verzí 1.26 už AKS nebude podporovat svazky vytvořené pomocí ovladače stromu a úložiště zřízeného pro soubory a disky.

Třída default bude stejná jako managed-csi.

Pomocí příkazu StorageClass můžete vytvořit třídu StorageClass pro jiné potřeby.kubectl Následující příklad používá Spravované disky Premium a určuje, že při odstranění podu by se měl zachovat základní disk Azure:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: managed-premium-retain
provisioner: disk.csi.azure.com
parameters:
  skuName: Premium_ZRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Poznámka:

AKS odsouhlasí výchozí třídy úložiště a přepíše všechny změny, které v těchto třídách úložiště provedete.

Další informace o třídách úložiště najdete v tématu StorageClass v Kubernetes.

Deklarace identit trvalých svazků

PersistentVolumeClaim požaduje úložiště konkrétní třídy StorageClass, režimu přístupu a velikosti. Server rozhraní API Kubernetes může dynamicky zřizovat základní prostředek úložiště Azure, pokud žádný existující prostředek nemůže splnit deklaraci identity na základě definované třídy StorageClass.

Definice podu zahrnuje připojení svazku po připojení svazku k podu.

Diagram trvalých deklarací identity svazků v clusteru Azure Kubernetes Services (AKS).

Po přiřazení dostupného prostředku úložiště k podu žádajícímu o úložiště je PersistentVolume vázán na PersistentVolumeClaim. Trvalé svazky jsou namapované na deklarace identity 1:1.

Následující příklad manifest YAML ukazuje trvalou deklaraci identity svazku , která používá managed-premium StorageClass a požaduje velikost Disku 5Gi :

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

Při vytváření definice podu zadáte také:

  • Deklarace trvalého svazku pro vyžádání požadovaného úložiště.
  • SvazekMount pro vaše aplikace ke čtení a zápisu dat.

Následující příklad manifestu YAML ukazuje, jak se dá předchozí deklarace identity trvalého svazku použít k připojení svazku v /mnt/azure:

kind: Pod
apiVersion: v1
metadata:
  name: nginx
spec:
  containers:
    - name: myfrontend
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      volumeMounts:
      - mountPath: "/mnt/azure"
        name: volume
  volumes:
    - name: volume
      persistentVolumeClaim:
        claimName: azure-managed-disk

Pro připojení svazku v kontejneru Windows zadejte písmeno jednotky a cestu. Příklad:

...      
       volumeMounts:
        - mountPath: "d:"
          name: volume
        - mountPath: "c:\k"
          name: k-dir
...

Další kroky

Související osvědčené postupy najdete v tématu Osvědčené postupy pro ukládání a zálohování v AKS a aspektech úložiště AKS.

Informace o používání ovladačů CSI najdete v následujících článcích s postupy:

Další informace o základních konceptech Kubernetes a AKS najdete v následujících článcích: