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 používala dočasný disk s místním nvMe jako back-endovým úložištěm pro úlohy Kubernetes. Na konci budete mít pod, který jako úložiště používá místní NVMe.

Co je dočasný disk?

Pokud vaše aplikace potřebuje latenci úložiště v milisekundách a nevyžaduje stálost dat, můžete pomocí dočasného disku se službou Azure Container Storage splnit vaše požadavky 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.

Existují dva typy dočasného disku: místní NVMe a dočasné SSD. NVMe je navržený pro vysokorychlostní přenos dat mezi úložištěm a procesorem. Zvolte NVMe, pokud vaše aplikace potřebuje vyšší IOPS nebo propustnost než dočasné SSD, nebo vyžaduje více místa úložiště. Mějte na paměti, že Azure Container Storage podporuje pouze synchronní replikaci dat pro místní NVMe.

Vzhledem k dočasné povaze těchto disků azure Container Storage ve výchozím nastavení podporuje použití obecných dočasných svazků při použití dočasného disku. Některé případy použití ale můžou volat trvalé svazky i v případě, že data nejsou odolná. Pokud například chcete použít existující soubory YAML nebo šablony nasazení, které jsou pevně zakódované pro použití trvalých svazků, a vaše úloha podporuje replikaci na úrovni aplikace kvůli stálosti. V takových případech můžete aktualizovat instalaci služby Azure Container Storage a přidat poznámku acstor.azure.com/accept-ephemeral-storage=true do definice trvalé deklarace identity svazku, která podporuje vytváření trvalých svazků z dočasných fondů úložiště disků.

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.35.0 nebo novější). Přečtěte si , jak nainstalovat Azure CLI. Pokud používáte prostředí Bash v Azure Cloud Shellu, je už nainstalovaná nejnovější verze. Pokud chcete příkazy spouštět místně místo v Azure Cloud Shellu, nezapomeňte je spustit s oprávněními správce. Další informace najdete v tématu Začínáme s Azure Cloud Shellem.

  • Budete potřebovat klienta kubectlpříkazového řádku Kubernetes. Je už nainstalovaný, pokud používáte Azure Cloud Shell, nebo ho můžete nainstalovat místně spuštěním az aks install-cli příkazu.

  • Pokud jste ještě službu Azure Container Storage nenainstalovali, postupujte podle pokynů v tématu Použití služby Azure Container Storage se službou Azure Kubernetes Service.

  • 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í disk NVMe je k dispozici pouze v určitých typech virtuálních počítačů, například skladových položek virtuálních počítačů optimalizovaných pro úložiště nebo skladových položek virtuálních počítačů s akcelerovanými GPU. Pokud plánujete použít místní kapacitu NVMe, vyberte jednu z těchto skladových položek 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ásleduje příklad výstupu.

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

Doporučujeme, aby každý virtuální počítač měl minimálně čtyři virtuální procesory (vCPU) a každý fond uzlů má aspoň tři uzly.

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

Pomocí těchto kroků vytvořte a připojte obecný dočasný svazek.

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

Nejprve vytvořte fond úložiště, což je logické seskupení úložiště pro cluster Kubernetes tím, že ho definujete v souboru manifestu YAML.

Pokud jste povolili službu Azure Container Storage pomocí az aks create příkazů nebo az aks update příkazů, možná už máte fond úložiště. Slouží kubectl get sp -n acstor k získání seznamu fondů úložiště. Pokud už máte fond úložiště, který chcete použít, můžete tuto část přeskočit a přejít k zobrazení dostupných tříd úložiště.

Následujícím postupem vytvoříte fond úložiště pomocí místního NVMe.

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

  2. Vložte následující kód a soubor uložte. Hodnota názvu fondu úložiště může být libovolná.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
    
  3. Pomocí souboru manifestu YAML vytvořte fond úložiště.

    kubectl apply -f acstor-storagepool.yaml 
    

    Po dokončení vytváření fondu úložiště se zobrazí zpráva typu:

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    Můžete také spustit tento příkaz a zkontrolovat stav fondu úložiště. Nahraďte <storage-pool-name> hodnotou názvu fondu úložiště. V tomto příkladu by hodnota byla dočasný disk-nvme.

    kubectl describe sp <storage-pool-name> -n acstor
    

Po vytvoření fondu úložiště vytvoří Služba Azure Container Storage za vás třídu úložiště pomocí konvence acstor-<storage-pool-name>vytváření názvů .

2. Zobrazení dostupných tříd úložiště

Jakmile je fond úložiště připravený k použití, musíte vybrat třídu úložiště, abyste definovali, jak se úložiště dynamicky vytváří při vytváření a nasazování svazků.

Spuštěním zobrazte kubectl get sc dostupné třídy úložiště. Měla by se zobrazit třída úložiště s názvem acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Důležité

Nepoužívejte třídu úložiště, která je označená jako interní. Je to interní třída úložiště, která je potřebná pro fungování služby Azure Container Storage.

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

Vytvořte pod pomocí Fio (flexibilní V/V Tester) 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 acstor-pod.yaml.

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

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralvolume
      volumes:
        - name: ephemeralvolume
          ephemeral:
            volumeClaimTemplate:
              metadata:
                labels:
                  type: my-ephemeral-volume
              spec:
                accessModes: [ "ReadWriteOnce" ]
                storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    Při změně velikosti úložiště svazků se ujistěte, že je velikost menší než dostupná kapacita dočasného disku jednoho uzlu. Viz Kontrola dočasné kapacity disku uzlu.

  3. Nasaďte pod pomocí souboru manifestu YAML.

    kubectl apply -f acstor-pod.yaml
    

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

    pod/fiopod created
    
  4. Zkontrolujte, jestli je pod spuštěný a že se k podu úspěšně vázala dočasné deklarace svazku:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  5. Zkontrolujte testování fio a podívejte se na aktuální stav:

    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
    

Teď jste nasadili pod, který jako úložiště používá místní NVMe, a můžete ho použít pro úlohy Kubernetes.

Vytvoření a připojení trvalých svazků

Pokud chcete vytvořit trvalý svazek z dočasného fondu úložiště disků, musíte do deklarací trvalých deklarací svazků (PVCS) zahrnout poznámku, abyste měli jistotu, že chcete používat trvalé svazky, i když jsou data dočasné. Kromě toho je potřeba před vytvořením trvalých deklarací identity svazku --ephemeral-disk-volume-type povolit příznak s PersistentVolumeWithAnnotation hodnotou v clusteru.

Pomocí těchto kroků vytvořte a připojte trvalý svazek.

1. Aktualizace instalace služby Azure Container Storage

Spuštěním následujícího příkazu aktualizujte instalaci služby Azure Container Storage, abyste umožnili vytváření trvalých svazků z dočasných fondů úložiště disků.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option NVMe --ephemeral-disk-volume-type PersistentVolumeWithAnnotation 

2. Vytvoření fondu úložiště

Vytvořte fond úložiště, což je logické seskupení úložiště pro cluster Kubernetes tím, že ho definujete v souboru manifestu YAML.

Pokud jste povolili službu Azure Container Storage pomocí az aks create příkazů nebo az aks update příkazů, možná už máte fond úložiště. Slouží kubectl get sp -n acstor k získání seznamu fondů úložiště. Pokud už máte fond úložiště, který chcete použít, můžete tuto část přeskočit a přejít k zobrazení dostupných tříd úložiště.

Následujícím postupem vytvoříte fond úložiště pomocí místního NVMe.

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

  2. Vložte následující kód a soubor uložte. Hodnota názvu fondu úložiště může být libovolná.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
    
  3. Pomocí souboru manifestu YAML vytvořte fond úložiště.

    kubectl apply -f acstor-storagepool.yaml 
    

    Po dokončení vytváření fondu úložiště se zobrazí zpráva typu:

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    Můžete také spustit tento příkaz a zkontrolovat stav fondu úložiště. Nahraďte <storage-pool-name> hodnotou názvu fondu úložiště. V tomto příkladu by hodnota byla dočasný disk-nvme.

    kubectl describe sp <storage-pool-name> -n acstor
    

Po vytvoření fondu úložiště vytvoří Služba Azure Container Storage za vás třídu úložiště pomocí konvence acstor-<storage-pool-name>vytváření názvů .

3. Zobrazení dostupných tříd úložiště

Jakmile je fond úložiště připravený k použití, musíte vybrat třídu úložiště, abyste definovali, jak se úložiště dynamicky vytváří při vytváření a nasazování svazků.

Spuštěním zobrazte kubectl get sc dostupné třídy úložiště. Měla by se zobrazit třída úložiště s názvem acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Důležité

Nepoužívejte třídu úložiště, která je označená jako interní. Je to interní třída úložiště, která je potřebná pro fungování služby Azure Container Storage.

4. Vytvoření trvalé deklarace identity svazku

Deklarace trvalého svazku se používá k automatickému zřizování úložiště na základě třídy úložiště. Pomocí těchto kroků vytvořte PVC pomocí nové třídy úložiště.

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

  2. Vložte následující kód a soubor uložte. Hodnota PVC name může být cokoli, co chcete.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
      annotations:
        acstor.azure.com/accept-ephemeral-storage: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    Při změně velikosti úložiště svazků se ujistěte, že je velikost menší než dostupná kapacita dočasného disku jednoho uzlu. Viz Kontrola dočasné kapacity disku uzlu.

  3. Pomocí souboru manifestu YAML vytvořte PVC.

    kubectl apply -f acstor-pvc.yaml
    

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

    persistentvolumeclaim/ephemeralpvc created
    

    Stav PVC můžete ověřit spuštěním následujícího příkazu:

    kubectl describe pvc ephemeralpvc
    

Po vytvoření PVC je připraven k použití podem.

5. Nasazení podu a připojení trvalého svazku

Vytvořte pod pomocí Fio (flexibilní V/V Tester) pro srovnávací testy a simulaci úloh a zadejte cestu připojení k trvalému svazku. V případě deklarace identity použijte hodnotu názvu , kterou jste použili při vytváření deklarace trvalého svazku.

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

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

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  3. Nasaďte pod pomocí souboru manifestu YAML.

    kubectl apply -f acstor-pod.yaml
    

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

    pod/fiopod created
    
  4. Zkontrolujte, že je pod spuštěný a že deklarace trvalého svazku byla úspěšně svázaná s podem:

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. Zkontrolujte testování fio a podívejte se na aktuální stav:

    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
    

Teď jste nasadili pod, který používá místní NVMe, a můžete ho použít pro úlohy Kubernetes.

Správa svazků a fondů úložiště

V této části se dozvíte, jak zkontrolovat dostupnou kapacitu dočasného disku pro jeden uzel, jak rozšířit nebo odstranit fond úložiště a jak optimalizovat výkon.

Kontrola dočasné kapacity disku uzlu

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

Spuštěním následujícího příkazu zkontrolujte dostupnou kapacitu dočasného disku pro jeden uzel.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-nvme-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

V tomto příkladu je dostupná kapacita dočasného disku pro jeden uzel 75031990272 bajty nebo 69 GiB.

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

Fondy úložiště zálohované místním nvMe můžete rozšířit, abyste mohli rychle a bez výpadků vertikálně navýšit kapacitu. Zmenšení fondů úložiště se v současné době nepodporuje.

Vzhledem k tomu, že fond úložiště zálohovaný dočasným diskem používá prostředky místního úložiště na uzlech clusteru AKS, rozšíření fondu úložiště vyžaduje přidání dalšího uzlu do clusteru. Podle těchto pokynů rozbalte fond úložiště.

  1. Spuštěním následujícího příkazu přidejte uzel do clusteru AKS. Nahraďte <cluster-name>, <nodepool name> a <resource-group-name> svými vlastními hodnotami. Pokud chcete získat název fondu uzlů, spusťte kubectl get nodespříkaz .

    az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
    
  2. Spusťte kubectl get nodes a uvidíte, že se uzel přidal do clusteru.

  3. Spusťte kubectl get sp -A a měli byste vidět, že se kapacita fondu úložiště zvýšila.

Odstranění fondu úložiště

Pokud chcete odstranit fond úložiště, spusťte následující příkaz. Nahraďte <storage-pool-name> názvem fondu úložiště.

kubectl delete sp -n acstor <storage-pool-name>

Optimalizace výkonu při použití místního NVMe

V závislosti na požadavcích na výkon vaší úlohy si můžete vybrat ze tří různých úrovní výkonu: Basic, Standard a Premium. Váš výběr bude mít vliv na počet virtuálních procesorů, které komponenty Azure Container Storage spotřebovávají v uzlech, na kterých je nainstalovaná. Standard je výchozí konfigurace, pokud neaktualizujete úroveň výkonu.

Tyto tři úrovně nabízejí jiný rozsah IOPS. Následující tabulka obsahuje pokyny k tomu, co můžete u každé z těchto úrovní očekávat. K dosažení těchto čísel s následující konfigurací jsme použili FIO, oblíbený nástroj pro srovnávací testy:

  • AKS: Skladová položka uzlu – Standard_L16s_v3;
  • FIO: Velikost bloku - 4 kB; Hloubka fronty – 32; Numjobs - počet jader přiřazených komponentám úložiště kontejnerů; Vzor přístupu - náhodný; Velikost sady pracovních procesů – 32G
Úroveň Počet virtuálních procesorů 100 % vstupně-výstupních operací čtení za sekundu 100 % IOPS zápisu
Basic 12,5 % celkového počtu jader virtuálních počítačů Až 120 000 Až 90 000
Standard (výchozí) 25 % celkového počtu jader virtuálních počítačů Až 220 000 Až 180 000
Premium 50 % celkového počtu jader virtuálních počítačů Až 550 000 Až 360 000

Poznámka:

Spotřeba paměti RAM a obrovských stránek zůstane konzistentní ve všech úrovních: 1 GiB paměti RAM a 2 GiB obrovských stránek.

Jakmile identifikujete úroveň výkonu, která odpovídá vašim potřebám, můžete spustit následující příkaz, který aktualizuje úroveň výkonu instalace služby Azure Container Storage. Nahraďte <performance tier> základní, standardní nebo premium.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type> --ephemeral-disk-nvme-perf-tier <performance-tier>

Viz také