Kubernetes 1.14: overzicht van de belangrijkste innovaties

Kubernetes 1.14: overzicht van de belangrijkste innovaties

Deze nacht состоится volgende release van Kubernetes - 1.14. Volgens de traditie die zich voor onze blog heeft ontwikkeld, hebben we het over de belangrijkste veranderingen in de nieuwe versie van dit prachtige Open Source-product.

De informatie die is gebruikt om dit materiaal te bereiden, is afkomstig uit Kubernetes verbetert trackingtabellen, WIJZIGINGSLOG-1.14 en aanverwante problemen, pull-aanvragen, Kubernetes Enhancement Proposals (KEP).

Laten we beginnen met een belangrijke introductie uit de SIG-clusterlevenscyclus: dynamische failoverclusters Kubernetes (of om preciezer te zijn, zelf-gehoste HA-implementaties) is nu je kunt creëren met behulp van bekende (in de context van clusters met één knooppunt) opdrachten kubeadm (init и join). Kortom, hiervoor:

  • certificaten die door het cluster worden gebruikt, worden overgebracht naar geheimen;
  • voor de mogelijkheid om het etcd-cluster binnen het K8s-cluster te gebruiken (dat wil zeggen het wegwerken van de eerder bestaande externe afhankelijkheid) etcd-operator;
  • Documenteert de aanbevolen instellingen voor een externe load balancer die een fouttolerante configuratie biedt (in de toekomst is het de bedoeling om deze afhankelijkheid te elimineren, maar in dit stadium nog niet).

Kubernetes 1.14: overzicht van de belangrijkste innovaties
Architectuur van een Kubernetes HA-cluster gemaakt met kubeadm

Details van de implementatie zijn te vinden in ontwerp voorstel:. Op deze functie werd echt lang gewacht: de alfaversie werd al verwacht in K8s 1.9, maar verscheen nu pas.

API

Team apply en in het algemeen declaratief objectbeheer geslaagd van kubectl in apiserver. De ontwikkelaars leggen hun beslissing zelf kort uit door dat te zeggen kubectl apply - een fundamenteel onderdeel van het werken met configuraties in Kubernetes, maar "het zit vol bugs en is moeilijk op te lossen", en daarom moet deze functionaliteit weer normaal worden gemaakt en worden overgebracht naar het besturingsvlak. Eenvoudige en duidelijke voorbeelden van problemen die vandaag de dag bestaan:

Kubernetes 1.14: overzicht van de belangrijkste innovaties

Details over de implementatie zijn binnen KEP. De huidige gereedheid is alfa (promotie naar bèta is gepland voor de volgende Kubernetes-release).

Beschikbaar gesteld in alpha-versie kans met behulp van het OpenAPI v3-schema voor het maken en publiceren van OpenAPI-documentatie voor CustomResources (CR) gebruikt voor het valideren van (server-side) K8s door de gebruiker gedefinieerde bronnen (CustomResourceDefinition, CRD). Door OpenAPI voor CRD te publiceren, kunnen klanten (bijv. kubectl) voer validatie aan uw kant uit (binnen kubectl create и kubectl apply) en documentatie uitgeven volgens het schema (kubectl explain). Details - binnen KEP.

Bestaande logboeken gaan nu open met vlag O_APPEND (maar niet O_TRUNC) om verlies van logboeken in sommige situaties te voorkomen en voor het gemak van het afkappen van logboeken met externe hulpprogramma's voor rotatie.

Ook in de context van de Kubernetes API kan worden opgemerkt dat in PodSandbox и PodSandboxStatus toegevoegd veld runtime_handler informatie over vast te leggen RuntimeClass in de pod (lees er meer over in de tekst over Kubernetes 1.12-release, waar deze klasse als alfaversie verscheen) en in Admission Webhooks geïmplementeerd mogelijkheid om te bepalen welke versies AdmissionReview zij moedigen aan. Eindelijk zijn er nu de regels voor Admission Webhooks kan beperkt zijn de omvang van hun gebruik door naamruimten en clusterframeworks.

Gewelven

PersistentLocalVolumes, dat sinds de release een bètastatus had K8s 1.10, bekend gemaakt stabiel (GA): deze functiepoort is niet langer uitgeschakeld en wordt verwijderd in Kubernetes 1.17.

