Kubernetes 1.14: prehľad hlavných noviniek

Kubernetes 1.14: prehľad hlavných noviniek

Túto noc sa uskutoční ďalšie vydanie Kubernetes — 1.14. Podľa tradície nášho blogu sa podelíme o kľúčové zmeny v novej verzii tohto vynikajúceho Open Source produktu.

Informácie použité na prípravu tohto materiálu boli prevzaté z tabuľky sledovania vylepšení Kubernetes, CHANGELOG-1.14 a príslušných problémov, požiadaviek na pritiahnutie, návrhov na vylepšenie Kubernetes (KEP).

Začnime dôležitým úvodom od SIG cluster-lifecycle: dynamické odolné clustre Kubernetes (a ak chceme byť presní, tak self-hosted HA deployments) teraz je možné vytvárať pomocou obvyklých (v kontexte clustrov s jedným uzlom) príkazov kubeadm (init a join). V skratke, na toto:

  • používané certifikáty clustra sú presunuté do tajomstiev;
  • pre možnosť používania clustra etcd vo vnútri K8s-clustra (t.j. zbavenia sa existujúcej vonkajšej závislosti) je zapojený etcd-operator;
  • dokumentujú odporúčané nastavenia pre externého vyvažovača záťaže, ktorý zabezpečuje odolnú konfiguráciu (do budúcna je plánovaná aj možnosť zbaviť sa tejto závislosti, ale nie v tejto fáze).

Kubernetes 1.14: prehľad hlavných noviniek
Architektúra HA-clustra Kubernetes vytvoreného pomocou kubeadm

S podrobnosťami o realizácii sa môžete oboznámiť v návrhu dizajnu. Táto funkcia bola naozaj 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ôbec deklaračné riadenie objektov boli presunuté z kubectl do apiserver. Samotní vývojári stručne vysvetľujú svoje rozhodnutie tým, že kubectl apply je základnou súčasťou práce s konfiguráciami v Kubernetes, avšak „je plná chýb a ťažko sa opravuje“, čo znamená, že túto funkčnosť je potrebné uviesť do normálneho stavu a presunúť do control plane. Jednoduché a prehľadné príklady existujúcich problémov sú:

Kubernetes 1.14: prehľad hlavných noviniek

Podrobnosti o realizácii — v KEP. Aktuálna pripravenosť — alfa verzia (postup do beta je naplánovaný na ďalšie vydanie Kubernetes).

V alfa verzii bola sprístupnená možnosť používania schémy OpenAPI v3 na vytváranie a publikovanie OpenAPI dokumentácie pre CustomResources (CR), používajúce na validáciu (na strane servera) užívateľom definovaných zdrojov K8s (CustomResourceDefinition, CRD). Publikovanie OpenAPI pre CRD umožňuje klientom (napríklad, kubectl) vykonávať validáciu na svojej strane (v rámci kubectl create a kubectl apply) a vydávať dokumentáciu podľa schémy (kubectl vysvetliť). Podrobnosti — v KEP.

Predchádzajúce protokoly sa teraz otvárajú s príznakom O_APPEND (a nie O_TRUNC) aby sa predišlo strate protokolov v niektorých situáciách a na uľahčenie truncovania protokolov externými nástrojmi na rotáciu.

Taktiež v kontexte Kubernetes API možno poznamenať, že v PodSandbox a PodSandboxStatus bolo pridané pole runtime_handler na zohľadnenie informácií o RuntimeClass v pode (podrobnejšie o ňom čítajte v texte o verzii Kubernetes 1.12, kde sa táto trieda objavila ako alfa-verzia), a v Admission Webhooks bola implementovaná možnosť určovať, ktoré verzie AdmissionReview oni podporujú. Nakoniec, v pravidlách Admission Webhooks je teraz možné obmedziť rozsahy ich aplikácie namespace-ami a rámcami klastera.

Úložiská

Trvalé miestne objemy, ktoré mali status beta verzie od vydania K8s 1.10, boli oznámené stabilné (GA): tento feature gate sa už viac nevypína a bude odstránený v Kubernetes 1.17.

Možnosť využívania premenných prostredia takzvaného Downward API (napríklad, názvu pod’u) pre názvy adresárov, montovaných ako subPath, sa rozvinula — vo forme nového poľa subPathExpr, s pomoci ktorého sa teraz určuje potrebné meno adresára. Pôvodne sa funkcia objavila v Kubernetes 1.11, ale aj pre 1.14 zostala v statusi alfa verzie.

Rovnako ako v predchádzajúcej verzii Kubernetes, bolo prezentovaných mnoho významných zmien pre aktívne sa vyvíjajúci CSI (Container Storage Interface):

CSI

Bola sprístupnená (v rámci alfa verzie) podpora možnosť zmeny veľkosti pre CSI-objemy.Na jej použitie bude potrebné zapnúť feature gate s názvom ExpandCSIVolumes, ako aj mať podporu tejto operácie v konkrétnom CSI ovládači.

Ďalšia funkcia pre CSI v alfa verzii — možnosť odkazovať priamo (t.j. bez použitia PV/PVC) na CSI-objemy v rámci špecifikácie pod’ov. To odstraňuje obmedzenie na používanie CSI ako výhradne vzdialených úložísk dát, otvárajúc ich dvere do sveta lokálnych ephemerálnych objemov.Na použitie (príklad z dokumentácie) je potrebné zapnúť CSIInlineVolume feature gate.

Pokrok sa objavil aj v ‘vnútorných’ aspektoch Kubernetes, ktoré nie sú tak zrejmé koncovým používateľom (systémovým administrátorom)… V súčasnosti sú vývojári nútení podporovať dve verzie každého pluginu úložiska: jedna — ‘starým spôsobom’, v rámci kódovej základne K8s (in-tree), a druhá — v rámci nového CSI. (podrobnejšie o ňom čítajte, napríklad, v tu). To vyvoláva zrozumiteľné nepríjemnosti, ktoré je potrebné odstrániť v priebehu stabilizácie CSI ako takého. Nemôžeme jednoducho vyhlásiť interné (in-tree) API pluginov za zastarané (deprecated) kvôli príslušnej politike Kubernetes..

Všetko to viedlo k tomu, že alfa-verzie dosiahli proces migrácie interného kódu pluginov, implementovaných ako in-tree do CSI pluginov, čím sa obavy vývojárov obmedzia na podporu jednej verzie ich pluginov a zachová sa kompatibilita so starými API, čo umožní ich vyhlásenie za zastarané podľa bežného scenára. Očakáva sa, že do ďalšej verzie Kubernetes (1.15) bude prebiehať migrácia všetkých pluginov poskytovateľov cloudu, realizácia získa status beta verzie a bude aktívna v inštaláciách K8s predvolene. Podrobnosti nájdete v návrhu dizajnu. Dôsledkom tejto migrácie bolo tiež zrušenie obmedzení pre objemy definované konkrétnymi poskytovateľmi cloudu (AWS, Azure, GCE, Cinder).

Okrem toho sa pridala podpora blokových zariadení s CSI (CSIBlockVolume) prešlo do beta verzie.

Uzly / Kubelet

Bola predstavená alfa verzia nového endpointu v Kubelete, určeného na vracanie metrík o základných zdrojoch. Všeobecne povedané, ak Kubelet predtým získaval štatistiku o využívaní kontajnerov z cAdvisor, teraz tieto údaje prichádzajú z vykonávacieho prostredia kontajnera cez CRI (Container Runtime Interface), pričom však zostáva aj kompatibilita so starými verziami Dockeru. Predtým sa štatistika zhromaždená v Kubelete odovzdávala cez REST API, zatiaľ čo teraz sa na to používa endpoint nachádzajúci sa na adrese /metrics/resource/v1alpha1. Dlhodobá stratégia vývojárov je zameraná na minimalizáciu súboru metrík poskytovaných Kubeletom. Mimochodom, tieto metriky sa teraz nazývajú nie „core metrics“, ale „resource metrics“, a popisujú sa ako „first-class resources, such as cpu, and memory.

Veľmi zaujímavý detail: napriek zjavnej výhode výkonu gRPC endpointu v porovnaní s rôznymi scenármi použitia formátu Prometheus v (výsledok jedného z benchmarkov nájdete nižšie), autori uprednostnili textový formát Prometheus kvôli zjavnej vedúcej pozícii tohto monitorovacieho systému v komunite.

gRPC nie je kompatibilný s hlavnými monitorovacími kanálmi. Endpoint bude užitočný iba na dodávanie metrík do Metrics Server alebo komponentov monitorovania, ktoré sa s ním integrujú priamo. Pri použití cacheovania v Metrics Server je výkon textového formátu Prometheus dostatočne dobrý pre nás, aby sme dali prednosť Prometheovi pred gRPC, vzhľadom na širokú rozšírenosť Prometheusa v komunite. Keď formát OpenMetrics bude stabilnejší, môžeme sa priblížiť k výkonu gRPC pomocou formátu založeného na proto.

Kubernetes 1.14: prehľad hlavných noviniek
Jeden z porovnávacích testov výkonu použitím formátov gRPC a Prometheus v novom endpoint’ě Kubelet pre metriku. Viac grafov a ďalšie podrobnosti nájdete na KEP.

Medzi inými zmenami:

  • Kubelet teraz (raz) sa pokúša zastaviť kontajnery v neznámom stave (unknown) pred operáciami reštartu a odstránenia.
  • Pri používaní PodPresets je teraz init-kontajneru pridané rovnaké informácie ako bežnému kontajneru.
  • Kubelet začal používať usageNanoCores z poskytovateľa štatistiky CRI, a pre uzly a kontajnery vo Windows bola pridaná sieťové štatistiky.
  • Informácie o operačnom systéme a architektúre sú teraz zaznamenávané v značkách kubernetes.io/os a kubernetes.io/arch objektov Node (preložené z beta do GA).
  • Možnosť uviesť konkrétnu systémovú skupinu používateľov pre kontajnery v pode (RunAsGroup, sa objavila v K8s 1.11) postúpila do beta verzie (zapnutá predvolene).
  • du a find, používané v cAdvisor, boli nahradené implementáciami v Go.

CLI

V cli-runtime a kubectl bol pridaný prepinák -k pre integráciu s kustomize (mimochodom, jeho vývoj sa teraz uskutočňuje v samostatnom repozitári), to znamená, na spracovanie ďalších YAML súborov zo špeciálnych adresárov kustomization (podrobnosti o ich použití pozri v KEP):

Kubernetes 1.14: prehľad hlavných noviniek
Príklad jednoduchého použitia súboru kustomization (možné aj zložitejšie použitie kustomize v rámci overlays)

Okrem toho:

  • Pridaná nová príkaz kubectl create cronjob, názov hovorí za všetko.
  • V kubectl logs teraz môžete kombinovať prepináče -f (--follow na streaming logov) a -l (--selector pre label query).
  • kubectl naučili sme sa kopírovať súbory vybrané pomocou wildcard.
  • Do príkazu kubectl wait bol pridaný prapor --all na výber všetkých zdrojov v priestore názvov daného typu zdrojov.

Iné

Stabilný (GA) status dostali nasledujúce funkcie:

Ďalšie zmeny predstavené v Kubernetes 1.14:

  • Politika RBAC už viac neposkytuje prístup k API discovery a access-review užívateľom bez autentifikácie (unauthenticated).
  • Oficiálna podpora CoreDNS je poskytovaná iba pre Linux, takže pri použití kubeadm na jeho (CoreDNS) nasadenie v klase musia uzly fungovať iba v Linuxe (na tento obmedzenie sa používajú nodeSelectors).
  • Konfigurácia CoreDNS predvolene teraz používa plugin forward namiesto proxy. Okrem toho sa v CoreDNS bola pridaná readinessProbe, zabraňujúca zaťažovaniu príslušných (nepripravených na údržbu) podov.
  • V kubeadm, v fázach init alebo upload-certs, sa stalo možné nahrať certifikáty potrebné na pripojenie nového control-plane k tajnej kubeadm-certs (používa sa flag --experimental-upload-certs).
  • Pre Windows inštalácie sa objavila alfa verzia podpornej gMSA (Group Managed Service Account) — špeciálne používateľské účty v Active Directory, ktoré môžu používať aj kontajnery.
  • Pre GCE bola aktivovaná mTLS šifrovanie medzi etcd a kube-apiserver.
  • Aktualizácie v použitých/závislých softvérových produktoch: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, podpora Docker 18.09 v kubeadm, a minimálnou podporovanou verziou Docker API sa stala 1.26.

P.S.

Prečítajte si tiež na našom blogu:

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster