Kubernetes 1.14: översikt över de viktigaste nyheterna

Kubernetes 1.14: översikt över de viktigaste nyheterna

I natt ska kom ytterligare en version av Kubernetes — 1.14. Enligt traditionen för vĂ„r blogg informerar vi 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 relaterade frÄgor, 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 deployments) 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:

  • certifikaten som anvĂ€nds av klustret överförs till hemligheter;
  • för att göra det möjligt att anvĂ€nda etcd-klustret inom K8s-klustret (d.v.s. eliminera den tidigare externa beroendet) har etcd-operator;
  • rekommenderade instĂ€llningar för en extern lastbalanserare som sĂ€kerstĂ€ller en felresistent konfiguration dokumenterats (det planeras en framtida möjlighet att avskaffa denna beroende ocksĂ„, men inte i detta skede).

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

För detaljer kring implementeringen kan du lÀsa i design proposal. Den hÀr funktionen har verkligen varit efterlÀngtad: alfa-versionen förvÀntades redan under K8s 1.9, men dök först upp nu.

API

Team apply och överhuvudtaget deklarativ hantering av objekt flyttas frĂ„n kubectl i apiserver. Utvecklarna förklarar kortfattat sitt beslut med att kubectl apply — en grundlĂ€ggande del av arbetet med konfigurationer i Kubernetes, men "full av buggar och svĂ„rt att fixa", vilket innebĂ€r att denna funktion behöver göras mer stabil och flyttas till control plane. Enkla och tydliga exempel pĂ„ nuvarande problem Ă€r:

Kubernetes 1.14: översikt över de viktigaste nyheterna

Detaljer om implementeringen finns i KEP. Nuvarande beredskap — alfa-version (uppgradering till beta planeras till nĂ€sta Kubernetes-version).

I alfa-versionen blev det tillgĂ€ngligt att att anvĂ€nda OpenAPI v3 schemat för skapande och publicering av OpenAPI-dokumentation för CustomResources (CR), som anvĂ€nds för validering (pĂ„ serversidan) av anvĂ€ndardefinierade resurser i K8s (CustomResourceDefinition, CRD). Publicering av OpenAPI för CRD gör det möjligt för klienter (t.ex. kubectl) att utföra validering pĂ„ sin sida (inom kubectl create och kubectl apply) och tillhandahĂ„lla dokumentation för schemat (kubectl explain). För mer information — se KEP.

De tidigare loggarna kan nu öppnas med flaggan O_APPEND (inte O_TRUNC) för att undvika förlust av loggar i vissa situationer och för bekvÀmlighet vid trimming av loggar med externa verktyg för rotation.

I samband med Kubernetes API kan vi ocksÄ notera att i PodSandbox och PodSandboxStatus har lagts till fÀltet runtime_handler för att ta hÀnsyn till information om RuntimeClass i podden (lÀs mer om det i texten om Kubernetes release 1.12, dÀr denna klass först introducerades som en alfa-version), och i Admission Webhooks har möjligheten möjligheten att definiera vilka versioner AdmissionReview de stöder. Slutligen kan vi nu i reglerna för Admission Webhooks begrÀnsa omfÄnget av deras tillÀmpning via namespaces och klustergrÀnser.

Lagringar

BestÀndigaLokalaVolymer, som hade status som beta-versioner sedan releasen K8s 1.10, har proklamerats stabila (GA): denna feature gate inaktiveras inte lÀngre och kommer att tas bort i Kubernetes 1.17.

Möjlighet anvĂ€ndning av miljövariabler kallad Downward API (till exempel, namnet pĂ„ podden) för namn pĂ„ kataloger som monteras som subPath, har utvecklats — i form av ett nytt fĂ€lt subPathExpr, vilket nu anvĂ€nds för att bestĂ€mma rĂ€tt katalognamn. Funktionen introducerades först i Kubernetes 1.11, men för 1.14 förblev det i alfa-version.

Som i den tidigare Kubernetes-versionen presenteras mÄnga betydande förÀndringar för det aktivt utvecklade CSI (Container Storage Interface):

CSI

Stora tillgÀngligheter (i alfa-version) stöd för storleksÀndringar för CSI-volymer. För att anvÀnda det krÀvs det att du aktiverar feature gate som kallas ExpandCSIVolumes, samt att den specifika CSI-drivrutinen har stöd för denna operation.

En annan funktion för CSI i alfa-version — att att direkt referera till (dvs. utan att anvĂ€nda PV/PVC) CSI-volymer i pod-specifikationen. Detta tar bort begrĂ€nsningen av att anvĂ€nda CSI enbart för fjĂ€rrlagringslösningar, vilket öppnar dörrar till lokala temporĂ€ra volymer.För att anvĂ€nda (exempel frĂ„n dokumentationen) mĂ„ste du aktivera CSIInlineVolume feature gate.

Det har ocksĂ„ skett framsteg i "interiören" av Kubernetes, kopplat till CSI, som inte Ă€r sĂ„ mĂ€rkbara för slutanvĂ€ndare (systemadministratörer)
 För nĂ€rvarande mĂ„ste utvecklarna underhĂ„lla tvĂ„ versioner av varje lagringsplugin: en – "den gamla stilen", inuti K8s kodbas (in-tree), och den andra – inom det nya CSI lĂ€s mer om det, till exempel, i hĂ€r). Detta orsakar förstĂ„eliga besvĂ€r som mĂ„ste Ă„tgĂ€rdas allteftersom CSI stabiliseras i sig. Att bara deklarera inre (in-tree) pluginers API:er som förĂ„ldrade (deprecated) Ă€r inte möjligt pĂ„ grund av den aktuella Kubernetes-policyn.

Allt detta har lett till att alfa-versionerna nÄtt migreringsprocessen den interna koden för plugins, implementerade som in-tree och i CSI-plugins, vilket innebÀr att utvecklarnas bekymmer minskas till att stödja en version av sina plugins, samtidigt som kompatibiliteten med Àldre API:er bibehÄlls och de kan aviseras som förÄldrade enligt det vanliga scenariot. Det förvÀntas att alla cloudprovider-plugins migreras till nÀsta Kubernetes-version (1.15), implementeringen kommer att fÄ beta-status och aktiveras i K8s-installationer som standard. Se detaljer i design proposal. Följden av denna migration har ocksÄ varit avskaffande frÄn begrÀnsningarna för volymer som definieras av specifika cloud providers (AWS, Azure, GCE, Cinder).

Dessutom stöds blockenheter med CSI (CSIBlockVolume) överfört till beta-version.

Noder / Kubelet

En alfa-version har presenterats av den nya slutpunkten i Kubelet, avsedd för att tillhandahÄlla mÀtvÀrden för grundlÀggande resurser. Generellt sett, om tidigare Kubelet fick statistik om containeranvÀndning frÄn cAdvisor, kommer dessa data nu frÄn containermiljön via CRI (Container Runtime Interface), men kompatibiliteten för att fungera med Àldre versioner av Docker har bibehÄllits. Tidigare överfördes den statistik som samlades i Kubelet via REST API, och nu anvÀnds en slutpunkt som Àr belÀgen pÄ adressen /metrics/resource/v1alpha1. Utvecklarnas lÄngsiktiga strategi bestÄr Àr att minimera uppsÀttningen av de mÀtvÀrden som Kubelet tillhandahÄller. För övrigt kallas dessa mÀtvÀrden numera inte "core metrics", utan "resource metrics", och beskrivs som "first-class resources, such as cpu, and memory".

En intressant detalj: trots den tydliga prestandafördelen med gRPC-slutpunkten i jÀmförelse med olika anvÀndningsfall av Prometheus-formatet (resultatet av en av benchmarkarna se nedan), föredrog författarna det textbaserade formatet av Prometheus pÄ grund av det tydliga ledarskapet hos detta övervakningssystem i communityt.

"gRPC Àr inte kompatibelt med de huvudsakliga övervakningspipelines. Slutpunkten 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 det textbaserade formatet av Prometheus tillrÀckligt bra för oss att föredra Prometheus framför gRPC, med tanke pÄ den breda spridningen av Prometheus inom gemenskapen. NÀr OpenMetrics-formatet blir mer stabilt kan vi nÀrma oss gRPC:s prestanda med ett proto-baserat format.

Kubernetes 1.14: översikt över de viktigaste nyheterna
Ett av jÀmförelsetesterna för prestanda mellan gRPC- och Prometheus-format i den nya Kubelet-endpointen för mÀtvÀrden. Fler diagram och andra detaljer finns i KEP.

Bland andra förÀndringar:

  • Kubelet försöker nu (en gĂ„ng) stoppa behĂ„llare i okĂ€nt tillstĂ„nd innan omsstart och borttagning.
  • NĂ€r du anvĂ€nder PodPresets nu till init-behĂ„llare detta ytterligare sökvĂ€g samma information som en vanlig behĂ„llare.
  • Kubelet har börjat 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 registreras nu i etiketterna kubernetes.io/os och kubernetes.io/arch för Node-objekt (översatt frĂ„n beta till GA).
  • Möjligheten att ange en specifik systemgrupp av anvĂ€ndare för behĂ„llare i podden (RunAsGroup, introducerades i K8s 1.11) förflyttades 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 sker nu i ett eget arkiv), det vill sÀga för att bearbeta ytterligare YAML-filer frÄn speciella kustomization-kataloger (detaljer om deras anvÀndning finns i KEP):

Kubernetes 1.14: översikt över de viktigaste nyheterna
Exempel pÄ enkel anvÀndning av filen kustomization (möjligtvis mer komplexa tillÀmpningar av kustomize inom överlagringar)

Dessutom:

  • Tillagd det nya kommandot kubectl create cronjob, vars namn talar för sig sjĂ€lvt.
  • I kubectl logs anvĂ€ndas kombinera flaggor -f (--follow för att strömma loggar) och -l (--selector för etikettsökning).
  • kubectl lĂ€rde sig kopiera filer som vĂ€ljs med hjĂ€lp av wildcard.
  • I teamet kubectl wait lagt till flagga --all för att vĂ€lja alla resurser i det angivna resurstypnamnet.

Andra

Stabil (GA) status har fÄtt följande funktioner:

Andra förÀndringar presenterade i Kubernetes 1.14:

  • RBAC-policyerna ger inte lĂ€ngre Ă„tkomst till API:n discovery och access-review för 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 (nodeSelectors anvĂ€nds för att implementera denna begrĂ€nsning).
  • CoreDNS-konfigurationen som standard Ă€r nu anvĂ€nder forward-plugin istĂ€llet för proxy. Dessutom har CoreDNS har lagts till readinessProbe, som hindrar lastbalansering till lĂ€mpliga (inte klara för service) poddar.
  • I kubeadm, under faserna init eller upload-certs, har det blivit möjligt att ladda upp certifikat som krĂ€vs för att ansluta den nya control-plane till kubeadm-certs hemligheten (flaggan --experimental-upload-certs).
  • Det finns en alpha-version för Windows-installationer stöd för gMSA (Group Managed Service Account) - speciella konton i Active Directory som kan anvĂ€ndas av containrar.
  • För GCE har aktiverats 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