Kans met behulp van omgevingsvariabelen genaamd Neerwaartse API (bijvoorbeeld de podnaam) voor de namen van mappen die zijn aangekoppeld als subPath, werd ontwikkeld - in de vorm van een nieuw veld subPathExpr, die nu wordt gebruikt om de gewenste mapnaam te bepalen. De functie verscheen aanvankelijk in Kubernetes 1.11, maar bleef in 1.14 in de alfaversiestatus.

Net als bij de vorige Kubernetes-release worden er veel belangrijke veranderingen geïntroduceerd voor de zich actief ontwikkelende CSI (Container Storage Interface):

CSI

Beschikbaar geworden (als onderdeel van de alfaversie) ondersteunen formaat wijzigen voor CSI-volumes. Om het te gebruiken moet u de zogenaamde feature gate inschakelen ExpandCSIVolumes, evenals de aanwezigheid van ondersteuning voor deze bewerking in een specifiek CSI-stuurprogramma.

Een ander kenmerk voor CSI in de alfaversie: kans rechtstreeks verwijzen (d.w.z. zonder PV/PVC te gebruiken) naar CSI-volumes binnen de pod-specificatie. Dit verwijdert de beperking op het gebruik van CSI als uitsluitend externe gegevensopslag, waardoor deuren voor hen naar de wereld worden geopend lokale kortstondige volumes. Voor gebruik (voorbeeld uit documentatie) moet zijn ingeschakeld CSIInlineVolume voorzien van poort.

Er is ook vooruitgang geboekt in de “interne onderdelen” van Kubernetes met betrekking tot CSI, die niet zo zichtbaar zijn voor eindgebruikers (systeembeheerders) ... Momenteel zijn ontwikkelaars gedwongen om twee versies van elke opslagplug-in te ondersteunen: één - “in de oude manier”, binnen de K8s-codebase (in -tree), en de tweede - als onderdeel van de nieuwe CSI (lees er bijvoorbeeld meer over in hier). Dit veroorzaakt begrijpelijke ongemakken die moeten worden aangepakt naarmate CSI zelf zich stabiliseert. Het is niet mogelijk om de API van interne (in-tree) plug-ins eenvoudigweg af te schaffen vanwege relevant Kubernetes-beleid.

Dit alles leidde ertoe dat de alfaversie werd bereikt migratie proces interne plug-incode, geïmplementeerd als in-tree, in CSI-plug-ins, waardoor de zorgen van ontwikkelaars zullen worden beperkt tot het ondersteunen van één versie van hun plug-ins, en de compatibiliteit met oude API's zal blijven bestaan ​​en ze in het gebruikelijke scenario verouderd kunnen worden verklaard. De verwachting is dat bij de volgende release van Kubernetes (1.15) alle plug-ins van cloudproviders zullen worden gemigreerd, de implementatie een bètastatus zal krijgen en standaard zal worden geactiveerd in K8s-installaties. Voor details, zie ontwerp voorstel:. Deze migratie resulteerde ook in mislukking van volumelimieten gedefinieerd door specifieke cloudproviders (AWS, Azure, GCE, Cinder).

Bovendien is er ondersteuning voor blokapparaten met CSI (CSIBlockVolume) overgedragen naar bètaversie.

Knooppunten/Kubelet

Alpha-versie gepresenteerd nieuw eindpunt in Kubelet, ontworpen voor retourneer statistieken over belangrijke bronnen. Over het algemeen geldt dat als Kubelet voorheen statistieken over containergebruik ontving van cAdvisor, deze gegevens nu via CRI (Container Runtime Interface) uit de containerruntime-omgeving komen, maar de compatibiliteit voor het werken met oudere versies van Docker blijft ook behouden. Voorheen werden statistieken verzameld in Kubelet verzonden via de REST API, maar nu wordt een eindpunt op /metrics/resource/v1alpha1. Langetermijnstrategie van ontwikkelaars is is het minimaliseren van de set metrieken die door Kubelet wordt geleverd. Trouwens, deze statistieken zelf nu bellen ze geen ‘kernstatistieken’, maar ‘resourcemetrieken’, en worden beschreven als ‘eersteklas bronnen, zoals cpu en geheugen’.

Een zeer interessante nuance: ondanks het duidelijke prestatievoordeel van het gRPC-eindpunt in vergelijking met verschillende gevallen van gebruik van het Prometheus-formaat (zie hieronder het resultaat van één van de benchmarks), gaven de auteurs de voorkeur aan het tekstformaat van Prometheus vanwege het duidelijke leiderschap van dit monitoringsysteem in de gemeenschap.

