Kubernetes 1.14: prehľad hlavných inovácií

Kubernetes 1.14: prehľad hlavných inovácií

Túto noc sa uskutoční ďalšie vydanie Kubernetes - 1.14. Podľa tradície, ktorá sa vyvinula pre náš blog, hovoríme o kľúčových zmenách v novej verzii tohto úžasného produktu s otvoreným zdrojovým kódom.

Informácie použité na prípravu tohto materiálu sú prevzaté z Tabuľky sledovania vylepšení Kubernetes, ZMENA-1.14 a súvisiace problémy, žiadosti o stiahnutie, návrhy na vylepšenie Kubernetes (KEP).

Začnime dôležitým úvodom zo životného cyklu klastra SIG: dynamické klastre prepnutia pri zlyhaní Kubernetes (alebo presnejšie povedané nasadenie HA s vlastným hosťovaním) je teraz môžu byť vytvorené pomocou známych (v kontexte jednouzlových klastrov) príkazov kubeadm (init и join). Skrátka na toto:

  • certifikáty používané klastrom sa prenesú do tajomstiev;
  • pre možnosť použitia klastra etcd vo vnútri klastra K8s (t. j. zbavenie sa predtým existujúcej externej závislosti) operátor etcd;
  • Dokumentuje odporúčané nastavenia pre externý nástroj na vyrovnávanie zaťaženia, ktorý poskytuje konfiguráciu odolnú voči chybám (v budúcnosti sa plánuje odstránenie tejto závislosti, ale nie v tejto fáze).

Kubernetes 1.14: prehľad hlavných inovácií
Architektúra klastra Kubernetes HA vytvorená pomocou kubeadm

Podrobnosti o implementácii nájdete v návrh dizajnu. Táto funkcia bola skutočne dlho očakávaná: alfa verzia bola očakávaná už v K8s 1.9, ale objavila sa až teraz.

API

Tím apply a všeobecne povedané deklaratívne riadenie objektov prešiel z kubectl v apiserveri. Svoje rozhodnutie stručne vysvetľujú aj samotní vývojári kubectl apply - základná súčasť práce s konfiguráciami v Kubernetes, avšak „je plná chýb a ťažko sa opravuje“, a preto je potrebné túto funkcionalitu vrátiť do normálu a preniesť do riadiacej roviny. Jednoduché a jasné príklady problémov, ktoré dnes existujú:

Kubernetes 1.14: prehľad hlavných inovácií

Podrobnosti o implementácii sú v CAP. Aktuálna pripravenosť je alfa (povýšenie na beta je naplánované na ďalšie vydanie Kubernetes).

K dispozícii v alfa verzii príležitosť pomocou schémy OpenAPI v3 vytváranie a publikovanie dokumentácie OpenAPI pre CustomResources (CR) používané na overenie (na strane servera) používateľom definovaných zdrojov K8 (CustomResourceDefinition, CRD). Publikovanie OpenAPI pre CRD umožňuje klientom (napr. kubectl) vykonať overenie na vašej strane (v rámci kubectl create и kubectl apply) a vystaviť dokumentáciu podľa schémy (kubectl explain). Podrobnosti - v CAP.

Už existujúce denníky sa teraz otvárajú s vlajkou O_APPEND (Not O_TRUNC), aby sa predišlo strate protokolov v niektorých situáciách a aby sa uľahčilo skrátenie protokolov pomocou externých nástrojov na rotáciu.

Aj v kontexte Kubernetes API možno poznamenať, že v PodSandbox и PodSandboxStatus pridané poľa runtime_handler zaznamenávať informácie o RuntimeClass v pod (viac sa o tom dočítate v texte o Vydanie Kubernetes 1.12, kde sa táto trieda objavila ako alfa verzia) a v Admission Webhooks implementovaná schopnosť určiť, ktoré verzie AdmissionReview podporujú. Nakoniec, pravidlá Admission Webhooks sú teraz možno obmedziť rozsah ich využitia mennými priestormi a klastrovými rámcami.

úložisko

PersistentLocalVolumes, ktorý mal od vydania status beta K8s 1.10, oznámil stabilná (GA): táto brána funkcie už nie je zakázaná a bude odstránená v Kubernetes 1.17.

