Kubernetes 1.17: aspectes destacats de les novetats
Ahir, 9 de desembre, tingué lloc propera versió de Kubernetes - 1.17. Segons la tradició que s'ha desenvolupat per al nostre blog, parlem dels canvis més significatius de la nova versió.
La comunitat de Kubernetes fa temps que espera aquesta funció: Encaminament de serveis conscients de la topologia. Si KEP té el seu origen a l'octubre de 2018, i l'oficial realç — Fa 2 anys, els problemes habituals (M'agrada el) - i uns quants anys més...
La idea general és oferir la possibilitat d'implementar l'encaminament "local" per als serveis que resideixen a Kubernetes. "Localitat" en aquest cas significa "el mateix nivell topològic" (nivell de topologia), que pot ser:
node idèntic per als serveis,
el mateix bastidor de servidors,
la mateixa regió
el mateix proveïdor de núvol,
...
Exemples d'ús d'aquesta funció:
estalvi de trànsit en instal·lacions al núvol amb zones de disponibilitat múltiples (multi-AZ) - vegeu. il·lustració fresca utilitzant l'exemple de trànsit de la mateixa regió, però diferents AZ a AWS;
menor latència de rendiment/millor rendiment;
un servei fragmentat que té informació local sobre el node de cada fragment;
col·locació de fluentd (o anàlegs) al mateix node amb les aplicacions els registres de les quals es recullen;
Per obtenir més informació sobre com funciona la funció i com ja la podeu utilitzar, llegiu aquest article d'un dels autors.
Suport de doble pila IPv4/IPv6
Progrés significatius fixat en una altra característica de xarxa: suport simultani per a dues piles IP, que es va introduir per primera vegada a K8s 1.16. En particular, la nova versió va comportar els canvis següents:
en kube-proxy implementat possibilitat de funcionament simultani en ambdues modalitats (IPv4 i IPv6);
в Pod.Status.PodIPsva aparèixer suport per a l'API descendent (al mateix temps que en /etc/hosts ara requereixen que l'amfitrió afegeixi una adreça IPv6);
suport de doble pila AMABLE (Kubernetes IN Docker) i kubeadm;
proves e2e actualitzades.
Il·lustració utilitzant IPV4/IPv6 de doble pila en CIND
Avenços en CSI
Declarat estable suport de topologia per a l'emmagatzematge basat en CSI, introduït per primera vegada a K8s 1.12.
Iniciativa per migració de connectors de volum a CSI - Migració CSI - S'ha arribat a la versió beta. Aquesta característica és fonamental per traduir els connectors d'emmagatzematge existents (dins l'arbre) a una interfície moderna (CSI, fora de l'arbre) invisible per als usuaris finals de Kubernetes. Els administradors de clúster només hauran d'habilitar la migració CSI, després de la qual els recursos i les càrregues de treball amb estat existents continuaran "funcionant"... però utilitzant els darrers controladors CSI en comptes dels obsolets inclosos al nucli de Kubernetes.
De moment, la migració per als controladors AWS EBS està preparada en versió beta (kubernetes.io/aws-ebs) i GCE PD (kubernetes.io/gce-pd). Les previsions per a altres instal·lacions d'emmagatzematge són les següents:
Hem parlat de com el suport d'emmagatzematge "tradicional" a K8 va arribar a CSI aquest article. I es dedica a la transició de la migració de CSI a l'estat beta publicació separada al blog del projecte.
A més, una altra funcionalitat significativa en el context de CSI, que s'origina (implementació alfa) a K1.17s 8, va arribar a l'estat beta (és a dir, habilitat per defecte) a la versió de Kubernetes 1.12 - creant instantànies i la recuperació d'ells. Entre els canvis fets a Kubernetes Volume Snapshot en el camí cap a la versió beta:
dividint el sidecar de la instantània externa CSI en dos controladors,
secret afegit per esborrar (secret d'eliminació) com a anotació del contingut d'una instantània de volum,
nou finalitzador (finalitzador) per evitar que l'objecte de l'API de la instantània se suprimeixi si hi ha connexions restants.
En el moment de la versió 1.17, la funció és compatible amb tres controladors CSI: el controlador CSI de disc persistent GCE, el controlador CSI Portworx i el controlador CSI Trident de NetApp. Podeu trobar més detalls sobre la seva implementació i ús a aquesta publicació al blog.
Etiquetes de proveïdors de núvol
Etiquetes que automàticament assignat als nodes i volums creats en funció del proveïdor de núvol utilitzat, han estat disponibles a Kubernetes com a versió beta durant molt de temps, des del llançament de K8s 1.2 (abril de 2016!). Donat el seu ús generalitzat durant tant de temps, els desenvolupadors decidit, que és hora de declarar la característica estable (GA).
Per tant, tots es van canviar de nom en conseqüència (per topologia):
... però encara estan disponibles amb els seus noms antics (per compatibilitat amb versions anteriors). Tanmateix, es recomana a tots els administradors que canviïn a les etiquetes actuals. Documentació relacionada K8s s'ha actualitzat.
Motivació per implementar aquesta característica (segons KEP) és:
Tot i que Kubernetes es pot desplegar manualment, l'estàndard de facto (si no de jure) per a aquesta operació és utilitzar kubeadm. Les eines de gestió de sistemes populars com Terraform depenen de kubeadm per al desplegament de Kubernetes. Les millores previstes a l'API del clúster inclouen un paquet componible per a l'arrencada de Kubernetes amb kubeadm i cloud-init.
Sense una sortida estructurada, fins i tot els canvis més innòcus a primera vista poden trencar Terraform, Cluster API i altres programaris que utilitzin els resultats de kubeadm.
Els nostres plans immediats inclouen suport (en forma de sortida estructurada) per a les ordres kubeadm següents:
alpha certs
config images list
init
token create
token list
upgrade plan
version
Il·lustració d'una resposta JSON a una ordre kubeadm init -o json:
En general, el llançament de Kubernetes 1.17 va tenir lloc sota el lema "Estabilitat" Això es va veure facilitat pel fet que hi ha moltes funcions (el seu nombre total és 14) va rebre l'estat de GA. Entre ells:
Mira els marcadors - un nou tipus d'esdeveniments que tenen una etiqueta que indica que tots els objectes tenen una versió determinada (resourceVersion) ja s'han processat per rellotge;
"protecció del finalitzador" (Protecció del finalitzador) per als equilibradors de càrrega (comprovant els recursos de servei corresponents abans de suprimir els recursos de LoadBalancer);
optimització de kube-apserver en rendiment quan es treballa amb diversos rellotges monitoritzant conjunts idèntics d'objectes; s'aconsegueix evitant la serialització repetida dels mateixos objectes per a cada observador.
Altres canvis
La llista completa d'innovacions de Kubernetes 1.17, per descomptat, no es limita a les enumerades anteriorment. Aquí hi ha alguns altres (i per a una llista més completa, vegeu REGISTRE DE CANVIS):
canvi similar va caure API EndpointSlice (també de K8s 1.16), però de moment aquesta solució per millorar el rendiment/escalabilitat de l'API Endpoint no està habilitada per defecte;