Kubernetes 1.16: peamised uuendused

Kubernetes 1.16: peamised uuendused

TĂ€na, kolmapĂ€eval, toimub 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 Kubernetes'i tÀiustuste jÀlgimise tabelist, CHANGELOG-1.16 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 «efemereid konteinerid» (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 -- bash

Teavet efemeersete konteinerite kohta (ja nĂ€iteid nende kasutamisest) leiate vastavast KEP-ist. 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 kubectl-debug, millest me oleme juba kirjutanud. Eeldatakse, et efemeersete konteinerite eelkÀijate edasiarendamine lÔpeb.

Teine uuendus — PodOverhead — eesmĂ€rk on pakkuda mekanismi pod'ide ĂŒlekatte arvutamiseks, mis vĂ”ib erineda sĂ”ltuvalt kasutatavast kĂ€ituskeskkonnast (runtime). NĂ€itena toovad autorid seda KEP-i , 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 — vastavast KEP-ist.

Kubernetes 1.16: peamised uuendused
Topoloogia halduri komponentide skeem

JĂ€rgmine funktsioon — konteinerite kontrollimine nende kĂ€ivitamise ajal (startup probe). 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 pod-startup liveness-probe holdoff. 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 RuntimeClass Scheduling 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 KEP selgitab kasutusnĂ€idete ja loomulikult teostuse ĂŒksikasju.

VÔrk

Kaks olulist vĂ”rgu funktsiooni, mis ilmnesid esmakordselt (alfa-versioonis) Kubernetes 1.16 – need on:

  • Toetamine 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 KEP.

    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 — EndpointSlice API. 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 ainult Valmis ja NotReady), dĂŒnaamilise alampuhastuse endpoint’idele.

Beeta versioonini on edasi arendatud eelmine vĂ€ljaanne finalizer, 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 (CRD) , 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)

  • CustomResourceide jaoks; ja /status ja /scale versioonide CRD jaoks, mis pĂ”hineb vĂ€lisel webhook'il;
  • muundamine hiljuti esitatud
  • (K8s 1.15) vaikimisi vÀÀrtused (defaulting) (defaulting) ja automaatne vĂ€ljade eemaldamine (kĂ€rpimine) versioonide CRD jaoks, mis pĂ”hineb vĂ€lisel webhook'il;
  • vĂ”imalus 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: vastuvĂ”tmise webhook — oli samuti pikka aega beetaversioonis (K8s 1.9) ja on nĂŒĂŒd kuulutatud stabiilseks.

Kaks muud funktsiooni on saavutanud beetaversiooni: serveripoolne rakendamine ja vaata jÀrjehoidjaid.

Ja ainus mĂ€rkimisvÀÀrne uuendus alfa-versioonis oli SelfLink 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 nagu tĂ”eliste (ĂŒletamatute) pĂ”hjuste puudumine, miks see vĂ€li peaks endiselt olemas olema. Formaalseteks pĂ”hjusteks on jĂ”udluse optimeerimine (kui eemaldada mittevajalik vĂ€li) ja generic-apiserver'i töö lihtsustamine, mis peab sellist vĂ€lja eranditult kĂ€sitlema (see on ainus vĂ€li, mis mÀÀratakse otse enne objekti serialiseerimist). TĂ”eline „vananemine“ (beetaversiooni raames) 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 CSI toe. Peamisteks muudatusteks on:

  • esmakordselt (alfa-versioonis) ilmus 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;

    Kubernetes 1.16: peamised uuendused
    CSI-pluginite rakendusskeem Kubernetes'is Windows jaoks

  • vĂ”imalus CSI-mahtude suuruse muutmine, 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 (CSI Inline Volume Support).

Eelmise Kubernetes'i versioonis mahud kloonimise funktsioon (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):

  • EvenPodsSpreading — 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 PodAffinity ja PodAntiAffinity, andes sĂŒsteemiadministraatoritele peenemad kontrollivĂ”imalused selle kĂŒsimuse ĂŒle, mis tĂ€hendab paremat kĂ”rge saadavuse ja optimeeritud ressursitarbimist. Üksikasjad — KEP.
  • Kasutamine BestFit Policy ĂŒhes RequestedToCapacityRatio Priority Function pod'ide planeerimise ajal, mis vĂ”imaldab rakendama bin packing („konteinerite pakkimine”) nii pĂ”hivahendite (protsessor, mĂ€lu) kui ka laiendatud ressursside (nt GPU) osas. Lisainfot leiate KEP.

    Kubernetes 1.16: peamised uuendused
    Pod'ide planeerimine: enne best fit policy kasutamist (otseselt vaikimisi ajakava kaudu) ja selle kasutamisega (scheduler extender'i kaudu)

Lisaks toetab esitatud 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 olemasolevate mÔÔdikute korrastamiseks , tĂ€psemalt – vastavusse viimiseks, ja kui tĂ€psemalt — vastavuses ametlike nĂ”uete K8s instrumenteerimise osas. Need pĂ”hinevad suuresti vastaval Prometheuse dokumentatsioonil. 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 tulemuseks Kubeadm utiliidi selle operatsioonisĂŒsteemi jaoks (alfa-versioon), vĂ”imalus RunAsUserName Windowsi konteinerite jaoks (alfa-versioon), parandamine Group Managed Service Account'i (gMSA) toe muutmiseks beetaversiooniks, toetades mount/attach vSphere'i mahtudeks.
  • Uuendatud 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: gzip pealkirjas 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.)
  • On vĂ”imalik 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 — k8s.io/client-go/metadata.Client — â€žĂŒ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 on nĂŒĂŒd vĂ”imalik ilma vananenud („sisse ehitatud“) pilveteenuse pakkujatega (alfa-versioon).
  • Kubeadmi utiliiti lisasid katse (alfa-versioon) vĂ”imalus rakendada kustomize'i plaastreid operatsioonide kĂ€igus init, liitu ja uuenda. TĂ€iendavat teavet selle lipu kasutamise kohta --experimental-kustomize, vaata KEP.
  • Uus lĂ”pp-punkt apiserverile — readyz, — 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 saite (Availability Zones) ja ristressursside grupp (RG). Lisaks on Azure'is lisatud: AAD ja ADFS autentimise tugi;
  • optimeeritud toetamine API-kutsed EC2-le DescribeInstances Kubeadm nĂŒĂŒd iseseisvalt migreerib.
  • CoreDNS-i konfiguratsiooni, kui CoreDNS-i versioon uuendatakse. Binaarfailid CoreDNS-i konfiguratsioon versiooniuuenduse kĂ€igus.
  • Binaarfailid etcd vastavas Docker-pildis tegi world-executable, mis vĂ”imaldab selle pildi kĂ€ivitamist ilma root'i Ă”igusteta. Lisaks on etcd lĂ”petanud etcd2 versiooni toe.
  • V Cluster Autoscaler 1.16.0 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

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster