Sdílet prostřednictvím


Použití služby Azure Container Storage s místním nvMe

Azure Container Storage je cloudová služba pro správu svazků, nasazení a orchestraci sestavená nativně pro kontejnery. V tomto článku se dozvíte, jak nakonfigurovat službu Azure Container Storage tak, aby pro úlohy Kubernetes používala místní disk NVMe jako back-endové úložiště. NVMe je navržený pro vysokorychlostní přenos dat mezi úložištěm a procesorem a poskytuje vysokou IOPS a propustnost.

Důležité

Tento článek se týká služby Azure Container Storage (verze 2.x.x), která aktuálně podporuje pouze místní disk NVMe pro zálohování úložiště. Podrobnosti o starších verzích najdete v dokumentaci ke službě Azure Container Storage (verze 1.x.x).

Co je místní NVMe?

Pokud vaše aplikace potřebuje latenci úložiště v milisekundách a vysokou propustnost, můžete použít místní disky NVMe se službou Azure Container Storage ke splnění vašich požadavků na výkon. Dočasné znamená, že disky se nasadí na místní virtuální počítač, který je hostitelem clusteru AKS, a neuloží se do služby Úložiště Azure. Pokud virtuální počítač zastavíte nebo uvolníte, dojde ke ztrátě dat na těchto discích. Místní disky NVMe se nabízejí na vybraných rodinách virtuálních počítačů Azure, jako jsou virtuální počítače optimalizované pro úložiště .

Azure Container Storage ve výchozím nastavení vytváří obecné dočasné svazky při použití místních disků NVMe. Pro případy použití, které vyžadují trvalé deklarace identity svazku, můžete přidat poznámku localdisk.csi.acstor.io/accept-ephemeral-storage: "true" do šablony trvalé deklarace identity svazku.

Prokládání dat

Kvůli maximalizaci výkonu Azure Container Storage automaticky prokládání dat napříč všemi dostupnými místními disky NVMe na jednotlivých virtuálních počítačích. Striping je technika, kdy se data dělí na malé bloky dat a rovnoměrně zapisují na více discích současně, což zvyšuje propustnost a zlepšuje celkový výkon vstupně-výstupních operací. Toto chování je ve výchozím nastavení povolené a nelze ho zakázat.

Vzhledem k tomu, že agregace výkonu napříč těmito diskovými poli s pruhy mohou větší virtuální počítače, které zpřístupňují více NVMe disků, umožnit podstatně vyšší IOPS a šířku pásma. Když vyberete větší řadu virtuálních počítačů, budou vaše úlohy těžit z dodatečné agregované propustnosti bez další konfigurace.

Řada Lsv3 se například škáluje z jedné jednotky NVMe o velikosti 1,92 TB na Standard_L8s_v3 (přibližně 400 000 IOPS a 2 000 MB/s) až na 10 jednotek NVMe na Standard_L80s_v3 (přibližně 3,8 milionu IOPS a 20 000 MB/s).

Požadavky

  • Pokud ještě nemáte předplatné Azure, vytvořte si napřed bezplatný účet.

  • Tento článek vyžaduje nejnovější verzi Azure CLI (2.77.0 nebo novější). Přečtěte si , jak nainstalovat Azure CLI. Vyhněte se Azure Cloud Shellu, protože az upgrade není v Cloud Shellu k dispozici. Nezapomeňte spouštět příkazy v tomto článku s oprávněními správce.

  • Projděte si pokyny k instalaci a ujistěte se, že je služba Azure Container Storage správně nainstalovaná.

  • Potřebujete klienta příkazového řádku Kubernetes. kubectl Můžete ho nainstalovat místně spuštěním az aks install-cli příkazu.

  • Zkontrolujte, jestli je vaše cílová oblast podporovaná v oblastech Azure Container Storage.

Zvolte typ virtuálního počítače, který podporuje místní NVMe.

Místní disky NVMe jsou dostupné jenom v určitých typech virtuálních počítačů, například virtuálních počítačů optimalizovaných pro úložiště nebo virtuálních počítačích s akcelerovanými gpu. Pokud plánujete použít místní kapacitu NVMe, zvolte jednu z těchto velikostí virtuálních počítačů.

Spuštěním následujícího příkazu získejte typ virtuálního počítače, který se používá s fondem uzlů. Nahraďte <resource group> a <cluster name> nahraďte vlastními hodnotami. Nemusíte zadávat hodnoty pro PoolName nebo VmSize, takže ponechte dotaz, jak je znázorněno zde.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

Následující výstup je příkladem.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

Poznámka:

Ve službě Azure Container Storage (verze 2.x.x) teď můžete používat clustery s méně než třemi uzly.

Vytvoření a připojení obecných dočasných svazků

Pokud jste to ještě neudělali, nainstalujte Službu Azure Container Storage.

Pomocí těchto kroků vytvořte a připojte obecný dočasný svazek pomocí služby Azure Container Storage.

1. Vytvoření třídy úložiště

Na rozdíl od předchozích verzí, které vyžadovaly vytvoření vlastního prostředku fondu úložiště, Azure Container Storage (verze 2.x.x) používá standardní třídy úložiště Kubernetes.

Pokud chcete vytvořit třídu úložiště pomocí místního NVMe, postupujte podle těchto kroků.

  1. Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například code storageclass.yaml.

  2. Vložte následující kód a soubor uložte.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local
    provisioner: localdisk.csi.acstor.io
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    
  3. Pomocí souboru manifestu YAML vytvořte fond úložiště.

    kubectl apply -f storageclass.yaml
    

2. Ověření třídy úložiště

Spuštěním následujícího příkazu ověřte, že je vytvořená třída úložiště:

kubectl get storageclass local

Zobrazený výstup by měl vypadat přibližně takto:

NAME    PROVISIONER                RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
local   localdisk.csi.acstor.io    Delete          WaitForFirstConsumer   true                   10s

3. Nasazení podu s obecným dočasným svazkem

Vytvořte pod pomocí fio (flexibilního V/V Testeru) pro srovnávací testy a simulaci úloh, která používá obecný dočasný svazek.

  1. Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například code fiopod.yaml.

  2. Vložte následující kód a soubor uložte.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: fio
          image: mayadata/fio
          args: ["sleep", "1000000"]
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              spec:
                volumeMode: Filesystem
                accessModes: ["ReadWriteOnce"]
                storageClassName: local
                resources:
                  requests:
                    storage: 10Gi
    
  3. Nasaďte pod pomocí souboru manifestu YAML.

    kubectl apply -f fiopod.yaml
    

4. Ověření nasazení a spuštění srovnávacích testů

Zkontrolujte, jestli je pod spuštěný:

kubectl get pod fiopod

Pod by se měl zobrazit ve spuštěném stavu. Po spuštění můžete spustit srovnávací test Fio:

kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60

Vytvoření a připojení trvalých svazků s poznámkou o efemérním úložišti

Obecné dočasné svazky se sice doporučují pro dočasné úložiště, ale Azure Container Storage také podporuje trvalé svazky s dočasným úložištěm v případě potřeby kompatibility se stávajícími úlohami.

Poznámka:

Azure Container Storage (verze 2.x.x) používá novou poznámku localdisk.csi.acstor.io/accept-ephemeral-storage: "true" místo předchozího acstor.azure.com/accept-ephemeral-storage: "true".

1. Vytvoření třídy úložiště (pokud ještě není vytvořeno)

Pokud jste to ještě neudělali, nainstalujte Službu Azure Container Storage.

Pokud jste nevytvořili třídu úložiště, která používá místní NVMe v předchozí části, vytvořte ji teď:

  1. Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například code storageclass.yaml.

  2. Vložte následující kód a soubor uložte.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: local
    provisioner: localdisk.csi.acstor.io
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    
  3. Pomocí souboru manifestu YAML vytvořte fond úložiště.

    kubectl apply -f storageclass.yaml
    

2. Nasazení stavové sady s trvalými svazky

Pokud potřebujete použít nároky na trvalé svazky, které nejsou svázané s životním cyklem podů, musíte přidat anotaci localdisk.csi.acstor.io/accept-ephemeral-storage: "true". Data na svazku jsou místní pro daný uzel a při odstranění uzlu nebo přesunutí podu do jiného uzlu dojde ke ztrátě.

Zde je příklad stavové sady s použitím trvalých svazků s anotací pro dočasné úložiště.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: statefulset-lcd-lvm-annotation
  labels:
    app: busybox
spec:
  podManagementPolicy: Parallel
  serviceName: statefulset-lcd
  replicas: 10
  template:
    metadata:
      labels:
        app: busybox
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - name: statefulset-lcd
          image: mcr.microsoft.com/azurelinux/busybox:1.36
          command:
            - "/bin/sh"
            - "-c"
            - set -euo pipefail; trap exit TERM; while true; do date -u +"%Y-%m-%dT%H:%M:%SZ" >> /mnt/lcd/outfile; sleep 1; done
          volumeMounts:
            - name: persistent-storage
              mountPath: /mnt/lcd
  updateStrategy:
    type: RollingUpdate
  selector:
    matchLabels:
      app: busybox
  volumeClaimTemplates:
    - metadata:
        name: persistent-storage
        annotations:
          localdisk.csi.acstor.io/accept-ephemeral-storage: "true"
      spec:
        accessModes: ["ReadWriteOnce"]
        storageClassName: local
        resources:
          requests:
            storage: 10Gi

Uložte a použijte tento YAML k vytvoření stavové sady s trvalými svazky:

kubectl apply -f statefulset-pvc.yaml

Správa úložiště

V této části se dozvíte, jak zkontrolovat kapacitu dočasného disku uzlu, rozšířit kapacitu úložiště a odstranit prostředky úložiště.

Kontrola dočasné kapacity disku uzlu

Dočasný svazek je přidělen na jednom uzlu. Při konfiguraci velikosti efemérních svazků by velikost měla být menší než dostupná kapacita efemérního disku jednoho uzlu.

Ujistěte se, že existuje třída StorageClass pro localdisk.csi.acstor.io . Spuštěním následujícího příkazu zkontrolujte dostupnou kapacitu dočasného disku pro každý uzel.

kubectl get csistoragecapacities.storage.k8s.io -n kube-system -o custom-columns=NAME:.metadata.name,STORAGE_CLASS:.storageClassName,CAPACITY:.capacity,NODE:.nodeTopology.matchLabels."topology\.localdisk\.csi\.acstor\.io/node"

Měl by se zobrazit výstup podobný následujícímu příkladu:

NAME          STORAGE_CLASS   CAPACITY    NODE
csisc-2pkx4   local           1373172Mi   aks-storagepool-31410930-vmss000001
csisc-gnmm9   local           1373172Mi   aks-storagepool-31410930-vmss000000

Pokud narazíte na prázdný výstup kapacity, ověřte, že existuje třída StorageClass pro localdisk.csi.acstor.io . Prostředek csistoragecapacities.storage.k8s.io se vygeneruje pouze po vytvoření třídy StorageClass pro localdisk.csi.acstor.io .

Rozšíření kapacity úložiště

Vzhledem k tomu, že dočasné diskové úložiště používá místní prostředky na uzlech clusteru AKS, rozšíření kapacity úložiště vyžaduje přidání uzlů do clusteru.

Pokud chcete do clusteru přidat uzel, spusťte následující příkaz. Nahraďte <cluster-name>hodnoty a <nodepool-name><resource-group><new-count> nahraďte hodnotami.

az aks nodepool scale --cluster-name <cluster-name> --name <nodepool-name> --resource-group <resource-group> --node-count <new-count>

Odstraňte prostředky úložiště

Chcete-li vyčistit prostředky úložiště, musíte nejprve odstranit všechny PersistentVolumeClaims a/nebo PersistentVolumes. Odstranění třídy StorageClass služby Azure Container Storage automaticky neodebere vaše stávající PersistentVolumes/PersistentVolumeClaims.

Pokud chcete odstranit třídu úložiště s názvem local, spusťte následující příkaz:

kubectl delete storageclass local

Viz také