Včera, 9. prosince, odehrál se další vydání Kubernetes - 1.17. Podle tradice, která se pro náš blog rozvinula, hovoříme o nejvýznamnějších změnách v nové verzi.
Informace použité k přípravě tohoto materiálu jsou převzaty z oficiálního oznámení, Tabulky sledování vylepšení Kubernetes, ZMĚNA-1.17 a související problémy, žádosti o stažení a návrhy vylepšení Kubernetes (KEP). Tak co je nového?..
Směrování s ohledem na topologii
Komunita Kubernetes na tuto funkci dlouho čekala – Směrování služeb s ohledem na topologii. Pokud KEP pochází z října 2018 a oficiální zvýšení — Před 2 lety obvyklé problémy (jako to) - a ještě o pár let starší...
Obecnou myšlenkou je poskytnout možnost implementovat „místní“ směrování pro služby umístěné v Kubernetes. „Lokalita“ v tomto případě znamená „stejná topologická úroveň“ (úroveň topologie), což může být:
uzel identický pro služby,
stejný serverový rack,
stejný region
stejný poskytovatel cloudu,
...
Příklady použití této funkce:
úspora provozu v cloudových instalacích s více zónami dostupnosti (multi-AZ) - viz. svěží ilustrace pomocí příkladu provozu ze stejného regionu, ale různých AZ v AWS;
nižší latence výkonu/lepší propustnost;
sdílená služba, která má místní informace o uzlu v každém datovém fragmentu;
umístění fluentd (nebo analogů) na stejný uzel s aplikacemi, jejichž logy jsou shromažďovány;
Podrobnosti o tom, jak funkce funguje a jak ji již můžete používat, si přečtěte tento článek od jednoho z autorů.
Podpora duálního zásobníku IPv4/IPv6
Výrazný pokrok pevný v další síťové funkci: současná podpora dvou IP stacků, která byla poprvé představena v K8s 1.16. Nové vydání přineslo zejména následující změny:
v kube-proxy implementováno možnost současného provozu v obou režimech (IPv4 a IPv6);
в Pod.Status.PodIPsse objevil podpora downward API (současně jako v /etc/hosts nyní vyžadují, aby hostitel přidal adresu IPv6);
podpora dvou stohů DRUH (Kubernetes IN Docker) a kubeadm;
Prohlášen za stabilní podpora topologie pro úložiště založené na CSI, poprvé představeno v K8s 1.12.
Iniciativa pro migrace volume pluginů do CSI - CSI Migrace - dosáhl beta verze. Tato funkce je kritická pro překlad existujících zásuvných modulů úložiště (ve stromu) na moderní rozhraní (CSI, mimo strom) neviditelné pro koncové uživatele Kubernetes. Správci klastru budou muset pouze povolit migraci CSI, po které budou stávající stavové prostředky a zátěže nadále „jen fungovat“... ale s použitím nejnovějších ovladačů CSI namísto těch zastaralých, které jsou součástí jádra Kubernetes.
V tuto chvíli je připravena migrace pro ovladače AWS EBS v beta verzi (kubernetes.io/aws-ebs) a GCE PD (kubernetes.io/gce-pd). Prognózy pro další skladovací zařízení jsou následující:
Mluvili jsme o tom, jak „tradiční“ podpora úložiště v K8 přišla do CSI tento článek. A přechodu migrace CSI do beta stavu je věnována samostatná publikace na blogu projektu.
Kromě toho další významná funkce v kontextu CSI, která pochází (alfa implementace) v K1.17s 8, dosáhla stavu beta (tj. ve výchozím nastavení povolena) ve verzi Kubernetes 1.12 - vytváření snímků a zotavení z nich. Mezi změnami provedenými v Kubernetes Volume Snapshot na cestě k vydání beta:
rozdělení postranního vozíku CSI s externím snímkováním na dva ovladače,
přidáno tajemství pro smazání (tajné smazání) jako anotace k obsahu snímku svazku,
nový finalizátor (finalizátor) abyste zabránili odstranění objektu API snímku, pokud existují zbývající připojení.
V době vydání 1.17 je tato funkce podporována třemi ovladači CSI: GCE Persistent Disk CSI Driver, Portworx CSI Driver a NetApp Trident CSI Driver. Více podrobností o jeho implementaci a použití naleznete v této publikace na blogu.
Štítky poskytovatele cloudu
Štítky, které automaticky přiřazeny k vytvořeným uzlům a svazkům v závislosti na použitém poskytovateli cloudu, jsou k dispozici v Kubernetes jako beta verze již velmi dlouho - od vydání K8s 1.2 (duben 2016!). Vzhledem k jejich rozšířenému používání po tak dlouhou dobu, vývojáři rozhodl, že je čas prohlásit funkci za stabilní (GA).
Proto byly všechny odpovídajícím způsobem přejmenovány (podle topologie):
... ale jsou stále dostupné pod svými starými názvy (kvůli zpětné kompatibilitě). Všem správcům se však doporučuje přejít na aktuální štítky. Související dokumentace K8s byl aktualizován.
Motivace pro implementaci této funkce (podle KEP) je:
Zatímco Kubernetes lze nasadit ručně, de facto (pokud ne de jure) standardem pro tuto operaci je použití kubeadm. Oblíbené nástroje pro správu systémů, jako je Terraform, spoléhají na kubeadm pro nasazení Kubernetes. Plánovaná vylepšení Cluster API zahrnují sestavitelný balíček pro bootstrapping Kubernetes s kubeadm a cloud-init.
Bez strukturovaného výstupu mohou i ty nejnebezpečnější změny na první pohled zlomit Terraform, Cluster API a další software, který využívá výsledky kubeadm.
Naše nejbližší plány zahrnují podporu (ve formě strukturovaného výstupu) pro následující příkazy kubeadm:
alpha certs
config images list
init
token create
token list
upgrade plan
version
Ilustrace JSON odpovědi na příkaz kubeadm init -o json:
Obecně se vydání Kubernetes 1.17 uskutečnilo pod heslem „Stabilita" To bylo usnadněno skutečností, že mnoho funkcí v něm (jejich celkový počet je 14) obdržel status GA. Mezi nimi:
"ochrana finalizátoru" (Ochrana finalizátoru) pro nástroje pro vyrovnávání zatížení (kontrola odpovídajících prostředků služby před odstraněním prostředků LoadBalancer);
optimalizace kube-apiserver ve výkonu při práci s více hodinkami, které monitorují identické sady objektů – toho je dosaženo tím, že se vyhneme opakované serializaci stejných objektů pro každého pozorovatele.
Další změny
Úplný seznam inovací v Kubernetes 1.17 se samozřejmě neomezuje na ty, které jsou uvedeny výše. Zde jsou některé další (a úplný seznam viz ZMĚNA):
podobná změna potkalo se EndpointSlice API (také od K8s 1.16), ale prozatím toto řešení pro zlepšení výkonu/škálovatelnosti Endpoint API není ve výchozím nastavení povoleno;