Kubernetes 1.12: un aperçu des principales innovations



Aujourd'hui est le 27 septembre, ce qui signifie que pendant les heures de travail (selon le fuseau horaire américain), nous pouvons nous attendre à la prochaine version de Kubernetes - 1.12 (cependant, son annonce officielle est parfois retardée). En général, il est temps de poursuivre la glorieuse tradition et de parler des changements les plus importants, ce que nous ferons en fonction des informations publiques du projet: Kubernetes présente le tableau de suivi , CHANGELOG-1.12 , de nombreux problÚmes, demandes de tirage et propositions de conception. Alors, quoi de neuf dans K8s 1.12?

Installations de stockage


Si vous identifiez une chose qui est mentionnĂ©e plus souvent que toute autre parmi tous les problĂšmes liĂ©s Ă  la sortie de Kubernetes 1.12, ce sera peut-ĂȘtre l' interface de stockage de conteneurs (CSI) , dont nous avons dĂ©jĂ  parlĂ© l'autre jour. Pour cette raison, commençons par les modifications apportĂ©es Ă  la prise en charge du stockage.

En tant que tels , les plugins CSI ont conservĂ© le statut bĂȘta et devraient ĂȘtre stables pour la prochaine version de Kubernetes (1.13). Quoi de neuf dans le support CSI?

En fĂ©vrier de cette annĂ©e , les travaux sur le concept de topologie ont commencĂ© dans la spĂ©cification CSI elle-mĂȘme. En bref, la topologie est une information sur la segmentation des clusters (par exemple, par «racks» pour les installations sur site ou par «rĂ©gions» et «zones» pour les environnements cloud), que les systĂšmes d'orchestration doivent connaĂźtre et prendre en compte. Pourquoi? Les volumes allouĂ©s par les fournisseurs de stockage ne seront pas nĂ©cessairement Ă©galement accessibles dans tout le cluster, et par consĂ©quent, la connaissance de la topologie est nĂ©cessaire pour planifier efficacement les ressources et prendre des dĂ©cisions de provisionnement.

Le résultat de l'émergence des topologies dans CSI ( adopté dans la spécification le 1er juin) a été leur support dans Kubernetes 1.12:


Mais cela ne se termine pas avec les mises Ă  jour liĂ©es Ă  CSI. Une autre innovation importante dans la version 1.12 de Kubernetes est la prise en charge des instantanĂ©s pour CSI (en Ă©tat alpha). Des instantanĂ©s des volumes en tant que tels sont apparus dans la version de K8s 1.8 . L'implĂ©mentation principale, qui comprend le contrĂŽleur et le provisionneur (deux fichiers binaires sĂ©parĂ©s), a Ă©tĂ© dĂ©cidĂ©e pour ĂȘtre transfĂ©rĂ©e vers un rĂ©fĂ©rentiel externe . Depuis lors, la prise en charge des volumes de GCE PD, AWS EBS, OpenStack Cinder, GlusterFS et Kubernetes hostPath a Ă©tĂ© ajoutĂ©e.

La nouvelle proposition de conception vise Ă  «poursuivre cette initiative en ajoutant la prise en charge des instantanĂ©s pour les pilotes de volume CSI» (la prise en charge des instantanĂ©s dans la spĂ©cification CSI est dĂ©crite ici ). Étant donnĂ© que Kubernetes adhĂšre au principe d'inclure un ensemble minimum de capacitĂ©s dans l'API principale, cette implĂ©mentation (comme pour les instantanĂ©s dans le Volume Snapshot Controller) utilise CRD ( CustomResourceDefinitions ).

Et quelques nouvelles fonctionnalités pour les pilotes CSI:

  • La version alpha de la capacitĂ© du pilote Ă  s’inscrire dans l’API Kubernetes (afin de permettre aux utilisateurs de trouver plus facilement les pilotes installĂ©s dans le cluster et de permettre aux pilotes d’influencer les processus d’interaction de Kubernetes avec eux);
  • Version alpha de la capacitĂ© du pilote Ă  recevoir des informations sur le lecteur demandant le volume via NodePublish .

Introduit dans la derniĂšre version de Kubernetes, le mĂ©canisme de limitation dynamique des volumes sur les nƓuds est passĂ© de l'alpha Ă  la bĂȘta, en recevant ... vous l'aurez devinĂ©, la prise en charge de CSI, ainsi que d'Azure.

Enfin, la fonctionnalitĂ© de propagation de l'espace de noms Mount , qui vous permet de monter le volume en tant que rshared (de sorte que tous les rĂ©pertoires de conteneurs montĂ©s soient visibles sur l'hĂŽte) et a un statut bĂȘta dans la version K8s 1.10 , est dĂ©clarĂ©e stable.

Planificateur


Dans le planificateur, Kubernetes 1.12 amĂ©liore les performances grĂące Ă  la version alpha du mĂ©canisme de restriction de recherche dans un cluster de nƓuds adaptĂ© Ă  la planification de foyers (nƓuds rĂ©alisables) . Auparavant, pour chaque tentative de planification de chaque module, kube-scheduler vĂ©rifiait la disponibilitĂ© de tous les nƓuds et les transmettait pour Ă©valuation, mais maintenant le planificateur ne trouvera qu'un certain nombre d'entre eux, puis arrĂȘtera son travail. Dans le mĂȘme temps, le mĂ©canisme prĂ©voit la sĂ©lection obligatoire de nƓuds de diffĂ©rentes rĂ©gions et zones, ainsi que la nĂ©cessitĂ© de visualiser diffĂ©rents nƓuds dans diffĂ©rents cycles de planification (ne sĂ©lectionnez pas les 100 premiers nƓuds Ă  chaque dĂ©marrage). La dĂ©cision de mettre en Ɠuvre ce mĂ©canisme a Ă©tĂ© prise, guidĂ©e par les rĂ©sultats de l'analyse des donnĂ©es sur les performances de l'ordonnanceur (si le 90e centile montrait un temps de 30 ms pour un foyer, alors le 99e centile dĂ©jĂ  60 ms).

De plus, les fonctionnalitĂ©s suivantes de l'ordonnanceur ont atteint la version bĂȘta:

  • Taint node by Condition , qui est apparu dans K8s 1.8 et permet de marquer un nƓud avec un certain statut (pour d'autres actions) lorsque certains Ă©vĂ©nements se produisent: maintenant le contrĂŽleur de cycle de vie du nƓud crĂ©e automatiquement des taches, et le planificateur les vĂ©rifie (au lieu de conditions );
  • DaemonSet foyer dans DaemonSet utilisant kube-scheduler (au lieu du contrĂŽleur DaemonSet ): il a Ă©galement Ă©tĂ© activĂ© par dĂ©faut;
  • spĂ©cifiant une classe de prioritĂ© dans ResourceQuota .

Noeuds de cluster


Une innovation intĂ©ressante a Ă©tĂ© l'apparition (dans l'Ă©tat de la version alpha) de RuntimeClass - une nouvelle ressource au niveau du cluster conçue pour servir les paramĂštres de l' exĂ©cution du conteneur (exĂ©cution du conteneur) . RuntimeClasses sont attribuĂ©es aux pods via le mĂȘme champ dans PodSpec et implĂ©mentent la prise en charge de l'utilisation de plusieurs environnements exĂ©cutables au sein d'un cluster ou d'un nƓud. Pourquoi?

«L'intĂ©rĂȘt pour l'utilisation de diffĂ©rents temps d'exĂ©cution dans un cluster augmente. À l'heure actuelle, le principal facteur de motivation est les bacs Ă  sable et le dĂ©sir des conteneurs Kata et gVisor de s'intĂ©grer Ă  Kubernetes. D'autres modĂšles d'exĂ©cution tels que les conteneurs Windows ou mĂȘme les environnements d'exĂ©cution distants nĂ©cessiteront Ă©galement une prise en charge Ă  l'avenir. RuntimeClass offre un moyen de choisir entre diffĂ©rents runtimes configurĂ©s dans un cluster et de modifier leurs propriĂ©tĂ©s (Ă  la fois par le cluster et par l'utilisateur). »

Pour choisir entre les configurations prédéfinies, le RuntimeHandler passé au CRI (Container Runtime Interface), qui est destiné à remplacer les annotations actuelles du foyer:



Et la configuration dans containerd pour kata-runtime ressemble Ă  ceci:

 [plugins.cri.containerd.kata-runtime] runtime_type = "io.containerd.runtime.v1.linux" runtime_engine = "/opt/kata/bin/kata-runtime" runtime_root = "" 

Le critÚre RuntimeClass pour la version alpha est une validation CRI réussie.

En outre, le mĂ©canisme d'enregistrement des plug-ins locaux (y compris CSI) dans Kubelet et shareProcessNamespace (la fonctionnalitĂ© est devenue activĂ©e par dĂ©faut) est passĂ© au statut de version bĂȘta.

Réseaux


La principale nouveauté dans la partie réseau de Kubernetes est la version alpha du support SCTP (Stream Control Transmission Protocol). Ayant reçu un support dans Pod , Service , Endpoint et NetworkPolicy , ce protocole de télécommunication a rejoint les rangs de TCP et UDP. Avec la nouvelle fonctionnalité «applications qui nécessitent SCTP comme protocole L4 pour leurs interfaces, il sera plus facile de déployer sur des clusters Kubernetes; par exemple, ils pourront utiliser la découverte de services basée sur kube-dns , et leur interaction sera contrÎlée via NetworkPolicy . " Les détails d'implémentation sont disponibles dans ce document .

Deux fonctionnalités réseau introduites dans K8s 1.8 ont également atteint un statut stable: la prise en charge des stratégies pour le trafic EgressRules sortant dans l'API NetworkPolicy et l' application des rÚgles CIDR pour la source / destination via ipBlockRule .

Mise à l'échelle


Les améliorations apportées à l'autoscaler horizontal Pod comprennent:


L' Ă©chelle verticale des foyers , qui avant d'atteindre la version bĂȘta manquait de tests utilisateur, ne s'arrĂȘte pas. Les auteurs l'ont jugĂ©e suffisante pour la sortie de K8s 1.12 et rappellent que cette fonctionnalitĂ© est plus susceptible d'ĂȘtre ajoutĂ©e Ă  Kubernetes (non incluse dans le noyau). Tout le dĂ©veloppement est effectuĂ© dans un rĂ©fĂ©rentiel sĂ©parĂ©, dans lequel la version bĂȘta sera programmĂ©e pour coĂŻncider avec la sortie de Kubernetes.


Flux de travail Vertical Pod Autoscaler (VPA) pour Kubernetes

Enfin, K8s 1.12 inclut (sous forme alpha) les résultats des travaux sur la "simplification de l'installation à l'aide de ComponentConfig " (dans le cadre du cycle de vie sig-cluster), qui dure depuis prÚs de deux ans. Malheureusement, pour une raison quelconque (une simple négligence?), L'accÚs au document de proposition de conception avec des détails est fermé aux utilisateurs anonymes.

Autres changements


API


Deux nouvelles fonctionnalités sont implémentées dans le groupe api-machines:

  • dry-run Ă  sec pour apiserver (version alpha), qui imite la validation et le traitement des demandes;
  • API de quota de ressources (immĂ©diatement bĂȘta) qui dĂ©finit les ressources qui sont limitĂ©es par dĂ©faut (au lieu du comportement actuel lorsque la consommation des ressources est illimitĂ©e si aucun quota n'est dĂ©fini).

Azure


Déclarée stable:


Les premiÚres implémentations (versions alpha) sont ajoutées:


Kubectl


  • Une version alpha du mĂ©canisme de plug-in mis Ă  jour a Ă©tĂ© implĂ©mentĂ©e, ce qui vous permet d'ajouter de nouvelles commandes ou de réécrire des sous-commandes existantes de n'importe quel niveau d'imbrication. Il est similaire Ă  Git et examine les exĂ©cutables commençant par kubectl- dans le $PATH l'utilisateur. Voir la proposition de conception pour plus de dĂ©tails.
  • Une version bĂȘta de l' idĂ©e d'isoler le pkg/kubectl/genericclioptions de kubectl dans un rĂ©fĂ©rentiel indĂ©pendant a Ă©tĂ© implĂ©mentĂ©e.
  • La fonction d' impression cĂŽtĂ© serveur a Ă©tĂ© dĂ©clarĂ©e stable.

Autre


  • La version alpha du nouveau mĂ©canisme TTL after finish , conçue pour limiter la durĂ©e de vie des Jobs et Pods qui ont terminĂ© leur exĂ©cution, est prĂ©sentĂ©e . AprĂšs l'expiration du TTL spĂ©cifiĂ©, les objets seront automatiquement nettoyĂ©s sans intervention de l'utilisateur.
  • La gĂ©nĂ©ration d'une clĂ© privĂ©e et d'un CSR (TLS Bootstrap) pour signer un certificat au niveau du cluster dans Kubelet est dĂ©clarĂ©e stable.
  • La rotation du certificat TLS du serveur dans Kubelet est passĂ©e au statut bĂȘta.

PS


Lisez aussi dans notre blog:

Source: https://habr.com/ru/post/fr424331/


All Articles