Kubernetes 1.16: BECA de inovasyon prensipal yo

Kubernetes 1.16: BECA de inovasyon prensipal yo

Jodi a, Mèkredi, pral pran plas pwochen lage nan Kubernetes - 1.16. Dapre tradisyon an ki te devlope pou blog nou an, sa a se tan an dizyèm anivèsè nou ap pale sou chanjman ki pi enpòtan nan nouvo vèsyon an.

Yo pran enfòmasyon yo itilize pou prepare materyèl sa a Kubernetes amelyorasyon tablo swiv, CHANGELOG-1.16 ak pwoblèm ki gen rapò, demann rale, ak Pwopozisyon Amelyorasyon Kubernetes (KEP). Donk, ann ale!...

Nœuds

Yon vrèman gwo kantite inovasyon remakab (nan estati vèsyon alfa) yo prezante sou bò a nan nœuds gwoup K8s yo (Kubelet).

Premyerman, sa yo rele «kontenè efemèr» (Kontenè efemèr), fèt pou senplifye pwosesis debogaj nan gous. Nouvo mekanis nan pèmèt ou lanse resipyan espesyal ki kòmanse nan espas non gous ki egziste deja epi ki ap viv pou yon ti tan. Objektif yo se kominike avèk lòt gous ak resipyan yo nan lòd yo rezoud nenpòt pwoblèm ak debogaj. Yon nouvo kòmandman te aplike pou karakteristik sa a kubectl debug, menm jan an nan sans nan kubectl exec: sèlman olye pou yo kouri yon pwosesis nan yon veso (tankou nan exec) li lanse yon veso nan yon gous. Pou egzanp, lòd sa a pral konekte yon nouvo veso nan yon gous:

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

Ou ka jwenn detay sou resipyan efemèr (ak egzanp itilizasyon yo) nan korespondan KEP. Aplikasyon aktyèl la (nan K8s 1.16) se yon vèsyon alfa, e pami kritè pou transfè li nan yon vèsyon beta se "tès API Ephemeral Containers pou omwen 2 degaje [Kubernetes]."

NB: Nan sans li yo e menm non li, karakteristik la sanble ak yon plugin ki deja egziste kubectl-debugsou ki nou deja ekri. Li espere ke ak avenman nan resipyan efemèr, devlopman nan yon Plugin ekstèn separe ap sispann.

Yon lòt inovasyon - PodOverhead - fèt pou bay mekanis pou kalkile depans jeneral pou gous, ki ka varye anpil depann sou ègzekutabl la itilize. Kòm yon egzanp, otè yo KEP sa a rezilta nan Kata Containers, ki mande pou kouri kernel envite, ajan kata, sistèm init, elatriye. Lè sou tèt yo vin tèlman gwo, li pa ka inyore, ki vle di bezwen gen yon fason yo pran li an kont pou plis kota, planifikasyon, elatriye. Pou aplike li nan PodSpec jaden te ajoute Overhead *ResourceList (konpare ak done nan RuntimeClass, si yo itilize youn).

Yon lòt inovasyon remakab se manadjè topoloji ne (Manadjè Topoloji Ne), ki fèt pou inifye apwòch pou ajiste alokasyon resous pyès ki nan konpitè pou divès konpozan nan Kubernetes. Inisyativ sa a se kondwi pa bezwen an ap grandi nan divès sistèm modèn (ki soti nan domèn telekominikasyon, aprantisaj machin, sèvis finansye, elatriye) pou gwo pèfòmans enfòmatik paralèl ak minimize reta nan ekzekisyon an nan operasyon yo, pou ki yo itilize CPU avanse ak kapasite akselerasyon pyès ki nan konpitè. Optimizasyon sa yo nan Kubernetes yo te reyalize byen lwen tèlman gras a eleman disparate (manadjè CPU, manadjè Aparèy, CNI), epi kounye a yo pral ajoute yon sèl koòdone entèn ki inifye apwòch la ak senplifye koneksyon an nan nouvo menm jan an - sa yo rele topoloji-. okouran - konpozan sou bò Kubelet. Detay - nan korespondan KEP.

Kubernetes 1.16: BECA de inovasyon prensipal yo
Dyagram eleman manadjè topoloji

Pwochen karakteristik - tcheke veso yo pandan y ap kouri (sonde demaraj). Kòm ou konnen, pou resipyan ki pran anpil tan pou yo lanse, li difisil pou jwenn yon estati ajou: yo swa "touye" anvan yo aktyèlman kòmanse fonksyone, oswa yo fini nan enpas pou yon tan long. Nouvo chèk (pèmèt atravè pòtay karakteristik yo rele StartupProbeEnabled) anile - oswa pito, ranvwaye - efè nenpòt lòt chèk jiskaske gous la fini kouri. Pou rezon sa a, karakteristik la te orijinal rele pod-startup liveness-sonde holdoff. Pou gous ki pran anpil tan pou kòmanse, ou ka sondaj eta a nan entèval tan relativman kout.

Anplis de sa, yon amelyorasyon pou RuntimeClass disponib imedyatman nan estati beta, ajoute sipò pou "gwoup eterojèn". C RuntimeClass Scheduling Koulye a, li pa ditou nesesè pou chak ne gen sipò pou chak RuntimeClass: pou gous ou ka chwazi yon RuntimeClass san yo pa reflechi sou topoloji gwoup la. Précédemment, pou reyalize sa a - pou gous fini sou nœuds ak sipò pou tout sa yo bezwen - li te nesesè yo bay règ apwopriye nan NodeSelector ak tolerans. NAN CAP Li pale sou egzanp itilizasyon ak, nan kou, detay aplikasyon an.

Сеть

De karakteristik rezo enpòtan ki parèt pou premye fwa (nan vèsyon alfa) nan Kubernetes 1.16 yo se:

  • Sipòte doub rezo pile - IPv4 / IPv6 - ak "konpreyansyon" korespondan li yo nan nivo gous, nœuds, sèvis. Li gen ladann entèoperabilite IPv4-a-IPv4 ak IPv6-a-IPv6 ant gous, soti nan gous nan sèvis ekstèn, aplikasyon referans (nan Bridge CNI, PTP CNI ak grefon Host-Local IPAM), osi byen ke ranvèse Konpatib ak gwoup Kubernetes kouri. IPv4 oswa IPv6 sèlman. Detay aplikasyon yo nan CAP.

    Yon egzanp montre adrès IP nan de kalite (IPv4 ak IPv6) nan lis la nan gous:

    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#

  • Nouvo API pou Endpoint - EndpointSlice API. Li rezoud pwoblèm pèfòmans/évolutivité API Endpoint ki egziste deja ki afekte plizyè konpozan nan plan kontwòl la (apiserver, etcd, endpoints-controller, kube-proxy). Nouvo API a pral ajoute nan gwoup Discovery API a epi yo pral kapab sèvi plizyè dizèn milye endpoints backend sou chak sèvis nan yon gwoup ki gen plizyè milye nœuds. Pou fè sa, chak Sèvis se trase nan N objè EndpointSlice, chak nan yo pa defo pa gen plis pase 100 pwen final (valè a se configurable). EndpointSlice API a pral bay opòtinite tou pou devlopman nan lavni li yo: sipò pou plizyè adrès IP pou chak gous, nouvo eta pou pwen final yo (pa sèlman Ready и NotReady), sous-setting dinamik pou pwen final yo.

Youn nan prezante nan dènye lage a te rive nan vèsyon an beta finalizè, non service.kubernetes.io/load-balancer-cleanup ak tache ak chak sèvis ak kalite LoadBalancer. Nan moman sa a nan efase yon sèvis sa a, li anpeche efase aktyèl la nan resous la jiskaske "netwayaj la" nan tout resous balanse ki enpòtan yo fini.

API machin

Vrè "etap enpòtan nan estabilizasyon" se nan zòn nan nan sèvè a API Kubernetes ak entèraksyon ak li. Sa te rive lajman gras a transfere nan sitiyasyon ki estab moun ki pa bezwen entwodiksyon espesyal CustomResourceDefinitions (CRD), ki te gen estati beta depi jou byen lwen Kubernetes 1.7 (e sa se jen 2017!). Menm estabilizasyon an te rive nan karakteristik ki gen rapò yo:

  • "sous-resous" avèk /status и /scale pou CustomResources;
  • Transfòmasyon vèsyon pou CRD, ki baze sou webhook ekstèn;
  • dènyèman prezante (nan K8s 1.15) valè default (par défaut) ak retire otomatik jaden (taye) pou CustomResources;
  • opòtinite lè l sèvi avèk chema OpenAPI v3 pou kreye ak pibliye dokiman OpenAPI yo itilize pou valide resous CRD sou bò sèvè a.

Yon lòt mekanis ki te vin abitye depi lontan administratè Kubernetes: admisyon webhook - tou te rete nan estati beta pou yon tan long (depi K8s 1.9) epi kounye a se te deklare ki estab.

De lòt karakteristik yo te rive nan beta: sèvè-bò aplike и gade Bookmarks.

Ak sèlman inovasyon enpòtan nan vèsyon an alfa te echèk soti nan SelfLink — yon URI espesyal ki reprezante objè espesifye a epi ki fè pati ObjectMeta и ListMeta (sa vle di yon pati nan nenpòt objè nan Kubernetes). Poukisa yo abandone li? Motivasyon nan yon fason senp son kòm absans reyèl (akablan) rezon pou jaden sa a toujou egziste. Rezon plis fòmèl yo se optimize pèfòmans (pa retire yon jaden ki pa nesesè) ak senplifye travay la nan jenerik-apiserver la, ki se fòse yo okipe yon jaden konsa nan yon fason espesyal (sa a se jaden an sèlman ki mete dwat devan objè a. se seri). Vrè obsolesans (nan beta) SelfLink pral rive pa Kubernetes vèsyon 1.20, ak final - 1.21.

Done depo

Travay prensipal la nan zòn nan depo, tankou nan degaje anvan yo, obsève nan zòn nan CSI sipò. Chanjman prensipal yo isit la yo te:

  • pou premye fwa (nan vèsyon alpha) parèt CSI plugin sipò pou Windows travayè nœuds: fason aktyèl la pou travay ak depo pral ranplase tou grefon nan pye bwa nan nwayo Kubernetes ak grefon FlexVolume soti nan Microsoft ki baze sou Powershell;

    Kubernetes 1.16: BECA de inovasyon prensipal yo
    Plan pou mete ann aplikasyon grefon CSI nan Kubernetes pou Windows

  • opòtinite redimensionnement volim CSI, prezante tounen nan K8s 1.12, te grandi nan yon vèsyon beta;
  • Yon "pwomosyon" menm jan an (soti nan alfa rive nan beta) te reyalize pa kapasite nan sèvi ak CSI pou kreye komèsan efemèr lokal yo (CSI Inline Volim Sipò).

Prezante nan vèsyon anvan Kubernetes fonksyon klonaj volim (itilize PVC ki deja egziste kòm DataSource pou kreye nouvo PVC) te resevwa tou kounye a estati beta.

Orè

De chanjman remakab nan orè (tou de nan alfa):

  • EvenPodsSpreading - opòtinite sèvi ak gous olye de inite aplikasyon lojik pou "distribisyon jis" nan chaj yo (tankou Deplwaman ak ReplicaSet) ak ajiste distribisyon sa a (tankou yon kondisyon difisil oswa kòm yon kondisyon mou, sa vle di priyorite). Karakteristik la pral elaji kapasite distribisyon ki egziste deja nan gous planifye, kounye a limite pa opsyon PodAffinity и PodAntiAffinity, bay administratè yo pi byen kontwòl nan zafè sa a, ki vle di pi bon disponiblite segondè ak konsomasyon resous optimize. Detay - nan CAP.
  • Sèvi ak Règleman BestFit в Fonksyon priyorite RequestedToCapacityRatio pandan planifikasyon gous, ki pral pèmèt itilize bin anbalaj ("anbalaj nan resipyan") pou tou de resous debaz (prosesè, memwa) ak sa ki pwolonje (tankou GPU). Pou plis detay, gade CAP.

    Kubernetes 1.16: BECA de inovasyon prensipal yo
    Orè gous: anvan ou sèvi ak règleman pi bon anfòm (dirèkteman atravè pwogramasyon default) ak ak itilizasyon li yo (via extender orè)

Anplis de sa, prezante kapasite nan kreye pwòp grefon planifikatè ou deyò prensipal pye bwa devlopman Kubernetes (deyò-of-tree).

Lòt chanjman

Epitou nan Kubernetes 1.16 lage li ka remake inisyativ pou pote mezi ki disponib nan lòd konplè, oswa plis jisteman, an akò ak règleman ofisyèl yo nan instrumentation K8s. Yo lajman konte sou korespondan an Dokiman Prometheus. Enkonsistans te parèt pou plizyè rezon (pa egzanp, kèk mezi yo te tou senpleman kreye anvan enstriksyon aktyèl yo te parèt), e devlopè yo te deside ke li te tan yo pote tout bagay nan yon sèl estanda, "nan liy ak rès la nan ekosistèm Prometheus la." Aplikasyon aktyèl la nan inisyativ sa a se nan estati alfa, ki pral progresivman ankouraje nan vèsyon ki vin apre nan Kubernetes nan beta (1.17) ak ki estab (1.18).

Anplis de sa, chanjman sa yo ka note:

  • Windows sipòte devlopman с aparans Sèvis piblik Kubeadm pou eksplwatasyon sa a (vèsyon alfa), opòtinite RunAsUserName pou resipyan Windows (vèsyon alfa), amelyorasyon Kont Sèvis Jere Gwoup (gMSA) sipòte jiska vèsyon beta, sipò monte/tache pou volim vSphere.
  • Resikle mekanis konpresyon done nan repons API. Anvan sa, yo te itilize yon filtè HTTP pou rezon sa yo, ki te enpoze yon kantite restriksyon ki te anpeche li aktive pa default. "Transparan demann konpresyon" kounye a ap travay: kliyan voye Accept-Encoding: gzip nan header la, yo resevwa yon repons GZIP-konprese si gwosè li depase 128 KB. Kliyan Go otomatikman sipòte konpresyon (voye header ki nesesè yo), kidonk yo pral imedyatman remake yon rediksyon nan trafik. (Ti modifikasyon ka nesesè pou lòt lang.)
  • Te vin posib Eskalad HPA soti nan/nan zewo gous ki baze sou mezi ekstèn. Si ou echèl baze sou objè/mestik ekstèn, Lè sa a, lè chaj travay yo san fè anyen konsa, ou ka otomatikman echèl a 0 kopi pou konsève pou resous yo. Karakteristik sa a ta dwe itil espesyalman pou ka kote travayè yo mande resous GPU, ak kantite diferan kalite travayè san fè anyen konsa depase kantite GPU ki disponib yo.
  • Nouvo kliyan - k8s.io/client-go/metadata.Client — pou aksè "jeneralize" nan objè yo. Li fèt pou fasilman rekipere metadata (sa vle di sou-seksyon metadata) soti nan resous grap yo epi fè koleksyon fatra ak operasyon kota avèk yo.
  • Bati Kubernetes kounye a ou kapab san yo pa eritaj (« entegre » nan pye bwa) founisè nwaj (vèsyon alfa).
  • Pou sèvis piblik kubeadm te ajoute eksperimantal (alfa vèsyon) kapasite pou aplike patch Customize pandan operasyon yo init, join и upgrade. Aprann plis sou fason pou itilize drapo a --experimental-kustomize, wè nan CAP.
  • Nouvo pwen final pou apiserver - readyz, - pèmèt ou ekspòte enfòmasyon sou preparasyon li yo. Sèvè API a tou kounye a gen yon drapo --maximum-startup-sequence-duration, ki pèmèt ou kontwole rekòmanse li yo.
  • De karakteristik pou Azure te deklare stab: sipò zòn disponiblite yo (Zòn Disponibilite) ak gwoup resous kwa (RG). Anplis de sa, Azure te ajoute:
    • sipò otantifikasyon AAD ak ADFS;
    • abstrè service.beta.kubernetes.io/azure-pip-name presize IP piblik balanse chaj la;
    • opòtinite anviwònman LoadBalancerName и LoadBalancerResourceGroup.
  • AWS kounye a gen sipòte pou EBS sou Windows ak optimize Apèl EC2 API DescribeInstances.
  • Kubeadm se kounye a endepandan imigre Konfigirasyon CoreDNS lè w amelyore vèsyon CoreDNS la.
  • Binè elatriye nan imaj Docker ki koresponn lan mond-egzekutabl, ki pèmèt ou kouri imaj sa a san yo pa bezwen dwa rasin. Epitou, elatriye migrasyon imaj sispann sipò vèsyon etcd2.
  • В Cluster Autoscaler 1.16.0 chanje nan itilize distroless kòm imaj de baz la, amelyore pèfòmans, ajoute nouvo founisè nwaj (DigitalOcean, Magnum, Packet).
  • Mizajou nan lojisyèl itilize/depandan: Ale 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè