Konfigurace úložiště
Koncepty úložiště Kubernetes
Kubernetes poskytuje vrstvu abstrakce infrastruktury nad základní technologií virtualizace (volitelné) a hardware. Způsob, jakým Kubernetes abstrahuje úložiště, je prostřednictvím tříd úložiště. Při zřizování podu můžete pro každý svazek zadat třídu úložiště. V době zřízení podu se zavolá zřizovací program třídy úložiště, který zřídí úložiště, a pak se v daném zřízeném úložišti vytvoří trvalý svazek a pak se pod připojí k trvalému svazku pomocí deklarace trvalého svazku.
Kubernetes poskytuje poskytovatelům infrastruktury úložiště způsob, jak připojit ovladače (označované také jako Doplňky), které rozšiřují Kubernetes. Doplňky úložiště musí být v souladu se standardem Rozhraní úložiště kontejnerů. Existuje desítky doplňků, které lze najít v tomto nekonficiálním seznamu ovladačů CSI. Konkrétní ovladač CSI, který používáte, závisí na faktorech, jako je to, jestli používáte službu Kubernetes hostované v cloudu, spravovanou službu Kubernetes nebo na tom, kterého poskytovatele OEM používáte pro váš hardware.
Pokud chcete zobrazit třídy úložiště nakonfigurované v clusteru Kubernetes, spusťte tento příkaz:
kubectl get storageclass
Příklad výstupu z clusteru Azure Kubernetes Service (AKS):
NAME PROVISIONER AGE
azurefile kubernetes.io/azure-file 15d
azurefile-premium kubernetes.io/azure-file 15d
default (default) kubernetes.io/azure-disk 4d3h
managed-premium kubernetes.io/azure-disk 4d3h
Spuštěním tohoto příkazu můžete získat podrobnosti o třídě úložiště:
kubectl describe storageclass/<storage class name>
Příklad:
kubectl describe storageclass/azurefile
Name: azurefile
IsDefaultClass: No
Annotations: kubectl.kubernetes.io/last-applied-configuration={"allowVolumeExpansion":true,"apiVersion":"storage.k8s.io/v1beta1","kind":"StorageClass","metadata":{"annotations":{},"labels":{"kubernetes.io/cluster-service":"true"},"name":"azurefile"},"parameters":{"sku
Name":"Standard_LRS"},"provisioner":"kubernetes.io/azure-file"}
Provisioner: kubernetes.io/azure-file
Parameters: skuName=Standard_LRS
AllowVolumeExpansion: True
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
Aktuálně zřízené trvalé svazky a deklarace identity trvalých svazků můžete zobrazit spuštěním následujících příkazů:
kubectl get persistentvolumes -n <namespace>
kubectl get persistentvolumeclaims -n <namespace>
Příklad zobrazení trvalých svazků:
kubectl get persistentvolumes -n arc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pvc-07fc7b9f-9a37-4796-9442-4405147120da 15Gi RWO Delete Bound arc/sqldemo11-data-claim default 7d3h
pvc-3e772f20-ed89-4642-b34d-8bb11b088afa 15Gi RWO Delete Bound arc/data-metricsdb-0 default 7d14h
pvc-41b33bbd-debb-4153-9a41-02ce2bf9c665 10Gi RWO Delete Bound arc/sqldemo11-logs-claim default 7d3h
pvc-4ccda3e4-fee3-4a89-b92d-655c04fa62ad 15Gi RWO Delete Bound arc/data-controller default 7d14h
pvc-63e6bb4c-7240-4de5-877e-7e9ea4e49c91 10Gi RWO Delete Bound arc/logs-controller default 7d14h
pvc-8a1467fe-5eeb-4d73-b99a-f5baf41eb493 10Gi RWO Delete Bound arc/logs-metricsdb-0 default 7d14h
pvc-8e2cacbc-e953-4901-8591-e77df9af309c 10Gi RWO Delete Bound arc/sqldemo10-logs-claim default 7d14h
pvc-9fb79ba3-bd3e-42aa-aa09-3090135d4513 15Gi RWO Delete Bound arc/sqldemo10-data-claim default 7d14h
pvc-a39c85d4-5cd9-4249-9915-68a70a9bb5e5 15Gi RWO Delete Bound arc/data-controldb default 7d14h
pvc-c9cbd74a-76ca-4be5-b598-0c7a45749bfb 10Gi RWO Delete Bound arc/logs-controldb default 7d14h
pvc-d576e9d4-0a09-4dd7-b806-be8ed461f8a4 10Gi RWO Delete Bound arc/logs-logsdb-0 default 7d14h
pvc-ecd7d07f-2c2c-421d-98d7-711ec5d4a0cd 15Gi RWO Delete Bound arc/data-logsdb-0 default 7d14h
Příklad zobrazení trvalých deklarací identity svazku:
kubectl get persistentvolumeclaims -n arc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
data-controldb Bound pvc-a39c85d4-5cd9-4249-9915-68a70a9bb5e5 15Gi RWO default 7d14h
data-controller Bound pvc-4ccda3e4-fee3-4a89-b92d-655c04fa62ad 15Gi RWO default 7d14h
data-logsdb-0 Bound pvc-ecd7d07f-2c2c-421d-98d7-711ec5d4a0cd 15Gi RWO default 7d14h
data-metricsdb-0 Bound pvc-3e772f20-ed89-4642-b34d-8bb11b088afa 15Gi RWO default 7d14h
logs-controldb Bound pvc-c9cbd74a-76ca-4be5-b598-0c7a45749bfb 10Gi RWO default 7d14h
logs-controller Bound pvc-63e6bb4c-7240-4de5-877e-7e9ea4e49c91 10Gi RWO default 7d14h
logs-logsdb-0 Bound pvc-d576e9d4-0a09-4dd7-b806-be8ed461f8a4 10Gi RWO default 7d14h
logs-metricsdb-0 Bound pvc-8a1467fe-5eeb-4d73-b99a-f5baf41eb493 10Gi RWO default 7d14h
sqldemo10-data-claim Bound pvc-9fb79ba3-bd3e-42aa-aa09-3090135d4513 15Gi RWO default 7d14h
sqldemo10-logs-claim Bound pvc-8e2cacbc-e953-4901-8591-e77df9af309c 10Gi RWO default 7d14h
sqldemo11-data-claim Bound pvc-07fc7b9f-9a37-4796-9442-4405147120da 15Gi RWO default 7d4h
sqldemo11-logs-claim Bound pvc-41b33bbd-debb-4153-9a41-02ce2bf9c665 10Gi RWO default 7d4h
Faktory, které je potřeba vzít v úvahu při výběru konfigurace úložiště
Výběr správné třídy úložiště je důležitý pro odolnost a výkon dat. Volba nesprávné třídy úložiště může způsobit riziko celkové ztráty dat v případě selhání hardwaru nebo může vést k nižšímu optimálnímu výkonu.
Obecně existují dva typy úložiště:
- Místní úložiště – úložiště zřízené na místních pevných discích na daném uzlu Tento druh úložiště může být ideální z hlediska výkonu, ale vyžaduje speciálně návrh pro redundanci dat tím, že replikuje data napříč několika uzly.
- Vzdálené, sdílené úložiště – úložiště zřízené na některých vzdálených úložných zařízeních – například SÍŤ SAN, NAS nebo cloudová služba úložiště, jako je EBS nebo Azure Files. Tento druh úložiště obvykle poskytuje redundanci dat automaticky, ale není tak rychlé, jak může být místní úložiště.
Třídy úložiště založené na systému souborů NFS
V závislosti na konfiguraci serveru NFS a zřizování třídy úložiště možná budete muset nastavit supplementalGroups
v konfiguracích podů pro instance databáze a možná budete muset změnit konfiguraci serveru NFS tak, aby používala ID skupin předávaných klientem (na rozdíl od vyhledávání ID skupin na serveru pomocí předaného ID uživatele). Obraťte se na správce systému souborů NFS a zjistěte, jestli se jedná o tento případ.
Vlastnost supplementalGroups
přebírá pole hodnot, které můžete nastavit při nasazení. Kontroler dat Azure Arc je použije pro všechny instance databáze, které vytvoří.
Pokud chcete nastavit tuto vlastnost, spusťte následující příkaz:
az arcdata dc config add --path custom/control.json --json-values 'spec.security.supplementalGroups="1234556"'
Konfigurace úložiště kontroleru dat
Některé služby v Azure Arc pro datové služby závisí na konfiguraci vzdáleného a sdíleného úložiště, protože služby nemají možnost replikovat data. Tyto služby se nacházejí v kolekci podů kontroleru dat:
Služba | Deklarace identity trvalých svazků |
---|---|
OpenSearch | <namespace>/logs-logsdb-0 , <namespace>/data-logsdb-0 |
InfluxDB | <namespace>/logs-metricsdb-0 , <namespace>/data-metricsdb-0 |
Instance SQL kontroleru | <namespace>/logs-controldb , <namespace>/data-controldb |
Služba rozhraní API kontroleru | <namespace>/data-controller |
V době zřízení kontroleru dat je třída úložiště, která se má použít pro každý z těchto trvalých svazků, určena předáním třídy --storage-class | -sc parametr příkazu az arcdata dc create
nebo nastavením tříd úložiště v souboru šablony nasazení control.json, který se používá. Pokud k vytvoření kontroleru dat v přímo připojeném režimu používáte Azure Portal, šablona nasazení, kterou zvolíte, má buď předdefinovanou třídu úložiště v šabloně, nebo můžete vybrat šablonu, která nemá předdefinovanou třídu úložiště. Pokud vaše šablona nedefinuje třídu úložiště, portál vás k tomu vyzve. Pokud používáte vlastní šablonu nasazení, můžete zadat třídu úložiště.
Šablony nasazení, které jsou k dispozici, mají zadanou výchozí třídu úložiště, která je vhodná pro cílové prostředí, ale lze ji během nasazení přepsat. Podrobný postup vytvoření vlastních šablon konfigurace pro změnu konfigurace třídy úložiště pro pody kontroleru dat v době nasazení.
Pokud třídu úložiště nastavíte pomocí nebo -sc
parametru--storage-class
, použije se tato třída úložiště pro třídy úložiště protokolů i datových úložišť. Pokud nastavíte třídy úložiště v souboru šablony nasazení, můžete pro protokoly a data zadat různé třídy úložiště.
Důležité faktory, které je potřeba vzít v úvahu při výběru třídy úložiště pro pody kontroleru dat:
- Abyste zajistili stálost dat, musíte použít vzdálenou třídu sdíleného úložiště, aby se v případě, že pod nebo uzel zemře, že se po přenesení podu může znovu připojit k trvalému svazku.
- Data zapsaná do instance SQL kontroleru, databáze metrik a databáze protokolů jsou obvykle poměrně nízká a ne citlivá na latenci, takže úložiště s ultra rychlým výkonem není kritické. Pokud máte uživatele, kteří často používají rozhraní Grafana a Kibana a máte velký počet instancí databáze, můžou uživatelé těžit z rychlejšího výkonu úložiště.
- Požadovaná kapacita úložiště je proměnná s počtem instancí databáze, které jste nasadili, protože se shromažďují protokoly a metriky pro každou instanci databáze. Data se uchovávají v protokolech a databázi metrik po dobu dvou (2) týdnů před vymazáním.
- Změna třídy úložiště po nasazení je obtížná, nezdokumentovaná a nepodporuje se. Nezapomeňte správně zvolit třídu úložiště v době nasazení.
Poznámka:
Pokud není zadána žádná třída úložiště, použije se výchozí třída úložiště. Na cluster Kubernetes může existovat pouze jedna výchozí třída úložiště. Výchozí třídu úložiště můžete změnit.
Konfigurace úložiště instancí databáze
Každá instance databáze obsahuje data, protokoly a trvalé svazky zálohování. Třídy úložiště pro tyto trvalé svazky je možné zadat v době nasazení. Pokud není zadaná žádná třída úložiště, použije se výchozí třída úložiště.
Při vytváření instance pomocí jedné az sql mi-arc create
nebo az postgres server-arc create
, existují čtyři parametry, které můžete použít k nastavení tříd úložiště:
Název parametru, krátký název | Použití |
---|---|
--storage-class-data , -d |
Třída úložiště pro všechny datové soubory (.mdf, ndf). Pokud není zadáno, nastaví se výchozí hodnota třídy úložiště pro kontroler dat. |
--storage-class-logs , -g |
Třída úložiště pro všechny soubory protokolu. Pokud není zadáno, nastaví se výchozí hodnota třídy úložiště pro kontroler dat. |
--storage-class-data-logs |
Třída úložiště pro soubory transakčních protokolů databáze. Pokud není zadáno, nastaví se výchozí hodnota třídy úložiště pro kontroler dat. |
--storage-class-backups |
Třída úložiště pro všechny záložní soubory. Pokud není zadáno, výchozí hodnota třídy úložiště pro data (--storage-class-data ).Pro zálohování použijte třídu úložiště podporující readWriteMany (RWX). Přečtěte si další informace o režimech přístupu. |
Upozorňující
Pokud nezadáte třídu úložiště pro zálohy, nasazení použije třídu úložiště určenou pro data. Pokud tato třída úložiště nepodporuje RWX, obnovení k určitému bodu v čase nemusí fungovat podle potřeby.
Následující tabulka uvádí cesty v kontejneru spravované instance Azure SQL, který je mapován na trvalý svazek pro data a protokoly:
Název parametru, krátký název | Cesta uvnitř mssql-miaa kontejneru |
Popis |
---|---|---|
--storage-class-data , -d |
/var/opt | Obsahuje adresáře pro instalaci mssql a další systémové procesy. Adresář mssql obsahuje výchozí data (včetně transakčních protokolů), adresáře protokolu chyb a zálohování. |
--storage-class-logs , -g |
/var/log | Obsahuje adresáře, které ukládají výstup konzoly (stderr, stdout), další informace o protokolování procesů uvnitř kontejneru. |
Následující tabulka uvádí cesty v kontejneru instance PostgreSQL, který je mapován na trvalý svazek pro data a protokoly:
Název parametru, krátký název | Cesta uvnitř kontejneru postgres | Popis |
---|---|---|
--storage-class-data , -d |
/var/opt/postgresql | Obsahuje adresáře dat a protokolů pro instalaci postgres. |
--storage-class-logs , -g |
/var/log | Obsahuje adresáře, které ukládají výstup konzoly (stderr, stdout), další informace o protokolování procesů uvnitř kontejneru. |
Každá instance databáze má samostatný trvalý svazek pro datové soubory, protokoly a zálohy. To znamená, že pro každý z těchto typů souborů existuje oddělení vstupně-výstupních operací, na které se vztahuje způsob, jakým zřizování svazků zřizuje úložiště. Každá instance databáze má vlastní deklarace identity trvalých svazků a trvalé svazky.
Pokud v dané instanci databáze existuje více databází, všechny databáze používají stejnou trvalou deklaraci identity svazku, trvalý svazek a třídu úložiště. Všechny zálohy – rozdílové zálohování protokolů i úplné zálohování používají stejnou deklaraci trvalého svazku a trvalý svazek. Deklarace identity trvalých svazků pro pody instancí databáze jsou uvedené níže:
Instance | Deklarace identity trvalých svazků |
---|---|
Spravovaná instance Azure SQL | <namespace>/logs-<instance name>-0 , <namespace>/data-<instance name>-0 |
Instance Azure Database for PostgreSQL | <namespace>/logs--<instance name>-0 , <namespace>/data--<instance name>-0 |
Azure PostgreSQL | <namespace>/logs-<instance name>-<ordinal> , <namespace>/data-<instance name>-0 |
Důležité faktory, které je potřeba vzít v úvahu při výběru třídy úložiště pro pody instancí databáze:
- Od verze datových služeb Azure Arc z února 2022 musíte pro zálohování zadat třídu úložiště podporující ReadWriteMany (RWX). Přečtěte si další informace o režimech přístupu. Pokud není pro zálohování zadaná žádná třída úložiště, použije se výchozí třída úložiště v kubernetes a pokud není schopná RWX, nasazení spravované instance Azure SQL nemusí proběhnout úspěšně.
- Databázové instance je možné nasadit buď v jednom vzoru podu, nebo ve více vzorech podů. Příkladem jednoho vzoru podu je cenová úroveň Azure SQL Managed Instance pro obecné účely. Příkladem více podů je vysoce dostupná Pro důležité obchodní informace cenová úroveň spravované instance Azure SQL. Instance databáze nasazené s jedním vzorem podů musí používat vzdálenou třídu sdíleného úložiště, aby se zajistila stálost dat a aby se v případě, že pod nebo uzel zemře, že se po přenesení podu může znovu připojit k trvalému svazku. Naproti tomu vysoce dostupná spravovaná instance Azure SQL používá skupiny dostupnosti AlwaysOn k replikaci dat z jedné instance do jiné synchronně nebo asynchronně. Zejména v případě, kdy se data replikují synchronně, existuje vždy více kopií dat – obvykle tři kopie. Z tohoto důvodu je možné použít místní úložiště nebo vzdálené třídy sdíleného úložiště pro soubory dat a protokolů. Pokud využíváte místní úložiště, data se zachovají i v případě neúspěšného podu, uzlu nebo hardwaru úložiště, protože existuje více kopií dat. Vzhledem k této flexibilitě se můžete rozhodnout použít místní úložiště pro lepší výkon.
- Výkon databáze je z velké části funkcí propustnosti vstupně-výstupních operací daného úložného zařízení. Pokud je vaše databáze silná na čtení nebo náročné zápisy, měli byste zvolit třídu úložiště s hardwarem navrženým pro tento typ úlohy. Pokud se například vaše databáze používá hlavně pro zápisy, můžete zvolit místní úložiště s RAID 0. Pokud se vaše databáze většinou používá pro čtení malého množství "horkých dat", ale existuje velký celkový objem úložiště studených dat, můžete zvolit zařízení SAN schopné vrstvené úložiště. Volba správné třídy úložiště se nijak neliší od výběru typu úložiště, které byste použili pro jakoukoli databázi.
- Pokud používáte zřizovací modul místního svazku úložiště, ujistěte se, že místní svazky zřízené pro data, protokoly a zálohy jsou každá cílová místa na různých podkladových úložných zařízeních, aby nedocházelo ke kolizím na vstupně-výstupních operacích disku. Operační systém by měl být také na svazku, který je připojený k samostatným diskům. Jedná se v podstatě o stejné pokyny jako u instance databáze na fyzickém hardwaru.
- Vzhledem k tomu, že všechny databáze v dané instanci sdílejí trvalou deklaraci identity svazku a trvalý svazek, nezapomeňte uvolnit zaneprázdněné databázové instance ve stejné instanci databáze. Pokud je to možné, oddělte zaneprázdněné databáze na vlastní instance databáze, abyste se vyhnuli kolizím vstupně-výstupních operací. K distribuci celkového vstupně-výstupního provozu mezi více uzlů použijte také cílení popisků uzlů na samostatné instance databáze. Pokud používáte virtualizaci, nezapomeňte zvážit distribuci vstupně-výstupních přenosů nejen na úrovni uzlu, ale také kombinované vstupně-výstupní aktivity probíhající všemi virtuálními počítači uzlů na daném fyzickém hostiteli.
Odhad požadavků na úložiště
Každý pod, který obsahuje stavová data, používá alespoň dva trvalé svazky – jeden trvalý svazek pro data a další trvalý svazek pro protokoly. Následující tabulka uvádí počet trvalých svazků potřebných pro jeden kontroler dat, spravovanou instanci Azure SQL, instanci Azure Database for PostgreSQL a instanci HyperScale Azure PostgreSQL:
Typ prostředku | Počet stavových podů | Požadovaný počet trvalých svazků |
---|---|---|
Správce údajů | 4 (control , controldb , logsdb , metricsdb ) |
4 * 2 = 8 |
Azure SQL Managed Instance | 1 | 2 |
Azure PostgreSQL | 1 | 2 |
Následující tabulka ukazuje celkový počet trvalých svazků potřebných pro ukázkové nasazení:
Typ prostředku | Počet instancí | Požadovaný počet trvalých svazků |
---|---|---|
Správce údajů | 0 | 4 * 2 = 8 |
Azure SQL Managed Instance | 5 | 5 * 2 = 10 |
Azure PostgreSQL | 5 | 5 * 2 = 10 |
Celkový počet trvalých svazků | 8 + 10 + 10 = 28 |
Tento výpočet lze použít k naplánování úložiště pro cluster Kubernetes na základě zřizovacího modulu úložiště nebo prostředí. Pokud se například pro cluster Kubernetes používá místní zřizování úložiště s pěti (5) uzly, pak pro ukázkové nasazení nad každým uzlem vyžaduje alespoň úložiště pro 10 trvalých svazků. Podobně při zřizování clusteru Azure Kubernetes Service (AKS) s pěti (5) uzly, které vyberou odpovídající velikost virtuálního počítače pro fond uzlů, aby bylo možné připojit 10 datových disků, je důležité. Další podrobnosti o velikosti uzlů pro potřeby úložiště pro uzly AKS najdete tady.
Výběr správné třídy úložiště
Místní a hraniční lokality
Partneři Microsoftu a OEM, OS a Kubernetes mají ověřovací program pro datové služby Azure Arc. Tento program poskytuje srovnatelné výsledky testů ze sady nástrojů pro testování certifikace. Testy vyhodnocují kompatibilitu funkcí, výsledky zátěžového testování a výkon a škálovatelnost. Výsledky testu označují použité operační systém, použité distribuce Kubernetes, použitý HW, použitý doplněk CSI a použité třídy úložiště. To pomáhá zákazníkům zvolit pro své požadavky nejlepší třídu úložiště, operační systém, distribuci Kubernetes a hardware. Další informace o tomto programu a výsledcích testů najdete zde.
Veřejný cloud, spravované služby Kubernetes
Pro veřejné cloudové spravované služby Kubernetes můžeme provést následující doporučení:
Veřejná cloudová služba | Doporučení |
---|---|
Azure Kubernetes Service (AKS) | Azure Kubernetes Service (AKS) má dva typy úložiště – Azure Files a Azure Spravované disky. Každý typ úložiště má dvě cenové úrovně a úrovně výkonu – Standard (HDD) a Premium (SSD). Čtyři třídy úložiště poskytované v AKS jsou azurefile (úroveň Azure Files Standard), azurefile-premium (úroveň Premium služby Soubory Azure), default (úroveň Azure Disky Úrovně Standard) a managed-premium (Úroveň Premium disků Azure). Výchozí třída úložiště je default (úroveň Azure Disks Standard). Mezi typy a úrovněmi, které byste měli zvážit, existují značné cenové rozdíly . Pro produkční úlohy s vysokými požadavky na výkon doporučujeme použít managed-premium všechny třídy úložiště. U úloh pro vývoj/testování, testování konceptu atd., kde je potřeba zvážit náklady, je pak azurefile nejlevnější možnost. Všechny čtyři možnosti je možné použít v situacích vyžadujících vzdálené sdílené úložiště, protože se jedná o všechna zařízení úložiště připojená k síti v Azure. Přečtěte si další informace o službě AKS Storage. |
AWS Elastic Kubernetes Service (EKS) | Služba Elastic Kubernetes Service od Amazonu má jednu primární třídu úložiště založenou na ovladači úložiště EBS CSI. To se doporučuje pro produkční úlohy. Existuje nový ovladač úložiště – ovladač úložiště EFS CSI – který je možné přidat do clusteru EKS, ale aktuálně je ve fázi beta a může se změnit. I když AWS říká, že tento ovladač úložiště je podporovaný pro produkční prostředí, nedoporučujeme ho používat, protože je stále v beta verzi a může se změnit. Třída úložiště EBS je výchozí a je volána gp2 . Přečtěte si další informace o službě EKS Storage. |
Google Kubernetes Engine (GKE) | Google Kubernetes Engine (GKE) má pouze jednu třídu úložiště s názvem standard . Tato třída se používá pro trvalé disky GCE. Je to jediná možnost, která je také výchozí. I když existuje místní nástroj pro zřizování statických svazků pro GKE, který můžete použít s přímo připojenými disky SSD, nedoporučujeme ho používat, protože se neudržuje ani nepodporuje Google. Přečtěte si další informace o úložišti GKE. |