Kubernetes 1.16: Highlights vun wat nei ass

Kubernetes 1.16: Highlights vun wat nei ass

Haut, Mëttwoch, wäert stattfannen nächst Verëffentlechung vu Kubernetes - 1.16. No der Traditioun, déi sech fir eise Blog entwéckelt huet, ass dëst den zéngten Anniversaire Zäit wou mir iwwer déi bedeitendst Ännerungen an der neier Versioun schwätzen.

Informatioun benotzt fir dëst Material ze preparéieren ass aus Kubernetes Verbesserunge Tracking Dëscher, CHANGELOG-1.16 a verbonne Themen, Pull Ufroen, a Kubernetes Enhancement Proposals (KEP). Also loosst eis goen!..

Knéien

Eng wierklech grouss Zuel vun Notabele Innovatiounen (an Alpha Versioun Status) sinn op der Säit vun der K8s Cluster Wirbelen presentéiert (Kubelet).

Éischtens, de sougenannte «ephemeral Container» (Ephemeral Container), entwéckelt fir Debuggingprozesser a Pods ze vereinfachen. Den neie Mechanismus erlaabt Iech speziell Container ze lancéieren, déi am Nummraum vun existente Pods starten a fir eng kuerz Zäit liewen. Hiren Zweck ass mat anere Pods a Container ze interagéieren fir all Probleemer ze léisen an ze debuggen. En neie Kommando gouf fir dës Feature implementéiert kubectl debug, ähnlech am Wesentlechen ze kubectl exec: nëmmen amplaz e Prozess an engem Container ze lafen (wéi an exec) et lancéiert e Container an engem Pod. Zum Beispill wäert dëse Kommando en neie Container mat engem Pod verbannen:

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

Detailer iwwer ephemeral Container (a Beispiller vun hirer Notzung) fannt Dir an entspriechend KEP. Déi aktuell Implementatioun (an K8s 1.16) ass eng Alpha Versioun, an ënnert de Critèrë fir seng Transfert op eng Beta Versioun ass "Test der Ephemeral Containers API fir op d'mannst 2 Verëffentlechungen vun [Kubernetes]."

NB: A senger Essenz a souguer säin Numm gläicht d'Feature e scho bestehend Plugin kubectl-debugiwwer déi mir scho geschriwwen. Et gëtt erwaart datt mat dem Advent vun ephemeralen Container d'Entwécklung vun engem separaten externen Plugin ophält.

Eng aner Innovatioun - PodOverhead - entworf ze bidden Mechanismus fir d'Berechnung vun Overhead Käschten fir Pods, déi vill variéiere kënnen ofhängeg vun der benotzter Runtime. Als Beispill, d'Auteuren dëser KEP Resultat zu Kata Container, déi de Gaaschtkerne, Kata Agent, Init System, etc. Wann d'Overhead sou grouss gëtt, kann se net ignoréiert ginn, dat heescht datt et e Wee muss ginn fir se fir weider Quoten, Planung, etc. Fir et ëmzesetzen an PodSpec Terrain dobäi Overhead *ResourceList (vergläicht mat Daten an RuntimeClass, wann een benotzt gëtt).

Eng aner bemierkenswäert Innovatioun ass Node Topologie Manager (Node Topology Manager), entwéckelt fir d'Approche ze vereinfachen fir d'Allocatioun vun Hardware Ressourcen fir verschidde Komponenten an Kubernetes ze feinstemmen. Dës Initiativ gëtt gedriwwen duerch de wuessende Bedierfnes vu verschiddene modernen Systemer (vum Gebitt vun der Telekommunikatioun, Maschinnléieren, Finanzservicer, asw.) fir qualitativ héichwäerteg parallel Computing a Verzögerungen an der Ausféierung vun Operatiounen ze minimiséieren, fir déi se fortgeschratt CPU benotzen an Hardware Beschleunigungsfäegkeeten. Esou Optimisatiounen am Kubernetes goufen bis elo erreecht dank disparate Komponenten (CPU Manager, Device Manager, CNI), an elo ginn se eng eenzeg intern Interface bäigefüügt, déi d'Approche vereenegt an d'Verbindung vun neien ähnlechen vereinfacht - sougenannten Topologie- bewosst - Komponente op der Kubelet Säit. Detailer - an entspriechend KEP.

Kubernetes 1.16: Highlights vun wat nei ass
Topologie Manager Komponent Diagramm

Nächst Feature - Iwwerpréift Container wärend se lafen (Startup Sonde). Wéi Dir wësst, fir Container déi laang Zäit daueren fir ze lancéieren, ass et schwéier en aktuellen Zoustand ze kréien: si ginn entweder "gekillt" ier se tatsächlech ufänken ze funktionnéieren, oder se kommen laang an der Deadlock. Neie Scheck (aktivéiert duerch Feature Gate genannt StartupProbeEnabled) annuléiert - oder éischter, verspéit - den Effekt vun all aner Kontrollen bis de Moment wou de Pod fäerdeg ass. Aus dësem Grond gouf d'Funktioun ursprénglech genannt pod-startup liveness-probe holdoff. Fir Pods déi laang daueren fir unzefänken, kënnt Dir de Staat a relativ kuerzen Zäitintervaller pollen.

Zousätzlech ass eng Verbesserung fir RuntimeClass direkt am Beta-Status verfügbar, a bäidréit Ënnerstëtzung fir "heterogene Cluster". C RuntimeClass Scheduling Elo ass et guer net néideg fir all Node Ënnerstëtzung fir all RuntimeClass ze hunn: fir Pods kënnt Dir e RuntimeClass auswielen ouni un d'Clustertopologie ze denken. Virdrun, fir dëst z'erreechen - sou datt Pods op Noden ophalen mat Ënnerstëtzung fir alles wat se brauchen - war et néideg fir entspriechend Reegelen un NodeSelector an Toleratiounen ze ginn. IN KEPP Et schwätzt iwwer Beispiller vu Gebrauch an, natierlech, Ëmsetzungsdetailer.

Netz

Zwee bedeitend Netzwierkfunktiounen déi fir d'éischte Kéier (an der Alpha Versioun) am Kubernetes 1.16 opgetaucht sinn:

  • Ënnerstëtzung Dual Network Stack - IPv4 / IPv6 - a seng entspriechend "Verständnis" um Niveau vun Pods, Wirbelen, Servicer. Et enthält IPv4-zu-IPv4 an IPv6-zu-IPv6 Interoperabilitéit tëscht Pods, vu Pods bis extern Servicer, Referenzimplementatiounen (bannent de Bridge CNI, PTP CNI an Host-Local IPAM Plugins), souwéi ëmgedréint Kompatibel mat Kubernetes Cluster lafen IPv4 oder IPv6 nëmmen. Ëmsetzung Detailer sinn an KEPP.

    E Beispill fir IP Adressen vun zwou Zorten (IPv4 an IPv6) an der Lëscht vun de Pods ze weisen:

    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#

  • Neien API fir Endpunkt - EndpointSlice API. Et léist d'Performance / Skalierbarkeetsprobleemer vun der existéierender Endpoint API, déi verschidde Komponenten am Kontrollplang beaflossen (apiserver, etcd, endpoints-controller, kube-proxy). Déi nei API gëtt an der Discovery API Grupp bäigefüügt a wäert fäeg sinn Zéngdausende vu Backend Endpunkten op all Service an engem Cluster aus Dausende vu Wirbelen ze déngen. Fir dëst ze maachen, gëtt all Service op N Objete mapéiert EndpointSlice, jidderee vun deenen als Standard net méi wéi 100 Endpunkte huet (de Wäert ass konfiguréierbar). D'EndpointSlice API wäert och Méiglechkeete fir seng zukünfteg Entwécklung ubidden: Ënnerstëtzung fir verschidde IP Adressen fir all Pod, nei Staate fir Endpunkter (net nëmmen Ready и NotReady), dynamesch Ënnersetze fir Endpunkte.

Deen an der leschter Verëffentlechung presentéiert huet d'Beta Versioun erreecht finalisator, genannt service.kubernetes.io/load-balancer-cleanup an all Service mat Typ verbonnen LoadBalancer. Zu der Zäit vun der Läschung vun esou engem Service verhënnert et d'tatsächlech Läschung vun der Ressource bis d'"Botzen" vun all relevante Balancerressourcen ofgeschloss ass.

API Maschinnen

De richtege "Stabiliséierungs Meilesteen" ass am Beräich vum Kubernetes API Server an d'Interaktioun mat him. Dëst geschitt haaptsächlech dank iwwerdroen ze stabil Status déi, déi net speziell Aféierung brauchen CustomResourceDefinitions (CRD), déi de Beta-Status zënter de wäiten Deeg vu Kubernetes 1.7 haten (an dëst ass Juni 2017!). Déiselwecht Stabiliséierung koum op déi verwandte Funktiounen:

  • "subressourcen" mat /status и /scale fir CustomResources;
  • Transformatioun Versioune fir CRD, baséiert op externen Webhook;
  • kuerzem presentéiert (an K8s 1.15) Default Wäerter (Standard) an automatesch Feld Ewechhuele (Ausschneiden) fir CustomResources;
  • Geleeënheet benotzt den OpenAPI v3 Schema fir OpenAPI Dokumentatioun ze kreéieren an ze publizéieren benotzt fir CRD Ressourcen op der Server Säit ze validéieren.

En anere Mechanismus deen de Kubernetes Administrateuren laang vertraut ass: Entrée webhook - blouf och am Beta Status fir eng laang Zäit (zënter K8s 1.9) an ass elo stabil deklaréiert.

Zwee aner Funktiounen hunn Beta erreecht: Server-Säit gëllen и kucken Lieszeeche.

An déi eenzeg bedeitend Innovatioun an der Alpha Versioun war ze maachen от SelfLink - eng speziell URI representéiert de spezifizéierten Objet an Deel vun ObjectMeta и ListMeta (dh Deel vun all Objet an Kubernetes). Firwat verloossen se et? Motivatioun op eng einfach Manéier kléngt wéi d'Feele vu realen (iwwerwältegend) Grënn fir datt dëst Gebitt nach ëmmer existéiert. Méi formell Grënn sinn d'Performance ze optimiséieren (duerch en onnéideg Feld ewechzehuelen) an d'Aarbecht vum generesche Apiserver ze vereinfachen, deen gezwongen ass esou e Feld op eng speziell Manéier ze handhaben (dëst ass dat eenzegt Feld dat direkt virum Objet gesat gëtt ass serialiséiert). Richteg Obsoleszenz (bannent Beta) SelfLink wäert geschéien duerch Kubernetes Versioun 1.20, a final - 1.21.

Datenspeicher

D'Haaptaarbecht am Beräich vun der Lagerung, wéi a fréiere Verëffentlechungen, gëtt an der Géigend observéiert CSI Ënnerstëtzung. Déi Haaptännerungen hei waren:

  • fir d'éischte Kéier (an der Alpha Versioun) erschéngt CSI Plugin Ënnerstëtzung fir Windows Aarbechter Noden: déi aktuell Aart a Weis fir mat der Lagerung ze schaffen ersetzen och In-Baum-Plugins am Kubernetes Kär a FlexVolume Plugins vu Microsoft baséiert op Powershell;

    Kubernetes 1.16: Highlights vun wat nei ass
    Schema fir CSI Plugins an Kubernetes fir Windows ëmzesetzen

  • Geleeënheet CSI Volumen änneren, zréck a K8s 1.12 agefouert, ass zu enger Beta Versioun gewuess;
  • Eng ähnlech "Promotioun" (vun Alpha bis Beta) gouf erreecht duerch d'Fäegkeet CSI ze benotzen fir lokal ephemeral Bänn ze kreéieren (CSI Inline Volume Support).

Agefouert an der viregter Versioun vu Kubernetes Volume Klonen Funktioun (benotzt bestehend PVC als DataSource nei PVC ze kreéieren) huet och elo Beta Status kritt.

Scheduler

Zwee bemierkenswäert Ännerungen am Fuerplang (béid an Alpha):

  • EvenPodsSpreading - Méiglechkeet benotzen pods amplaz logesch Applikatioun Unitéiten fir "fair Verdeelung" vun Luede (wéi Deployment an ReplicaSet) an dës Verdeelung unzepassen (als haarde Fuerderung oder als mëllen Zoustand, dh Prioritéit). D'Feature wäert déi existent Verdeelungsfäegkeete vu geplangte Pods erweideren, aktuell limitéiert duerch Optiounen PodAffinity и PodAntiAffinity, Administrateuren méi fein Kontroll an dëser Matière ginn, dat heescht besser héich Disponibilitéit an optimiséiert Ressource Konsum. Detailer - an KEPP.
  • Benotzt BestFit Politik в RequestedToCapacityRatio Prioritéit Funktioun während pod Planung, déi wäert erlaben zoutrëfft bin packen ("Verpakung a Behälter") fir béid Basisressourcen (Prozessor, Erënnerung) a verlängert (wéi GPU). Fir méi Detailer, kuckt KEPP.

    Kubernetes 1.16: Highlights vun wat nei ass
    Pods plangen: ier Dir d'Best Fit Politik benotzt (direkt iwwer Standard Scheduler) a mat senger Benotzung (iwwer Scheduler Extender)

Ausserdeem, representéiert duerch d'Fäegkeet fir Ären eegene Scheduler Plugins ausserhalb vum Haapt Kubernetes Entwécklungsbaum ze kreéieren (out-of-tree).

Aner Ännerungen

Och an der Kubernetes 1.16 Verëffentlechung kënnt Dir notéieren Initiativ fir bréngen verfügbare Metriken a voller Uerdnung, oder méi präzis, am Aklang mat offiziell Reglementer zu K8s Instrumenter. Si vertrauen haaptsächlech op déi entspriechend Prometheus Dokumentatioun. Inkonsistenz entstanen aus verschiddene Grënn (zum Beispill, e puer Metriken goufen einfach erstallt ier déi aktuell Instruktioune erschéngen), an d'Entwéckler hunn decidéiert datt et Zäit wier alles op een eenzegen Standard ze bréngen, "am Aklang mat de Rescht vum Prometheus-Ökosystem." Déi aktuell Ëmsetzung vun dëser Initiativ ass am Alpha-Status, dee progressiv a spéider Versioune vu Kubernetes op Beta (1.17) a stabil (1.18) gefördert gëtt.

Zousätzlech kënnen déi folgend Ännerungen notéiert ginn:

  • Windows Ënnerstëtzung Entwécklung с d'Entstoe Kubeadm Utilities fir dësen OS (Alpha Versioun), Geleeënheet RunAsUserName fir Windows Container (Alpha Versioun), Verbesserung Group Managed Service Account (gMSA) Ënnerstëtzung bis Beta Versioun, ënnerstëtzen montéieren / befestegt fir vSphere Bänn.
  • Recycléiert Datekompressiounsmechanismus an API Äntwerten. Virdrun gouf en HTTP-Filter fir dës Zwecker benotzt, wat eng Rei vu Restriktiounen opgestallt huet, déi verhënnert hunn datt se als Standard aktivéiert ginn. "Transparent Ufro Kompressioun" funktionnéiert elo: Clienten schécken Accept-Encoding: gzip am Header kréien se eng GZIP-kompriméiert Äntwert wann seng Gréisst méi wéi 128 KB ass. Go Clienten ënnerstëtzen automatesch Kompressioun (schéckt den erfuerderlechen Header), sou datt se direkt eng Reduktioun vum Traffic bemierken. (Kleng Ännerunge kënne fir aner Sprooche gebraucht ginn.)
  • Méiglech ginn Skaléieren HPA vun / op Null Pods baséiert op externe Metriken. Wann Dir Skala baséiert op Objekter / externe Metriken, da wann d'Aarbechtslaascht idle sinn, kënnt Dir automatesch op 0 Repliken skaléieren fir Ressourcen ze spueren. Dës Fonktioun soll besonnesch nëtzlech sinn fir Fäll wou d'Aarbechter GPU Ressourcen ufroen, an d'Zuel vu verschiddenen Typen vun Idle Aarbechter iwwerschreift d'Zuel vun de verfügbare GPUs.
  • Neie Client - k8s.io/client-go/metadata.Client - fir "generaliséiert" Zougang zu Objeten. Et ass entwéckelt fir einfach Metadaten ze recuperéieren (dh Ënnersektioun metadata) aus Cluster Ressourcen a mécht Dreckstipp an Quoten Operatiounen mat hinnen.
  • Bauen Kubernetes elo kënnt Dir ouni Legacy ("built-in" am Bam) Cloud Provider (Alpha Versioun).
  • Zum Kubeadm Utility dobäi experimentell (Alpha Versioun) Fäegkeet fir personaliséiere Patches während Operatiounen z'applizéieren init, join и upgrade. Léiert méi iwwer wéi Dir de Fändel benotzt --experimental-kustomize, kuckt an KEPP.
  • Neien Endpunkt fir Apiserver - readyz, - erlaabt Iech Informatiounen iwwer seng Bereetschaft ze exportéieren. Den API Server huet och elo e Fändel --maximum-startup-sequence-duration, erlaabt Iech seng Restarts ze regléieren.
  • Zwee Fonctiounen fir Azure deklaréiert stabil: Ënnerstëtzung Disponibilitéit Zonen (Disponibilitéit Zonen) an Kräiz Ressource Grupp (RG). Zousätzlech huet Azure bäigefüügt:
  • AWS huet elo ënnerstëtzen fir EBS op Windows an optimiséiert EC2 API rifft DescribeInstances.
  • Kubeadm ass elo onofhängeg migréiert CoreDNS Konfiguratioun beim Upgrade vun der CoreDNS Versioun.
  • Binären usw am entspriechende Docker-Bild gemaach Weltausführbar, wat Iech erlaabt dëst Bild ouni Rootrechter ze benotzen. Och, etcd Migratioun Bild opgehaang ass etcd2 Versioun Ënnerstëtzung.
  • В Cluster Autoscaler 1.16.0 gewiesselt fir distroless als Basisbild ze benotzen, verbessert Leeschtung, bäigefüügt nei Cloud Provider (DigitalOcean, Magnum, Packet).
  • Aktualiséierungen an benotzt / ofhängeg Software: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Liest och op eisem Blog:

Source: will.com

Setzt e Commentaire