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
kubectl
příkazového řádku Kubernetes. Je už nainstalovaný, pokud používáte Azure Cloud Shell, nebo ho můžete nainstalovat místně spuštěnímaz 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.
Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například
code acstor-storagepool.yaml
.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
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.
Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například
code acstor-pod.yaml
.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.
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
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
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.
Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například
code acstor-storagepool.yaml
.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
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ě.
Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například
code acstor-pvc.yaml
.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.
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.
Pomocí oblíbeného textového editoru vytvořte soubor manifestu YAML, například
code acstor-pod.yaml
.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
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
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
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ě.
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ťtekubectl get nodes
pří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
Spusťte
kubectl get nodes
a uvidíte, že se uzel přidal do clusteru.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>