Včera, 9. decembra, uskutočnilo sa ďalšie vydanie Kubernetes - 1.17. Podľa tradície, ktorá sa pre náš blog vytvorila, hovoríme o najvýznamnejších zmenách v novej verzii.
Informácie použité na prípravu tohto materiálu sú prevzaté z oficiálneho oznámenia, Tabuľky sledovania vylepšení Kubernetes, ZMENA-1.17 a súvisiace problémy, žiadosti o stiahnutie a návrhy na vylepšenie Kubernetes (KEP). Tak čo je nové?..
Smerovanie s ohľadom na topológiu
Komunita Kubernetes čakala na túto funkciu už dlho - Smerovanie služby s ohľadom na topológiu, ak CAP má pôvod v októbri 2018 a oficial zvýšenie — Pred 2 rokmi bežné problémy (Páči sa mi to to) - a ešte o pár rokov starší...
Všeobecnou myšlienkou je poskytnúť možnosť implementovať „miestne“ smerovanie pre služby nachádzajúce sa v Kubernetes. „Lokalita“ v tomto prípade znamená „rovnaká topologická úroveň“ (úroveň topológie), čo môže byť:
uzol identický pre služby,
rovnaký serverový stojan,
ten istý región
ten istý cloudový poskytovateľ,
...
Príklady použitia tejto funkcie:
úspora prevádzky v cloudových inštaláciách s viacerými zónami dostupnosti (multi-AZ) - viď. svieža ilustrácia na príklade prevádzky z rovnakého regiónu, ale rôznych AZ v AWS;
nižšia latencia výkonu/lepšia priepustnosť;
zdieľaná služba, ktorá má miestne informácie o uzle v každom zlomku;
umiestnenie plynule (alebo analógov) na rovnaký uzol s aplikáciami, ktorých záznamy sa zhromažďujú;
Podrobnosti o tom, ako funkcia funguje a ako ju už môžete používať, si prečítajte v tomto článku od jedného z autorov.
Podpora duálneho zásobníka IPv4/IPv6
Výrazný pokrok pevné v ďalšej sieťovej funkcii: súčasná podpora pre dva zásobníky IP, ktorá bola prvýkrát predstavená v r K8s 1.16. Nové vydanie prinieslo najmä tieto zmeny:
v kube-proxy implementovaná možnosť súčasnej prevádzky v oboch režimoch (IPv4 a IPv6);
в Pod.Status.PodIPsobjavil podpora downward API (v rovnakom čase ako v /etc/hosts teraz vyžadujú, aby hostiteľ pridal adresu IPv6);
podpora dvojitého zásobníka KIND (Kubernetes IN Docker) a kubeadm;
Vyhlásený za stabilný podpora topológie pre úložisko založené na CSI, prvýkrát predstavené v r K8s 1.12.
Iniciatíva za migrácia volume pluginov do CSI - CSI Migrácia - dosiahnutá beta verzia. Táto funkcia je dôležitá na preklad existujúcich doplnkov ukladacieho priestoru (v strome) na moderné rozhranie (CSI, mimo stromu) neviditeľné pre koncových používateľov Kubernetes. Správcovia klastra budú musieť povoliť migráciu CSI, po ktorej budú existujúce stavové zdroje a pracovné zaťaženia naďalej „len fungovať“... ale s použitím najnovších ovládačov CSI namiesto zastaraných ovládačov zahrnutých v jadre Kubernetes.
Momentálne je pripravená migrácia pre ovládače AWS EBS v beta verzii (kubernetes.io/aws-ebs) a GCE PD (kubernetes.io/gce-pd). Prognózy pre ostatné skladovacie zariadenia sú nasledovné:
Hovorili sme o tom, ako „tradičná“ podpora úložiska v K8 prišla do CSI v tomto článku. A prechodu migrácie CSI do stavu beta je venovaný samostatná publikácia na blogu projektu.
Okrem toho ďalšia významná funkcionalita v kontexte CSI, ktorá pochádza (implementácia alfa) v K1.17s 8, dosiahla stav beta (t. j. predvolene povolená) vo vydaní Kubernetes 1.12 – vytváranie snímok a zotavenie z nich. Medzi zmenami vykonanými v Kubernetes Volume Snapshot na ceste k vydaniu beta:
rozdelenie postranného vozíka CSI s externým snímaním na dva ovládače,
pridané tajomstvo na vymazanie (tajné vymazanie) ako anotáciu obsahu snímky zväzku,
nový finalizátor (finalizátor) aby sa zabránilo vymazaniu objektu API snímky, ak existujú zostávajúce pripojenia.
V čase vydania 1.17 túto funkciu podporujú tri ovládače CSI: ovládač GCE Persistent Disk CSI Driver, ovládač Portworx CSI a ovládač NetApp Trident CSI. Viac podrobností o jeho implementácii a použití nájdete v túto publikáciu na blogu.
Štítky poskytovateľa cloudu
Štítky, ktoré automaticky priradené k vytvoreným uzlom a zväzkom v závislosti od použitého poskytovateľa cloudu, sú dostupné v Kubernetes ako beta verzia už veľmi dlho - od vydania K8s 1.2 (apríl 2016!). Vzhľadom na ich rozšírené používanie tak dlho, vývojári rozhodol, že je čas prehlásiť funkciu za stabilnú (GA).
Preto boli všetky podľa toho premenované (podľa topológie):
... sú však stále dostupné pod starými názvami (kvôli spätnej kompatibilite). Všetkým správcom sa však odporúča prejsť na aktuálne štítky. Súvisiaca dokumentácia K8s bol aktualizovaný.
Motivácia pre implementáciu tejto funkcie (podľa CAP) je:
Kým Kubernetes je možné nasadiť manuálne, de facto (ak nie de jure) štandardom pre túto operáciu je použitie kubeadm. Populárne nástroje na správu systémov, ako je Terraform, sa pri nasadení Kubernetes spoliehajú na kubeadm. Plánované vylepšenia rozhrania Cluster API zahŕňajú zostaviteľný balík pre bootstrapping Kubernetes s kubeadm a cloud-init.
Bez štruktúrovaného výstupu môžu aj tie najneškodnejšie zmeny na prvý pohľad zlomiť Terraform, Cluster API a ďalší softvér, ktorý využíva výsledky kubeadm.
Naše bezprostredné plány zahŕňajú podporu (vo forme štruktúrovaného výstupu) pre nasledujúce príkazy kubeadm:
alpha certs
config images list
init
token create
token list
upgrade plan
version
Ilustrácia odpovede JSON na príkaz kubeadm init -o json:
Vo všeobecnosti sa vydanie Kubernetes 1.17 uskutočnilo pod mottom „stabilita" To bolo uľahčené skutočnosťou, že v ňom je veľa funkcií (ich celkový počet je 14) získal status GA. Medzi nimi:
"ochrana finalizátora" (Ochrana finalizátora) pre nástroje na vyrovnávanie zaťaženia (skontrolovanie zodpovedajúcich zdrojov služby pred odstránením zdrojov LoadBalancer);
optimalizácia kube-apiserver vo výkone pri práci s viacerými hodinkami, ktoré monitorujú identické sady objektov – dosiahnuté tým, že sa vyhneme opakovanej serializácii rovnakých objektov pre každého pozorovateľa.
Ďalšie zmeny
Úplný zoznam inovácií v Kubernetes 1.17 sa samozrejme neobmedzuje na tie, ktoré sú uvedené vyššie. Tu sú niektoré ďalšie (a úplnejší zoznam nájdete v časti ZMENY):
podobná zmena postihlo EndpointSlice API (tiež od K8s 1.16), avšak zatiaľ toto riešenie na zlepšenie výkonu/škálovateľnosti Endpoint API nie je predvolene povolené;