Kubernetes 1.16: oversigt over hovednyhederne

Kubernetes 1.16: oversigt over hovednyhederne

I dag, onsdag, i efteråret i år. Specifikt drejer det sig om version 69, som vil være tilgængelig i september. I ESR-versioner af Firefox vil Flash-understøttelsen blive opretholdt indtil slutningen af 2020. I de almindelige versioner kan man dog tvinge aktivering af Flash via about:config. er det endnu en udgave af Kubernetes — 1.16. I tråd med traditionen for vores blog, fortæller vi nu for tiende gang om de mest markante ændringer i den nye version.

Oplysningerne, der er brugt til at forberede dette materiale, er taget fra Kubernetes enhancements tracking tabel, CHANGELOG-1.16 og de tilsvarende issues, pull requests samt Kubernetes Enhancement Proposals (KEP). Så lad os komme i gang! ..

Noder

Et virkelig stort antal markante nyheder (i alfa-status) præsenteres på node-siden af K8s-klyngerne (Kubelet).

For det første er der introduceret de såkaldte «efemeriske containere» (Ephemeral Containers), der skal forenkle fejlfindingsprocesserne i pods. Den nye mekanisme giver mulighed for at starte specielle containere, der kører i navnerummet af eksisterende pods og kun lever i en kort periode. Deres formål er at interagere med andre pods og containere for at løse problemer og foretage fejlfinding. Der er implementeret en ny kommando kubectl debug, som minder om kubectl exec: men i stedet for at starte en proces i containeren (som i tilfældet med exec) starter den en container i pod'en. For eksempel vil en sådan kommando tilslutte en ny container til pod'en:

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

Detaljer om de efemeriske containere (og eksempler på deres anvendelse) kan findes i den relevante KEP. Den nuværende implementering (i K8s 1.16) er i alfa-version, og blandt kriterierne for overgangen til beta-versionen er 'test af Ephemeral Containers API i mindst 2 udgivelser [Kubernetes]'.

NB: I sin essens og endda navn minder funktionen om den eksisterende plugin kubectl-debug, which we have already written about. Det antages, at med introduktionen af de efemeriske containere vil udviklingen af en separat ekstern plugin stoppe.

En anden nyhed er PodOverhead , der skal give en mekanisme til beregning af overhead for pods, som kan variere betydeligt alt efter den anvendte runtime-miljø. Som eksempel nævner forfatterne denne KEP Kata Containers, som kræver kørsel af et gæste-kerne, kata-agent, init-system og så videre. Når overheadet bliver så stort, at det ikke kan ignoreres, kræves der en måde at tage det i betragtning ved senere kvotering, planlægning osv. For at implementere dette er der tilføjet et felt PodSpec Overhead *ResourceList (svarer til data i , hvis sådanne bruges). RuntimeClassEndnu en markant nyhed er

node topologi manager node topology manager (Node Topology Manager), designet til at forene tilgangen til finjustering af fordelingen af hardware ressourcer til forskellige komponenter i Kubernetes. Denne initiativ er drevet af det stigende behov fra forskellige moderne systemer (inden for telekommunikation, maskinlæring, finansielle tjenesteydelser mv.) for højtydende parallelle beregninger og minimering af forsinkelser under udførelsen af operationer, for hvilket de bruger avancerede CPU-funktioner og hardwareacceleration. Sådanne optimeringer i Kubernetes er hidtil blevet opnået gennem disparate komponenter (CPU-manager, enhedsmanager, CNI), men nu vil de få et ensartet internt interface, der forener tilgangen og forenkler tilslutningen af nye tilsvarende — såkaldte topology-aware — komponenter på Kubelet-siden. Detaljer findes i den relevante KEP.

Kubernetes 1.16: oversigt over hovednyhederne
Topology Manager komponenters skema

Den næste funktion er kontroller af containere under opstart (startup probe). Som bekendt er det vanskeligt for containere, der starter langsomt, at få den aktuelle status: de bliver enten 'dræbt' før de reelt begynder at fungere, eller de havner i deadlock i lang tid. Den nye kontrol (aktiveres gennem funktionens gate navngivet StartupProbeEnabled) annullerer — nærmere bestemt, udsætter — effekten af eventuelle andre kontroller, indtil pod'en er færdig med sin opstart. Af denne grund blev funktionen oprindeligt kaldt pod-startup liveness-probe holdoff. For pod'er, der starter langsomt, kan tilstande forespørges i relativt korte tidsintervaller.

Derudover præsenteres straks i beta-versionen en forbedring for RuntimeClass, der tilføjer støtte til 'heterogene klynger'. C RuntimeClass Scheduling er det nu slet ikke nødvendigt, at hver node har understøttelse af hver enkelt RuntimeClass: for pod'er kan der vælges RuntimeClass uden at tænke over klyngets topologi. Tidligere blev der for at opnå dette — for at sikre, at pod'er havnede på noder med support for alt, hvad de har brug for — tildelt tilsvarende regler til NodeSelector og tolerationer. I KEP gives der eksempler på brug og selvfølgelig detaljerne om implementeringen.

Netværk

To væsentlige netværksfunktioner, der første gang dukkede op (i alpha-versionen) i Kubernetes 1.16 — er:

  • Support dobbelt netværksstak — IPv4/IPv6 — og den tilsvarende «forståelse» på niveauet af pod’er, noder, tjenester. Den omfatter interaktion mellem IPv4-to-IPv4 og IPv6-to-IPv6 mellem pod’er, fra pod’er til eksterne tjenester, referenceimplementeringer (som en del af Bridge CNI, PTP CNI og Host-Local IPAM plugins), samt bagudkompatibilitet med Kubernetes-klynger, der kun kører på IPv4 eller IPv6. Implementeringsdetaljer findes i KEP.

    Eksempel på output af IP-adresser af to typer (IPv4 og IPv6) i listen over pod’er:

    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#

  • Ny API til Endpoint — EndpointSlice API. Det løser de eksisterende problemer i Endpoint API med hensyn til ydeevne/skalerbarhed, som påvirker forskellige komponenter i kontrolplanet (apiserver, etcd, endpoints-controller, kube-proxy). Den nye API vil blive tilføjet til API-gruppen Discovery og vil være i stand til at betjene titusinde backend-endpoints på hver tjeneste i en klynge bestående af tusindvis af noder. Til dette vil hver Service blive vist som N objekter EndpointSlice, hver af dem har som standard ikke mere end 100 endpoints (værdien kan konfigureres). I EndpointSlice API vil der også være muligheder for fremtidig udvikling: støtte til mange IP-adresser for hver pod, nye tilstande for endpoints (ikke kun Klar og NotReady), dynamisk underdeling for endpoints.

Fremdriften til beta-versionen har nået den, der blev præsenteret i den seneste udgivelse finalizer, kaldet service.kubernetes.io/load-balancer-cleanup og knyttet til hver service af typen LoadBalancer. Ved sletning af en sådan service forhindrer det faktisk sletningen af ressourcen, indtil «oprydningen» af alle tilknyttede load balancer-ressourcer er fuldført.

API Machinery

Den virkelige «milepæl for stabilisering» er registreret inden for API-serveren i Kubernetes og interaktionen med den. Dette er i høj grad sket takket være overgangen til status stable af dem, der ikke kræver særlig repræsentation CustomResourceDefinitions (CRD), som har haft beta-status siden det fjerne Kubernetes 1.7 (som var i juni 2017!). Den samme stabilisering er også kommet til de relaterede funktioner:

  • «subressourcer» med /status og /scale for CustomResources;
  • konvertering versioner for CRD, baseret på en ekstern webhook;
  • nylig præsenterede (i K8s 1.15) standardværdier (defaulting) og automatisk sletning af felter (pruning) for CustomResources;
  • mulighed anvendelse af OpenAPI v3-schemaet til at skabe og offentliggøre OpenAPI-dokumentation, der anvendes til validering af CRD-ressourcer på serversiden.

Endnu en mekanisme, der længe har været almindelig for Kubernetes-administratorer: admission webhook — har også længe været i beta-status (siden K8s 1.9) og er nu erklæret stabil.

To andre funktioner er nået beta-version: server-side apply og watch bookmarks.

Og den eneste betydelige nyhed i alpha-versionen blev afvisningen fra SelfLink — en særlig URI, der repræsenterer det angivne objekt og er en del af ObjectMeta og ListMeta (dvs. en del af ethvert objekt i Kubernetes). Hvorfor bliver det afskaffet? Motivation "enkelt" lyder som manglen på reelle (uoverstigelige) grunde til, at dette felt fortsat eksisterer. Mere formelle grunde — at optimere ydeevnen (ved at fjerne unødvendigt felt) og forenkle arbejdet for generic-apiserver, som er nødt til at behandle et sådant felt på en særskilt måde (det er det eneste felt, der sættes lige før objektets serialisering). Den reelle "afskrivning" (indtil beta-versionen) SelfLink vil finde sted i Kubernetes version 1.20, mens den endelige — 1.21.

Dataopbevaring

Det primære arbejde inden for storage, ligesom i tidligere versioner, ses i området understøttelse af CSI. De vigtigste ændringer her blev:

  • for første gang (i alpha-versionen) er der kommet understøttelse af CSI-plugins til worker nodes med Windows: den aktuelle metode til at arbejde med lagringsløsninger her vil erstatte in-tree plugins i Kubernetes-kernen og Microsofts FlexVolume-plugins baseret på Powershell;

    Kubernetes 1.16: oversigt over hovednyhederne
    Implementeringsskemaet for CSI-plugins i Kubernetes til Windows

  • mulighed ændring af størrelsen af CSI-volumener, præsenteret første gang i K8s 1.12, er vokset til beta-version;
  • en tilsvarende "opgradering" (fra alpha- til beta-version) er opnået af muligheden for at bruge CSI til oprettelsen af lokale ephemeral volumener (CSI Inline Volume Support).

Funktionen til kloning af volumener, der opstod i den tidligere version af Kubernetes (brug af eksisterende PVC som DataSource til at oprette nye PVC) har også nu opnået beta-status. To bemærkelsesværdige ændringer i planlægningen (begge i alpha-version):

Scheduler

EvenPodsSpreading

  • — muligheden for at bruge pods i stedet for logiske enheder af applikationen til "retfærdig fordeling" af belastninger (som Deployment og ReplicaSet) og justering af denne fordeling (som et strengt krav eller som en blød betingelse, dvs. prioritet). Funktionen vil udvide de eksisterende muligheder for fordeling af planlagte pods, som i øjeblikket er begrænset af indstillingerne PodAffinity PodAntiAffinity og PodAntiAffinity, som giver administratorer en mere finmasket kontrol over dette emne, hvilket betyder bedre høj tilgængelighed og optimeret ressourceforbrug. Mere information findes i KEP.
  • Brugen af BestFit-politik i RequestedToCapacityRatio-prioritetsfunktion , når der planlægges pod'er, hvilket muliggør at anvende bin packing ('container-pakning') både for grundlæggende ressourcer (CPU, hukommelse) og udvidede (som GPU). Se nærmere i KEP.

    Kubernetes 1.16: oversigt over hovednyhederne
    Planlægning af pod'er: før brugen af best fit-politikken (direkte via standardplanlæggeren) og med dens brug (gennem scheduler extender)

Derudover, præsenteret muligheden for at oprette egne plugins til planlæggeren uden for hovedudviklingsrækken af Kubernetes (out-of-tree).

Andre ændringer

I Kubernetes 1.16-udgivelsen kan man også bemærke initiativet til at bringe de eksisterende metrics på linje, eller mere præcist — i overensstemmelse med de officielle retningslinjer for K8s-instrumentering. De bygger stort set på den relevante Prometheus-dokumentation.Inkonsekvenser opstod af forskellige årsager (for eksempel blev nogle metrics simpelthen oprettet, før de nuværende instrukser blev offentliggjort), og udviklerne mente, at tiden var inde til at bringe alt til én standard, 'i overensstemmelse med resten af Prometheus-økosystemet'. Den nuværende implementering af dette initiativ har status som alpha-version, som gradvist vil blive opgraderet i de følgende versioner af Kubernetes til beta (1.17) og stabil (1.18).

Derudover kan man bemærke følgende ændringer:

  • Udviklingen af Windows-support med ved fremkomsten for Kubeadm-værktøjet til dette OS (alpha-version), muligheden RunAsUserName for Windows-containere (alpha-version), forbedring støtte til Group Managed Service Account (gMSA) til beta-version, for sin understøttelse af mount/attach for vSphere-volumener.
  • Omdannet mekanisme til datakomprimering i API-svarene.Tidligere blev der brugt en HTTP-filter til dette formål, hvilket medførte en række begrænsninger, der forhindrede, at det kunne være aktiveret som standard. Nu fungerer 'transparent forespørgselskomprimering': kunder, der sender Accept-Encoding: gzip i headeren, modtager et komprimeret GZIP-svar, hvis dets størrelse oversteg 128 Kb. Kunder på Go understøtter automatisk komprimering (sender den nødvendige header), så de vil straks bemærke en reduktion i trafikken. (For andre sprog kan der være behov for små modifikationer.)
  • Det er blevet muligt at skalere HPA fra/til nul pod'er baseret på eksterne metrics.. Hvis skaleringen foregår på grundlag af objekter/eksterne metrikker, kan der, når arbejdsbyrder er inaktive, automatisk skaleres ned til 0 replikaer for at spare ressourcer. Denne funktion bør være særligt nyttig i tilfælde, hvor arbejdere anmoder om GPU-ressourcer, og antallet af forskellige typer inaktive arbejdere overstiger antallet af tilgængelige GPU'er.
  • Ny kunde — k8s.io/client-go/metadata.Client — til «generel» adgang til objekter. Den er designet til nemt at hente metadata (dvs. underafdeling metadata) fra klyngens ressourcer og udføre operationer som affaldssamling og kvotering.
  • Indsamle Kubernetes flags uden forældede («indbyggede» i in-tree) cloududbydere (alphaversion).
  • I kubeadm-værktøjet tilføjet den eksperimentelle (alphaversion) mulighed for at anvende kustomize patches under init, sammenføje og opgraderinger. Læs mere om brugen af flaget --experimental-kustomize, se i KEP.
  • Ny endpoint for apiserver — readyz, — der muliggør eksport af information om dens klarhed (readiness). Apiserver har også fået et flag --maximum-startup-sequence-duration, som gør det muligt at regulere dens genstart.
  • To funktioner for Azure er blevet erklæret stabile: understøttelse af tilgængelighedszoner (Availability Zones) og cross resource group (RG). Derudover er der tilføjet i Azure:
  • AWS har fået understøttelse af til EBS i Windows og optimeret API-opkald til EC2 DescribeInstances.
  • Kubeadm migrerer nu automatisk konfigurationen af CoreDNS ved opgradering af versionen af CoreDNS. Binære filer
  • etcd i den relevante Docker-container er blevet world-executable, hvilket gør det muligt at køre denne container uden behov for root-rettigheder. Desuden har migration containeren for etcd ophørt med at understøtte version etcd2. Cluster Autoscaler 1.16.0
  • I skiftet til at bruge distroless som grundlag for billedet, forbedret ydeevnen, tilføjet nye cloududbydere (DigitalOcean, Magnum, Packet). Opdateringer i det anvendte/afhængige software: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
  • Kubernetes 1.15: oversigt over de vigtigste nyheder

P.S.

Læs også på vores blog:

Kilde: habr.com

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster