Kubernetes 1.14: Highlights di ciò chì hè novu

Kubernetes 1.14: Highlights di ciò chì hè novu

Sta notte duverà prossima versione di Kubernetes - 1.14. Sicondu a tradizione chì hà sviluppatu per u nostru blog, parlemu di i cambiamenti chjave in a nova versione di stu maravigliu pruduttu Open Source.

L'infurmazione utilizata per preparà stu materiale hè stata presa da Kubernetes migliora i tabelle di tracciamentu, CHANGELOG-1.14 è prublemi cunnessi, richieste di pull, Proposte di miglioramentu di Kubernetes (KEP).

Cuminciamu cù una introduzione impurtante da u ciclu di vita di u cluster SIG: clusters di failover dinamica Kubernetes (o per esse più precisi, implementazioni HA self-hosted) hè avà pò esse creatu utilizendu cumandamenti familiari (in u cuntestu di clusters unicu node). kubeadm (init и join). In breve, per questu:

  • i certificati utilizati da u cluster sò trasferiti à i sicreti;
  • per a pussibilità di usà u cluster etcd in u cluster K8s (vale à dì per sbarazzarsi di a dipendenza esterna esistente prima) etcd-operatore;
  • Documenta i paràmetri cunsigliati per un balancer di carica esterna chì furnisce una cunfigurazione tolerante à i difetti (in u futuru hè previstu di eliminà sta dependenza, ma micca in questa fase).

Kubernetes 1.14: Highlights di ciò chì hè novu
Architettura di un cluster Kubernetes HA creatu cù kubeadm

I dettagli di l'implementazione ponu esse truvati in pruposta di disignu. Questa funzione era veramente aspittata: a versione alfa era prevista in K8s 1.9, ma hè apparsu solu avà.

API

squadra apply è in generale gestione di l'ughjettu dichjarazione passatu из kubectl in apiserver. I sviluppatori stessi spieganu brevemente a so decisione dicendu chì kubectl apply - una parte fundamentale di travaglià cù cunfigurazioni in Kubernetes, in ogni modu, "hè pienu di bugs è difficiule di riparà", è per quessa, sta funziunalità deve esse tornata à a norma è trasferita à u pianu di cuntrollu. Esempi simplici è chjaru di prublemi chì esistenu oghje:

Kubernetes 1.14: Highlights di ciò chì hè novu

I dettagli nantu à l'implementazione sò in CAP. A preparazione attuale hè alfa (a prumuzione à beta hè prevista per a prossima versione di Kubernetes).

Disponibile in versione alfa uppurtunità usendu u schema OpenAPI v3 per creazione è pubblicazione di documentazione OpenAPI per CustomResources (CR) usatu per validà (server-side) risorse definite da l'utilizatori di K8s (CustomResourceDefinition, CRD). A pubblicazione di OpenAPI per CRD permette à i clienti (p.e. kubectl) eseguite a validazione da u vostru latu (dentro kubectl create и kubectl apply) è emette a documentazione secondu u schema (kubectl explain). Dettagli - in CAP.

Logs preesistenti sò avà apertu cù bandiera O_APPEND (ma micca O_TRUNC) per evità a perdita di logs in certi situazioni è per a cunvenzione di truncà logs cù utilità esterni per a rotazione.

Ancu in u cuntestu di l'API Kubernetes, pò esse nutatu chì in PodSandbox и PodSandboxStatus aghjustatu campu runtime_handler per arregistrà infurmazione nantu à RuntimeClass in u pod (leghjite più nantu à questu in u testu circa Liberazione di Kubernetes 1.12, induve sta classa apparsu cum'è una versione alfa), è in Admission Webhooks implementatu capacità di determinà quali versioni AdmissionReview sustenenu. Infine, e regule di Admission Webhooks sò avà pò esse limitatu l'estensione di u so usu da spazii di nomi è frameworks di cluster.

Volti

PersistentLocalVolumes, chì avia statu beta da a liberazione K8s 1.10, annunziatu stabile (GA): sta porta di funzione ùn hè più disattivata è serà eliminata in Kubernetes 1.17.

uppurtunità usendu variabili di l'ambienti chjamati API descendante (per esempiu, u pod name) per i nomi di cartulari muntati cum'è subPath, hè statu sviluppatu - in a forma di un novu campu subPathExpr, chì hè avà usatu per determinà u nome di u repertoriu desideratu. A funzione apparsu inizialmente in Kubernetes 1.11, ma per 1.14 hè stata in u statutu di versione alfa.

Cum'è cù a versione precedente di Kubernetes, parechji cambiamenti significativi sò introduti per u CSI (Interfaccia di Storage di Container) in sviluppu attivu:

CSI

Diventatu dispunibule (cum'è parte di a versione alfa) supportu ridimensionamentu per i volumi CSI. Per aduprà, vi tuccherà à attivà a porta di funzione chjamata ExpandCSIVolumes, è ancu a presenza di supportu per questa operazione in un cunduttore CSI specificu.

Un'altra funzione per CSI in a versione alfa - uppurtunità riferite direttamente (vale à dì senza aduprà PV / PVC) à volumi CSI in a specificazione di pod. Questu elimina a restrizione à l'usu di CSI cum'è almacenamentu di dati esclusivamente remoto, aprendu e porte à u mondu per elli volumi effimeri lucali. Per usu (esempiu da a documentazione) deve esse attivatu CSIInlineVolume porta di funziunalità.

Ci hè statu ancu prugressu in i "interni" di Kubernetes ligati à CSI, chì ùn sò micca cusì visibili à l'utilizatori finali (amministratori di u sistema) ... Attualmente, i sviluppatori sò furzati à sustene duie versioni di ogni plugin di almacenamento: unu - "in u anticu modu", in u codice K8s (in -tree), è u sicondu - cum'è parte di u novu CSI (leghjite più nantu à questu, per esempiu, in ccà). Questu provoca inconvenienti comprensibili chì deve esse trattatu cum'è CSI stessu stabilizza. Ùn hè micca pussibule solu di deprecate l'API di plugins interni (in-tree) per via di pulitica Kubernetes pertinente.

Tuttu chistu hà purtatu à u fattu chì a versione alfa hè ghjunta prucessu di migrazzioni codice plugin internu, implementatu cum'è in-tree, in i plugins CSI, grazia à quale e preoccupazioni di i sviluppatori seranu ridutta à supportà una versione di i so plugins, è a cumpatibilità cù l'antichi API resterà è ponu esse dichjarati obsoleti in u scenariu di solitu. Hè previstu chì da a prossima versione di Kubernetes (1.15) tutti i plugins di u fornitore di nuvola seranu migrati, l'implementazione riceverà u statutu beta è serà attivatu in installazioni K8s per automaticamente. Per i dettagli, vede pruposta di disignu. Sta migrazione hà ancu risultatu отказ da i limiti di volume definiti da fornitori di cloud specifici (AWS, Azure, GCE, Cinder).

Inoltre, supportu per i dispositi di bloccu cù CSI (CSIBlockVolume) trasferitu à a versione beta.

Nodi/Kubelet

Versione Alpha presentata novu endpoint in Kubelet, cuncepitu per riturnate metriche nantu à e risorse chjave. In generale, se prima Kubelet hà ricevutu statistiche nantu à l'usu di u containeru da cAdvisor, issa dati venenu da l'ambiente di runtime di u container via CRI (Container Runtime Interface), ma a cumpatibilità per travaglià cù versioni più vechje di Docker hè ancu cunservata. In precedenza, e statistiche raccolte in Kubelet eranu mandate via l'API REST, ma avà un endpoint situatu à /metrics/resource/v1alpha1. Strategia à longu andà di sviluppatori cunsiste hè di minimizzà l'inseme di metriche furnite da Kubelet. In modu, sti metrichi stessi avà chjamanu micca "metriche core", ma "metriche di risorse", è sò descritte cum'è "risorse di prima classe, cum'è CPU è memoria".

Una sfumatura assai interessante: malgradu u vantaghju chjaru di prestazione di l'endpoint gRPC in paragone cù diversi casi di usu di u formatu Prometheus (vede u risultatu di unu di i benchmarks sottu), L'autori anu preferitu u furmatu di testu di Prometheus per via di a dirigenza chjara di stu sistema di surviglianza in a cumunità.

"gRPC ùn hè micca cumpatibile cù i principali pipeline di monitoraghju. Endpoint serà utile solu per furnisce metriche à Metrics Server o cumpunenti di monitoraghju chì si integranu direttamente cun ellu. Prestazione di u furmatu di testu Prometheus quandu si usa a cache in Metrics Server abbastanza bè per noi di preferite Prometheus sopra gRPC datu l'adopzione generalizata di Prometheus in a cumunità. Una volta chì u formatu OpenMetrics diventa più stabile, pudemu avvicinà a prestazione di gRPC cun un furmatu proto-basatu.

Kubernetes 1.14: Highlights di ciò chì hè novu
Unu di i testi di rendiment comparativi di l'usu di i formati gRPC è Prometheus in u novu puntu finale Kubelet per metrica. Più gràfiche è altri dettagli ponu esse truvati in CAP.

Frà altri cambiamenti:

  • Kubelet avà (una volta) prova di piantà cuntenituri in un statu scunnisciutu prima di riavvià è sguassate operazioni.
  • Quandu si usa PodPresets avà à u containeru init aghjuntu a listessa infurmazione cum'è per un containeru regulare.
  • kubelet cuminciatu à aduprà usageNanoCores da u fornitore di statistiche CRI, è per i nodi è i cuntenituri in Windows aghjustatu statistiche di rete.
  • L'infurmazione di u sistema operatore è l'architettura hè avà registrata in etichette kubernetes.io/os и kubernetes.io/arch Oggetti Node (trasferitu da beta à GA).
  • Capacità di specificà un gruppu d'utilizatori di u sistema specificu per i cuntenituri in un pod (RunAsGroup, apparsu in K8s 1.11) avanzatu prima di beta (attivatu per difettu).
  • du è truvà usatu in cAdvisor, rimpiazzatu implementazione in Go.

CLI

In cli-runtime è kubectl aghjuntu -k flag per l'integrazione cù persunalizà (per via, u so sviluppu hè avà realizatu in un repository separatu), i.e. per processà i fugliali YAML supplementari da repertorii speciali di customization (per i dettagli nantu à l'usu di elli, vede CAP):

Kubernetes 1.14: Highlights di ciò chì hè novu
Esempiu di usu di u schedariu simplice persunalizazione (una applicazione più cumplessa di kustomize hè pussibule in overlays)

Inoltre:

  • Aggiuntu squadra nova kubectl create cronjob, chì u so nome parla per ellu stessu.
  • В kubectl logs avà pudete unisce bandiere -f (--follow per i log in streaming) è -l (--selector per a dumanda di l'etichetta).
  • kubectl insignatu copià i schedari selezziunati da wild card.
  • À a squadra kubectl wait aghjuntu bandiera --all per selezziunà tutte e risorse in u namespace di u tipu di risorsa specificata.

Altru

E seguenti capacità anu ricivutu statu stabile (GA):

Altri cambiamenti introdotti in Kubernetes 1.14:

  • A pulitica RBAC predeterminata ùn permette più l'accessu à l'API discovery и access-review utilizatori senza autentificazione (senza autenticata).
  • Supportu ufficiale CoreDNS assicuratu Linux solu, cusì quandu si usa kubeadm per implementà (CoreDNS) in un cluster, i nodi devenu esse solu in Linux (nodeSelectors sò usati per questa limitazione).
  • A cunfigurazione CoreDNS predeterminata hè avà usi plugin avanti invece di proxy. Inoltre, in CoreDNS aghjustatu ReadinessProbe, chì impedisce l'equilibriu di carica nantu à pods appropritati (micca pronti per u serviziu).
  • In kubeadm, nantu à fasi init o upload-certs, divintò pussibule carica i certificati necessarii per cunnette u novu pianu di cuntrollu à u secretu kubeadm-certs (utilizate a bandiera --experimental-upload-certs).
  • Una versione alfa hè apparsa per installazioni Windows sustegnu gMSA (Group Managed Service Account) - cunti speciali in Active Directory chì ponu ancu esse utilizati da cuntenituri.
  • Per G.C.E. attivatu Encryption mTLS trà etcd è kube-apiserver.
  • Aghjurnamenti in u software utilizatu / dipendente: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09 supportu in kubeadm, è a versione minima di Docker API supportata hè avà 1.26.

PS

Leghjite puru nant'à u nostru blog:

Source: www.habr.com

Add a comment