
I natt kom ytterligare en version av Kubernetes â . 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 , 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 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 ;
- 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).

Arkitekturen för HA-klustret i Kubernetes, skapat med kubeadm
För detaljer kring implementeringen kan du lÀsa i . 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 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:

Detaljer om implementeringen finns i . Nuvarande beredskap â alfa-version (uppgradering till beta planeras till nĂ€sta Kubernetes-version).
I alfa-versionen blev det tillgĂ€ngligt 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 .
De tidigare loggarna 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 fÀltet runtime_handler för att ta hÀnsyn till information om RuntimeClass i podden (lÀs mer om det i texten om , dÀr denna klass först introducerades som en alfa-version), och i Admission Webhooks möjligheten att definiera vilka versioner AdmissionReview de stöder. Slutligen kan vi nu i reglerna för Admission Webhooks omfÄnget av deras tillÀmpning via namespaces och klustergrÀnser.
Lagringar
, som hade status som beta-versioner sedan releasen , stabila (GA): denna feature gate inaktiveras inte lÀngre och kommer att tas bort i Kubernetes 1.17.
anvĂ€ndning av miljövariabler kallad (till exempel, namnet pĂ„ podden) för namn pĂ„ kataloger som monteras som , 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) 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 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 För att anvĂ€nda () 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 ). 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 .
Allt detta har lett till att alfa-versionerna nÄtt 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 . Följden av denna migration har ocksÄ varit frÄn begrÀnsningarna för volymer som definieras av specifika cloud providers (AWS, Azure, GCE, Cinder).
Dessutom stöds blockenheter med CSI (CSIBlockVolume) till beta-version.
Noder / Kubelet
En alfa-version har presenterats 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 Àr att minimera uppsÀttningen av de mÀtvÀrden som Kubelet tillhandahÄller. För övrigt kallas dessa mÀtvÀrden 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.

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 .
Bland andra förÀndringar:
- Kubelet försöker nu (en gÄng) behÄllare i okÀnt tillstÄnd innan omsstart och borttagning.
- NÀr du anvÀnder nu till init-behÄllare samma information som en vanlig behÄllare.
- Kubelet
usageNanoCoresfrÄn CRI-statistikleverantören, och för noder och behÄllare i Windows nÀtverksstatistik. - Information om operativsystem och arkitektur registreras nu i etiketterna
kubernetes.io/osochkubernetes.io/archfö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 ) till beta-version (aktiverad som standard). - du och find som anvÀnds i cAdvisor med Go-implementationer.
CLI
I cli-runtime och kubectl flaggan -k för integration med (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 ):

Exempel pÄ enkel anvÀndning av filen (möjligtvis mer komplexa tillÀmpningar av kustomize inom )
Dessutom:
- det nya kommandot
kubectl create cronjob, vars namn talar för sig sjÀlvt. - I
kubectl logsanvÀndas flaggor-f(--followför att strömma loggar) och-l(--selectorför etikettsökning). - kubectl kopiera filer som vÀljs med hjÀlp av wildcard.
- I teamet
kubectl waitflagga--allför att vÀlja alla resurser i det angivna resurstypnamnet.
Andra
Stabil (GA) status har fÄtt följande funktioner:
- , som anvÀnds i pod-specifikationen för att definiera ytterligare villkor som beaktas i podens beredskap;
- Stöd för stora sidor (funktionsport för kallad );
- ;
- PriorityClass API, .
Andra förÀndringar presenterade i Kubernetes 1.14:
- RBAC-policyerna ger inte lÀngre Ätkomst till API:n
discoveryochaccess-reviewför anvÀndare utan autentisering (unauthenticated). - Officiellt stöd för CoreDNS 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 istÀllet för proxy. Dessutom har CoreDNS readinessProbe, som hindrar lastbalansering till lÀmpliga (inte klara för service) poddar.
- I kubeadm, under faserna
initellerupload-certs, 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 gMSA (Group Managed Service Account) - speciella konton i Active Directory som kan anvÀndas av containrar.
- För GCE 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
