Kubernetes 1.16: peamiste uuenduste ĂŒlevaade

Kubernetes 1.16: peamiste uuenduste ĂŒlevaade

TĂ€na, kolmapĂ€eval, toimub on uuendatud Kubernetes — 1.16. Meie blogi traditsioonide kohaselt rÀÀgime juba kĂŒmnendat korda olulisematest muudatustest uues versioonis.

Selle materjali koostamiseks kasutatud teave on saadud Kubernetes'i tÀiustuste jÀlgimise tabelist, CHANGELOG-1.16 ja vastavatest probleemidest, tÔmbenÔuetest ning Kubernetes Enhancement Proposals (KEP). Nii et, alustame!..

SÔlmed

Kubelet'i K8s-klastrite sÔlmedes on esitatud tÔeliselt suur hulk mÀrkimisvÀÀrseid uuendusi (alpha-versioonis).

Esiteks, tutvustatakse nn «ajutisi konteinereid» (Ephemeral Containers), mille eesmĂ€rk on lihtsustada pod'ide silumise protsesse. Uus mehhanism vĂ”imaldab kĂ€ivitada spetsiaalseid konteinereid, mis kĂ€ivituvad olemasolevate pod'ide nimedetailis ja elavad lĂŒhikest aega. Nende eesmĂ€rk on suhelda teiste pod'ide ja konteineritega, et lahendada mingeid probleeme ja siluda vigu. Selle funktsiooni jaoks on kasutusele vĂ”etud uus kĂ€sk kubectl debug, mis sarnaneb oma olemuselt kubectl exec: kuid erinevalt konteineris protsessi kĂ€ivitamisest (nagu juhtum on exec) kĂ€ivitab see konteineri pod'is. NĂ€iteks selline kĂ€sk ĂŒhendab uue konteineri pod'iga:

kubectl debug -c debug-shell --image=debian target-pod -- bash

Ajakohase teabe ajutiste konteinerite kohta (ja nende kasutamise nĂ€idised) on vĂ”imalik leida vastavast KEP-ist. Praegune rakendus (K8s 1.16-s) on alpha-versioon, ja ĂŒheks kriteeriumiks, mille alusel see muudetakse beetaversiooniks, on "Ephemeral Containers API testimine vĂ€hemalt kahe Kubernetes'i vĂ€ljaande jooksul."

NB: Oma olemuselt ja isegi nime poolest meenutab see funktsioon juba olemasolevat pluginat kubectl-debug, millest me oleme juba kirjutanud. Eeldatakse, et ajutiste konteinerite tekkimisega lakkab eksisteerima eraldi vÀline plugin.

Teine uuendus — PodOverhead — on kavandatud pakkuma mehhanismi pod'ide kulude arvestamiseks, mis vĂ”ivad sĂ”ltuvalt kasutatavast kĂ€ituskeskkonnast (runtime) oluliselt erineda. NĂ€iteks toovad autorid selle KEP-i nĂ€itena vĂ€lja Kata Containers, mis nĂ”uab kĂŒlgjuhtme, kata agendi, algus sĂŒsteemi jne kĂ€ivitamist. Kui overhead on nii suur, et seda ei saa ignoreerida, on vajalik meetod selle arvessevĂ”tmiseks edasise kvootide mÀÀramisel, planeerimisel jne. Selle rakendamiseks on PodSpec lisatud vĂ€li Overhead *ResourceList (seostatakse andmetega RuntimeClass, kui selline on olemas).

Veel ĂŒks tĂ€helepanuvÀÀrne uuendus — sĂ”lmede topoloogia haldur (Node Topology Manager), misjoni on ĂŒhtlustada lĂ€henemist riistvaraliste ressursside tĂ€psustamisele erinevates komponentides Kubernetes. See algatus tuleneb kasvavast vajadusest erinevate tĂ€napĂ€evaste sĂŒsteemide (telekommunikatsiooni, masinĂ”ppe, finantsteenuste jne valdkondades) jĂ€rele, mis vajavad kĂ”rge jĂ”udlusega paralleelseid arvutusi ja viivituste minimeerimist operatsioonide tĂ€itmisel, kasutades selleks edasijĂ”udnud CPU ja riistvarakiirenduse vĂ”imalusi. Sellised optimeeringud Kuberneteses on siiani saavutatud erinevate komponentidega (CPU manager, Device manager, CNI), kuid nĂŒĂŒd lisatakse neile ĂŒhtne sisemine liides, mis ĂŒhtlustab lĂ€henemist ja lihtsustab sarnaste – nn topology-aware – komponentide ĂŒhendamist Kubeleti poolel. Üksikasjad – vastavast KEP-ist.

Kubernetes 1.16: peamiste uuenduste ĂŒlevaade
Topology Manager komponentide skeem

JĂ€rgmine funktsioon on konteinerite kontrollimise ajal nende kĂ€ivitamisest (startup probe). Nagu teada, on konteinerite, mis kaua kĂ€ivituvad, kĂ€imasoleva oleku saamine keeruline: neid vĂ”ib "tappa" enne tĂ”elist kĂ€ivitumist vĂ”i nad satuvad kaua aega deadlock'i. Uus kontroll (mille aktiveerib funktsioonivĂ€rav nimega StartupProbeEnabled) tĂŒhistab - tĂ€psemalt, lĂŒkkab edasi - kĂ”igi teiste kontrollide rakendamise kuni hetkeni, mil pod on oma kĂ€ivitamise lĂ”petanud. Sellest tulenevalt nimetati funktsiooni algselt pod-startup liveness-probe holdoff. Pikalt kĂ€ivitatavate pod'ide kohta saab kĂŒsida olekut suhteliselt lĂŒhikeste ajavahemike tagant.

Lisaks on kohe beetaversioonis esitatud tĂ€iustamine RuntimeClass jaoks, mis lisab toe "heterogeensetele klastritele". C RuntimeClass Scheduling ei ole enam vajalik, et igal sĂ”lmel oleks tugi igale RuntimeClass'ile: pod'ide jaoks saab valida RuntimeClass'i, mĂ”tlemata klastri topoloogiale. Varem oli selle saavutamiseks – et pod'id paikneksid sĂ”lmedes, millel on toetust kĂ”igile nendele vajalikele – vajalik vastavate reeglite mÀÀramine NodeSelector'ile ja tolerations'ile. KEP-is kĂ€sitletakse kasutusnĂ€iteid ja muidugi rakendamise ĂŒksikasju.

VÔrk

Kaks olulist vĂ”rgufunktsiooni, mis ilmusid esmakordselt (alpha versioonis) Kubernetes 1.16 – need on:

  • Tugi topoloogilise vĂ”rgu steki – IPv4/IPv6 — ja vastav tema "mĂ”istmine" pod'ide, sĂ”lmede ja teenuste tasandil. See hĂ”lmab IPv4-to-IPv4 ja IPv6-to-IPv6 suhtlust pod'ide vahel, pod'ide ja vĂ€liste teenuste vahel, viidatud rakendusi (Bridge CNI, PTP CNI ja Host-Local IPAM liideste kaudu) ning tagasipöördumise ĂŒhisuses Kubernetes klastritega, mis töötavad ainult IPv4 vĂ”i IPv6 kaudu. Rakenduse ĂŒksikasjad — KEP-is.

    Kaks tĂŒĂŒpi IP-aadresside (IPv4 ja IPv6) vĂ€ljundite nĂ€ide pod'ide 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 jĂ”udlus-/skaalaprobleemid, mis mĂ”jutavad erinevaid komponente control-plane'is (apiserver, etcd, endpoints-controller, kube-proxy). Uus API lisatakse Discovery API rĂŒhma ja vĂ”ib teenindada kĂŒmneid tuhandeid tagasiside (backend) lĂ”pp-punkte iga teenuse kohta klastris, mis koosneb tuhandetest sĂ”lmedest. Selle saavutamiseks kuvatakse iga teenus N objektina EndpointSlice, millest igaĂŒhel on vaikimisi mitte rohkem kui 100 lĂ”pp-punkti (vÀÀrtus on seadistatav). EndpointSlice API-s on ette nĂ€htud ka vĂ”imalused selle tulevase arendamise jaoks: toetada mitmeid IP-aadresse iga pod'i jaoks, uusi olekuid lĂ”pp-punktide jaoks (mitte ainult Valmis ja NotReady), dĂŒnaamiline alamgrupp lĂ”pp-punktide jaoks.

KĂ€esoleva versiooni beetaversioon on arenenud eelmisel vĂ€ljaandel finalizer, mida nimetatakse service.kubernetes.io/load-balancer-cleanup ja mis on iga teenuse juurde kinnitatud, mille tĂŒĂŒp on LoadBalancer. Sellise teenuse eemaldamise hetkel takistab see ressursi tegelikku eemaldamist, kuni kĂ”ik vastavad koormusbalansi ressursside "puhtaks tegemise" protsessid on lĂ”pule viidud.

API Machinery

