Kubernetes 1.14: översikt över de viktigaste nyheterna

Kubernetes 1.14: översikt över de viktigaste nyheterna

I natt ska slĂ€pps Ă€nnu en version av Kubernetes — 1.14. Enligt traditionen för vĂ„r blogg kommer vi att berĂ€tta om de viktigaste förĂ€ndringarna i den nya versionen av denna fantastiska Open Source-produkt.

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.14 och motsvarande issues, pull requests, Kubernetes Enhancement Proposals (KEP).

LÄt oss börja med en viktig introduktion frÄn SIG cluster-lifecycle: dynamiska felresistenta kluster Kubernetes (eller mer exakt, self-hosted HA implementations) kan nu skapas med hjÀlp av de vanliga (i kontexten av kluster med en nod) kommandona kubeadm (init och join). Sammanfattningsvis, för detta:

  • de certifikat som klustret anvĂ€nder flyttas till hemligheter;
  • för att möjliggöra anvĂ€ndning av etcd-klustret inuti K8s-klustret (dvs. bli av med den externa beroendet som tidigare fanns) anvĂ€nds etcd-operator;
  • rekommenderade instĂ€llningar för den externa lastbalanseraren som sĂ€kerstĂ€ller en felresistent konfiguration dokumenteras (möjlighet att bli av med detta beroende planeras senare, men inte vid denna tidpunkt).

Kubernetes 1.14: översikt över de viktigaste nyheterna
Arkitekturen för HA-klustret Kubernetes, skapat med kubeadm

Detaljer om implementeringen finns i designförslaget. Denna funktion har verkligen varit efterlÀngtad: alfa-versionen förvÀntades redan i K8s 1.9, men kom först nu.

API

Team apply och överlag deklarativ hantering av objekt flyttas frĂ„n kubectl i apiserver. Utvecklarna förklarar kortfattat sitt beslut med att kubectl apply — en fundamental del av arbetet med konfigurationer i Kubernetes, men "full av buggar och svĂ„r att Ă„tgĂ€rda", varför denna funktionalitet mĂ„ste bringas i ordning och flyttas till control plane. Enkla och tydliga exempel pĂ„ existerande problem idag:

Kubernetes 1.14: översikt över de viktigaste nyheterna

Detaljer om implementeringen finns i KEP. Nuvarande beredskap — alfa-version (övergĂ„ng till beta planeras vid nĂ€sta release av Kubernetes).

I alfa-versionen har möjlighet att anvĂ€nda schemat OpenAPI v3 för att skapande och publicering av OpenAPI-dokumentation för CustomResources (CR) som anvĂ€nds för validering (pĂ„ serversidan) av K8s-resurser definierade av anvĂ€ndaren (CustomResourceDefinition, CRD). Publicering av OpenAPI för CRD lĂ„ter kunder (t.ex. ) utföra validering pĂ„ sin sida (inom kubectlkubectl create ) och ge dokumentation om schemat ( och kubectl apply). För detaljer — sekubectl explainDe tidigare loggarna KEP.

öppnas nu O_APPEND med flaggan (och inte O_TRUNC O_TRUNC) för att undvika förlust av loggar i vissa situationer och för bekvÀmligheten av att trunkera loggar med externa verktyg för rotation.

I samband med Kubernetes API kan det ocksÄ nÀmnas att i PodSandbox och PodSandboxStatus har lagts till fÀltet runtime_handler för att redovisa information om RuntimeClass i pod'en (lÀs mer om det i texten om Kubernetes version 1.12, dÀr denna klass först dök upp som en alfa-version), samt i Admission Webhooks har möjligheten möjligheten att bestÀmma vilka versioner AdmissionReview de stödjer. Slutligen, i reglerna för Admission Webhooks kan nu begrÀnsa omfattningen av deras tillÀmpning till namespaces och klustergrÀnser.

Lagringssystem

BestÀndigaLokalaVolymer, som haft status som beta-versioner sedan releasen K8s 1.10, har förklarats stabila (GA): denna feature gate kan inte lÀngre stÀngas av och kommer att tas bort i Kubernetes 1.17.

Möjlighet anvĂ€ndningen av miljövariabler i sĂ„ kallade Downward API (till exempel namnet pĂ„ pod'en) för namn pĂ„ kataloger som monteras som subPath, har fĂ„tt utveckling — i form av ett nytt fĂ€lt subPathExpr, med hjĂ€lp av vilket det nu bestĂ€ms vilket namn pĂ„ katalogen som behövs. Ursprungligen kom funktionen i Kubernetes 1.11, men den var fortfarande i alfa-status för 1.14.

Som i den tidigare releasen av Kubernetes, finns mÄnga betydande förÀndringar presenterade för det aktivt utvecklade CSI (Container Storage Interface):

CSI

Har blivit tillgÀnglig (inom ramen för alfa-versionen) stöd för storleksÀndringar för CSI-volymer. För att anvÀnda den krÀvs det att feature gate vid namn ExpandCSIVolumes, samt stöd för denna operation i specifik CSI-drivrutin.

En annan funktion för CSI i alfa-versionen — att att direkt referera (dvs. utan att anvĂ€nda PV/PVC) till CSI-volymer inom specifikationen för pod'ar. Detta tar bort begrĂ€nsningen att anvĂ€nda CSI som uteslutande fjĂ€rrlagringslösningar, och öppnar dörrarna för dem till vĂ€rlden av lokala ephemeral volymer.För att anvĂ€nda (exempel frĂ„n dokumentationen) krĂ€vs det att CSIInlineVolume feature gate Ă€r aktiverat.

Det har skett framsteg ocksĂ„ inom "inuti" Kubernetes, relaterat till CSI, som inte Ă€r sĂ„ mĂ€rkbara för slutanvĂ€ndarna (systemadministratörerna)
 För nĂ€rvarande tvingas utvecklarna att stödja tvĂ„ versioner av varje lagringsplugin: en - "pĂ„ det gamla sĂ€ttet", inuti kodbasen K8s (in-tree), och den andra - inom ramen för den nya CSI (lĂ€s mer om det till exempel i hĂ€r). Detta medför förstĂ„eliga olĂ€genheter som mĂ„ste Ă„tgĂ€rdas allteftersom CSI stabiliseras. Att bara deklarera de inbyggda (in-tree) plugin-API:erna som förĂ„ldrade (deprecated) Ă€r inte möjligt pĂ„ grund av den relevanta Kubernetes-policyn.

Allt detta har lett till att alfa-versionerna har nÄtt migrationsprocessen inre kod för plugins, implementerat som in-tree, i CSI-plugins, vilket innebÀr att utvecklarnas bekymmer kommer att reduceras till att stödja en version av sina plugins, medan kompatibiliteten med gamla API:er bevaras och de kan deklareras som förÄldrade enligt det vanliga scenariot. Det förvÀntas att migrationen av alla plugins frÄn molnleverantörer kommer att genomföras till nÀsta Kubernetes-version (1.15), implementeringen kommer att fÄ beta-status och aktiveras i K8s-installationer som standard. Se mer information i designförslaget. Följden av denna migration har ocksÄ blivit avskaffande frÄn begrÀnsningar för volymer definierade av specifika molnleverantörer (AWS, Azure, GCE, Cinder).

Dessutom kommer stöd för blockenheter med CSI (CSIBlockVolume) har förts till beta-version.

Noder / Kubelet

En alfa-version har presenterats av en ny endpoint i Kubelet, avsedd för att returnera mÀtvÀrden för grundlÀggande resurser. Generellt, tidigare fick Kubelet statistik om anvÀndningen av containrar frÄn cAdvisor, men nu kommer dessa data frÄn körmiljön för containern via CRI (Container Runtime Interface), men kompatibiliteten för att arbeta med gamla versioner av Docker har bevarats. Tidigare levererades den statistik som samlades in i Kubelet via REST API, men nu anvÀnds en endpoint som ligger pÄ adressen /metrics/resource/v1alpha1. Utvecklarnas lÄngsiktiga strategi bestÄr Àr att minimera uppsÀttningen av mÀtvÀrden som tillhandahÄlls av Kubelet. Förresten, dessa mÀtvÀrden kallas nu inte "core metrics", utan "resource metrics", och beskriver som "first-class resources, such as cpu, and memory".

Ett intressant faktum: trots den uppenbara prestandafördelen med gRPC-endpointen jÀmfört med olika anvÀndningsfall för Prometheus-formatet (resultatet av en av benchmarkarna se nedan), föredrog författarna textformatet frÄn Prometheus pÄ grund av det uppenbara ledarskapet för detta övervakningssystem i samhÀllet.

"gRPC Àr inkompatibelt med de viktigaste övervakningspipelinerna. Endpointen kommer dock att vara anvÀndbar endast för att leverera mÀtvÀrden till Metrics Server eller övervakningskomponenter som integreras direkt med den. Vid anvÀndning av caching i Metrics Server Àr prestandan för textformatet frÄn Prometheus tillrÀckligt bra för oss att föredra Prometheus framför gRPC, med tanke pÄ den breda spridningen av Prometheus i gemenskapen. NÀr OpenMetrics-formatet blir mer stabilt kan vi nÀrma oss gRPC:s prestanda med ett protobaserat format.

Kubernetes 1.14: översikt över de viktigaste nyheterna
Ett av de jÀmförande prestandatesterna av anvÀndning av gRPC- och Prometheus-formaten i den nya endpointen Kubelet för metrik. Fler diagram och andra detaljer kan hittas i KEP.

Bland andra förÀndringar:

  • Kubelet försöker nu (en gĂ„ng) stoppa behĂ„llare i okĂ€nt tillstĂ„nd innan omstart- och borttagningsoperationer.
  • NĂ€r du anvĂ€nder PodPresets har nu init-behĂ„llare detta ytterligare sökvĂ€g samma information som en vanlig behĂ„llare.
  • Kubelet började anvĂ€nda usageNanoCores frĂ„n CRI-statistikleverantören, och för noder och behĂ„llare i Windows har lagts till nĂ€tverksstatistik.
  • Information om operativsystem och arkitektur skrivs nu till etiketter kubernetes.io/os och kubernetes.io/arch för Node-objekt (översatt frĂ„n beta till GA).
  • Möjligheten att ange en specifik systemanvĂ€ndargrupp för behĂ„llare i podden (RunAsGroup) introducerades i K8s 1.11) har avancerat till beta-version (aktiverad som standard).
  • du och find som anvĂ€nds i cAdvisor, har ersatts med Go-implementationer.

CLI

I cli-runtime och kubectl tillagd flaggan -k för integration med kustomize (för övrigt, dess utveckling pÄgÄr nu i ett separat arkiv), det vill sÀga för hantering av ytterligare YAML-filer frÄn sÀrskilda direktingar för kustomization (mer om deras anvÀndning finns i KEP):

Kubernetes 1.14: översikt över de viktigaste nyheterna
Exempel pÄ enkel anvÀndning av filen kustomization (Àven mer avancerad tillÀmpning av kustomize inom ramen för överlagringar)

Dessutom:

  • Tillagd det nya kommandot kubectl create cronjob, ett namn som talar för sig sjĂ€lvt.
  • I kubectl logs anvĂ€ndas kombinera flaggor -f (--follow för loggstreaming) och -l (--selector för etikettfrĂ„gor).
  • kubectl har lĂ€rt sig kopiera filer som vĂ€ljs med hjĂ€lp av wild card.
  • I teamet kubectl wait lagt till flagga --all för att vĂ€lja alla resurser i det angivna typens resursnamn.

Andra

Stabil (GA) status har beviljats följande funktioner:

Övriga förĂ€ndringar presenterade i Kubernetes 1.14:

  • RBAC-policyn ger som standard inte lĂ€ngre tillgĂ„ng till API discovery och access-review anvĂ€ndare utan autentisering (unauthenticated).
  • Officiellt stöd för CoreDNS tillhandahĂ„lls. endast för Linux, sĂ„ nĂ€r du anvĂ€nder kubeadm för att distribuera den (CoreDNS) i klustret mĂ„ste noderna fungera endast i Linux (för denna begrĂ€nsning anvĂ€nds nodeSelectors).
  • CoreDNS-konfigurationen Ă€r nu som standard anvĂ€nder plugin forward istĂ€llet för proxy. Dessutom har CoreDNS har lagts till readinessProbe, som förhindrar lastbalansering pĂ„ de relevanta (inte redo för service) podarna.
  • I kubeadm, under faserna init eller upload-certs, har det blivit möjligt att ladda upp certifikat som krĂ€vs för att ansluta en ny control-plane till kubeadm-certs hemlighet (anvĂ€nder flaggan --experimental-upload-certs).
  • För Windows-installationer har en alfa-version blivit tillgĂ€nglig stöd för gMSA (Group Managed Service Account) – speciella konton i Active Directory som kan anvĂ€ndas av containrar.
  • För GCE aktiverades mTLS-kryptering mellan etcd och kube-apiserver.
  • Uppdateringar i den anvĂ€nda/beroende programvaran: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, stöd för Docker 18.09 i kubeadm, och den minimi stödda versionen av Docker API blev 1.26.

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