Kubernetes 1.16: en översikt över de viktigaste nyheterna

Kubernetes 1.16: en översikt över de viktigaste nyheterna

Idag, onsdag, ska en ny version av Kubernetes — 1.16. I enlighet med traditionen för vĂ„r blogg berĂ€ttar vi, för tionde gĂ„ngen — vĂ„rt jubileum — om de mest betydelsefulla förĂ€ndringarna i den nya versionen.

Informationen som anvÀndes för att förbereda detta material har tagits frÄn tabellen för spÄrning av förbÀttringar i Kubernetes, CHANGELOG-1.16 och relevanta Àrenden, pull requests samt Kubernetes Enhancement Proposals (KEP). SÄ lÄt oss börja! ..

Noder

Ett verkligt stort antal mÀrkbara nyheter (i alfa-version) presenteras pÄ nodsidan av K8s-kluster (Kubelet).

Först och frÀmst introduceras de sÄ kallade «efemÀra containrar» (Ephemeral Containers), som syftar till att förenkla felsökningsprocesser i poddar. Den nya mekanismen gör det möjligt att starta speciella containrar som körs i namnomrÄdet för befintliga poddar och lever under en kort tid. Deras syfte Àr att interagera med andra poddar och containrar för att lösa problem och felsöka. För denna funktion har ett nytt kommando implementerats kubectl debug, som liknar kubectl exec: men istÀllet för att starta en process i containern (som i fallet med exec) startar det en container i podden. Till exempel, detta kommando skulle koppla en ny container till podden:

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

Detaljer om de efemÀra containrarna (och exempel pÄ deras anvÀndning) finns i den relevanta KEP. Den nuvarande implementeringen (i K8s 1.16) Àr i alfa-version, och bland kriterierna för att gÄ över till beta-version anges "testning av Ephemeral Containers API i minst 2 releaser [Kubernetes]".

NB: I sin kÀrna och till och med i namnet pÄminner funktionen om den redan existerande pluginen kubectl-debug, om vilken vi redan skrivit. Det förutses att utvecklingen av den separata externa pluginen kommer att upphöra med införandet av de efemÀra containrarna.

En annan innovation — PodOverhead — syftar till att tillhandahĂ„lla ett mekanism för att rĂ€kna overheadkostnader för poddar, som kan skilja sig avsevĂ€rt beroende pĂ„ den anvĂ€nda körmiljön (runtime). Som exempel tar författarna denna KEP framhĂ„ller Kata Containers, vilka krĂ€ver att starta ett vĂ€rdkĂ€rna, kata-agent, init-system etc. NĂ€r overhead blir sĂ„ stort kan det inte ignoreras, vilket innebĂ€r att ett sĂ€tt att ta hĂ€nsyn till det för framtida kvotering, planering etc. behövs. För att implementera detta har PodSpec fĂ„tt ett fĂ€lt Overhead *ResourceList (matchas med data i RuntimeClass, om sĂ„dana anvĂ€nds).

En annan mĂ€rkbar nyhet Ă€r nodtopologihanteraren (Node Topology Manager), som syftar till att enhetliggöra tillvĂ€gagĂ„ngssĂ€ttet för finjustering av tilldelning av hĂ„rdvaruresurser för olika komponenter i Kubernetes. Denna initiativ har uppkommit pĂ„ grund av det vĂ€xande behovet hos olika moderna system (frĂ„n telekommunikation, maskininlĂ€rning, finanstjĂ€nster osv.) av högpresterande parallellberĂ€kningar och att minimera latens vid utförande av operationer, dĂ€r de anvĂ€nder avancerade funktioner hos CPU och hĂ„rdvaruacceleration. SĂ„dana optimeringar i Kubernetes har hittills uppnĂ„tts genom olika komponenter (CPU manager, Device manager, CNI), och nu tillkommer en enhetlig intern grĂ€nssnitt som enhetliggör tillvĂ€gagĂ„ngssĂ€ttet och förenklar anslutningen av nya liknande — sĂ„ kallade topology-aware — komponenter pĂ„ Kubelet-sidan. Mer information finns i den relevanta KEP.

Kubernetes 1.16: en översikt över de viktigaste nyheterna
Topologihanterarens komponentdiagram

NĂ€sta funktion Ă€r kontroll av behĂ„llare vid start (startup probe). Det Ă€r kĂ€nt att för behĂ„llare som tar lĂ„ng tid att starta Ă€r det svĂ„rt att fĂ„ aktuell status: de antingen "dödas" innan de verkligen börjar fungera, eller sĂ„ fastnar de i deadlock under lĂ„ng tid. Den nya kontrollen (aktiveras via en feature gate kallad StartupProbeEnabled) avbryter — eller snarare skjuter upp — effekten av andra kontroller tills podden har avslutat sin uppstart. Av denna anledning kallades funktionen ursprungligen pod-startup liveness-probe holdoff. För poddar som startar lĂ„ngsamt kan statusfrĂ„gor göras med relativt korta tidsintervall.

Dessutom presenteras en förbÀttring för RuntimeClass direkt i beta-status, som lÀgger till stöd för "heterogena kluster". Med RuntimeClass Scheduling Àr det nu inte lÀngre nödvÀndigt att varje nod har stöd för varje RuntimeClass: för poddar kan RuntimeClass vÀljas utan att tÀnka pÄ klustrets topologi. Tidigare krÀvdes det att motsvarande regler angavs i NodeSelector och tolerations för att sÀkerstÀlla att poddar placerades pÄ noder med fullt stöd för vad de behöver. I KEP beskrivs exempel pÄ anvÀndning och sjÀlvklart detaljerna kring implementeringen.

NĂ€tverk

TvÄ betydande nÀtverksfunktioner som först dök upp (i alpha-versionen) i Kubernetes 1.16 Àr:

  • Support dubbel nĂ€tverksstack — IPv4/IPv6 — och den motsvarande "förstĂ„elsen" pĂ„ pod-, nod- och tjĂ€nstenivĂ„. Detta inkluderar IPv4-till-IPv4 och IPv6-till-IPv6 interaktion mellan poddar, frĂ„n poddar till externa tjĂ€nster, referensimplementationer (inom ramarna för Bridge CNI, PTP CNI och Host-Local IPAM), samt bakĂ„tkompatibilitet med Kubernetes-kluster som enbart anvĂ€nder IPv4 eller IPv6. Detaljer om implementationen finns i KEP.

    Exempel pÄ IP-adresser av tvÄ typer (IPv4 och IPv6) i en lista med poddar:

    kube-master# kubectl get pods -o wide
    NAMN               KLAR     STATUS     ÅTERSTARTADE   ÅLDER       IP                           NOD
    nginx-controller   1/1       Kör        0             20m        fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • Ny API för Endpoint — EndpointSlice API. Det löser prestanda-/skaleringsproblem med den befintliga Endpoint API, som pĂ„verkar olika komponenter i control-plane (apiserver, etcd, endpoints-controller, kube-proxy). Den nya API:n kommer att lĂ€ggas till API-gruppen Discovery och kan hantera tiotusentals backend-endpointar pĂ„ varje tjĂ€nst i ett kluster med tusentals noder. För detta kommer varje Service att översĂ€ttas till N objekt EndpointSlice, dĂ€r varje normalt har högst 100 endpointar (detta vĂ€rde Ă€r konfigurerbart). I EndpointSlice API:n kommer det Ă€ven att finnas möjligheter för framtida utveckling: stöd för flera IP-adresser per pod, nya tillstĂ„nd för endpointar (inte bara Redo och NotReady), dynamisk delmĂ€ngdning för endpointar.

Framsteg har gjorts till beta-versionen av den som presenterades i den senaste utgÄvan finalizer, kallad service.kubernetes.io/load-balancer-cleanup och kopplad till varje tjÀnst av typen LoadBalancer. Vid borttagning av en sÄdan tjÀnst förhindrar den faktiskt borttagning av resursen tills "stÀdningen" av alla relevanta lastbalanserarresurser Àr slutförd.

API Machinery

Den verkliga "stabiliseringens milstolpe" har registrerats inom Kubernetes API-server och dess interaktion. Mycket av detta har skett tack vare övergÄngen till stabil status för de som inte krÀver sÀrskild representation CustomResourceDefinitions (CRD), som haft beta-status sedan lÄngt tillbaka, Kubernetes 1.7 (det vill sÀga juni 2017!). Samma stabilisering har ocksÄ kommit till de relaterade funktionerna:

  • "subresources" med /status och /scale för CustomResources;
  • konvertering versioner för CRD, baserat pĂ„ en extern webhook;
  • nyligen presenterade (i K8s 1.15) standardvĂ€rden (defaulting) och automatisk borttagning av fĂ€lt (pruning) för CustomResources;
  • att tillĂ€mpning av OpenAPI v3-schema för skapande och publicering av OpenAPI-dokumentation, som anvĂ€nds för validering av CRD-resurser pĂ„ serversidan.

Ytterligare en mekanism som lĂ€nge har blivit vanligt för Kubernetes-administratörer: admission webhook — har ocksĂ„ lĂ€nge haft beta-status (sedan K8s 1.9) och Ă€r nu officiellt stabil.

TvÄ andra funktioner har nÄtt beta-version: server-side apply och watch bookmarks.

Och den enda betydande nyheten i alpha-versionen var avskaffande frĂ„n SelfLink — en speciell URI som representerar det angivna objektet och Ă€r en del av ObjectMeta och ListMeta (dvs. en del av varje objekt i Kubernetes). Varför avskaffas det? Motivationen ‘i enkelhet’ lĂ„ter som att det saknas verkliga (oöverkomliga) anledningar för att detta fĂ€lt fortfarande ska existera. Mer formella anledningar Ă€r att optimera prestandan (genom att ta bort onödigt fĂ€lt) och förenkla arbetet för generic-apiserver, som Ă€r tvungen att hantera ett sĂ„dant fĂ€lt pĂ„ sĂ€rskilt sĂ€tt (detta Ă€r det enda fĂ€lt som sĂ€tts precis innan objektet serialiseras). Den verkliga ‘avskrivningen’ (inom beta-versionen) SelfLink kommer att ske med Kubernetes version 1.20, och den slutgiltiga — 1.21.

Databevarande

Det huvudsakliga arbetet inom lagring, precis som i tidigare versioner, observeras inom stöd för CSI. De viktigaste förÀndringarna hÀr har varit:

  • för första gĂ„ngen (i alpha-versionen) har det tillkommit stöd för CSI-pluginer för arbetsnoder med Windows: en aktuell metod för att arbeta med lagringslösningar som kommer att ersĂ€tta in-tree-pluginer i kĂ€rnan av Kubernetes och FlexVolume-pluginer frĂ„n Microsoft baserat pĂ„ Powershell;

    Kubernetes 1.16: en översikt över de viktigaste nyheterna
    Schema för implementation av CSI-pluginer i Kubernetes för Windows

  • att Ă€ndring av storlek pĂ„ CSI-volymer, presenterat i K8s 1.12, har nĂ„tt beta-version;
  • en liknande ‘uppgradering’ (frĂ„n alpha- till beta-version) har ocksĂ„ uppnĂ„tts med möjligheten att anvĂ€nda CSI för att skapa lokala temporĂ€ra volymer (CSI Inline Volume Support).

Funktionen för volymkloning som dök upp i föregÄende version av Kubernetes (anvÀndning av befintliga PVC som DataSource för att skapa nya PVC) har ocksÄ nu fÄtt beta-status.

SchemalÀggare

TvÄ mÀrkbara förÀndringar i schemalÀggningen (bÄda i alpha-version):

  • EvenPodsSpreading — möjligheten att anvĂ€nda pods för ‘rĂ€ttvis fördelning’ av belastningar istĂ€llet för logiska enheter av applikationen (sĂ„som Deployment och ReplicaSet) och justeringen av denna fördelning (som ett strikt krav eller som en mjuk förutsĂ€ttning, dvs. prioritet). Denna funktion kommer att utöka de befintliga fördelningsmöjligheterna för schemalagda pods, som nu Ă€r begrĂ€nsade av alternativen PodAffinity och PodAntiAffinity, vilket ger administratörer mer finjusterad kontroll över detta omrĂ„de, vilket i sin tur ger bĂ€ttre tillgĂ€nglighet och optimerad resursanvĂ€ndning. Mer information finns i KEP.
  • AnvĂ€ndning BestFit Policy pĂ„ RequestedToCapacityRatio Priority Function vid planering av poddar, vilket gör det möjligt att tillĂ€mpa bin packing ("container packing") bĂ„de för grundlĂ€ggande resurser (processor, minne) och för utökade resurser (som GPU). Mer information finns i KEP.

    Kubernetes 1.16: en översikt över de viktigaste nyheterna
    Planering av poddar: före anvÀndning av best fit policy (direkt via default scheduler) och med dess anvÀndning (genom scheduler extender)

Dessutom, presenterades möjligheten att skapa egna plugins för schemalÀggaren utanför huvudutvecklingstrÀdet för Kubernetes (out-of-tree).

Övriga förĂ€ndringar

Det kan ocksĂ„ nĂ€mnas i Kubernetes 1.16 initiativet för att ordna de existerande mĂ€tvĂ€rdena, eller mer exakt — i enlighet med de officiella riktlinjerna som rör instrumentering av K8s. De bygger i huvudsak pĂ„ motsvarande Prometheus-dokumentation. Inkonsekvenserna har uppstĂ„tt av olika anledningar (till exempel skapades vissa mĂ€tvĂ€rden innan aktuella instruktioner fanns), och utvecklarna har beslutat att det Ă€r dags att föra allt i linje med en gemensam standard, "i enlighet med resten av Prometheus-ekosystemet". Den aktuella implementeringen av detta initiativ har statuset alfa-version, som successivt kommer att uppgraderas i kommande versioner av Kubernetes till beta (1.17) och stabil (1.18).

Dessutom kan följande förÀndringar nÀmnas:

  • Utveckling av stöd för Windows med genom introduktionen av Kubeadm-verktyget för detta operativsystem (alfa-version), möjligheten RunAsUserName för Windows-containrar (alfa-version), förbĂ€ttring stöd för Group Managed Service Account (gMSA) till beta-version, stödet mount/attach för vSphere-volymer.
  • Omstrukturerad mekanism för data komprimering i API-svar. Tidigare anvĂ€ndes en HTTP-filter för dessa Ă€ndamĂ„l, som satte upp vissa begrĂ€nsningar som hindrade dess aktivering som standard. Nu fungerar "transparent komprimering av förfrĂ„gningar": klienter som skickar Accept-Encoding: gzip i rubriken fĂ„r ett gzip-komprimerat svar om dess storlek överstiger 128 KB. Klienter pĂ„ Go stöder automatiskt komprimering (skickar rĂ€tt rubrik), sĂ„ de kommer direkt att mĂ€rka en minskning av trafik. (För andra sprĂ„k kan smĂ„ justeringar krĂ€vas.)
  • Det har blivit möjligt att skala HPA upp/ned till noll poddar baserat pĂ„ externa mĂ€tvĂ€rden. Om skalning görs pĂ„ objekt/externa mĂ€tvĂ€rden kan man automatiskt skala till 0 repliker nĂ€r arbetslasterna Ă€r inaktiva för att spara resurser. Denna funktion bör vara sĂ€rskilt anvĂ€ndbar vid situationer dĂ€r arbetare begĂ€r GPU-resurser och antalet olika typer av inaktiva arbetare överstiger antalet tillgĂ€ngliga GPU:er.
  • Ny kund — k8s.io/client-go/metadata.Client — för "generell" Ă„tkomst till objekt. Den Ă€r avsedd för att enkelt fĂ„ tag pĂ„ metadata (d.v.s. underavdelning metadata) frĂ„n klusterresurser och utföra operationer sĂ„som skrĂ€pinsamling och kvotering.
  • Kubernetes kan nu anvĂ€ndas utan förĂ„ldrade ("inbyggda" i tree) molnleverantörer (alpha-version).
  • I verktyget kubeadm lagt till har den experimentella (alpha-version) möjligheten att applicera kustomize-patchar under operationer init, join och upgrade. Mer information om hur man anvĂ€nder flaggan --experimental-kustomize, finns i KEP.
  • Ny endpoint för apiserver — readyz, — som tillĂ„ter export av information om dess beredskap (readiness). Dessutom har API-servern fĂ„tt en flagga --maximum-startup-sequence-duration, vilket tillĂ„ter att reglera dess omstarter.
  • TvĂ„ funktioner för Azure har blivit stabila: stöd för tillgĂ€nglighetszoner (Availability Zones) och cross resource group (RG). Dessutom har Azure lagt till:
    • stöd för autentisering AAD och ADFS;
    • annotering service.beta.kubernetes.io/azure-pip-name för att ange offentlig IP för lastbalanseraren;
    • att instĂ€llningar LoadBalancerName och LoadBalancerResourceGroup.
  • AWS har fĂ„tt stöd för för EBS pĂ„ Windows och har optimerat API-anrop för EC2 DescribeInstances.
  • Kubeadm migrerar nu sjĂ€lvstĂ€ndigt konfigurationen av CoreDNS vid uppgradering av CoreDNS-versionen. BinĂ€rfiler
  • etcd i den motsvarande Docker-bilden Ă€r vĂ€rldsexekverbara, vilket möjliggör körning av denna bild utan behov av root-behörighet. Dessutom har etcd-migrationsbilden gjort slutat stötta versionen etcd2. Cluster Autoscaler 1.16.0
  • I har övergĂ„tt till att anvĂ€nda distroless som basbild, förbĂ€ttrat prestandan och lagt till nya molnleverantörer (DigitalOcean, Magnum, Packet). Uppdateringar i den anvĂ€nda/beroende programvaran: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
  • Kubernetes 1.15: översikt över huvudnyheterna

P.S.

LÀs Àven i vÄr blogg:

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster