
TĂ€na, kolmapĂ€eval, on vĂ€lja antud jĂ€rgmine versioon Kubernetes â 1.16. JĂ€tkates meie blogi traditsiooniga, rÀÀgime juba kĂŒmnendat korda olulisematest muudatustest uues versioonis.
Selle refleksiooni ettevalmistamiseks kasutatud teave on vÔetud , ja vastavatest probleemidest, pull request'idest, samuti Kubernetes Enhancement Proposals (KEP) dokumentidest. Nii et, alaku siis!..
SÔlmed
Koguni suur hulk mÀrgatavaid uudsusi (alfaversioonis) on esindatud K8s-klastrite sÔlmedes (Kubelet).
Esiteks tutvustatakse nn «» (Ephemeral Containers), mis on mĂ”eldud pod'ide debugimise protsesside lihtsustamiseks.Uus mehhanism vĂ”imaldab kĂ€ivitada spetsiaalseid konteinerid, mis alustavad olemasolevate pod'ide nimete ruumis ja elavad lĂŒhikese aja. Nende eesmĂ€rk on suhelda teiste pod'ide ja konteineridega probleemide lahendamise ja debugimise eesmĂ€rgil. Selle funktsiooni jaoks on lĂ€bi viidud uus kĂ€sk kubectl debug, mis on sarnane oma olemuselt kubectl exec: ainult et kĂ€ima ei anta protsessi konteineris (nagu juhtus exec) see ĂŒhendab konteineri pod'iga. NĂ€iteks selline kĂ€sk ĂŒhendab uue konteineri pod'iga:
kubectl debug -c debug-shell --image=debian target-pod -- bashTeavet efemeersete konteinerite kohta (ja nĂ€iteid nende kasutamisest) leiate . Praegune rakendus (K8s 1.16-s) on alfa-versioon ja selle ĂŒleminekuks beetaversiooniks on oluline kriteerium "efemeersete konteinerite API testimine vĂ€hemalt kahe vĂ€ljalaske jooksul [Kubernetes]".
NB: Oma olemuse ja isegi nime poolest sarnaneb funktsioon juba olemasoleva pistikprogrammiga , millest me . Eeldatakse, et efemeersete konteinerite eelkÀijate edasiarendamine lÔpeb.
Teine uuendus â â eesmĂ€rk on pakkuda mekanismi pod'ide ĂŒlekatte arvutamiseks, mis vĂ”ib erineda sĂ”ltuvalt kasutatavast kĂ€ituskeskkonnast (runtime). NĂ€itena toovad autorid , tuues vĂ€lja Kata konteinerid, mis nĂ”uavad kĂŒlgtoega pĂ”hi, kata-agent, alglaadimise sĂŒsteem jne. Kui ĂŒlejÀÀk on nii suur, et seda ei saa ignoreerida, on vajalik viis seda edasise kvoteerimise, planeerimise jne jaoks arvesse vĂ”tta. Selle rakendamiseks on PodSpec lisatud vĂ€li Pealne *ResourceList (vastandub andmetele RuntimeClass, kui selline on kasutusel).
Veel ĂŒks mĂ€rkimisvÀÀrne uuendus â sĂ”lme topoloogia haldur (Node Topology Manager), mille eesmĂ€rk on ĂŒhtlustada lĂ€henemist riistvararesursside tĂ€pselt jaotamisele erinevates komponentides Kuberneteses. See algatus on tingitud erinevate kaasaegsete sĂŒsteemide (telekommunikatsiooni, masinĂ”ppe, finantsteenuste jne valdkondadest) suurenevast vajadusest kĂ”rge jĂ”udlusega paralleelsete arvutuste ja töötlusoperatsioonide viivituste vĂ€hendamise jĂ€rele, milleks nad kasutavad CPU ja riistvara kiirendamise edasijĂ”udnud vĂ”imalusi. Sellised optimeerimised Kuberneteses on seni saavutatud killustatud komponentide (CPU manager, Device manager, CNI) kaudu, kuid nĂŒĂŒd lisatakse neile ĂŒhtne sisemine liides, mis ĂŒhtlustab lĂ€henemist ja lihtsustab uute sarnaste â nn topoloogia teadlike â komponentide ĂŒhendamist Kubeleti kĂŒljes. Ăksikasjad â .

Topoloogia halduri komponentide skeem
JĂ€rgmine funktsioon â konteinerite kontrollimine nende kĂ€ivitamise ajal (). Nagu teada, on konteinerite puhul, mis aeglaselt kĂ€ivituvad, keeruline saada ajakohast staatust: neid kas "tapetakse" enne reaalse töö alustamist vĂ”i satuvad nad pikaks ajaks deadlockâi. Uus kontroll (lĂŒlitatakse sisse feature gate nimega StartupProbeEnabled) tĂŒhistab â tĂ€psemalt, lĂŒkkab edasi â kĂ”ik ĂŒlejÀÀnud kontrollid kuni hetkeni, mil pod on oma kĂ€ivitamise lĂ”petanud. Selle pĂ”hjusel kutsuti funktsiooni algselt . Aeglaselt kĂ€ivituvate pod'ide jaoks on vĂ”imalik teha olekukuulamist otsesemates ajavahemikes.
Lisaks on beetaversioonis esitatud tĂ€iendus RuntimeClassâile, mis lisab toe "heterogeensetele klastritele". C ei ole nĂŒĂŒd vajalik, et igal sĂ”lmel oleks tugi iga RuntimeClassâi jaoks: podâide jaoks on vĂ”imalik valida RuntimeClass ilma klastrite topoloogiast muretsemata. Varem tuli selle saavutamiseks â et podâid paikneksid sĂ”lmedes, kus on toetatud nende vajadused â mÀÀrata vastavad reeglid NodeSelectorile ja toleratsioonidele. K selgitab kasutusnĂ€idete ja loomulikult teostuse ĂŒksikasju.
VÔrk
Kaks olulist vĂ”rgu funktsiooni, mis ilmnesid esmakordselt (alfa-versioonis) Kubernetes 1.16 â need on:
- topeltvĂ”rgustik â IPv4/IPv6 â ja selle vastav «mĂ”istmine» podide, sĂ”lmede ja teenuste tasandil. See hĂ”lmab IPv4-to-IPv4 ja IPv6-to-IPv6 suhtlemist podide vahel, podid vĂ€liste teenuste jaoks, viidatud rakendusi (Bridge CNI, PTP CNI ja Host-Local IPAM pluginate raames) ja tagasipöördumise ĂŒhilduvust Kubernetes klastritega, mis töötavad ainult IPv4 vĂ”i IPv6 alusel. Tehnilised ĂŒksikasjad on .
Kaks tĂŒĂŒpi IP-aadresse (IPv4 ja IPv6) podide loendis:
kube-master# kubectl get pods -o wide NAME READY STATUS RESTARTS AGE IP NODE nginx-controller 1/1 Running 0 20m fd00:db8:1::2,192.168.1.3 kube-minion-1 kube-master# - Uus API Endpoint jaoks â . See lahendab olemasoleva Endpoint API probleemid seoses jĂ”udluse/mastaapsusega, mis mĂ”jutavad erinevaid komponente control-planeâis (apiserver, etcd, endpoints-controller, kube-proxy). Uus API lisatakse Discovery API rĂŒhma ja suudab teenindada kĂŒmneid tuhandeid backend endpoint'e igas teenuses klastris, mis koosneb tuhandetest sĂ”lmedest. Selle jaoks kaardistatakse iga Teenus N objektiks
EndpointSlice, igaĂŒhel neljast on vaikimisi maksimaalselt 100 endpointâi (vÀÀrtust saab seadistada). EndpointSlice API pakub ka tulevikus arenguvĂ”imalusi: toetust mitmele IP-aadressile iga podâi kohta, uusi oleketeenuseid endpointâidele (mitte ainultValmisjaNotReady), dĂŒnaamilise alampuhastuse endpointâidele.
Beeta versioonini on edasi arendatud eelmine vĂ€ljaanne , mille nimi on service.kubernetes.io/load-balancer-cleanup ja millel on lisatud iga servi, mille tĂŒĂŒp on LoadBalancer. Sellise teenuse eemaldamise hetkel takistab see ressursi tegelikku kustutamist, kuni kĂ”ik vastavad tasakaalustaja ressursid on «puhastatud».
API Machinery
See «stabiliseerimise verstapost» on dokumenteeritud Kubernetes API-serveri valdkonnas ja selle interaktsioonides. Suur osa sellest on toimunud stabiilseks staatuseks muudetud CustomResourceDefinitions , mis olid b-eta staatuses alates kaugest Kubernetes 1.7-st (ja see on juuni 2017!). Samasugune stabiliseerimine on toimunud ka nendega seotud funktsioonides:«alamressursid» (subresources)
- ja
/statusja/scaleversioonide CRD jaoks, mis pÔhineb vÀlisel webhook'il; - hiljuti esitatud
- (defaulting) (defaulting) ja automaatne vÀljade eemaldamine (kÀrpimine) versioonide CRD jaoks, mis pÔhineb vÀlisel webhook'il;
- OpenAPI v3 skeemi rakendamine OpenAPI-dokumentatsiooni loomisel ja avaldamisel, mida kasutatakse CRD-resursside valideerimiseks serveri kĂŒljel.
Veel ĂŒks mehhanism, mis on Kubernetes' administaratoritele juba tuttav: â oli samuti pikka aega beetaversioonis (K8s 1.9) ja on nĂŒĂŒd kuulutatud stabiilseks.
Kaks muud funktsiooni on saavutanud beetaversiooni: ja .
Ja ainus mĂ€rkimisvÀÀrne uuendus alfa-versioonis oli alates â spetsiaalne URI, mis esindab mÀÀratud objekti ja on osa ObjectMeta ListMeta ja (st on osa mis tahes objektist Kubernetes'eis). Miks sellest loobutakse? âLihtneâ motiiv kĂ”lab toimub Kubernetes'e versioonis 1.20 ja lĂ”plikult â 1.21. â spetsiaalne URI, mis esindab mÀÀratud objekti ja on osa toimub Kubernetesi versioonile 1.20, ja lĂ”plikult â 1.21.
Andmete salvestamine
Peamine tegevusala salvestamiseks, nagu ka varasemates versioonides, tÀheldatakse valdkonnas . Peamisteks muudatusteks on:
- esmakordselt (alfa-versioonis) CSI-pluginite tugi Windowsi töövoogudele: sobiv meetod salvestuslahendustega ning see asendab in-tree pluginad Kubernetes'i tuumas ja Microsofti PowerShelli pÔhised FlexVolume pluginad;

CSI-pluginite rakendusskeem Kubernetes'is Windows jaoks - vÔimalus , mis tutvustati juba K8s 1.12, on jÔudnud beeta-versiooni;
- sarnast «tÔstmist» (alfa- kuni beeta-versioonini) on saavutanud ka CSI kasutamise vÔimalus kohalike ajutiste mahtude loomisel ().
Eelmise Kubernetes'i versioonis (olemasolevate PVC-de kasutamine DataSource uute PVC-de loomiseks) on nĂŒĂŒd samuti saanud beeta-versiooni staatuse.
Ajakava
Kaks mÀrkimisvÀÀrset muudatust planeerimises (mÔlemad alfa-versioonis):
- â vĂ”imalus kasutada 'ausa jaotuse' jaoks pod'e, mitte rakenduse loogilisi ĂŒksuseid (nĂ€iteks Deployment ja ReplicaSet) ja selle jaotuse reguleerimine (kas rangete nĂ”udmiste vĂ”i pehme tingimusena, st prioriteedina). See funktsioon laiendab olemasolevaid vĂ”imalusi kavandatavate pod'ide jaotuseks, mis praegu on piiratud valikutega
PodAffinityjaPodAntiAffinity, andes sĂŒsteemiadministraatoritele peenemad kontrollivĂ”imalused selle kĂŒsimuse ĂŒle, mis tĂ€hendab paremat kĂ”rge saadavuse ja optimeeritud ressursitarbimist. Ăksikasjad â . - Kasutamine BestFit Policy ĂŒhes RequestedToCapacityRatio Priority Function pod'ide planeerimise ajal, mis vĂ”imaldab rakendama (âkonteinerite pakkimineâ) nii pĂ”hivahendite (protsessor, mĂ€lu) kui ka laiendatud ressursside (nt GPU) osas. Lisainfot leiate .

Pod'ide planeerimine: enne best fit policy kasutamist (otseselt vaikimisi ajakava kaudu) ja selle kasutamisega (scheduler extender'i kaudu)
Lisaks toetab vÔimalus luua oma pluginaid ajakava jaoks vÀljaspool Kubernetes'e pÔhiarenduse puu (out-of-tree).
Muudatused
Kubernetes 1.16 vĂ€ljaandes on samuti tĂ€helepanuvÀÀrne algatus , tĂ€psemalt â vastavusse viimiseks, ja kui tĂ€psemalt â vastavuses K8s instrumenteerimise osas. Need pĂ”hinevad suuresti vastaval . Erinevad lahknevused on tekkinud erinevatel pĂ”hjustel (nĂ€iteks mĂ”ned mÔÔdikud loodi enne, kui praegused juhised ilmusid), ning arendajad otsustasid, et on aeg kĂ”ik ĂŒhtsesse standardisse viia, âvastavusse ĂŒlejÀÀnud Prometheuse ökosĂŒsteemigaâ. KĂ€esolev algatuse rakendamine on alfa-versioonis, mille staatust tĂ”stetakse jĂ€rk-jĂ€rgult jĂ€rgmistes Kubernetes'i versioonides beetaversiooniks (1.17) ja stabiilseks (1.18).
Samuti vÔib mÀrkida jÀrgmisi muudatusi:
- Windowsi toe arendamine koos Kubeadm utiliidi selle operatsioonisĂŒsteemi jaoks (alfa-versioon),
RunAsUserNameWindowsi konteinerite jaoks (alfa-versioon), Group Managed Service Account'i (gMSA) toe muutmiseks beetaversiooniks, mount/attach vSphere'i mahtudeks. - andmete tihendamise mehhanism API vastustes. Varem kasutati nende eesmĂ€rkide jaoks HTTP-filtrit, mis kehtestas mitmeid piiranguid, takistades selle vaikimisi lubamist. NĂŒĂŒd töötab âlĂ€bipaistev pĂ€ringute tihendamineâ: kliendid, kes saadavad
Accept-Encoding: gzippealkirjas saavad kokku surutud GZIP vastuse, kui selle suurus ĂŒletas 128 KB. Go kliendid toetavad automaatselt tihendamist (saates vajaliku pĂ€ise), seetĂ”ttu mĂ€rkavad nad kohe liikluse vĂ€henemist. (Muude keelte puhul vĂ”ivad olla vajalikud mĂ”ned muudatused.) - HPA skaalamine podâide pĂ”hjal vĂ€liste mÔÔdikute jĂ€rgi nulli ja tagasi. Kui skaalamine toimub objektide/vĂ€liste mÔÔdikute pĂ”hjal, siis kui töökoormused seiskuvad, saab automaatselt skaalale langeda 0 replit, et ressursse sÀÀsta. See funktsioon peaks olema eriti kasulik juhtudel, kui töötajad kĂŒsivad GPU ressursse, ja erinevat tĂŒĂŒpi seisakute töötajate arv ĂŒletab saadaval olevate GPU-de arvu.
- Uus klient â â âĂŒldiseâ juurdepÀÀsu objektidele. See on mĂ”eldud metainformatsiooni (st jaotis) lihtsaks hankimiseks
metadata) klastrite ressurssidest ning teostama nende operatsioone nagu prahi kogumine ja kvoteerimine. - Kuberneteset koguda ilma vananenud (âsisse ehitatudâ) pilveteenuse pakkujatega (alfa-versioon).
- Kubeadmi utiliiti katse (alfa-versioon) vÔimalus rakendada kustomize'i plaastreid operatsioonide kÀigus
init,liitujauuenda. TĂ€iendavat teavet selle lipu kasutamise kohta--experimental-kustomize, vaata . - Uus lĂ”pp-punkt apiserverile â , â mis vĂ”imaldab eksportida teavet selle valmiduse (readiness) kohta. Samuti on API-serveril uus lipp
--maximum-startup-sequence-duration, mis vÔimaldab reguleerida selle taaskÀivitusi. - Kaks funktsiooni Azure'is on kuulutatud stabiilseteks: tuge toetavad ristressursside grupp AAD ja ADFS autentimise tugi;
- service.beta.kubernetes.io/azure-pip-name
-
LoadBalancerNameLoadBalancerResourceGroup - seaded
AWS-il on nĂŒĂŒdjaEBS tugi Windowsis ja.
- optimeeritud API-kutsed EC2-le Kubeadm nĂŒĂŒd iseseisvalt
migreerib. - CoreDNS-i konfiguratsiooni, kui CoreDNS-i versioon uuendatakse. CoreDNS-i konfiguratsioon versiooniuuenduse kÀigus.
- Binaarfailid etcd vastavas Docker-pildis world-executable, mis vÔimaldab selle pildi kÀivitamist ilma root'i Ôigusteta. Lisaks on etcd etcd2 versiooni toe.
- V oleme lĂ€inud ĂŒle distroless'i kasutamisele pĂ”hifailina, parandanud jĂ”udlust ning lisanud uusi pilveteenuse pakkujaid (DigitalOcean, Magnum, Packet).
- VÀrskendused kasutatavates/ sÔltuvates programmides: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
P.S.
Lugege ka meie blogist:
- «»;
- «»;
- «»;
- «».
Allikas: habr.com