Príležitosť pomocou premenných prostredia tzv Downward API (napríklad názov pod) pre názvy adresárov pripojených ako subPath, bol vyvinutý - vo forme nového odboru subPathExpr, ktorý sa teraz používa na určenie požadovaného názvu adresára. Táto funkcia sa pôvodne objavila v Kubernetes 1.11, ale pre 1.14 zostala v stave alfa verzie.

Rovnako ako v predchádzajúcom vydaní Kubernetes sa zavádza veľa významných zmien pre aktívne sa rozvíjajúce rozhranie CSI (Container Storage Interface):

CSI

Sprístupnené (ako súčasť alfa verzie) podpora zmena veľkosti pre zväzky CSI. Ak ju chcete použiť, musíte povoliť tzv ExpandCSIVolumes, ako aj dostupnosť podpory pre túto operáciu v konkrétnom ovládači CSI.

Ďalšia funkcia pre CSI v alfa verzii - príležitosť odkazovať priamo (t.j. bez použitia PV/PVC) na objemy CSI v rámci špecifikácie pod. Toto odstraňuje obmedzenie používania CSI ako výlučne vzdialeného úložiska dát, otvárajúc im dvere do sveta lokálne efemérne objemy. Na použitie (príklad z dokumentácie) musí byť povolené CSIInlineVolume funkcia brána.

Pokrok sa dosiahol aj v „interných“ zariadeniach Kubernetes súvisiacich s CSI, ktoré nie sú tak viditeľné pre koncových používateľov (správcov systému) ... V súčasnosti sú vývojári nútení podporovať dve verzie každého doplnku úložiska: jednu – „v starý spôsob“, vnútri kódovej základne K8s (v -strome) a druhý - ako súčasť nového CSI (viac o tom čítajte napr tu). To spôsobuje pochopiteľné nepríjemnosti, ktoré je potrebné riešiť, keď sa CSI sám stabilizuje. Nie je možné jednoducho zavrhnúť API interných (in-tree) pluginov z dôvodu príslušné pravidlá Kubernetes.

To všetko viedlo k tomu, že alfa verzia dosiahla migračný proces interný kód pluginu, implementované ako in-tree, v CSI pluginoch, vďaka čomu sa starosti vývojárov zredukujú na podporu jednej verzie ich pluginov a kompatibilita so starými API zostane zachovaná a v bežnom scenári môžu byť vyhlásené za zastarané. Očakáva sa, že do ďalšieho vydania Kubernetes (1.15) budú migrované všetky pluginy poskytovateľa cloudu, implementácia získa beta status a bude štandardne aktivovaná v inštaláciách K8s. Podrobnosti nájdete v časti návrh dizajnu. Táto migrácia mala za následok aj zlyhanie z objemových limitov definovaných konkrétnymi poskytovateľmi cloudu (AWS, Azure, GCE, Cinder).

Okrem toho podpora blokových zariadení s CSI (CSIBlockVolume) prenesené do beta verzie.

Uzly/Kubelet

Predstavená alfa verzia nový koncový bod v Kubelet, určený pre návratnosť kľúčových zdrojov. Všeobecne povedané, ak predtým Kubelet dostával štatistiky o používaní kontajnerov od cAdvisor, teraz tieto údaje pochádzajú z prostredia kontajnera runtime cez CRI (Container Runtime Interface), ale kompatibilita pre prácu so staršími verziami Docker je tiež zachovaná. Predtým sa štatistiky zhromaždené v Kubelet odosielali cez REST API, ale teraz sa nachádza koncový bod na /metrics/resource/v1alpha1. Dlhodobá stratégia vývojárov pozostáva je minimalizovať súbor metrík poskytovaných Kubeletom. Mimochodom, tieto metriky samotné teraz volajú nie „základné metriky“, ale „metriky zdrojov“ a sú opísané ako „prvotriedne zdroje, ako je procesor a pamäť“.

Veľmi zaujímavá nuansa: napriek jasnej výkonnostnej výhode koncového bodu gRPC v porovnaní s rôznymi prípadmi použitia formátu Prometheus (pozrite si výsledok jedného z benchmarkov nižšie), autori uprednostnili textový formát Prometheus z dôvodu jasného vedenia tohto monitorovacieho systému v komunite.

„gRPC nie je kompatibilný s hlavnými monitorovacími potrubiami. Koncový bod bude užitočný iba na poskytovanie metrík na server Metrics Server alebo na monitorovanie komponentov, ktoré sa s ním priamo integrujú. Výkon textového formátu Prometheus pri používaní vyrovnávacej pamäte na serveri metrík dosť dobré aby sme uprednostnili Prometheus pred gRPC vzhľadom na rozšírené prijatie Promethea v komunite. Keď sa formát OpenMetrics stane stabilnejším, budeme schopní priblížiť sa k výkonu gRPC s formátom založeným na protokole."

Kubernetes 1.14: prehľad hlavných inovácií
Jeden z porovnávacích výkonnostných testov používania formátov gRPC a Prometheus v novom koncovom bode Kubelet pre metriky. Ďalšie grafy a ďalšie podrobnosti nájdete v CAP.

Okrem iných zmien:

  • Kubelet teraz (raz) snaží zastaviť kontajnery v neznámom stave pred operáciami reštartovania a vymazania.
  • Pri použití PodPresets teraz k iniciačnému kontajneru sa pridá rovnaké informácie ako pri bežnom kontajneri.
  • kubelet začal používať usageNanoCores od poskytovateľa štatistík CRI a pre uzly a kontajnery v systéme Windows pridané štatistiky siete.
  • Informácie o operačnom systéme a architektúre sú teraz zaznamenané v štítkoch kubernetes.io/os и kubernetes.io/arch Objekty uzlov (prenesené z beta do GA).
  • Schopnosť špecifikovať špecifickú skupinu používateľov systému pre kontajnery v pod (RunAsGroup, objavil sa v K8s 1.11) pokročilé pred beta (predvolene povolené).
  • du a nájsť použité v cAdvisor, vymenené on Go implementácia.

CLI

V cli-runtime a kubectl dodal -k príznak pre integráciu s prispôsobiť (mimochodom, jeho vývoj je dnes realizovaný v samostatnom úložisku), t.j. na spracovanie ďalších súborov YAML zo špeciálnych adresárov kustomizácie (podrobnosti o ich používaní nájdete v časti CAP):

Kubernetes 1.14: prehľad hlavných inovácií
Príklad jednoduchého použitia súboru prispôsobenie (komplexnejšia aplikácia kustomize je možná v rámci presahmi)

Okrem toho:

  • Pridané nový tím kubectl create cronjob, ktorej názov hovorí sám za seba.
  • В kubectl logs teraz môžeš kombinovať vlajky -f (--follow pre protokoly streamovania) a -l (--selector pre dopyt na štítky).
  • kubectl učil kopírovať súbory vybrané pomocou zástupného znaku.
  • Do tímu kubectl wait dodal vlajka --all vyberte všetky zdroje v mennom priestore zadaného typu prostriedku.

Ostatné

Nasledujúce funkcie získali stabilný stav (GA):

Ďalšie zmeny zavedené v Kubernetes 1.14:

  • Predvolená politika RBAC už neumožňuje prístup k API discovery и access-review používateľov bez autentifikácie (neoverené).
  • Oficiálna podpora CoreDNS poskytnuté Iba Linux, takže pri použití kubeadm na jeho nasadenie (CoreDNS) v klastri musia uzly bežať iba na Linuxe (na toto obmedzenie sa používajú nodeSelectors).
  • Predvolená konfigurácia CoreDNS je teraz používa dopredu plugin namiesto proxy. Tiež v CoreDNS pridané ReadinessProbe, ktorá zabraňuje vyrovnávaniu záťaže na vhodných (nie pripravených na prevádzku) moduloch.
  • V kubeadm, na fázach init alebo upload-certs, sa stalo možným načítajte certifikáty potrebné na pripojenie novej riadiacej roviny k tajomstvu kubeadm-certs (použite príznak --experimental-upload-certs).
  • Pre inštalácie systému Windows sa objavila alfa verzia podpora gMSA (Group Managed Service Account) – špeciálne účty v Active Directory, ktoré môžu využívať aj kontajnery.
  • Pre G.C.E. aktivovaný mTLS šifrovanie medzi etcd a kube-apiserver.
  • Aktualizácie používaného/závislého softvéru: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, podpora Docker 18.09 v kubeadm a minimálna podporovaná verzia rozhrania Docker API je teraz 1.26.

PS

Prečítajte si aj na našom blogu:

Zdroj: hab.com

Pridať komentár