
Túto noc ďalšie vydanie Kubernetes — . 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 , 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 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ý ;
- 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).

Architektúra HA-clustra Kubernetes vytvoreného pomocou kubeadm
S podrobnosťami o realizácii sa môžete oboznámiť v . 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 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ú:

Podrobnosti o realizácii — v . Aktuálna pripravenosť — alfa verzia (postup do beta je naplánovaný na ďalšie vydanie Kubernetes).
V alfa verzii bola sprístupnená 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 .
Predchádzajúce protokoly 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 pole runtime_handler na zohľadnenie informácií o RuntimeClass v pode (podrobnejšie o ňom čítajte v texte o , kde sa táto trieda objavila ako alfa-verzia), a v Admission Webhooks možnosť určovať, ktoré verzie AdmissionReview oni podporujú. Nakoniec, v pravidlách Admission Webhooks je teraz rozsahy ich aplikácie namespace-ami a rámcami klastera.
Úložiská
, ktoré mali status beta verzie od vydania , stabilné (GA): tento feature gate sa už viac nevypína a bude odstránený v Kubernetes 1.17.
využívania premenných prostredia takzvaného (napríklad, názvu pod’u) pre názvy adresárov, montovaných ako , 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) 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 — 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 Na použitie () 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 ). 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 .
Všetko to viedlo k tomu, že alfa-verzie dosiahli 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 . Dôsledkom tejto migrácie bolo tiež obmedzení pre objemy definované konkrétnymi poskytovateľmi cloudu (AWS, Azure, GCE, Cinder).
Okrem toho sa pridala podpora blokových zariadení s CSI (CSIBlockVolume) do beta verzie.
Uzly / Kubelet
Bola predstavená alfa verzia 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 minimalizáciu súboru metrík poskytovaných Kubeletom. Mimochodom, tieto metriky 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.

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 .
Medzi inými zmenami:
- Kubelet teraz (raz) kontajnery v neznámom stave (unknown) pred operáciami reštartu a odstránenia.
- Pri používaní je teraz init-kontajneru rovnaké informácie ako bežnému kontajneru.
- Kubelet
usageNanoCoresz poskytovateľa štatistiky CRI, a pre uzly a kontajnery vo Windows sieťové štatistiky. - Informácie o operačnom systéme a architektúre sú teraz zaznamenávané v značkách
kubernetes.io/osakubernetes.io/archobjektov 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 ) do beta verzie (zapnutá predvolene). - du a find, používané v cAdvisor, implementáciami v Go.
CLI
V cli-runtime a kubectl prepinák -k pre integráciu s (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 ):

Príklad jednoduchého použitia súboru (možné aj zložitejšie použitie kustomize v rámci )
Okrem toho:
- nová príkaz
kubectl create cronjob, názov hovorí za všetko. - V
kubectl logsteraz môžete prepináče-f(--followna streaming logov) a-l(--selectorpre label query). - kubectl kopírovať súbory vybrané pomocou wildcard.
- Do príkazu
kubectl waitprapor--allna výber všetkých zdrojov v priestore názvov daného typu zdrojov.
Iné
Stabilný (GA) status dostali nasledujúce funkcie:
- , používaný v špecifikácii podu na určenie dodatočných podmienok zohľadňovaných v pripravenosti podu;
- Podpora veľkých stránok (feature gate s názvom );
- ;
- PriorityClass API, .
Ďalšie zmeny predstavené v Kubernetes 1.14:
- Politika RBAC už viac neposkytuje prístup k API
discoveryaaccess-reviewužívateľom bez autentifikácie (unauthenticated). - Oficiálna podpora CoreDNS 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 namiesto proxy. Okrem toho sa v CoreDNS readinessProbe, zabraňujúca zaťažovaniu príslušných (nepripravených na údržbu) podov.
- V kubeadm, v fázach
initaleboupload-certs, 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 gMSA (Group Managed Service Account) — špeciálne používateľské účty v Active Directory, ktoré môžu používať aj kontajnery.
- Pre GCE 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
