
Sot, në merkur, është një lëshim tjetër i Kubernetes - 1.16. Sipas traditës për blogun tonë, për herë të dhjetë jubile prej themelimit, ne do të 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 problemet, kërkesat për tërheqje, si dhe Propozimet për Përmirësim të Kubernetes (KEP). Pra, le të fillojmë!..
Nyjet
Një numër të vërtetë të madh ndryshimesh të dukshme (në statusin alfa) është paraqitur në anën e nyjeve të grupeve K8s (Kubelet).
Para se gjithash, janë paraqitur të ashtuquajturat «» (Ephemeral Containers), të cilët synojnë të lehtësojnë proceset e debug në POD-e. Mekanizmi i ri lejon nisjen e kontejnerëve të veçantë, të cilët fillojnë në hapësirën e emrave të POD-eve ekzistues dhe jetojnë për një kohë të shkurtër. Qëllimi i tyre është ndërveprimi me POD-et dhe kontejnerët e tjerë për të zgjidhur ndonjë problem dhe për debug. Për këtë mundësi është realizuar një komandë e re kubectl debug, e cila është e ngjashme në thelb me kubectl exec: vetëm se në vend të nisjes së një procesi në kontejner (si në rastin e exec) ajo nis një kontejner në POD. Për shembull, një komandë e tillë do të lidhi një kontejner të ri me POD-in:
kubectl debug -c debug-shell --image=debian target-pod -- bashDetajet mbi kontejnerët efemerë (dhe shembujt e përdorimit të tyre) mund të gjenden në . Implementimi aktual (në K8s 1.16) është një version alfa, dhe mes kritereve për kalimin e tij në versionin beta është "testimi i API-t të kontejnerëve efemerë për të paktën 2 lëshime [Kubernetes]."
NB: Në thelb dhe madje edhe me emrin, kjo veçori i kujton një plugin ekzistues , për të cilin ne . Parashikohet që me shfaqjen e kontejnerëve efemerë, zhvillimi i plugin-it të veçantë të jashtëm do të ndalet.
NjĂ« tjetĂ«r risi Ă«shtĂ« â e cila ka si qĂ«llim tĂ« ofrojĂ« mekanizmin e llogaritjes sĂ« kostove pĂ«r POD-et, tĂ« cilat mund tĂ« ndryshojnĂ« ndjeshĂ«m nĂ« varĂ«si tĂ« mjedisit tĂ« ekzekutimit tĂ« pĂ«rdorur (runtime). Si njĂ« shembull, autorĂ«t pĂ«rmendin Kata Containers, tĂ« cilat kĂ«rkojnĂ« nisjen e njĂ« bĂ«rthame tĂ« mysafirĂ«ve, agjenti kata, sistemin init etj. Kur overhead-i bĂ«het kaq i madh, nuk mund tĂ« injorohet, domethĂ«nĂ« - kĂ«rkohet njĂ« mĂ«nyrĂ« pĂ«r ta marrĂ« parasysh atĂ« pĂ«r kuotat e mĂ«tejshme, planifikimin etj. PĂ«r ta realizuar kĂ«tĂ«, nĂ« PodSpec Ă«shtĂ« shtuar njĂ« fushĂ« Overhead *ResourceList (pĂ«rcaktohet me tĂ« dhĂ«nat nĂ« RuntimeClass, nĂ«se ekzsiton).
NjĂ« tjetĂ«r ndryshim i dukshĂ«m Ă«shtĂ« menaxheri i topologjisĂ« sĂ« nyjeve (Node Topology Manager), i cili synon tĂ« unifikojĂ« qasjen pĂ«r konfigurimin e ndarjes sĂ« burimeve harduerike pĂ«r komponentĂ«t e ndryshĂ«m nĂ« Kubernetes. Kjo iniciativĂ« Ă«shtĂ« shkaktuar nga nevoja nĂ« rritje e sistemeve moderne tĂ« ndryshme (nga fusha e telekomunikacionit, mĂ«simit tĂ« makinerive, shĂ«rbimeve financiare etj.) pĂ«r llogaritje paralele me performancĂ« tĂ« lartĂ« dhe minimizimin e vonesave gjatĂ« ekzekutimit tĂ« operacioneve, pĂ«r tĂ« cilat ata pĂ«rdorin mundĂ«sitĂ« pĂ«rparimtare tĂ« CPU-sĂ« dhe pĂ«rshpejtimin harduerik. Optimizimet e tilla nĂ« Kubernetes deri mĂ« sot janĂ« arritur pĂ«rmes komponenteve tĂ« ndryshme (menaxheri i CPU-sĂ«, menaxheri i pajisjeve, CNI), dhe tani do tâi shtohet njĂ« ndĂ«rfaqe e brendshme e vetme, e cila unifikon qasjen dhe thjeshton lidhjen e komponenteve tĂ« ngjashme tĂ« quajtura topology-aware nga ana e Kubelet. Detajet â nĂ« .

Skema e komponenteve të Menaxherit të Topologjisë
Tipari tjetër është kontrolli i konteinerëve gjatë nisjes së tyre (). Siç dihet, për konteinerët që nisën ngadalë, është e vështirë të merret statusi aktual: ata ose 'vriten' para se të fillojnë në të vërtetë funksionimin e tyre, ose bien në një deadlock për një periudhë të gjatë. Kontrolli i ri (aktivizohet përmes një gate funksioni të quajtur StartupProbeEnabled) anulon - më saktësisht, shtyn veprimin e çdo kontrolli tjetër deri në momentin kur pod-i ka përfunduar nisjen e tij. Për këtë arsye, ky tipar fillimisht u quajt . Për pod-et që nisën ngadalë, mund të kryhen pyetje për statusin në intervale të shkurtra kohore.
Për më tepër, menjëherë në statusin beta është paraqitur një përmirësim për RuntimeClass, duke shtuar mbështetje për 'klastere heterogjene'. C tani nuk është e nevojshme 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ë - për të siguruar që pod-et ishin në nyje me mbështetje për gjithçka që iu duhej - ishte e nevojshme të caktoheshin rregullat për NodeSelector dhe tolerimet. Në shkruhet për shembuj të përdorimit dhe, sigurisht, detajet e implementimit.
Rrjeti
Dy tipare të rëndësishme rrjeti, që u shfaqën për herë të parë (në versionin alpha) në Kubernetes 1.16 - janë:
- steka dyfishe e rrjetit â IPv4/IPv6 â dhe pĂ«rkatĂ«sja e tij "kuptimi" nĂ« nivelin e pod-Ă«ve, nyjave, shĂ«rbimeve. Kjo pĂ«rfshin ndĂ«rveprimin IPv4-to-IPv4 dhe IPv6-to-IPv6 midis pod-Ă«ve, nga pod-et nĂ« shĂ«rbime tĂ« jashtme, implementime referuese (nĂ« kuadĂ«r tĂ« plug-in-eve Bridge CNI, PTP CNI dhe Host-Local IPAM), si dhe mbĂ«shtetje pĂ«r backward compatibility me klasterĂ«t Kubernetes qĂ« punojnĂ« vetĂ«m me IPv4 ose IPv6. Detajet e implementimit janĂ« nĂ« .
Shembulli i daljes së IP-adresave të dy llojeve (IPv4 dhe IPv6) në listën e pod-ëve:
kube-master# kubectl get pods -o wide EMRI GATI STATUS RIKTHIME MOSHA 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 performancĂ«s/skallarizueshmĂ«risĂ« sĂ« API ekzistues pĂ«r Endpoint qĂ« prekin komponente tĂ« ndryshme nĂ« control-plane (apiserver, etcd, endpoints-controller, kube-proxy). API i ri do tĂ« shtohet nĂ« grupin e API-ve Discovery dhe do tĂ« jetĂ« nĂ« gjendje tĂ« shĂ«rbejĂ« dhjetĂ«ra mijĂ«ra endpoint-e tĂ« backend nĂ« çdo shĂ«rbim nĂ« klasterin qĂ« pĂ«rbĂ«het nga mijĂ«ra nyja. PĂ«r kĂ«tĂ«, çdo ShĂ«rbim shfaqet nĂ« N objekte
EndpointSlice, secili prej të cilëve ka siç është parazgjedhur jo më shumë se 100 endpoint-e (vlera është e konfiguruar). Në API EndpointSlice do të parashikohen dhe mundësitë për zhvillimin e tij të ardhshëm: mbështetje për shumë IP-adresa për çdo pod, gjendje të reja për endpoint-et (jo vetëmGatidheJoGati), subsetim dinamik për endpoint-et.
Derisa beta-vedja e paraqitur në lëshimin e kaluar , e quajtur service.kubernetes.io/load-balancer-cleanup e cila është e lidhur me çdo shërbim me lloj LoadBalancer. Në momentin e fshirjes së këtij shërbimi, ai parandalon fshirjen e vërtetë të burimit, derisa të përfundojë "pastrimi" i të gjitha burimeve përkatëse të balancuesit.
API Machinery
Një "pika ndalimi" e vërtetë është regjistruar në fushën e serverit API Kubernetes dhe ndërveprimit me të. Kjo ndodhi në masë të madhe për shkak të kalimit në statusin stable të CustomResourceDefinitions nuk kërkuan përfaqësim të veçantë që ishin në statusin beta që nga Kubernetes 1.7 (kjo është qershor 2017!). Të njëjtën stabilizim e morën edhe funksionet që lidhen me to:"nënburimet" (subresources)
- për CustomResources;
/statusdhe/scaleversionet për CRD, e bazuar në webhook të jashtëm; - vlerat e paracaktuara të paraqitur rishtazi
- dhe fshirja automatike e fushave (pruning) 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. (pruning) versionet për CRD, e bazuar në webhook të jashtëm;
- 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 kohë që është bërë i njohur për administratorët e Kubernetes: po ashtu ka qëndruar për një kohë të gjatë në statusin beta (në K8s 1.9) dhe tani është shpallur stabil.
Dy karakteristika të tjera arritën versionin beta: dhe .
NdĂ«rsa zhvillimi i vetĂ«m i rĂ«ndĂ«sishĂ«m nĂ« versionin alfa ishte nga SelfLink - njĂ« URI speciale qĂ« pĂ«rfaqĂ«son objektin e caktuar dhe Ă«shtĂ« pjesĂ« e ObjectMeta dhe ListMeta (dmth pjesĂ« e çdo objekti nĂ« Kubernetes). Pse po braktiset? Motivimi "thjesht" si mungesa e arsyeve tĂ« vĂ«rteta (tĂ« pakalueshme) pĂ«r qĂ« ky fushĂ« tĂ« ekzistojĂ« ende. Arsyet mĂ« formale janĂ« optimizimi i performancĂ«s (duke zhdukur fushĂ«n e panevojshme) dhe thjeshtimi i funksionimit tĂ« generic-apiserver, i cili detyrohet tĂ« pĂ«rpunojĂ« kĂ«tĂ« fushĂ« nĂ« njĂ« mĂ«nyrĂ« tĂ« veçantĂ« (kjo Ă«shtĂ« fushĂ« e vetme qĂ« vendoset menjĂ«herĂ« para serializimit tĂ« objektit). VĂ«rtet "shkalla e vjetĂ«rsimit" (nĂ« kuadĂ«r tĂ« versionit beta) SelfLink do tĂ« ndodhi deri nĂ« versionin Kubernetes 1.20, ndĂ«rsa pĂ«rfundimtare â 1.21.
Ruajtja e të dhënave
Puna kryesore në fushën e ruajtjes, si në versionet e mëparshme, vërehet në fushën . Ndryshimet kryesore këtu ishin:
- për herë të parë (në versionin alfa) mbështetje për plugins CSI për nodet punuese në Windows: një mënyrë aktuale për të punuar me ruajtjet dhe këtu do të zëvendësojë plugins in-tree në kernelin Kubernetes dhe plugins FlexVolume nga Microsoft bazuar në Powershell;

Skema e implementimit të plugins CSI në Kubernetes për Windows - mundësia , e prezantuar gjithashtu në K8s 1.12, arriti në versionin beta;
- një "rritje" të ngjashme (nga versioni alfa në versionin beta) arriti edhe mundësia e përdorimit të CSI për krijimin e volumeve efemerë lokalë ().
Funksioni i klonimit të volumeve, që shfaqet në versionin e kaluar të Kubernetes DataSource për krijimin e PVC-ve të reja) gjithashtu tani ka marrë statusin beta. Planifikuesi
Dy ndryshime të dukshme në planifikim (të dyja në versionin alfa):
EvenPodsSpreading
- për "distribuimin e ndershëm" të ngarkesave përmes pod'ave në vend të njësive logjike të aplikacionit (si Deployment dhe ReplicaSet) dhe rregullimi i këtij shpërndarjeje (si një kërkesë të rreptë ose si një kusht të butë, dmth. prioriteti). Karakteristika do të zgjasë mundësitë aktuale të shpërndarjes së pods të planifikuar, të cilat tani kufizohen nga opsionet PodAffinity
PodAntiAffinitydhePodAntiAffinity, duke ofron administratorĂ«ve kontroll mĂ« tĂ« hollĂ«sishĂ«m nĂ« kĂ«tĂ« çështje, dhe pĂ«r pasojĂ« - njĂ« disponibilitet mĂ« tĂ« lartĂ« dhe njĂ« konsum mĂ« tĂ« optimizuar tĂ« burimeve. Detajet - nĂ« . - PĂ«rdorimi Politika BestFit nĂ« Funksioni Prioriteti RequestedToCapacityRatio nĂ« kohĂ«n e planifikimit tĂ« podâave, qĂ« do tĂ« lejojĂ« aplikohen ("paketimi nĂ« enĂ«") si pĂ«r burimet kryesore (procesori, memoria), ashtu edhe pĂ«r ato tĂ« avancuara (si GPU). PĂ«r mĂ« shumĂ«, shih nĂ« .

Planifikimi i podâave: deri nĂ« pĂ«rdorimin e politikĂ«s best fit (drejtpĂ«rdrejt pĂ«rmes planifikuesit default) dhe me pĂ«rdorimin e saj (pĂ«rmes scheduler extender)
Për më tepër, mundësia për të krijuar plugujtë tuaj për planifikuesin jashtë pemës kryesore të zhvillimit të Kubernetes (out-of-tree).
Ndryshime të tjera
Gjithashtu në versionin Kubernetes 1.16 mund të theksohet inisiativa për e metrikave ekzistuese në një rend të plotë, dhe nëse jemi më të saktë - përputhjen me për instrumentimin e K8s. Ato në thelb mbështeten në dokumentacionin përkatës të . Mospërputhjet kanë ndodhur për arsye të ndryshme (p.sh., disa metrika ishin krijuar thjesht para se të shfaqeshin udhëzimet aktuale), dhe zhvilluesit vendosën se ishte koha për ta sjellë gjithçka në një standard të vetëm, "në përputhje me pjesën tjetër të ekosistemit Prometheus". Aktualisht kjo iniciativë ka statusin alfa, i cili do të rritet gradualisht në versionet e ardhshme të Kubernetes deri në beta (1.17) dhe stabil (1.18).
Për më tepër, mund të theksohen ndryshime të tjera:
- Zhvillimi i mbështetjes për Windows me utilitarin Kubeadm për këtë OS (version alfa),
RunAsUserNamepër enë Windows (version alfa), e mbështetjes për Group Managed Service Account (gMSA) deri në version beta, mount/attach për volume vSphere. - mekanizmit të kompresimit të të dhënave në përgjigjet API. Më parë, për këto qëllime përdorej një filtrues HTTP, i cili vendoste një sërë kufizimesh, duke penguar aktivizimin e tij si të par preset. Tani funksionon "kompresimi transparent i kërkesave": klientët që dërgojnë
Accept-Encoding: gzipnĂ« lidhjen e kĂ«rkesĂ«s, marrin njĂ« pĂ«rgjigje tĂ« kompresuar GZIP, nĂ«se pesha e saj kalonte 128 Kb. KlientĂ«t nĂ« Go automatikisht mbĂ«shtesin kompresimin (dĂ«rgojnĂ« lidhjen e nevojshme), kĂ«shtu qĂ« menjĂ«herĂ« do tĂ« vĂ«rejnĂ« njĂ« ulje tĂ« trafikut. (PĂ«r gjuhĂ« tĂ« tjera, mund tĂ« nevojiten modifikime tĂ« vogla.) - shkallĂ«zimin e HPA nga/nĂ« zero podâash nĂ« bazĂ« tĂ« metrikave tĂ« jashtme. NĂ«se shkallĂ«zimi bĂ«het nĂ« bazĂ« tĂ« objekteve/metrikave tĂ« jashtme, kur ngarkesat e punĂ«s janĂ« nĂ« pritje, mund tĂ« shkallĂ«zohet automatikisht nĂ« 0 kopje pĂ«r tĂ« kursyer burimet. Kjo veçori duhet tĂ« jetĂ« veçanĂ«risht e dobishme nĂ« rastet kur punĂ«torĂ«t kĂ«rkojnĂ« burime GPU, kur numri i llojeve tĂ« ndryshme tĂ« punĂ«torĂ«ve nĂ« pritje kalon numrin e GPU-ve tĂ« disponueshme.
- Konsumatori i ri â â pĂ«r akses "tĂ« pĂ«rgjithshĂ«m" nĂ« objekte. Ai Ă«shtĂ« projektuar pĂ«r tĂ« marrĂ« lehtĂ«sisht metadatĂ« (dmth. nĂ«nkategoritĂ«
metadata) nga burimet e klashtit dhe për të kryer operacione si mbledhja e mbetjeve dhe kuotimi. - Mbledh Kubernetes pa ofrues të rinj cloud (versioni alfa).
- Në utilitarin kubeadm ka një mundësi eksperimentale (versioni alfa) për të aplikuar patch-e kustomize gjatë operacioneve
init,bashkohudheupgrade. MĂ« shumĂ« mbi si tĂ« pĂ«rdorni flagun--experimental-kustomize, shih nĂ« . - Pika e re pĂ«r apiserver â , â qĂ« lejon eksportin e informacionit mbi gatishmĂ«rinĂ« e tij (readiness). Gjithashtu, api-serveri tani ka njĂ« flag
--maximum-startup-sequence-duration, që lejon rregullimin e rikthimeve të tij. - Dy veçori për Azure u shpallën të stabilizuara: mbështetje (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; - e konfigurimeve
LoadBalancerNamedheLoadBalancerResourceGroup.
- AWS tani ka për EBS në Windows dhe Thirrjet API EC2
DescribeInstances. - Kubeadm tani migron vetë Binarët
- në imazhin përkatës Docker etcd u bënë ka mbështetje për versionin etcd2. Cluster Autoscaler 1.16.0
- Në Përditësime në softuerin e përdorur/variable: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
- đ„Kubernetes 1.16: njĂ« pĂ«rmbledhje e noviteteve kryesore | ProHoster
P.S.
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com


