Kubernetes 1.14: översikt över de viktigaste innovationerna

Kubernetes 1.14: översikt över de viktigaste innovationerna

Denna kväll kommer att äga rum nästa utgåva av Kubernetes - 1.14. Enligt traditionen som har utvecklats för vår blogg, pratar vi om de viktigaste förändringarna i den nya versionen av denna underbara Open Source-produkt.

Information som används för att förbereda detta material är hämtad från Spårningstabeller för Kubernetes-förbättringar, ÄNDRINGSLOGG-1.14 och relaterade frågor, pull-förfrågningar, Kubernetes Enhancement Proposals (KEP).

Låt oss börja med en viktig introduktion från SIG kluster-livscykel: dynamiska failover-kluster Kubernetes (eller för att vara mer exakt, HA-distributioner med egen värd) är nu du kan skapa med hjälp av välbekanta (i samband med ennodkluster) kommandon kubeadm (init и join). Kort sagt, för detta:

  • certifikat som används av klustret överförs till hemligheter;
  • för möjligheten att använda etcd-klustret inuti K8s-klustret (dvs att bli av med det tidigare existerande externa beroendet) etcd-operatör;
  • Dokumenterar de rekommenderade inställningarna för en extern lastbalanserare som ger en feltolerant konfiguration (i framtiden är det planerat att eliminera detta beroende, men inte i detta skede).

Kubernetes 1.14: översikt över de viktigaste innovationerna
Arkitektur av ett Kubernetes HA-kluster skapat med kubeadm

Detaljer om implementeringen finns i designförslag. Denna funktion var verkligen efterlängtad: alfaversionen väntades tillbaka i K8s 1.9, men dök upp först nu.

API

Team apply och generellt sett deklarativ objekthantering passerade av kubectl i apiserver. Utvecklarna själva förklarar kort sitt beslut genom att säga det kubectl apply - en grundläggande del av att arbeta med konfigurationer i Kubernetes, dock "den är full av buggar och svår att fixa," och därför måste denna funktionalitet återställas till det normala och överföras till kontrollplanet. Enkla och tydliga exempel på problem som finns idag:

Kubernetes 1.14: översikt över de viktigaste innovationerna

Detaljer om implementeringen finns KEP. Nuvarande beredskap är alfa (befordran till beta är planerad till nästa Kubernetes-släpp).

Tillgänglig i alfaversion möjlighet använder OpenAPI v3-schemat för skapa och publicera OpenAPI-dokumentation för CustomResources (CR) används för att validera (serversidan) K8s användardefinierade resurser (CustomResourceDefinition, CRD). Genom att publicera OpenAPI för CRD kan klienter (t.ex. kubectl) utför validering på din sida (inom kubectl create и kubectl apply) och utfärda dokumentation enligt schemat (kubectl explain). Detaljer - in KEP.

Redan existerande loggar öppnar nu med flagga O_APPEND (Ej O_TRUNC) för att undvika förlust av stockar i vissa situationer och för att underlätta trunkering av stockar med externa verktyg för rotation.

Även i samband med Kubernetes API kan det noteras att i PodSandbox и PodSandboxStatus Lagt till fält runtime_handler att registrera information om RuntimeClass i podden (läs mer om det i texten om Kubernetes 1.12 version, där den här klassen dök upp som en alfaversion), och i Admission Webhooks genomförs möjlighet att avgöra vilka versioner AdmissionReview de stödjer. Äntligen är Admission Webhooks-reglerna nu kan begränsas omfattningen av deras användning av namnutrymmen och klusterramar.

Lagring

PersistentLocalVolumes, som hade betastatus sedan lanseringen K8s 1.10, meddelat stabil (GA): denna funktionsport är inte längre inaktiverad och kommer att tas bort i Kubernetes 1.17.

Möjlighet använda miljövariabler som kallas Nedåtgående API (till exempel podnamnet) för namnen på kataloger monterade som subPath, utvecklades - i form av ett nytt fält subPathExpr, som nu används för att bestämma önskat katalognamn. Funktionen dök först upp i Kubernetes 1.11, men för 1.14 förblev den i alfaversionsstatus.

Som med den tidigare Kubernetes-utgåvan, introduceras många betydande förändringar för det aktivt utvecklande CSI (Container Storage Interface):

CSI

Blev tillgänglig (som en del av alfaversionen) stöd ändra storlek för CSI-volymer. För att använda den måste du aktivera funktionsporten som kallas ExpandCSIVolumes, samt närvaron av stöd för denna operation i en specifik CSI-drivrutin.

En annan funktion för CSI i alfaversionen - möjlighet hänvisa direkt (dvs utan att använda PV/PVC) till CSI-volymer inom podspecifikationen. Detta tar bort begränsningen för användningen av CSI som enbart fjärrdatalagringöppnar dörrar till världen för dem lokala efemära volymer. För användning (exempel från dokumentation) måste vara aktiverat CSIInlineVolume funktion grind.

Det har också skett framsteg i "internerna" av Kubernetes relaterade till CSI, som inte är så synliga för slutanvändare (systemadministratörer) ... För närvarande tvingas utvecklare att stödja två versioner av varje lagringsplugin: en - "i old way”, inuti K8s kodbas (i -tree), och den andra - som en del av den nya CSI (läs mer om det, till exempel i här). Detta orsakar förståeliga olägenheter som måste åtgärdas när CSI själv stabiliserar sig. Det är inte möjligt att helt enkelt fasa ut API:et för interna (in-tree) plugins pga relevant Kubernetes policy.

Allt detta ledde till att alfaversionen nådde migrationsprocessen intern plugin-kod, implementerad som in-tree, i CSI-plugins, tack vare vilka oron för utvecklare kommer att reduceras till att stödja en version av deras plugins, och kompatibilitet med gamla API:er kommer att förbli och de kan förklaras föråldrade i det vanliga scenariot. Det förväntas att vid nästa utgåva av Kubernetes (1.15) kommer alla molnleverantörs plugins att migreras, implementeringen kommer att få betastatus och kommer att aktiveras i K8s installationer som standard. För detaljer, se designförslag. Denna migration resulterade också i misslyckande från volymgränser definierade av specifika molnleverantörer (AWS, Azure, GCE, Cinder).

Dessutom stöd för blockenheter med CSI (CSIBlockVolume) överförd till betaversion.

Noder/Kubelet

Alfaversion presenterad ny slutpunkt i Kubelet, designad för returnera mätvärden på nyckelresurser. Generellt sett, om tidigare Kubelet tagit emot statistik om containeranvändning från cAdvisor, kommer nu dessa data från containerruntime-miljön via CRI (Container Runtime Interface), men kompatibiliteten för att arbeta med äldre versioner av Docker är också bevarad. Tidigare har statistik som samlats in i Kubelet skickats via REST API, men nu finns en slutpunkt på /metrics/resource/v1alpha1. Långsiktig strategi för utvecklare är är att minimera uppsättningen mätvärden som tillhandahålls av Kubelet. Förresten, dessa mätvärden själva nu ringer de inte "kärnmått", utan "resursmått", och beskrivs som "förstklassiga resurser, såsom cpu och minne".

En mycket intressant nyans: trots den tydliga prestandafördelen med gRPC-slutpunkten i jämförelse med olika fall av användning av Prometheus-formatet (se resultatet av ett av riktmärkena nedan), föredrog författarna textformatet för Prometheus på grund av det tydliga ledarskapet för detta övervakningssystem i samhället.

"gRPC är inte kompatibelt med större övervakningsledningar. Endpoint kommer bara att vara användbart för att leverera mätvärden till Metrics Server eller övervaka komponenter som integreras direkt med den. Prometheus textformatprestanda vid användning av cachning i Metrics Server tillräckligt bra för oss att föredra Prometheus framför gRPC med tanke på den utbredda adoptionen av Prometheus i samhället. När OpenMetrics-formatet blir mer stabilt kommer vi att kunna närma oss gRPC-prestanda med ett protobaserat format."

Kubernetes 1.14: översikt över de viktigaste innovationerna
Ett av de jämförande prestandatesterna för att använda gRPC- och Prometheus-format i den nya Kubelet-ändpunkten för mätvärden. Fler grafer och andra detaljer finns i KEP.

Bland andra ändringar:

  • Kubelet nu (en gång) försöker sluta behållare i ett okänt tillstånd före omstart och radering.
  • När du använder PodPresets nu till init-behållaren Lagt till samma information som för en vanlig container.
  • kubelet börjat använda usageNanoCores från CRI-statistikleverantören och för noder och behållare på Windows Lagt till nätverksstatistik.
  • Information om operativsystem och arkitektur registreras nu i etiketter kubernetes.io/os и kubernetes.io/arch Nodobjekt (överfört från beta till GA).
  • Möjlighet att ange en specifik systemanvändargrupp för behållare i en pod (RunAsGroup, framträdde i K8s 1.11) Avancerad före beta (aktiverad som standard).
  • du och hitta används i cAdvisor, ersatt on Go implementering.

CLI

I cli-runtime och kubectl Lagt till -k flagga för integration med anpassa (förresten, dess utveckling sker nu i ett separat förvar), d.v.s. för att bearbeta ytterligare YAML-filer från speciella kustomiseringskataloger (för detaljer om hur du använder dem, se KEP):

Kubernetes 1.14: översikt över de viktigaste innovationerna
Exempel på enkel filanvändning anpassning (en mer komplex tillämpning av kustomize är möjlig inom överlag)

Dessutom:

  • Lagt till nytt lag kubectl create cronjob, vars namn talar för sig själv.
  • В kubectl logs nu kan du att kombinera flaggor -f (--follow för strömmande loggar) och -l (--selector för etikettfråga).
  • kubectl lärde kopiera filer valda med jokertecken.
  • Till laget kubectl wait Lagt till flagga --all för att välja alla resurser i namnområdet för den angivna resurstypen.

Andra

Följande funktioner har fått stabil (GA) status:

Andra ändringar som införts i Kubernetes 1.14:

  • Standard RBAC-policy tillåter inte längre API-åtkomst discovery и access-review användare utan autentisering (oautentiserad).
  • Officiellt stöd för CoreDNS säkerställts Endast Linux, så när du använder kubeadm för att distribuera det (CoreDNS) i ett kluster, måste noder endast köras på Linux (nodeSelectors används för denna begränsning).
  • Standard CoreDNS-konfiguration är nu användningsområden framåt plugin istället för proxy. Även i CoreDNS Lagt till ReadinessProbe, som förhindrar lastbalansering på lämpliga (ej redo för service) kapslar.
  • I kubeadm, på faser init eller upload-certs, blev möjligt ladda de certifikat som krävs för att ansluta det nya kontrollplanet till kubeadm-certs secret (använd flaggan --experimental-upload-certs).
  • En alfaversion har dykt upp för Windows-installationer Stöd gMSA (Group Managed Service Account) - specialkonton i Active Directory som även kan användas av containrar.
  • För G.C.E. aktiveras mTLS-kryptering mellan etcd och kube-apiserver.
  • Uppdateringar i använd/beroende programvara: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09-stöd i kubeadm, och den lägsta stödda Docker API-versionen är nu 1.26.

PS

Läs även på vår blogg:

Källa: will.com

Lägg en kommentar