“gRPC is niet compatibel met grote monitoringpijplijnen. Endpoint is alleen nuttig voor het leveren van metrische gegevens aan Metrics Server of voor het bewaken van componenten die er rechtstreeks mee integreren. Prestaties van Prometheus-tekstindeling bij gebruik van caching in Metrics Server goed genoeg voor ons om Prometheus boven gRPC te verkiezen, gezien de wijdverbreide adoptie van Prometheus in de gemeenschap. Zodra het OpenMetrics-formaat stabieler wordt, zullen we de gRPC-prestaties kunnen benaderen met een op proto's gebaseerd formaat."

Kubernetes 1.14: overzicht van de belangrijkste innovaties
Een van de vergelijkende prestatietests van het gebruik van gRPC- en Prometheus-indelingen in het nieuwe Kubelet-eindpunt voor statistieken. Meer grafieken en andere details zijn te vinden in KEP.

Onder andere veranderingen:

  • Kubelet nu (eenmalig) proberen te stoppen containers in een onbekende staat voordat de bewerkingen opnieuw worden opgestart en verwijderd.
  • Bij gebruik van de PodPresets nu naar de init-container is toegevoegd dezelfde informatie als voor een reguliere container.
  • kubus begon te gebruiken usageNanoCores van de CRI-statistiekenprovider, en voor knooppunten en containers op Windows toegevoegd netwerkstatistieken.
  • Besturingssysteem- en architectuurinformatie wordt nu vastgelegd in labels kubernetes.io/os и kubernetes.io/arch Knooppuntobjecten (overgedragen van bèta naar GA).
  • Mogelijkheid om een ​​specifieke systeemgebruikersgroep op te geven voor containers in een pod (RunAsGroup, verscheen in K8s 1.11) geavanceerd vóór de bèta (standaard ingeschakeld).
  • du en find gebruikt in cAdvisor, vervangen op Go-implementatie.

CLI

In cli-runtime en kubectl toegevoegd -k vlag voor integratie met aanpassen (trouwens, de ontwikkeling ervan wordt nu uitgevoerd in een aparte repository), d.w.z. om extra YAML-bestanden uit speciale kustomisatiemappen te verwerken (voor details over het gebruik ervan, zie KEP):

Kubernetes 1.14: overzicht van de belangrijkste innovaties
Voorbeeld van eenvoudig bestandsgebruik maatwerk (een complexere toepassing van kustomize is mogelijk binnen overlays)

Bovendien:

  • Toegevoegd nieuw team kubectl create cronjob, wiens naam voor zich spreekt.
  • В kubectl logs nu kan je combineren vlaggen -f (--follow voor streaminglogboeken) en -l (--selector voor labelquery).
  • kubectl onderwezen kopieer bestanden geselecteerd met een jokerteken.
  • Aan het team kubectl wait toegevoegd vlag --all om alle bronnen in de naamruimte van het opgegeven brontype te selecteren.

Anderen

De volgende mogelijkheden hebben een stabiele (GA) status gekregen:

Andere wijzigingen geïntroduceerd in Kubernetes 1.14:

  • Het standaard RBAC-beleid staat geen API-toegang meer toe discovery и access-review gebruikers zonder authenticatie (niet-geverifieerd).
  • Officiële CoreDNS-ondersteuning verzekerd Alleen Linux, dus als kubeadm wordt gebruikt om het (CoreDNS) in een cluster te implementeren, mogen knooppunten alleen op Linux draaien (voor deze beperking worden nodeSelectors gebruikt).
  • De standaard CoreDNS-configuratie is nu toepassingen voorwaartse plug-in in plaats van proxy. Ook in CoreDNS toegevoegd readinessProbe, dat taakverdeling op geschikte (niet gereed voor service) pods voorkomt.
  • In kubeadm, op fasen init of upload-certs, mogelijk werd laad de certificaten die nodig zijn om het nieuwe besturingsvlak te verbinden met het kubeadm-certs geheim (gebruik de vlag --experimental-upload-certs).
  • Er is een alfaversie verschenen voor Windows-installaties ondersteuning gMSA (Group Managed Service Account) - speciale accounts in Active Directory die ook door containers kunnen worden gebruikt.
  • Voor G.C.E. geactiveerd mTLS-codering tussen etcd en kube-apiserver.
  • Updates in gebruikte/afhankelijke software: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09-ondersteuning in kubeadm en de minimaal ondersteunde Docker API-versie is nu 1.26.

PS

Lees ook op onze blog:

Bron: www.habr.com

Voeg een reactie