Sdílet prostřednictvím


Možnosti úložiště pro aplikace v AKS povolené službou Azure Arc

Platí pro: AKS v Azure Stack HCI 22H2, AKS na Windows Serveru

Aplikace, které běží v nasazeních AKS pomocí služby Azure Kubernetes Service povolené službou Azure Arc, můžou potřebovat ukládat a načítat data. U některých úloh aplikací můžou data při odstranění podů používat místní a rychlé úložiště na nepotřebných uzlech (Kubernetes používá pody ke spuštění instance aplikace).

Jiné úlohy můžou vyžadovat úložiště, které trvá na častějších datových svazcích. Několik podů může potřebovat sdílet stejné datové svazky nebo znovu připojit datové svazky, pokud je pod přeplánovaný na jiném uzlu. Můžete také potřebovat možnost úložiště, pokud pody obsahují citlivá data nebo informace o konfiguraci aplikace.

Obrázek úložiště architektury znázorňující hlavní uzel a hlavní uzel clusteru

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

  • Množství
  • Trvalé svazky
  • Třídy úložiště
  • Deklarace trvalých deklarací svazků (PVC)

Množství

Aplikace často potřebují ukládat a načítat data. Vzhledem k tomu, že Kubernetes obvykle zpracovává jednotlivé pody jako dočasné, uvolnitelné prostředky, jsou pro aplikace dostupné různé přístupy, které můžou používat a uchovávat data. Svazek představuje způsob, jak ukládat, načítat a uchovávat data napříč pody a prostřednictvím životního cyklu aplikace.

Svazky v Kubernetes můžou představovat více než jen tradiční informace, které se ukládají a načítají. Svazky Kubernetes se dají použít také jako způsob vložení dat do podu pro kontejnery, které se mají použít. Mezi běžné typy svazků Kubernetes patří:

  • emptyDir – Tento svazek se běžně používá jako dočasné místo pro pod. Všechny kontejnery v podu mají přístup k datům na svazku. Data zapsaná do tohoto typu svazku se uchovávají jenom po dobu životnosti podu – když se pod odstraní, svazek se 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 – Tento svazek se používá k zahrnutí citlivých dat, jako jsou hesla, do podů. Nejprve vytvoříte tajný kód pomocí rozhraní Kubernetes API. Při definování podu nebo nasazení můžete požádat o konkrétní tajný kód. Tajné kódy jsou poskytovány pouze uzlům s naplánovaným podem, který ho vyžaduje, a tajný kód je uložený v tmpfs, ne zapsán na disk. Když se odstraní poslední pod na uzlu, který vyžaduje tajný klíč, tajný kód se odstraní z tmpfs uzlu. Tajné kódy jsou uložené v daném oboru názvů a mohou k nim přistupovat jenom pody ve stejném oboru názvů.

  • configMap – Tento typ svazku slouží k vložení vlastností páru klíč-hodnota do podů, jako jsou informace o konfiguraci aplikace. Místo definování informací o konfiguraci aplikace v rámci image kontejneru je můžete definovat jako prostředek Kubernetes, který se dá snadno aktualizovat a použít na nové instance podů při nasazování. Podobně jako při použití tajného kódu nejprve vytvoříte objekt ConfigMap pomocí rozhraní API Kubernetes. Tuto mapu configmap je pak možné vyžádat při definování podu nebo nasazení. Objekty ConfigMap jsou uloženy v daném oboru názvů a mohou k němu přistupovat pouze pody ve stejném oboru názvů.

Trvalé svazky

Svazky definované a vytvořené jako součást životního cyklu podů existují pouze do odstranění podu. 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 je prostředek úložiště vytvořený a spravovaný rozhraním API Kubernetes, který může existovat i po celou dobu životnosti jednotlivého podu.

Diskové svazky AKS zálohované VHDX, které jsou připojené jako ReadWriteOnce a jsou přístupné pro jeden uzel najednou. Nebo můžete použít svazky souborů AKS zálohované sdílenými složkami SMB nebo NFS. Jsou připojené jako ReadWriteMany a jsou k dispozici pro více uzlů současně.

Správce clusteru může staticky vytvořit trvalý svazek nebo ho může dynamicky vytvořit server rozhraní API Kubernetes. Pokud je pod naplánovaný a vyžaduje úložiště, které aktuálně není dostupné, může Kubernetes vytvořit základní soubor VHDX a pak ho připojit k podu. Dynamické zřizování používá třídu StorageClass k identifikaci typu úložiště, které se má vytvořit.

Třídy úložiště

Pokud chcete definovat různé úrovně (a umístění) úložiště, můžete vytvořit třídu StorageClass. Třída StorageClass také definuje uvolnitPolicy. Toto uvolněníPolicy řídí chování základního prostředku úložiště při odstranění podu a trvalý svazek už nemusí být vyžadován. Základní prostředek úložiště je možné odstranit nebo zachovat pro použití s budoucím podem.

Ve službě AKS Arc se výchozí třída úložiště vytvoří automaticky a pomocí sdíleného svazku clusteru vytvoří svazky založené na VHDX. Zásady uvolnění paměti zajistí, že se základní VHDX odstraní, když se odstraní trvalý svazek, který ho použil. Třída úložiště také nakonfiguruje trvalé svazky tak, aby se rozšiřily, takže stačí upravit deklaraci trvalého svazku s novou velikostí.

Pokud pro trvalý svazek není zadána žádná třída StorageClass , použije se výchozí třída StorageClass . Při vyžádání trvalých svazků se ujistěte, že používají příslušné úložiště. Pro další potřeby můžete vytvořit třídu StorageClass .

Deklarace identit trvalých svazků

PersistentVolumeClaim vyžaduje buď ReadWriteOnce, nebo ReadWriteMany úložiště konkrétní třídy a velikosti StorageClass. Server rozhraní API Kubernetes může dynamicky zřizovat základní prostředek úložiště v AKS Arc, pokud neexistuje žádný existující prostředek pro splnění deklarace identity na základě definované třídy StorageClass. Definice podu zahrnuje připojení svazku po připojení svazku k podu.

TrvalýVolume je vázán na PersistentVolumeClaim, jakmile je dostupný prostředek úložiště přiřazen k podu, který ho požaduje. Mapování trvalých svazků na deklarace identity je 1:1.

Následující příklad manifestu YAML ukazuje trvalou deklaraci identity svazku, která používá výchozí třídu StorageClass a požaduje disk 5Gi:

apiVersion: v1 
kind: PersistentVolumeClaim 
metadata: 
  name: aks-hci-vhdx 
spec: 
  accessModes: 
  - ReadWriteOnce 
  storageClassName: default 
  resources: 
    requests: 
      storage: 5Gi 

Při vytváření definice podu zadáte trvalou deklaraci identity svazku, která bude vyžadovat požadované úložiště. Pak také určíte, jak volumeMount aplikace budou číst a zapisovat data. Následující příklad manifestu YAML ukazuje, jak se dá předchozí deklarace identity trvalého svazku použít k připojení svazku:/mnt/aks-hci

kind: Pod 
apiVersion: v1 
metadata: 
  name: nginx 
spec: 
  containers: 
    - name: myfrontend 
      image: k8s.gcr.io/nginx 
      volumeMounts: 
      - mountPath: "/mnt/aks-hci" 
        name: volume
  nodeSelector:
      kubernetes.io/os: linux
  volumes: 
    - name: volume 
      persistentVolumeClaim: 
        claimName: aks-hci-vhdx 

Následující příklad ukazuje, jak připojit svazek v kontejneru Windows a zadat písmeno jednotky a cestu:

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

Další kroky