
Sot, e mĂ«rkurĂ«, njĂ« tjetĂ«r lirimi i Kubernetes â 1.16. Sipas traditĂ«s sonĂ« pĂ«r blogun, pĂ«r herĂ« tĂ« dhjetĂ« po flasim pĂ«r ndryshimet mĂ« tĂ« rĂ«ndĂ«sishme nĂ« versionin e ri.
Informacioni i përdorur për përgatitjen e këtij materiali është marrë nga , dhe issues, pull requests përkatëse, si dhe Propozimet për përmirësimin e Kubernetes (KEP). Pra, fillojmë!...
Nodet
Një numër të vërtetë të dukshëm të risive (në statusin e versionit alfa) janë paraqitur në anën e nodëve të klastereve K8s (Kubelet).
NĂ« radhĂ« tĂ« parĂ«, janĂ« paraqitur tĂ« ashtuquajturat «» (Ephemeral Containers), tĂ« destinuara pĂ«r tĂ« thjeshtuar proceset e debugimit nĂ« podâĂ«.Mekanizmi i ri lejon nisjen e konteinerĂ«ve tĂ« veçantĂ«, tĂ« cilĂ«t fillojnĂ« nĂ« hapĂ«sirĂ«n emĂ«rore tĂ« podâĂ«ve ekzistues dhe jetojnĂ« pĂ«r njĂ« periudhĂ« tĂ« shkurtĂ«r kohe. QĂ«llimi i tyre Ă«shtĂ« tĂ« lidhen me podâĂ«t dhe konteinerĂ«t e tjerĂ« pĂ«r tĂ« zgjidhur probleme dhe pĂ«r debugim. PĂ«r kĂ«tĂ« mundĂ«si Ă«shtĂ« implementuar njĂ« komandĂ« e re kubectl debug, e ngjashme me kubectl exec: vetĂ«m se nĂ« vend tĂ« nisjes sĂ« procesit nĂ« konteiner (si nĂ« rastin e exec) ajo nis njĂ« konteiner nĂ« pod. PĂ«r shembull, njĂ« komandĂ« e tillĂ« do tĂ« lidhi njĂ« konteiner tĂ« ri me podâin:
kubectl debug -c debug-shell --image=debian target-pod -- bashDetajet rreth kontejnerëve efemer (dhe shembuj të përdorimit të tyre) mund të gjenden në . Realizimi aktual (në K8s 1.16) është një version alfa, dhe midis kritereve për kalimin në versionin beta përfshihet "testimi i Ephemeral Containers API për gjithsej të paktën 2 lëshime [Kubernetes]".
NB: Në thelb dhe madje edhe me emrin e saj, karakteristika i ngjan tashmë ekzistuesit plugin , për të cilin ne . Pritet që me shfaqjen e kontejnerëve efemer, zhvillimi i një plugini të jashtëm të veçantë do të pezullohet.
NjĂ« tjetĂ«r novitet Ă«shtĂ« â e cila synon tĂ« ofrojĂ« mekanizmin pĂ«r llogaritjen e kostove mbĂ«shtetĂ«se pĂ«r pod-in, tĂ« cilat mund tĂ« ndryshojnĂ« ndjeshĂ«m nĂ« varĂ«si tĂ« mjedisit tĂ« ekzekutimit (runtime) tĂ« pĂ«rdorur. Si shembuj, autorĂ«t pĂ«rmendin Kata Containers, tĂ« cilat kĂ«rkojnĂ« aktivizimin e njĂ« bĂ«rthame mysafire, agjentit kata, sistemit init etj. Kur overhead-i bĂ«het aq i madh, nuk mund tĂ« injorohet, andaj kĂ«rkohet njĂ« mĂ«nyrĂ« pĂ«r ta llogaritur atĂ« pĂ«r kuotime tĂ« mĂ«tejshme, planifikim etj. PĂ«r t'u realizuar, nĂ« PodSpec Ă«shtĂ« shtuar fusha Overhead *ResourceList (e cila korrespondon me tĂ« dhĂ«nat nĂ« RuntimeClass, nĂ«se Ă«shtĂ« e tillĂ« e pĂ«rdorur).
Një tjetër risi e dukshme është menaxheri i topologjisë së nyjës (Menaxheri i Topologjisë së Nyjës), i krijuar për të unifikuar qasjen ndaj optimizimit të ndarjes së burimeve harduerike për komponentë të ndryshëm në Kubernetes. Kjo nismë është e shkaktuar nga nevoja në rritje e sistemeve moderne të ndryshme (nga fushat e telekomunikacionit, të mësimit të makinerive, shërbimeve financiare, etj.) për llogaritje paralelesh me performancë të lartë dhe minimizimin e vonesave gjatë realizimit të operacioneve, për këtë ato përdorin kapacitetet e avancuara të CPU-së dhe përshpejtimin harduerik. Të tilla optimizime në Kubernetes deri tani janë arritur përmes komponentëve të shkëputur (menaxheri i CPU-së, menaxheri i pajisjeve, CNI), dhe tani do t'u shtohet një ndërfaqe e brendshme e njëjtë, e cila do të unifikoje qasjen dhe do të thjeshtojë lidhjen e komponentëve të ngjashëm të quajtur topology-aware në anën e Kubelet. Detajet janë në .

Skema e komponentëve të Menaxherit të Topologjisë
Tipari tjetĂ«r Ă«shtĂ« kontrolli i kontejnerĂ«ve gjatĂ« nisjes sĂ« tyre (). Si e dihet, pĂ«r konteinerĂ«t qĂ« ngadalĂ« fillojnĂ«, Ă«shtĂ« e vĂ«shtirĂ« tĂ« merret njĂ« status aktual: ato ose 'vriten' para se tĂ« fillojnĂ« funksionimin real, ose bien nĂ« njĂ« gjendje deadlock pĂ«r njĂ« kohĂ« tĂ« gjatĂ«. Kontrolli i ri (aktivehet pĂ«rmes njĂ« feature gate tĂ« quajtur StartupProbeEnabled) e anulon â pĂ«r tĂ« qenĂ« mĂ« saktĂ«, e vonon â veprimin e çdo kontrolli tjetĂ«r deri nĂ« momentin kur pod-i pĂ«rfundon fillimin e tij. PĂ«r kĂ«tĂ« arsye, funksioni fillimisht u quajt . PĂ«r pod-et qĂ« fillojnĂ« ngadalĂ«, mund tĂ« kryhen kontrolle tĂ« gjendjes nĂ« intervale tĂ« arsyeshme tĂ« shkurtra.
PĂ«r mĂ« tepĂ«r, menjĂ«herĂ« nĂ« statusin e versionit beta Ă«shtĂ« paraqitur njĂ« pĂ«rmirĂ«sim pĂ«r RuntimeClass, qĂ« shton mbĂ«shtetje pĂ«r 'klasterĂ«t heterogjenĂ«'. Tani nuk Ă«shtĂ« aspak e domosdoshme qĂ« çdo nyje tĂ« ketĂ« mbĂ«shtetje pĂ«r çdo RuntimeClass: pĂ«r pod-et, mund tĂ« zgjidhet RuntimeClass pa menduar pĂ«r topologjinĂ« e klasterit. MĂ« parĂ«, pĂ«r tĂ« arritur kĂ«tĂ« â qĂ« pod-et tĂ« pĂ«rfundojnĂ« nĂ« nyje me mbĂ«shtetjen e gjithçkaje qĂ« u nevojitej â ishte e nevojshme tĂ« emĂ«rtoheshin rregulla pĂ«r NodeSelector dhe tolerances. NĂ« shpjegohen shembuj tĂ« pĂ«rdorimit dhe, sigurisht, detaje tĂ« implementimit.
RRjeti
Dy funksione të rëndësishme një rrjete, të cilat u shfaqën për herë të parë (në versionin alfa) në Kubernetes 1.16 - janë:
- steka e dyfishtĂ« e rrjetit - IPv4/IPv6 dhe kuptimi i tij pĂ«rkatĂ«s nĂ« nivelin e podâave, nyjeve, shĂ«rbimeve. Kjo pĂ«rfshin ndĂ«rveprimin IPv4-to-IPv4 dhe IPv6-to-IPv6 midis podâave, nga podâĂ«t nĂ« shĂ«rbime tĂ« jashtme, implementimet referuese (nĂ« kuadĂ«r tĂ« plugin-eve Bridge CNI, PTP CNI dhe Host-Local IPAM), si dhe mbĂ«shtetje pĂ«r versionet e mĂ«parshme me Kubernetes qĂ« funksionojnĂ« vetĂ«m me IPv4 ose IPv6. Detajet e implementimit - nĂ« .
Shembulli i shfaqjes sĂ« adresave IP tĂ« dy llojeve (IPv4 dhe IPv6) nĂ« listĂ«n e podâave:
kube-master# kubectl get pods -o wide EMRI GATI STATUS RIKTHESA MOSHAT IP NYJA nginx-controller 1/1 Duke funksionuar 0 20m fd00:db8:1::2,192.168.1.3 kube-minion-1 kube-master# - API i ri pĂ«r Endpoint â . Ai zgjidh problemet e API tĂ« ekzistueshĂ«m Endpoint me performancĂ«n/zhvillimin, qĂ« ndihin komponentet e ndryshme nĂ« control-plane (apiserver, etcd, endpoints-controller, kube-proxy). API i ri do tĂ« shtohet nĂ« grupin e API Discovery dhe do tĂ« mund tĂ« shĂ«rbejĂ« dhjetĂ«ra mijĂ«ra endpointâesh ndaj secilit shĂ«rbim nĂ« njĂ« klaster me mijĂ«ra nyje. PĂ«r kĂ«tĂ«, çdo ShĂ«rbim pĂ«rfaqĂ«sohet nĂ« N objekte
EndpointSlice, secili prej të cilëve për defolt ka jo më shumë se 100 endpoint-e (vlera është e konfigurueshme). Në API-në EndpointSlice janë parashikuar edhe mundësitë për zhvillimin e tij të ardhshëm: mbështetje për shumë IP adresash për secilin pod, gjendje të reja për endpoint-et (jo vetëmGatidheNotReady), nëngrup të dinamik për endpoint-et.
Ka arritur në versionin beta përpara paraqitur në riparimin e kaluar , i quajtur service.kubernetes.io/load-balancer-cleanup dhe i lidhur me çdo shërbim me tipin LoadBalancer. Në momentin e fshirjes së këtij shërbimi, ai parandalon fshirjen efektive të burimit derisa të përfundojë "pastrimi" i të gjitha burimeve përkatëse të ekuilibrit.
API Machinery
Kjo "pikë referimi për stabilizimin" është regjistruar në fushën e API serverit Kubernetes dhe ndërveprimit me të. Kjo ndodhi kryesisht falë shkarkimit në statusin stable të cilat nuk kanë nevojë për paraqitje të veçantë (CRD), që kishin statusin beta që nga Kubernetes 1.7 (dhe kjo është qershor 2017!). Stabilizimi i njëjtë ka ardhur gjithashtu në funksionet e lidhura me to:
- me
/statusdhe/scalepër CustomResources; - versionet për CRD, të bazuara në një webhook të jashtëm;
- (në K8s 1.15) vlerat e paracaktuara (defaulting) dhe fshirja automatike e fushave (pruning) për CustomResources;
- përdorimi i skemës OpenAPI v3 për krijimin dhe publikimin e dokumentacionit OpenAPI, që përdoret për validimin e burimeve CRD në anën e serverit.
NjĂ« mekanizĂ«m tjetĂ«r, qĂ« ka bĂ«rĂ« njĂ« kohĂ« tĂ« gjatĂ« pjesĂ« tĂ« jetĂ«s sĂ« administratorĂ«ve Kubernetes: â gjithashtu ka qenĂ« pĂ«r njĂ« kohĂ« tĂ« gjatĂ« nĂ« statusin beta (nga K8s 1.9) dhe tani Ă«shtĂ« shpallur stabil.
Dy karakteristika të tjera arritën versionin beta: dhe .
Dhe e vetmja risi e rĂ«ndĂ«sishme nĂ« versionin alfa ishte nga SelfLink â njĂ« URI i veçantĂ« qĂ« paraqet objektin e caktuar dhe Ă«shtĂ« pjesĂ« e ObjectMeta dhe ListMeta (dmth. njĂ« pjesĂ« e çdo objekti nĂ« Kubernetes). Pse refuzohet ai? Motivimi "nĂ« mĂ«nyrĂ« tĂ« thjeshtĂ«" si mungesa e arsyeve tĂ« vĂ«rteta (tĂ« pa pĂ«rballueshme) pĂ«r tĂ« cilat ky fushĂ« duhet tĂ« ekzistojĂ« ende. Arsyet mĂ« formale â pĂ«r tĂ« optimizuar performancĂ«n (duke hequr fushĂ«n e panevojshme) dhe pĂ«r tĂ« thjeshtuar punĂ«n e generic-apiserver, i cili Ă«shtĂ« i detyruar tĂ« trajtojĂ« njĂ« fushĂ« tĂ« tillĂ« nĂ« njĂ« mĂ«nyrĂ« tĂ« veçantĂ« (ky Ă«shtĂ« fushĂ« e vetme qĂ« vendoset menjĂ«herĂ« para serializimit tĂ« objektit). âPranimi i vĂ«rtetĂ« tĂ« "mosdaljes" (dhe pĂ«r versionin beta) SelfLink do tĂ« ndodhĂ« nĂ« versionin Kubernetes 1.20, dhe pĂ«rfundimtar â 1.21.
Ruajtja e të dhënave
Veprimtaria kryesore në fushën e ruajtjes, ashtu si në versionet e mëparshme, vërehet në fushën . Ndryshimet kryesore këtu ishin:
- për herë të parë (në versionin alpha) përkrahja e plugineve CSI për nodet e Windows: mënyra aktuale e punës me ruajtjet dhe këtu do të zëvendësojë pluginët in-tree në kernelin e Kubernetes dhe pluginët FlexVolume nga Microsoft të bazuar në Powershell;

Skema e implementimit të plugineve CSI në Kubernetes për Windows - mundësia , e paraqitur që në K8s 1.12, arriti në versionin beta;
- një "përmirësim" të ngjashëm (nga versi alpha në beta) arriti mundësia e përdorimit të CSI për krijimin e volumeve lokalesh efemere ().
Funksioni i klonimit të volumeve DataSource për të krijuar PVC të rinj) tani gjithashtu ka marrë statusin beta. Dy ndryshime të dukshme në planifikim (të dyjat në versionin alpha):
Planifikuesi
Dy ndryshime të dukshme në planifikim (të dyja në versionin alfa):
- â mundĂ«sia pĂ«r tĂ« pĂ«rdorur podâĂ«t pĂ«r "shpĂ«rndarjen e drejtĂ«" tĂ« ngarkesave nĂ« vend tĂ« njĂ«sive logjike tĂ« aplikacionit (si Deployment dhe ReplicaSet) dhe rregullat e shpĂ«rndarjes sĂ« kĂ«tij (si kĂ«rkesĂ« tĂ« fortĂ« apo si kush tĂ« butĂ«, pra si prioritet). Kjo veçori do tĂ« zgjasĂ« mundĂ«sitĂ« ekzistuese pĂ«r shpĂ«rndarjen e pod-eve tĂ« planifikuara, aktualisht tĂ« kufizuara nga opsionet
PodAffinitydhePodAntiAffinity, duke iu dhënë administratorëve kontroll më të hollësishëm në këtë aspekt, e cila do të thotë më shumë disponueshmëri dhe konsum të optimizuar të burimeve. Më shumë detaje - në . - Përdorimi Politika BestFit në Funksioni i Prioritetit RequestedToCapacityRatio gjatë planifikimit të pod-eve, që do të lejojë të aplikoni («paketim në konteiner») si për burimet kryesore (procesori, memorja), ashtu edhe për ato të avancuara (si GPU). Më shumë informacion në .

Planifikimi i pod-eve: deri në përdorimin e politikës best fit (drejt për drejt përmes planifikuesit të parazgjedhur) dhe me përdorimin e saj (përmes zgjeruesit të planifikuesit)
Për më tepër, mundësia për të krijuar plugina të veta për planifikuesin jashtë pemës kryesore të zhvillimit të Kubernetes (jashtë pemës).
Ndryshime të tjera
Gjithashtu nĂ« lĂ«shimin e Kubernetes 1.16, mund tĂ« theksohet inisiativa pĂ«r e metrikave ekzistuese nĂ« njĂ« sistem tĂ« plotĂ«, dhe nĂ«se tĂ« saktĂ«sojmĂ« â nĂ« pĂ«rputhje me pĂ«r instrumentimin e K8s. NĂ« thelb, ato mbĂ«shteten nĂ« dokumentacionin pĂ«rkatĂ«s . DĂ«shironi tĂ« dini se pse ndodhi kĂ«to ndryshime? Ka disa arsye (pĂ«r shembull, disa metrika ishin thjesht krijuar para se udhĂ«zimet aktuale tĂ« shfaqeshin), dhe zhvilluesit vendosĂ«n se ishte koha pĂ«r tĂ« sjellĂ« gjithçka nĂ« njĂ« standard tĂ« unifikuar, "nĂ« pĂ«rputhje me ekosistemĂ«n tjetĂ«r tĂ« Prometheus". Implementimi aktual i kĂ«saj iniciative ka statusin beta, qĂ« do tĂ« rritet gradualisht nĂ« versionet e ardhshme tĂ« Kubernetes deri nĂ« stabilen (1.18).
Gjithashtu, mund të theksohen ndryshime të tjera:
- Zhvillimi i mbështetjes për Windows me e utilitarit Kubeadm për këtë OS (beta-variant),
RunAsUserNamepër kontejnerët Windows (beta-variant), mbështetje për Group Managed Service Account (gMSA) deri në stabilen, mount/attach për volumin e vSphere. - i mekanizmit të kompresionit të të dhënave në përgjigjet API. Më parë për këto qëllime përdorej filtrin HTTP, i cili vendoste disa kufizime që pengonin aktivizimin e tij si parazgjedhje. Tani funksionon "kompresion i dukshëm i kërkesave": klientët që dërgojnë
Accept-Encoding: gzipnĂ« titull, marrin pĂ«rgjigje tĂ« shkurtuar nĂ« GZIP nĂ«se e ndihmojnĂ« madhĂ«sinĂ« e tij pĂ«rtej 128 KB. KlientĂ«t nĂ« Go automatikisht mbĂ«shtesin kompresimin (dĂ«rgojnĂ« titullin e duhur), kĂ«shtu qĂ« menjĂ«herĂ« do tĂ« vĂ«rejnĂ« uljen e trafikut. (PĂ«r gjuhĂ« tĂ« tjera, mund tĂ« nevojiten modifikime tĂ« vogla.) - shkallĂ«zimi HPA nga/nĂ« zero podâash mbi bazĂ«n e metrikave ekst externe. NĂ«se shkallĂ«zimi bĂ«het mbi bazĂ«n e objekteve/metrikave ekstreme, mund tĂ« shkallĂ«zohet automatikisht deri nĂ« 0 replikash pĂ«r tĂ« kursyer burimet kur ngarkesat e punĂ«s janĂ« tĂ« papĂ«rdorura. Kjo veçori duhet tĂ« jetĂ« veçanĂ«risht e dobishme pĂ«r rastet kur punĂ«torĂ«t kĂ«rkojnĂ« burime GPU dhe numri i llojeve tĂ« ndryshme tĂ« punĂ«torĂ«ve tĂ« papĂ«rdorura tejkalon numrin e GPU-ve nĂ« dispozicion.
- Klienti i ri â â pĂ«r qasje «tĂ« pĂ«rgjithshme» nĂ« objekte. Ai Ă«shtĂ« menduar pĂ«r tĂ« marr metadata lehtĂ«sisht (dmth. departamenti
metadata) nga burimet e klasterit dhe për të kryer operacione të tilla si mbledhja e mbeturinave dhe kuotimi. - Të mbledhim Kubernetes pa ofrues të vjetëruar («të integuar» në in-tree) të shërbimeve të mjeteve (versioni alfa).
- Në utilitarin kubeadm mundore experimental (alpha) për të aplikuar patch-et e kustomize gjatë operacioneve
procesi,joindhepĂ«rmirĂ«sim. MĂ« shumĂ« pĂ«r si tĂ« pĂ«rdorni flamurin--experimental-kustomize, shih nĂ« . - Pika e re pĂ«r apiserver â , e cila lejon eksportimin e informacionit mbi gatishmĂ«rinĂ« e tij (readiness). Gjithashtu, API-serveri tani ka flamurin
--maximum-startup-sequence-duration, i cili lejon rregullimin e rilodhjeve të tij. - Dy funksionalitete për Azure u shpallën stabile: mbështetje për (Availability Zones) dhe (RG). Për më tepër, në Azure janë shtuar:
- AAD dhe ADFS;
-
service.beta.kubernetes.io/azure-pip-namepër të specifikuar IP-në publike të balancuesit të ngarkesës; - caktimet
LoadBalancerNamedheLoadBalancerResourceGroup.
- AWS ka tani për EBS në Windows dhe thirrjet API EC2
DescribeInstances. - Kubeadm tani migron vetë konfigurimin e CoreDNS gjatë përditësimit të versionit CoreDNS.
- Binarët etcd në imazhin përkatës Docker world-executable, që lejon ekzekutimin e këtij imazhi pa nevojën për privilegje root. Për më tepër, imazhi i migrimit të etcd mbështetje për versionin etcd2.
- Në kaluan në përdorimin e distroless si bazë, përmirësuam performancën, shtuam ofrues të rinj në cloud (DigitalOcean, Magnum, Packet).
- Përditësime në softuerin e përdorur/varur: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
P.S.
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com


