Základní koncepty Kubernetes pro Azure Kubernetes Service (AKS)
Vývoj aplikací se i nadále přesouvá směrem k přístupu založenému na kontejnerech, což zvyšuje naši potřebu orchestrace a správy prostředků. Kubernetes jako přední platforma poskytuje spolehlivé plánování aplikačních úloh odolných proti chybám. Azure Kubernetes Service (AKS), což je spravovaná nabídka Kubernetes, dále zjednodušuje nasazování a správu aplikací založených na kontejnerech.
Tento článek představuje:
- Základní komponenty infrastruktury Kubernetes:
- řídicí rovina
- Uzly
- fondy uzlů
- Zdroje informací o úlohách:
- pody
- Nasazení
- Nastaví
- Jak seskupit prostředky do oborů názvů.
Co je Kubernetes?
Kubernetes je rychle se rozvíjející platforma, která spravuje kontejnerové aplikace a jejich přidružené síťové komponenty a komponenty úložiště. Kubernetes se zaměřuje na úlohy aplikací, nikoli na základní komponenty infrastruktury. Kubernetes poskytuje deklarativní přístup k nasazením, který je podporovaný robustní sadou rozhraní API pro operace správy.
Pomocí Kubernetes můžete vytvářet a spouštět moderní, přenosné aplikace založené na mikroslužbách a orchestrovat a spravovat dostupnost komponent aplikací. Kubernetes podporuje bezstavové i stavové aplikace s tím, jak týmy postupují přechodem na aplikace založené na mikroslužbách.
Kubernetes jako otevřená platforma umožňuje vytvářet aplikace pomocí preferovaného programovacího jazyka, operačního systému, knihoven nebo sběrnice zasílání zpráv. Stávající nástroje pro kontinuální integraci a průběžné doručování (CI/CD) se můžou integrovat s Kubernetes a plánovat a nasazovat vydané verze.
AKS poskytuje spravovanou službu Kubernetes, která snižuje složitost úloh nasazení a základních úloh správy, jako je koordinace upgradu. Platforma Azure spravuje řídicí rovinu AKS a vy platíte pouze za uzly AKS, na kterých běží vaše aplikace.
Architektura clusteru Kubernetes
Cluster Kubernetes je rozdělený na dvě komponenty:
- Řídicí rovina: Poskytuje základní služby Kubernetes a orchestraci úloh aplikací.
- Uzly: Spouští úlohy aplikací.
Řídicí rovina
Při vytváření clusteru AKS se automaticky vytvoří a nakonfiguruje řídicí rovina. Tato řídicí rovina se dodává zdarma jako spravovaný prostředek Azure abstrahovaný od uživatele. Platíte jen za uzly připojené ke clusteru AKS. Řídicí rovina a její prostředky se nacházejí jen v oblasti, ve které jste cluster vytvořili.
Řídicí rovina zahrnuje následující základní komponenty Kubernetes:
Komponenta | Popis |
---|---|
kube-apiserver | Server rozhraní API je způsob, jakým se zveřejňují základní rozhraní API Kubernetes. Tato komponenta poskytuje interakci s nástroji pro správu, jako kubectl je nebo řídicí panel Kubernetes. |
etcd | Kvůli zachování stavu clusteru a konfigurace Kubernetes je vysoce dostupný etcd úložištěm klíčových hodnot v rámci Kubernetes. |
kube-scheduler | Když vytváříte nebo škálujete aplikace, plánovač určí, na kterých uzlech může být úloha spuštěná, a spustí je. |
kube-controller-manager | Správce kontroleru dohlíží na řadu menších kontrolerů, které provádějí akce, jako je replikace podů a zpracování operací uzlů. |
AKS poskytuje řídicí rovinu s jedním tenantem s vyhrazeným serverem rozhraní API, plánovačem atd. Definujete počet a velikost uzlů a platforma Azure nakonfiguruje zabezpečenou komunikaci mezi řídicí rovinou a uzly. K interakci s řídicí rovinou dochází prostřednictvím rozhraní API Kubernetes, jako kubectl
je nebo řídicí panel Kubernetes.
I když nemusíte konfigurovat komponenty (jako je vysoce dostupné úložiště etcd ) s touto spravovanou řídicí rovinou, nemůžete k řídicí rovině přistupovat přímo. Upgrady řídicí roviny a uzlů Kubernetes se orchestrují prostřednictvím Azure CLI nebo Azure Portal. Při řešení možných problémů můžete zkontrolovat protokoly řídicí roviny prostřednictvím protokolů služby Azure Monitor.
Pokud chcete nakonfigurovat řídicí rovinu nebo k této rovině získat přímý přístup, nasaďte cluster Kubernetes s využitím poskytovatele rozhraní API clusteru Azure.
Související osvědčené postupy najdete v tématu Osvědčené postupy pro zabezpečení clusterů a upgrady v AKS.
Uzly a fondy uzlů
Ke spouštění aplikací a podpůrných služeb potřebujete uzel Kubernetes. Cluster AKS má alespoň jeden uzel, virtuální počítač Azure, na kterém běží komponenty uzlů Kubernetes a modul runtime kontejneru.
Komponenta | Popis |
---|---|
kubelet |
Agent Kubernetes, který zpracovává požadavky orchestrace z řídicí roviny spolu s plánováním a spouštěním požadovaných kontejnerů. |
kube-proxy | Zpracovává virtuální sítě v každém uzlu. Proxy server směruje síťový provoz a spravuje přidělování IP adres pro služby a pody. |
modul runtime kontejneru | Umožňuje kontejnerizovaným aplikacím spouštět a pracovat s dalšími prostředky, jako je virtuální síť a úložiště. Clustery AKS používající Kubernetes verze 1.19 nebo novější pro fondy uzlů s Linuxem se používají containerd jako modul runtime kontejneru. Počínaje platformou Kubernetes verze 1.20 pro fondy containerd uzlů s Windows se dá použít ve verzi Preview pro modul runtime kontejneru, ale výchozím modulem runtime kontejneru je stále Docker. Clustery AKS, které používají předchozí verze Kubernetes pro fondy uzlů, používají jako modul runtime kontejneru Docker. |
Velikost virtuálního počítače Azure pro vaše uzly definuje procesory úložiště, paměť, velikost a dostupný typ (například vysoce výkonný disk SSD nebo běžný disk HDD). Naplánujte velikost uzlu podle toho, jestli vaše aplikace můžou vyžadovat velké množství procesoru a paměti nebo vysoce výkonné úložiště. Vertikálně navyšte kapacitu počtu uzlů v clusteru AKS, abyste vyhověli poptávce.
V AKS je image virtuálního počítače pro uzly vašeho clusteru založená na Ubuntu Linuxu nebo Windows Serveru 2019. Když vytvoříte cluster AKS nebo škálujete počet uzlů na více instancí, platforma Azure automaticky vytvoří a nakonfiguruje požadovaný počet virtuálních počítačů. Uzly agentů se účtují jako virtuální počítače úrovně Standard, takže se automaticky uplatní všechny slevy za velikost virtuálních počítačů (včetně rezervací Azure).
U spravovaných disků se výchozí velikost disku a výkon přiřadí podle vybrané skladové položky virtuálního počítače a počtu virtuálních procesorů. Další informace najdete v tématu Výchozí nastavení velikosti disku s operačním systémem.
Pokud potřebujete pokročilou konfiguraci a kontrolu nad modulem runtime kontejneru a operačním systémem uzlu Kubernetes, můžete nasadit samoobslužně spravovaný cluster pomocí poskytovatele rozhraní Api clusteru Azure.
Rezervace prostředků
AKS využívá prostředky uzlu k tomu, aby uzel fungoval jako součást clusteru. Toto použití může vytvořit nesrovnalost mezi celkovými prostředky vašeho uzlu a prostředky, které lze v AKS přidělovat. Tyto informace si zapamatujte při nastavování požadavků a omezení pro uživatelem nasazené pody.
Pokud chcete najít přidělené prostředky uzlu, spusťte:
kubectl describe node [NODE_NAME]
Za účelem zachování výkonu a funkčnosti uzlu si AKS vyhrazuje prostředky na každém uzlu. S tím, jak se uzel zvětšuje v prostředcích, roste rezervace prostředků kvůli vyšší potřebě správy uživatelem nasazených podů.
Poznámka
Použití doplňků AKS, jako je Container Insights (OMS), spotřebuje další prostředky uzlů.
Vyhrazeny jsou dva typy prostředků:
Procesor
Vyhrazený procesor závisí na typu uzlu a konfiguraci clusteru, což může způsobit méně přiděleného procesoru kvůli spouštění dalších funkcí.Jádra procesoru na hostiteli 1 2 4 8 16 32 64 Kube-reserved (millicores) 60 100 140 180 260 420 740 Memory (Paměť)
Paměť využívaná službou AKS zahrnuje součet dvou hodnot.kubelet
Daemon
Proceskubelet
démon se nainstaluje na všechny uzly agenta Kubernetes, aby bylo možné spravovat vytváření a ukončování kontejneru.Ve výchozím nastavení v AKS
kubelet
má démon pravidlo vyřazení memory.available<750Mi , což zajišťuje, že uzel musí mít vždy alokovatelné alespoň 750 Mi. Pokud je hostitel nižší než tato prahová hodnota dostupné paměti,kubelet
aktivuje se aktivace, která ukončí jeden ze spuštěných podů a uvolní paměť na hostitelském počítači.Regresivní rychlost rezervací paměti , aby správně fungoval proces démon kubelet (kube-reserved).
- 25 % z prvních 4 GB paměti
- 20 % z dalších 4 GB paměti (až 8 GB)
- 10 % z dalších 8 GB paměti (až 16 GB)
- 6 % z dalších 112 GB paměti (až 128 GB)
- 2 % jakékoli paměti nad 128 GB
Poznámka
AKS vyhrazuje další 2 GB pro systémový proces v uzlech Windows, které nejsou součástí počítané paměti.
Pravidla přidělování paměti a procesoru:
- Udržujte uzly agenta v dobrém stavu, včetně některých podů hostitelského systému, které jsou pro stav clusteru kritické.
- Způsobí, že uzel bude hlásit méně využitelné paměti a procesoru, než kdyby nebyl součástí clusteru Kubernetes.
Výše uvedené rezervace prostředků nelze změnit.
Pokud například uzel nabízí 7 GB, bude hlásit 34 % paměti, které nelze přidělovat, včetně prahové hodnoty 750Mi pro pevné vyřazení.
0.75 + (0.25*4) + (0.20*3) = 0.75GB + 1GB + 0.6GB = 2.35GB / 7GB = 33.57% reserved
Kromě rezervací pro samotný Kubernetes si základní operační systém uzlu také vyhrazuje množství prostředků procesoru a paměti pro zachování funkcí operačního systému.
Související osvědčené postupy najdete v tématu Osvědčené postupy pro základní funkce plánovače v AKS.
Fondy uzlů
Uzly stejné konfigurace jsou seskupené do fondů uzlů. Cluster Kubernetes obsahuje alespoň jeden fond uzlů. Počáteční počet uzlů a velikost se definují při vytvoření clusteru AKS, který vytvoří výchozí fond uzlů. Tento výchozí fond uzlů v AKS obsahuje základní virtuální počítače, na kterých běží uzly agenta.
Poznámka
Pokud chcete zajistit spolehlivý provoz clusteru, měli byste ve výchozím fondu uzlů spustit alespoň dva (2) uzly.
Škálujete nebo upgradujete cluster AKS s výchozím fondem uzlů. Můžete se rozhodnout škálovat nebo upgradovat konkrétní fond uzlů. Pro operace upgradu se spouštění kontejnerů plánuje na jiných uzlech ve fondu uzlů, dokud se úspěšně neupgradují všechny uzly.
Další informace o použití více fondů uzlů v AKS najdete v tématu Vytvoření a správa více fondů uzlů pro cluster v AKS.
Selektory uzlů
V clusteru AKS s více fondy uzlů možná budete muset plánovači Kubernetes říct, který fond uzlů se má pro daný prostředek použít. Například kontrolery příchozího přenosu dat by neměly běžet na uzlech Windows Serveru.
Selektory uzlů umožňují definovat různé parametry, jako je operační systém uzlu, a řídit tak, kde se má pod naplánovat.
Následující základní příklad naplánuje instanci NGINX na uzlu s Linuxem pomocí selektoru uzlů "kubernetes.io/os": linux:
kind: Pod
apiVersion: v1
metadata:
name: nginx
spec:
containers:
- name: myfrontend
image: mcr.microsoft.com/oss/nginx/nginx:1.15.12-alpine
nodeSelector:
"kubernetes.io/os": linux
Další informace o tom, jak řídit, kde jsou pody naplánované, najdete v tématu Osvědčené postupy pro pokročilé funkce plánovače v AKS.
Lusky
Kubernetes používá pody ke spuštění instance vaší aplikace. Pod představuje jednu instanci vaší aplikace.
Pody mají obvykle mapování 1:1 s kontejnerem. V pokročilých scénářích může pod obsahovat více kontejnerů. Pody s více kontejnery jsou naplánované společně na stejném uzlu a umožňují kontejnerům sdílet související prostředky.
Při vytváření podu můžete definovat požadavky na prostředky , které budou vyžadovat určité množství prostředků procesoru nebo paměti. Plánovač Kubernetes se snaží vyhovět požadavku tím, že naplánuje spuštění podů na uzlu s dostupnými prostředky. Můžete také zadat maximální limity prostředků, abyste zabránili tomu, aby pod spotřeboval příliš mnoho výpočetních prostředků z podkladového uzlu. Osvědčeným postupem je zahrnout limity prostředků pro všechny pody, které plánovači Kubernetes pomůžou identifikovat potřebné a povolené prostředky.
Další informace najdete v tématu Životní cyklus podů Kubernetes a Kubernetes.
Pod je logický prostředek, ale úlohy aplikací se spouští v kontejnerech. Pody jsou obvykle dočasné, jednorázové prostředky. U individuálně plánovaných podů chybí některé funkce Kubernetes s vysokou dostupností a redundancí. Místo toho se pody nasazují a spravují pomocí kontrolerů Kubernetes, jako je například řadič nasazení.
Nasazení a manifesty YAML
Nasazení představuje identické pody spravované kontrolerem nasazení Kubernetes. Nasazení definuje počet replik podů, které se mají vytvořit. Plánovač Kubernetes zajišťuje, aby byly na uzlech, které jsou v pořádku, naplánovány další pody, pokud dojde k problémům.
Můžete aktualizovat nasazení a změnit konfiguraci podů, použité image kontejneru nebo připojeného úložiště. Řadič nasazení:
- Vyprázdní a ukončí daný počet replik.
- Vytvoří repliky z nové definice nasazení.
- Pokračuje v procesu, dokud se neaktualizují všechny repliky v nasazení.
Většina bezstavových aplikací v AKS by měla místo plánování jednotlivých podů používat model nasazení. Kubernetes může monitorovat stav nasazení a zajistit tak, aby se v clusteru spustil požadovaný počet replik. Při individuálním naplánování se pody nerestartují, pokud narazí na problém, a pokud u aktuálního uzlu narazí na problém, nebudou přeplánované na uzlech, které jsou v pořádku.
Pokud vaše aplikace vyžaduje minimální počet dostupných instancí, nechcete narušovat rozhodování o správě procesem aktualizace. Rozpočty přerušení podů definují, kolik replik v nasazení může být během aktualizace nebo upgradu uzlu odebráno. Pokud máte například v nasazení pět (5) replik, můžete definovat přerušení podu na 4 (čtyři), aby bylo možné odstranit nebo přeplánovat jenom jednu repliku najednou. Stejně jako u omezení prostředků podů je osvědčeným postupem definovat rozpočty přerušení podů u aplikací, které vyžadují minimální počet replik, aby byly vždy přítomné.
Nasazení se obvykle vytvářejí a spravují pomocí kubectl create
nebo kubectl apply
. Vytvořte nasazení definováním souboru manifestu ve formátu YAML.
Následující příklad vytvoří základní nasazení webového serveru NGINX. Nasazení určuje tři (3) repliky, které se mají vytvořit, a vyžaduje, aby byl v kontejneru otevřený port 80 . Požadavky na prostředky a omezení jsou také definovány pro procesor a paměť.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: mcr.microsoft.com/oss/nginx/nginx:1.15.2-alpine
ports:
- containerPort: 80
resources:
requests:
cpu: 250m
memory: 64Mi
limits:
cpu: 500m
memory: 256Mi
Rozpis specifikací nasazení v souboru manifestu YAML je následující:
Specifikace | Description |
---|---|
.apiVersion |
Určuje skupinu rozhraní API a prostředek rozhraní API, který chcete použít při vytváření prostředku. |
.kind |
Určuje typ prostředku, který chcete vytvořit. |
.metadata.name |
Určuje název nasazení. Tento soubor spustí image nginx z Docker Hub. |
.spec.replicas |
Určuje, kolik podů se má vytvořit. Tento soubor vytvoří tři duplicitní pody. |
.spec.selector |
Určuje, které pody budou tímto nasazením ovlivněny. |
.spec.selector.matchLabels |
Obsahuje mapu dvojic {key, value} , která umožňuje nasazení najít a spravovat vytvořené pody. |
.spec.selector.matchLabels.app |
Musí odpovídat .spec.template.metadata.labels . |
.spec.template.labels |
Určuje dvojice {key, value} připojené k objektu. |
.spec.template.app |
Musí odpovídat .spec.selector.matchLabels . |
.spec.spec.containers |
Určuje seznam kontejnerů, které patří do podu. |
.spec.spec.containers.name |
Určuje název kontejneru zadaného jako popisek DNS. |
.spec.spec.containers.image |
Určuje název image kontejneru. |
.spec.spec.containers.ports |
Určuje seznam portů, které se mají zveřejnit z kontejneru. |
.spec.spec.containers.ports.containerPort |
Určuje počet portů, které se mají zveřejnit na IP adrese podu. |
.spec.spec.resources |
Určuje výpočetní prostředky vyžadované kontejnerem. |
.spec.spec.resources.requests |
Určuje minimální požadovaný počet výpočetních prostředků. |
.spec.spec.resources.requests.cpu |
Určuje minimální požadovaný objem procesoru. |
.spec.spec.resources.requests.memory |
Určuje minimální požadovanou velikost paměti. |
.spec.spec.resources.limits |
Určuje maximální povolený počet výpočetních prostředků. Toto omezení vynucuje kubelet. |
.spec.spec.resources.limits.cpu |
Určuje maximální povolenou velikost procesoru. Toto omezení vynucuje kubelet. |
.spec.spec.resources.limits.memory |
Určuje maximální povolenou velikost paměti. Toto omezení vynucuje kubelet. |
Složitější aplikace je možné vytvořit zahrnutím služeb (například nástrojů pro vyrovnávání zatížení) do manifestu YAML.
Další informace najdete v tématu Nasazení Kubernetes.
Správa balíčků pomocí Helmu
Helm se běžně používá ke správě aplikací v Kubernetes. Prostředky můžete nasadit sestavením a použitím existujících veřejných chartů Helm, které obsahují zabalenou verzi kódu aplikace a manifesty YaML Kubernetes. Grafy Helmu můžete ukládat místně nebo ve vzdáleném úložišti, jako je Azure Container Registry úložiště chartů Helm.
Pokud chcete používat Helm, nainstalujte do počítače klienta Helm nebo použijte klienta Helm v azure Cloud Shell. Vyhledejte nebo vytvořte charty Helm a pak je nainstalujte do clusteru Kubernetes. Další informace najdete v tématu Instalace existujících aplikací pomocí Helmu v AKS.
StatefulSets a DaemonSets
Pomocí plánovače Kubernetes spouští řadič nasazení repliky na libovolném dostupném uzlu s dostupnými prostředky. I když tento přístup může stačit pro bezstavové aplikace, řadič nasazení není ideální pro aplikace, které vyžadují:
- Trvalé zásady vytváření názvů nebo úložiště.
- Replika, která bude existovat na každém vybraném uzlu v rámci clusteru.
Dva prostředky Kubernetes ale umožňují spravovat tyto typy aplikací:
- StatefulSets udržují stav aplikací nad rámec životního cyklu jednotlivých podů, jako je úložiště.
- DaemonSets zajišťují spuštěnou instanci na každém uzlu v rané fázi procesu spouštění Kubernetes.
Stavové sady
Vývoj moderních aplikací často cílí na bezstavové aplikace. Pro stavové aplikace, jako jsou ty, které zahrnují databázové komponenty, můžete použít StatefulSets. Podobně jako u nasazení i StatefulSet vytvoří a spravuje aspoň jeden identický pod. Repliky ve StatefulSet používají elegantní a sekvenční přístup k nasazení, škálování, upgradu a ukončení. Zásady vytváření názvů, názvy sítí a úložiště se zachovají, protože repliky se přeplánují pomocí StatefulSet.
Definujte aplikaci ve formátu YAML pomocí kind: StatefulSet
. Odtud kontroler StatefulSet zpracovává nasazení a správu požadovaných replik. Data se zapisují do trvalého úložiště, které poskytuje Azure Spravované disky nebo Azure Files. V případě StatefulSets zůstane základní trvalé úložiště, i když se StatefulSet odstraní.
Další informace najdete v tématu StatefulSets Kubernetes.
Repliky ve StatefulSet jsou naplánované a běží na libovolném dostupném uzlu v clusteru AKS. Pokud chcete zajistit, aby alespoň jeden pod v sadě běžel na uzlu, použijte místo toho DaemonSet.
DaemonSets
Pro konkrétní shromažďování nebo monitorování protokolů možná budete muset spustit pod na všech nebo vybraných uzlech. Nasazení daemonSet můžete použít na jednom nebo více identických podech, ale kontroler DaemonSet zajišťuje, že každý zadaný uzel spustí instanci podu.
DaemonSet Controller může plánovat pody na uzlech na začátku procesu spouštění clusteru, ještě než se spustí výchozí plánovač Kubernetes. Tato schopnost zajišťuje, že se pody v daemonSet spustí před naplánování tradičních podů v nasazení nebo statefulSet.
Podobně jako StatefulSets se daemonSet definuje jako součást definice YAML pomocí kind: DaemonSet
.
Další informace najdete v tématu DaemonSets Kubernetes.
Poznámka
Pokud používáte doplněk Virtuální uzly, daemonSets nevytvoří pody na virtuálním uzlu.
Obory názvů
Prostředky Kubernetes, jako jsou pody a nasazení, jsou logicky seskupené do oboru názvů , aby se cluster AKS rozdělil a omezil se vytváření, zobrazení nebo správa přístupu k prostředkům. Můžete například vytvořit obory názvů pro oddělení obchodních skupin. Uživatelé můžou pracovat pouze s prostředky v jim přiřazených oborech názvů.
Po vytvoření clusteru AKS jsou k dispozici následující obory názvů:
Obor názvů | Description |
---|---|
default | Kde se pody a nasazení vytvářejí ve výchozím nastavení, když není k dispozici žádný. V menších prostředích můžete nasazovat aplikace přímo do výchozího oboru názvů bez vytváření dalších logických oddělení. Při interakci s rozhraním API Kubernetes, například s kubectl get pods , se použije výchozí obor názvů, pokud není zadán žádný. |
kube-system | Kde existují základní prostředky, jako jsou síťové funkce, jako jsou DNS a proxy server, nebo řídicí panel Kubernetes. V tomto oboru názvů se obvykle nenasazují vlastní aplikace. |
kube-public | Obvykle se nepoužívá, ale dá se použít k tomu, aby byly prostředky viditelné v celém clusteru, a může je zobrazit libovolný uživatel. |
Další informace najdete v tématu Obory názvů Kubernetes.
Další kroky
Tento článek popisuje některé základní komponenty Kubernetes a jejich použití na clustery AKS. Další informace o základních konceptech Kubernetes a AKS najdete v následujících článcích: