Kubernetes 1.14: aspectes destacats de les novetats

Kubernetes 1.14: aspectes destacats de les novetats

Aquesta nit tindrà lloc propera versió de Kubernetes - 1.14. Segons la tradició que s'ha desenvolupat per al nostre bloc, estem parlant dels canvis clau en la nova versió d'aquest meravellós producte de codi obert.

S'ha extret la informació utilitzada per preparar aquest material Taules de seguiment de millores de Kubernetes, REGISTRE DE CANVIS-1.14 i problemes relacionats, sol·licituds d'extracció, propostes de millora de Kubernetes (KEP).

Comencem amb una introducció important del cicle de vida del clúster SIG: clústers dinàmics de failover Kubernetes (o, per ser més precisos, els desplegaments d'HA autoallotjats) ja és es pot crear utilitzant ordres familiars (en el context de clústers d'un sol node). kubeadm (init и join). En resum, per això:

  • els certificats utilitzats pel clúster es transfereixen a secrets;
  • per a la possibilitat d'utilitzar el clúster etcd dins del clúster K8s (és a dir, desfer-se de la dependència externa existent anteriorment) etcd-operador;
  • Documenta la configuració recomanada per a un equilibrador de càrrega extern que proporciona una configuració tolerant a errors (en el futur es preveu eliminar aquesta dependència, però no en aquesta etapa).

Kubernetes 1.14: aspectes destacats de les novetats
Arquitectura d'un clúster HA de Kubernetes creat amb kubeadm

Els detalls de la implementació es poden trobar a proposta de disseny. Aquesta característica era realment esperada: la versió alfa s'esperava a K8s 1.9, però només apareixia ara.

API

Equip apply i en general gestió declarativa d'objectes passat d' kubectl en apiserver. Els mateixos desenvolupadors expliquen breument la seva decisió dient això kubectl apply - Una part fonamental del treball amb configuracions a Kubernetes, però, "està ple d'errors i és difícil de solucionar" i, per tant, cal tornar a la normalitat aquesta funcionalitat i transferir-la al pla de control. Exemples senzills i clars de problemes que existeixen avui:

Kubernetes 1.14: aspectes destacats de les novetats

Els detalls sobre la implementació es troben KEP. La preparació actual és alfa (la promoció a beta està prevista per a la propera versió de Kubernetes).

Disponible en versió alfa oportunitat utilitzant l'esquema OpenAPI v3 per crear i publicar documentació OpenAPI per a CustomResources (CR) que s'utilitza per validar (del costat del servidor) els recursos definits per l'usuari del K8 (CustomResourceDefinition, CRD). La publicació d'OpenAPI per a CRD permet als clients (p. kubectl) realitzeu la validació al vostre costat (dins kubectl create и kubectl apply) i expedir la documentació segons l'esquema (kubectl explain). Detalls - a KEP.

Registres preexistents ara s'obren amb bandera O_APPEND (però no O_TRUNC) per evitar la pèrdua de registres en algunes situacions i per la comoditat de truncar els registres amb utilitats externes per a la rotació.

També en el context de l'API de Kubernetes, es pot assenyalar que a PodSandbox и PodSandboxStatus afegit camp runtime_handler per registrar informació sobre RuntimeClass al pod (llegiu més sobre això al text sobre Versió de Kubernetes 1.12, on aquesta classe va aparèixer com a versió alfa), i a Admission Webhooks implementat capacitat de determinar quines versions AdmissionReview donen suport. Finalment, ja són les regles dels Webhooks d'admissió pot ser limitat l'abast del seu ús per espais de noms i marcs de clúster.

Voltes

PersistentLocalVolumes, que tenia estat beta des del seu llançament K8s 1.10, anunciat estable (GA): aquesta porta de funcions ja no està desactivada i s'eliminarà a Kubernetes 1.17.

Oportunitat utilitzant variables d'entorn anomenades API descendent (per exemple, el nom del pod) per als noms dels directoris muntats com subPath, es va desenvolupar - en forma d'un nou camp subPathExpr, que ara s'utilitza per determinar el nom del directori desitjat. La funció va aparèixer inicialment a Kubernetes 1.11, però per a l'1.14 va romandre en estat de versió alfa.

Igual que amb la versió anterior de Kubernetes, s'introdueixen molts canvis significatius per al CSI (Interfície d'emmagatzematge de contenidors) en desenvolupament actiu:

CSI

Va estar disponible (com a part de la versió alfa) donar suport canviar la mida dels volums CSI. Per utilitzar-lo, haureu d'habilitar la porta de funció anomenada ExpandCSIVolumes, així com la disponibilitat de suport per a aquesta operació en un controlador CSI específic.

Una altra característica per a CSI a la versió alfa: oportunitat referir-se directament (és a dir, sense utilitzar PV/PVC) als volums CSI dins de l'especificació del pod. Això elimina la restricció a l'ús de CSI com a emmagatzematge de dades exclusivament remot, obrint-los les portes al món volums efímers locals. Per utilitzar (exemple de la documentació) ha d'estar habilitat CSIInlineVolume porta de funcions.

També hi ha hagut avenços en els "interns" de Kubernetes relacionats amb CSI, que no són tan visibles per als usuaris finals (administradors del sistema)... Actualment, els desenvolupadors es veuen obligats a suportar dues versions de cada connector d'emmagatzematge: una - "en el old way”, dins de la base de codi K8s (en -tree), i el segon, com a part del nou CSI (llegiu més sobre això, per exemple, a aquí). Això provoca inconvenients comprensibles que cal abordar a mesura que el CSI s'estabilitza. No és possible simplement obsoler l'API dels connectors interns (dins de l'arbre) a causa de política rellevant de Kubernetes.

Tot això va fer que arribés a la versió alfa procés migratori codi del connector intern, implementat com a in-tree, als connectors CSI, gràcies als quals les preocupacions dels desenvolupadors es reduiran a suportar una versió dels seus connectors, i la compatibilitat amb les API antigues es mantindrà i es poden declarar obsoletes en l'escenari habitual. S'espera que en la propera versió de Kubernetes (1.15) es migrin tots els connectors del proveïdor de núvol, la implementació rebrà l'estat beta i s'activarà a les instal·lacions K8s de manera predeterminada. Per a més detalls, vegeu proposta de disseny. Aquesta migració també va provocar fracàs a partir dels límits de volum definits per proveïdors de núvol específics (AWS, Azure, GCE, Cinder).

A més, suport per a dispositius de bloc amb CSI (CSIBlockVolume) transferit a la versió beta.

Nodes/Kubelet

Presentada la versió alfa nou punt final a Kubelet, dissenyat per retornar mètriques sobre recursos clau. En termes generals, si anteriorment Kubelet rebia estadístiques sobre l'ús del contenidor de cAdvisor, ara aquestes dades provenen de l'entorn d'execució del contenidor mitjançant CRI (Container Runtime Interface), però també es conserva la compatibilitat per treballar amb versions anteriors de Docker. Anteriorment, les estadístiques recollides a Kubelet s'enviaven mitjançant l'API REST, però ara un punt final situat a /metrics/resource/v1alpha1. Estratègia a llarg termini dels desenvolupadors consisteix és minimitzar el conjunt de mètriques proporcionades per Kubelet. Per cert, aquestes mètriques en si ara criden no "mètriques bàsiques", sinó "mètriques de recursos", i es descriuen com a "recursos de primera classe, com ara la CPU i la memòria".

Un matís molt interessant: malgrat el clar avantatge de rendiment del punt final gRPC en comparació amb diversos casos d'ús del format Prometheus (vegeu el resultat d'un dels punts de referència a continuació), els autors van preferir el format de text de Prometheus pel clar lideratge d'aquest sistema de seguiment a la comunitat.

"gRPC no és compatible amb les principals canalitzacions de monitorització. El punt final només serà útil per lliurar mètriques al servidor de mètriques o per supervisar components que s'integren directament amb ell. Rendiment del format de text de Prometheus quan s'utilitza la memòria cau al Metrics Server prou bo perquè preferim Prometheus a gRPC donada l'adopció generalitzada de Prometheus a la comunitat. Un cop el format OpenMetrics sigui més estable, podrem abordar el rendiment de gRPC amb un format basat en proto".

Kubernetes 1.14: aspectes destacats de les novetats
Una de les proves comparatives de rendiment de l'ús dels formats gRPC i Prometheus al nou punt final de Kubelet per a mètriques. Podeu trobar més gràfics i altres detalls a KEP.

Entre altres canvis:

  • Kubelet ara (una vegada) intentant aturar-se contenidors en un estat desconegut abans de reiniciar i eliminar les operacions.
  • Quan s'utilitza el PodPresets ara al contenidor init afegit la mateixa informació que per a un contenidor normal.
  • Kubelet va començar a utilitzar usageNanoCores del proveïdor d'estadístiques CRI i per a nodes i contenidors a Windows afegit estadístiques de xarxa.
  • La informació sobre el sistema operatiu i l'arquitectura ara s'enregistra a les etiquetes kubernetes.io/os и kubernetes.io/arch Objectes node (transferits de beta a GA).
  • Capacitat d'especificar un grup d'usuaris del sistema específic per als contenidors d'un pod (RunAsGroup, va aparèixer a K8s 1.11) avançat abans de la versió beta (habilitat per defecte).
  • du i trobar utilitzat a cAdvisor, reemplaçat Implementació on Go.

CLI

A cli-runtime i kubectl afegit -k bandera per a la integració amb personalitzar (per cert, el seu desenvolupament ara es porta a terme en un repositori separat), és a dir. per processar fitxers YAML addicionals des de directoris especials de personalització (per obtenir més informació sobre com utilitzar-los, vegeu KEP):

Kubernetes 1.14: aspectes destacats de les novetats
Exemple d'ús senzill de fitxers personalització (una aplicació més complexa de kustomize és possible dins superposicions)

A més:

  • Afegit nou equip kubectl create cronjob, el nom del qual parla per si sol.
  • В kubectl logs ara pots combinar banderes -f (--follow per als registres de transmissió) i -l (--selector per a la consulta d'etiquetes).
  • kubectl ensenyat copiar els fitxers seleccionats amb el comodí.
  • A l'equip kubectl wait afegit bandera --all per seleccionar tots els recursos a l'espai de noms del tipus de recurs especificat.

Altres

Les capacitats següents han rebut l'estat estable (GA):

Altres canvis introduïts a Kubernetes 1.14:

  • La política RBAC predeterminada ja no permet l'accés a l'API discovery и access-review usuaris sense autenticació (no autenticat).
  • Suport oficial de CoreDNS assegurat Només Linux, de manera que quan s'utilitza kubeadm per desplegar-lo (CoreDNS) en un clúster, els nodes només s'han d'executar a Linux (els nodeSelectors s'utilitzen per a aquesta limitació).
  • La configuració per defecte de CoreDNS és ara usos connector endavant en lloc de proxy. També, a CoreDNS afegit ReadinessProbe, que impedeix l'equilibri de càrrega en pods adequats (no preparats per al servei).
  • En kubeadm, per fases init o upload-certs, es va fer possible carregueu els certificats necessaris per connectar el nou pla de control al secret kubeadm-certs (utilitza la bandera --experimental-upload-certs).
  • Ha aparegut una versió alfa per a les instal·lacions de Windows suport gMSA (Group Managed Service Account): comptes especials a Active Directory que també poden ser utilitzats pels contenidors.
  • Per a G.C.E. activat Xifratge mTLS entre etcd i kube-apiserver.
  • Actualitzacions del programari utilitzat/depenent: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, suport de Docker 18.09 a kubeadm i la versió mínima admesa de l'API de Docker és ara 1.26.

PS

Llegeix també al nostre blog:

Font: www.habr.com

Afegeix comentari