Praegune "stabiliseerimise oluline verstapost" on fikseeritud Kubernetes API serveri ja selle vahetuse valdkonnas. Suurel mÀÀral juhtus see tÀnu töötlemise edasiviimise staatusest vÀlja viimisele, mis ei nÔudnud erilist esitlemist CustomResourceDefinitions (CRD), mis olid olnud beetaversioonis alates kaugest Kubernetes 1.7 (see on juuni 2017!). Sama stabiliseerimine sai ka seotud funktsioonidele:

Veel tuttav mehhanism Kubernetes'i administraatoritele: admission webhook — on samuti pikka aega olnud beetastaadiumis (alates K8s 1.9) ja nĂŒĂŒd kuulutatud stabiilseks.

Kaks muud funktsiooni on jÔudnud beetaversiooni: server-side apply ja watch bookmarks.

Ja ainus oluline uuendus alfa-versioonis oli keeldumine alates SelfLink — eriline URI, mis esindab mÀÀratud objekti ja on osa ObjectMeta ja ListMeta (st osa igast objektist Kuberneteses). Miks sellest loobutakse? Motivatsioon "lihtsustatult" kĂ”lab nagu tĂ”eliste (ĂŒletamatute) pĂ”hjuste puudumine, miks see vĂ€li peaks veel olemas olema. Formaalsed pĂ”hjused on siiski jĂ”udluse optimeerimine (ebavajaliku vĂ€lja eemaldamine) ja generic-apiserveri töö lihtsustamine, mis peab sellist vĂ€lja eriliselt kĂ€sitlema (see on ainus vĂ€li, mis seatakse otse objekti serialiseerimise eel). TĂ”eline "aegumise" (beetaversioonis) SelfLink toimub Kubernetes 1.20 versioonis, ja lĂ”plik — 1.21.

Andmete salvestamine

Nagu eelmistes vÀljaannetes, on peamine töö salvestuses valdkonnas CSI toe toetamine. Peamised muudatused on:

  • esmakordselt (alfa-versioonis) on CSI-pluginite tugi Windowsi tööjaamadele: aktuaalne viis salvestusruumide haldamiseks, mis asendab in-tree pluginaid Kubernetes'i tuumas ja Microsofti Powershellil pĂ”hinevaid FlexVolume pluginaid;

    Kubernetes 1.16: peamiste uuenduste ĂŒlevaade
    CSI-pluginite rakendusskeem Kubernetes'es Windowsile

  • vĂ”imaluse CSI-mahtude suuruse muutmine, mis esitati juba K8s 1.12-s, on jĂ”udnud beetaversioonini;
  • sarnase "kĂ”rgendamise" (alfa- kuni beetaversioonini) on saanud ka vĂ”imalus kasutada CSI-d kohalike efemeraalsete mahtude loomiseks (CSI Inline Volume Support).

Eelmises versioonis Kubernetes'es tuli ĂŒles mahutite kloonimise funktsioon (olemasolevate PVC-de kasutamine DataSource uute PVC-de loomiseks) on nĂŒĂŒd samuti saavutanud beetaversiooni staatuse.

Planeerija

Kaks silmapaistvat muudatust planeerimises (mÔlemad alfa-versioonis):

  • EvenPodsSpreading — vĂ”imalus kasutada "ausaks jaotamiseks" pod'e mitte loogilisi rakenduse ĂŒksusi (nagu Deployment ja ReplicaSet) ja reguleerida seda jaotust (kas rangete nĂ”udmiste vĂ”i pehme tingimusena, st prioriteedina). Funktsioon laiendab olemasolevaid plaanejate pod'ide jaotuse vĂ”imekusi, mis on praegu piiratud valikutega PodAffinity ja PodAntiAffinity, and providing administrators with finer control over this matter, thus ensuring better high availability and optimized resource consumption. For details, see KEP-is.
  • Kasutamine BestFit Policy ja RequestedToCapacityRatio Priority Function during pod planning, which will allow rakendama bin packing (“container packing”) for both primary resources (CPU, memory) and extended ones (such as GPU). For more details, see KEP-is.

    Kubernetes 1.16: peamiste uuenduste ĂŒlevaade
    Pod planning: before the use of the best fit policy (directly via the default scheduler) and using it (through the scheduler extender)

Lisaks, esitati the ability to create custom plugins for the scheduler outside the main Kubernetes development tree (out-of-tree).

Teised muudatused

Also in the Kubernetes 1.16 release, it is worth noting the initiative for bringing existing metrics in line, or more precisely — in accordance with official guidelines for K8s instrumentation. They largely rely on the corresponding Prometheus documentation. Inconsistencies arose for various reasons (for example, some metrics were simply created before the current instructions appeared), and developers decided that it was time to bring everything to a single standard, “consistent with the rest of the Prometheus ecosystem.” The current implementation of this initiative is in alpha status, which will be progressively raised in subsequent Kubernetes versions to beta (1.17) and stable (1.18).

In addition, the following changes can be noted:

  • Development of Windows support jot ilmunud for Kubeadm utility for this OS (alpha version), the ability RunAsUserName for Windows containers (alpha version), parandamine support for Group Managed Service Account (gMSA) to beta version, toetuse mount/attach for vSphere volumes.
  • Revamped data compression mechanism in API responses. Previously, an HTTP filter was used for this purpose, which imposed a number of limitations preventing it from being enabled by default. Now “transparent request compression” works: clients that send Accept-Encoding: gzip in the header receive a GZIP compressed response if its size exceeds 128 KB. Go clients automatically support compression (send the required header), so they will immediately notice reduced traffic. (Other languages may require minor modifications.)
  • NĂŒĂŒd on vĂ”imalik scaling HPA up/down to zero pods based on external metricsKui skaleerimine toimub objektide/vĂ€liste mÔÔdikute pĂ”hjal, siis kui töökoormused seisavad, saab automaatselt skaleeruda 0 koopiani, et ressursse sÀÀsta. See funktsioon peaks olema eriti kasulik olukordades, kus töötajad nĂ”uavad GPU ressursse ja erinevate tĂŒĂŒpi seisev töötajate arv ĂŒletab saadaval olevate GPU-de arvu.
  • Uus klient — k8s.io/client-go/metadata.Client — â€žĂŒldise“ juurdepÀÀsu jaoks objektidele. See on mĂ”eldud, et hĂ”lpsasti saada metaandmeid (st alamnoodid metadata) klastrite ressurssidest ja teostada nendega toiminguid, mis on seotud prĂŒgikoristuse ja kvootidega.
  • Koguge Kubernetes --follow ilma aegunud („sisse ehitatud“ in-tree) pilveteenuse pakkujateta (alfa-versioon).
  • Kubeadm utiliit lisanud katsetab (alfa-versioon) kustomize'i plaastrite rakendamist Upgrade'i operatsioonide ajal — algne ettevalmistus enne juurutamist, siin vĂ”ib olla kĂ”ike: sĂ”ltuvuste allalaadimist, saladuste lahtipakkimist ja muud., join ja upgrade. Lisainfot selle kohta, kuidas kasutada parameetrit --experimental-kustomize, vt KEP-is.
  • Uus endpoint apiserverile — readyz, — mis vĂ”imaldab eksportida teavet selle valmisoleku (readiness) kohta. Samuti on API-serveril nĂŒĂŒd parameeter --maximum-startup-sequence-duration, mis vĂ”imaldab reguleerida selle taaskĂ€ivitusi.
  • Kaks funktsiooni Azure'is on kuulutatud stabiilseks: tugi kĂ€ttesaadavuse tsoonidele (Availability Zones) ja ristressursside grupile (RG). Lisaks on Azure'sse lisatud:
    • tugi autentimiseks AAD ja ADFS;
    • mĂ€rkamine service.beta.kubernetes.io/azure-pip-name avaliku IP mÀÀramiseks koormuse tasakaalustajale;
    • vĂ”imaluse seadistamiseks LoadBalancerName ja LoadBalancerResourceGroup.
  • AWS-l on nĂŒĂŒd toetamine EBS toetamine Windowsis ja optimeeritud API-kĂ”ned EC2-le DescribeInstances.
  • Kubeadm migreerib nĂŒĂŒd iseseisvalt CoreDNS-i konfiguratsiooni CoreDNS-i versiooni uuendamisel. Binaarfailid
  • vastavas Docker-pildis etcd world-executable, mis vĂ”imaldab selle pildi kĂ€ivitamist ilma root Ă”igusteta. Lisaks on etcd migratsiooni pildil on teinud tugi etcd2 versioonile. lĂ”petanud Cluster Autoscaler 1.16.0
  • Uues lĂ€htus distroless kasutamisest pĂ”hja pildina, parandas jĂ”udlust, lisas uusi pilveteenuse pakkujaid (DigitalOcean, Magnum, Packet). Uuendused kasutatavas/sĂ”ltuvas tarkvaras: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
  • đŸ„‡Kubernetes 1.16: peamiste uuenduste ĂŒlevaade | ProHoster

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster