
TĂ€na, kolmapĂ€eval, 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 , 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 «» (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 -- bashAjakohase teabe ajutiste konteinerite kohta (ja nende kasutamise nĂ€idised) on vĂ”imalik leida . 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 , millest me . Eeldatakse, et ajutiste konteinerite tekkimisega lakkab eksisteerima eraldi vÀline plugin.
Teine uuendus â â on kavandatud pakkuma mehhanismi pod'ide kulude arvestamiseks, mis vĂ”ivad sĂ”ltuvalt kasutatavast kĂ€ituskeskkonnast (runtime) oluliselt erineda. NĂ€iteks toovad autorid 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 â .

Topology Manager komponentide skeem
JĂ€rgmine funktsioon on konteinerite kontrollimise ajal nende kĂ€ivitamisest (). 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 . 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 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. kĂ€sitletakse kasutusnĂ€iteid ja muidugi rakendamise ĂŒksikasju.
VÔrk
Kaks olulist vĂ”rgufunktsiooni, mis ilmusid esmakordselt (alpha versioonis) Kubernetes 1.16 â need on:
- 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 â .
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 â . 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 ainultValmisjaNotReady), dĂŒnaamiline alamgrupp lĂ”pp-punktide jaoks.
KĂ€esoleva versiooni beetaversioon on arenenud eelmisel vĂ€ljaandel , 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 (CRD), mis olid olnud beetaversioonis alates kaugest Kubernetes 1.7 (see on juuni 2017!). Sama stabiliseerimine sai ka seotud funktsioonidele:
- koos
/statusja/scaleCustomResources; - CRD jaoks, mis pÔhineb vÀlisel webhook'il;
- (K8s 1.15) vaikimisi vÀÀrtused (defaulting) ja automaatne vÀljaheide valdkondadele (pruning) CustomResources;
- OpenAPI v3 skeemi rakendamine ja avaldamine OpenAPI dokumentatsiooni loomiseks ja avaldamiseks, mida kasutatakse CRD-resursside valideerimiseks serveri kĂŒljes.
Veel tuttav mehhanism Kubernetes'i administraatoritele: â on samuti pikka aega olnud beetastaadiumis (alates K8s 1.9) ja nĂŒĂŒd kuulutatud stabiilseks.
Kaks muud funktsiooni on jÔudnud beetaversiooni: ja .
Ja ainus oluline uuendus alfa-versioonis oli 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" 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 . Peamised muudatused on:
- esmakordselt (alfa-versioonis) 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;

CSI-pluginite rakendusskeem Kubernetes'es Windowsile - vÔimaluse , 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 ().
Eelmises versioonis Kubernetes'es (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):
- â 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
PodAffinityjaPodAntiAffinity, and providing administrators with finer control over this matter, thus ensuring better high availability and optimized resource consumption. For details, see . - Kasutamine BestFit Policy ja RequestedToCapacityRatio Priority Function during pod planning, which will allow rakendama (âcontainer packingâ) for both primary resources (CPU, memory) and extended ones (such as GPU). For more details, see .

Pod planning: before the use of the best fit policy (directly via the default scheduler) and using it (through the scheduler extender)
Lisaks, 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 existing metrics in line, or more precisely â in accordance with for K8s instrumentation. They largely rely on the corresponding . 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 for Kubeadm utility for this OS (alpha version),
RunAsUserNamefor Windows containers (alpha version), support for Group Managed Service Account (gMSA) to beta version, mount/attach for vSphere volumes. - 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: gzipin 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.) - 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 â â âĂŒ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 ilma aegunud (âsisse ehitatudâ in-tree) pilveteenuse pakkujateta (alfa-versioon).
- Kubeadm utiliit 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.,joinjaupgrade. Lisainfot selle kohta, kuidas kasutada parameetrit--experimental-kustomize, vt . - Uus endpoint apiserverile â , â 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 (Availability Zones) ja (RG). Lisaks on Azure'sse lisatud:
- AAD ja ADFS;
-
service.beta.kubernetes.io/azure-pip-nameavaliku IP mÀÀramiseks koormuse tasakaalustajale; - seadistamiseks
LoadBalancerNamejaLoadBalancerResourceGroup.
- AWS-l on nĂŒĂŒd EBS toetamine Windowsis ja API-kĂ”ned EC2-le
DescribeInstances. - Kubeadm migreerib nĂŒĂŒd iseseisvalt Binaarfailid
- vastavas Docker-pildis etcd world-executable, mis vÔimaldab selle pildi kÀivitamist ilma root Ôigusteta. Lisaks on etcd migratsiooni pildil tugi etcd2 versioonile. Cluster Autoscaler 1.16.0
- Uues 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


