Kubernetes 1.16 : aperçu des principales nouveautés

Kubernetes 1.16 : aperçu des principales nouveautés

Aujourd'hui, mercredi, aura lieu une nouvelle version de Kubernetes — 1.16. Comme le veut la tradition de notre blog, nous vous prĂ©sentons pour la dixiĂšme fois les changements les plus significatifs de cette nouvelle version.

Les informations utilisées pour préparer ce matériel proviennent de la table de suivi des améliorations de Kubernetes, CHANGELOG-1.16 et des problÚmes, demandes d'extraction, ainsi que des propositions d'amélioration de Kubernetes (KEP) correspondantes. Alors, c'est parti !..

NƓuds

Un grand nombre de nouvelles fonctionnalitĂ©s notables (en version alpha) sont prĂ©sentĂ©es du cĂŽtĂ© des nƓuds des clusters K8s (Kubelet).

Tout d'abord, nous avons les «conteneurs Ă©phĂ©mĂšres» (Ephemeral Containers), destinĂ©s Ă  simplifier les processus de dĂ©bogage dans les pod’ s. Le nouveau mĂ©canisme permet de lancer des conteneurs spĂ©ciaux, qui dĂ©marrent dans l'espace de noms des pod’ s existants et vivent pendant une courte durĂ©e. Leur but est d'interagir avec d'autres pod’ s et conteneurs pour rĂ©soudre des problĂšmes et effectuer des dĂ©bogages. Pour cela, une nouvelle commande a Ă©tĂ© mise en place : kubectl debug, similaire Ă  kubectl exec: seulement au lieu de lancer un processus dans un conteneur (comme dans le cas de exec) elle dĂ©marre un conteneur dans un pod. Par exemple, cette commande connectera un nouveau conteneur Ă  un pod :

kubectl debug -c debug-shell --image=debian target-pod -- bash

Des dĂ©tails sur les conteneurs Ă©phĂ©mĂšres (et des exemples de leur utilisation) peuvent ĂȘtre trouvĂ©s dans le KEP correspondant. L'implĂ©mentation actuelle (dans K8s 1.16) est en version alpha, et parmi les critĂšres pour son passage en version bĂȘta se trouve "le test de l'API des conteneurs Ă©phĂ©mĂšres sur une pĂ©riode d'au moins 2 versions [Kubernetes]".

NBEn substance et mĂȘme par son nom, la fonctionnalitĂ© rappelle dĂ©jĂ  un plugin existant kubectl-debug, dont nous avons dĂ©jĂ  parlĂ©. Il est prĂ©vu qu'avec l'arrivĂ©e des conteneurs Ă©phĂ©mĂšres, le dĂ©veloppement d'un plugin externe distinct sera interrompu.

Une autre nouveautĂ© — PodOverhead — vise Ă  fournir un mĂ©canisme de calcul des frais gĂ©nĂ©raux liĂ©s aux pod’ s, qui peuvent varier considĂ©rablement en fonction de l'environnement d'exĂ©cution (runtime) utilisĂ©. Par exemple, les auteurs de ce KEP mentionnent Kata Containers, qui nĂ©cessitent le dĂ©marrage d'un noyau invitĂ©, d'un agent kata, d'un systĂšme d'init, etc. Lorsque les frais gĂ©nĂ©raux deviennent si importants, ils ne peuvent pas ĂȘtre ignorĂ©s, ce qui signifie qu'un moyen de les prendre en compte pour le quota, la planification, etc. est nĂ©cessaire. Pour cela, un champ a Ă©tĂ© ajoutĂ© Ă  PodSpec . Surcharge *ResourceList (correspond Ă  des donnĂ©es dans RuntimeClass, si utilisĂ©).

Une autre innovation notable est le gestionnaire de topologie de nƓud (Node Topology Manager), conçu pour unifier l'approche de l'optimisation de la distribution des ressources matĂ©rielles pour diffĂ©rents composants dans Kubernetes. Cette initiative est motivĂ©e par la demande croissante de divers systĂšmes modernes (dans le domaine des tĂ©lĂ©communications, apprentissage automatique, services financiers, etc.) pour des calculs parallĂšles haute performance et la minimisation des dĂ©lais d'exĂ©cution, utilisant pour cela les capacitĂ©s avancĂ©es des CPU et l'accĂ©lĂ©ration matĂ©rielle. Ces optimisations dans Kubernetes ont jusqu'Ă  prĂ©sent Ă©tĂ© rĂ©alisĂ©es grĂące Ă  des composants disparates (gestionnaire de CPU, gestionnaire de pĂ©riphĂ©riques, CNI), et maintenant, un interface interne unifiĂ©e va ĂȘtre ajoutĂ©e, qui unifie l'approche et simplifie le branchement de nouveaux composants similaires - dits topology-aware - du cĂŽtĂ© de Kubelet. Les dĂ©tails sont dans le KEP correspondant.

Kubernetes 1.16 : aperçu des principales nouveautés
Le schéma des composants du Topology Manager

La prochaine fonctionnalité est la vérification des conteneurs lors de leur démarrage (startup probe). Comme il est connu, pour les conteneurs qui mettent longtemps à démarrer, il est difficile d'obtenir un statut actuel : soit ils sont 'tués' avant de commencer réellement à fonctionner, soit ils se retrouvent longtemps coincés dans un deadlock. La nouvelle vérification (activée via une porte de fonctionnalités appelée StartupProbeEnabled) annule - ou plutÎt, retarde - l'action de toutes les autres vérifications jusqu'à ce que le pod ait terminé son démarrage. Pour cette raison, la fonctionnalité a été initialement appelée pod-startup liveness-probe holdoff. Pour les pods qui démarrent lentement, il est possible de procéder à des sondages d'état à des intervalles de temps relativement courts.

De plus, dĂšs sa version bĂȘta, une amĂ©lioration pour RuntimeClass a Ă©tĂ© prĂ©sentĂ©e, ajoutant le support des 'clusters hĂ©tĂ©rogĂšnes'. Avec RuntimeClass Scheduling , il n'est dĂ©sormais plus nĂ©cessaire que chaque nƓud prenne en charge chaque RuntimeClass : pour les pods, il est possible de choisir RuntimeClass sans se soucier de la topologie du cluster. Auparavant, pour atteindre cet objectif - afin que les pods se retrouvent sur des nƓuds avec le support de tout ce dont ils ont besoin - il fallait assigner des rĂšgles correspondant Ă  NodeSelector et tolerations. Dans KEP des exemples d'utilisation sont dĂ©crits, ainsi que, bien sĂ»r, des dĂ©tails sur l'implĂ©mentation.

Réseau

Deux fonctionnalités réseau significatives, qui sont apparues pour la premiÚre fois (en version alpha) dans Kubernetes 1.16 - sont :

  • Support la double pile rĂ©seau - IPv4\/IPv6 — et sa «comprĂ©hension» au niveau des pods, des nƓuds et des services. Cela inclut l'interaction IPv4 Ă  IPv4 et IPv6 Ă  IPv6 entre les pods, des pods vers des services externes, des mises en Ɠuvre de rĂ©fĂ©rence (dans le cadre des plugins Bridge CNI, PTP CNI et Host-Local IPAM), ainsi qu'une compatibilitĂ© descendante avec les clusters Kubernetes fonctionnant uniquement sur IPv4 ou IPv6. Les dĂ©tails de la mise en Ɠuvre se trouvent dans KEP.

    Un exemple d'affichage d'adresses IP de deux types (IPv4 et IPv6) dans la liste des pods :

    kube-master# kubectl get pods -o wide
    NOM               PRÊT     ÉTAT    REDÉMARRAGES   ÂGE       IP                          NƒUD
    nginx-controller   1/1       Fonctionnement   0          20m       fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • Une nouvelle API pour Endpoint — API EndpointSlice. Elle rĂ©sout les problĂšmes de performance/Ă©volutivitĂ© de l'API Endpoint existante qui affectent divers composants dans le plan de contrĂŽle (apiserver, etcd, endpoints-controller, kube-proxy). La nouvelle API sera ajoutĂ©e au groupe API Discovery et pourra gĂ©rer des dizaines de milliers de points de terminaison backend sur chaque service dans un cluster composĂ© de milliers de nƓuds. Pour cela, chaque service est mappĂ© Ă  N objets EndpointSlice, chacun d'eux ayant par dĂ©faut pas plus de 100 points de terminaison (valeur configurable). L'API EndpointSlice prĂ©voit Ă©galement des possibilitĂ©s pour son futur dĂ©veloppement : le support de plusieurs adresses IP pour chaque pod, de nouveaux Ă©tats pour les points de terminaison (non seulement PrĂȘt et NotReady), le sous-ensemencement dynamique pour les points de terminaison.

La version bĂȘta a progressĂ© concernant le "finalizer" prĂ©sentĂ© dans la derniĂšre version finalizer, appelĂ© service.kubernetes.io/load-balancer-cleanup et attachĂ© Ă  chaque service de type LoadBalancer. Lors de la suppression de ce type de service, il empĂȘche la suppression rĂ©elle de la ressource tant que le nettoyage de toutes les ressources correspondant au balancer n'est pas terminĂ©.

API Machinery

Un vĂ©ritable "jalon de stabilisation" a Ă©tĂ© enregistrĂ© dans le domaine de l’API server de Kubernetes et son interaction. En grande partie, cela s'est produit grĂące Ă  le passage au statut stable de ceux qui n'ont pas besoin d'une prĂ©sentation spĂ©ciale CustomResourceDefinitions (CRD), qui avaient le statut bĂȘta depuis l'Ă©poque lointaine de Kubernetes 1.7 (ce qui Ă©tait en juin 2017 !). Une telle stabilisation a Ă©galement Ă©tĂ© observĂ©e pour les fonctionnalitĂ©s qui leur sont associĂ©es :

Un autre mĂ©canisme, devenu familier pour les administrateurs Kubernetes : admission webhook — a Ă©galement longtemps Ă©tĂ© en version bĂȘta (depuis K8s 1.9) et est maintenant dĂ©clarĂ© stable.

Deux autres fonctionnalitĂ©s ont atteint la version bĂȘta : server-side apply et watch bookmarks.

Et la seule nouveautĂ© significative de la version alpha a Ă©tĂ© la suppression Ă  partir de SelfLink — un URI spĂ©cial reprĂ©sentant l'objet spĂ©cifiĂ© et faisant partie de ObjectMeta et ListMeta (c’est-Ă -dire faisant partie de tout objet dans Kubernetes). Pourquoi s’en dĂ©barrasse-t-on ? La motivation « simplement » sonne comme l'absence de raisons rĂ©elles (insurmontables) pour que ce champ continue d'exister. Des raisons plus formelles incluent l'optimisation des performances (en supprimant un champ inutile) et la simplification du travail du generic-apiserver, qui doit traiter ce champ d'une maniĂšre particuliĂšre (c'est le seul champ qui est dĂ©fini juste avant la sĂ©rialisation de l'objet). Le vĂ©ritable « dĂ©prĂ©ciation » (dans le cadre de la version bĂȘta) SelfLink interviendra dans la version Kubernetes 1.20, et la finale — 1.21.

Stockage des données

Le travail principal dans le domaine du stockage, comme dans les versions précédentes, est observé dans le domaine du support de CSI. Les principales modifications ici sont :

  • pour la premiĂšre fois (dans la version alpha) est dĂ©sormais prise en charge des plugins CSI pour les nƓuds de travail sous Windows: une mĂ©thode actuelle de travail avec les stockages qui remplacera les plugins in-tree dans le noyau Kubernetes et les plugins FlexVolume de Microsoft basĂ©s sur Powershell ;

    Kubernetes 1.16 : aperçu des principales nouveautés
    Le schĂ©ma de mise en Ɠuvre des plugins CSI dans Kubernetes pour Windows

  • la possibilitĂ© la redimension de volumes CSI, prĂ©sentĂ©e encore dans K8s 1.12, a atteint la version bĂȘta ;
  • une « montĂ©e en version » similaire (de alpha Ă  bĂȘta) a Ă©tĂ© atteinte avec la possibilitĂ© d'utiliser CSI pour crĂ©er des volumes Ă©phĂ©mĂšres locaux (CSI Inline Volume Support).

Apparue dans la derniĂšre version de Kubernetes la fonction de clonage de volumes (utiliser des PVC existants comme DataSource pour crĂ©er de nouveaux PVC) a Ă©galement maintenant le statut de version bĂȘta.

Planificateur

Deux modifications notables dans la planification (les deux en version alpha) :

  • EvenPodsSpreading — la possibilitĂ© d'utiliser des pods pour une « distribution Ă©quitable » des charges au lieu d'unitĂ©s logiques d'application (comme Deployment et ReplicaSet) et de rĂ©guler cette distribution (comme une exigence stricte ou comme une condition souple, c’est-Ă -dire une prioritĂ©). La fonctionnalitĂ© Ă©largira les capacitĂ©s existantes de distribution des pods planifiĂ©s, actuellement limitĂ©es aux options PodAffinity et PodAntiAffinity, fournissant aux administrateurs un contrĂŽle plus fin sur cette question, et par consĂ©quent — une meilleure disponibilitĂ© Ă©levĂ©e et une consommation de ressources optimisĂ©e. Plus de dĂ©tails dans KEP.
  • Utilisation Politique BestFit dans Fonction de prioritĂ© RequestedToCapacityRatio lors de la planification des pods, permettant Ă  des rĂ©pertoires contenant les fichiers correspondants, mais dans le cas d'autres systĂšmes de fichiers, cela peut ne pas ĂȘtre le cas. bin packing (« emballage en conteneurs ») tant pour les ressources principales (processeur, mĂ©moire) que pour les ressources avancĂ©es (comme le GPU). Pour plus de dĂ©tails, consultez KEP.

    Kubernetes 1.16 : aperçu des principales nouveautés
    Planification des pods : avant d'utiliser la politique best fit (directement via le planificateur par défaut) et en l'utilisant (via le scheduler extender)

De plus, introduit la possibilité de créer des plug-ins pour le planificateur en dehors de l'arbre principal de développement de Kubernetes (out-of-tree).

Autres changements

De plus, dans la version Kubernetes 1.16, on peut noter l'initiative visant Ă  rĂ©gler les mĂ©triques existantes de maniĂšre cohĂ©rente, en d'autres termes — conformĂ©ment aux directives officielles concernant l'instrumentation de K8s. Elles reposent essentiellement sur la documentation appropriĂ©e de Prometheus.Les incohĂ©rences ont Ă©tĂ© causĂ©es pour diverses raisons (par exemple, certaines mĂ©triques ont Ă©tĂ© créées avant que les instructions actuelles n'apparaissent), et les dĂ©veloppeurs ont dĂ©cidĂ© qu'il Ă©tait temps de mettre tout cela au mĂȘme standard, « en conformitĂ© avec le reste de l'Ă©cosystĂšme Prometheus ». La mise en Ɠuvre actuelle de cette initiative est en version alpha, qui sera progressivement Ă©levĂ©e dans les futures versions de Kubernetes jusqu'Ă  la bĂȘta (1.17) et Ă  la stable (1.18).

De plus, on peut noter les changements suivants :

  • DĂ©veloppement du support de Windows avec avec l'apparition de l'outil Kubeadm pour ce systĂšme d'exploitation (version alpha), la possibilitĂ© Une publication sur la plateforme d'orchestration des conteneurs a Ă©tĂ© publiĂ©e. pour les conteneurs Windows (version alpha), amĂ©lioration le support du Group Managed Service Account (gMSA) jusqu'Ă  la version bĂȘta, pour son support mount/attach pour les volumes vSphere.
  • MĂ©canisme rĂ©visĂ© de compression des donnĂ©es dans les rĂ©ponses API. Auparavant, pour cela, un filtre HTTP Ă©tait utilisĂ©, ce qui imposait de nombreuses limitations empĂȘchant son activation par dĂ©faut. Maintenant, il existe une « compression transparente des requĂȘtes » : les clients envoyant Accept-Encoding: gzip dans l'en-tĂȘte reçoivent une rĂ©ponse compressĂ©e en GZIP si sa taille dĂ©passe 128 Ko. Les clients en Go prennent automatiquement en charge la compression (envoient l'en-tĂȘte nĂ©cessaire), donc ils remarqueront immĂ©diatement une rĂ©duction du trafic. (D'autres langages peuvent nĂ©cessiter de petites modifications.)
  • Il est maintenant possible de scaler HPA de zĂ©ro pods Ă  partir de mĂ©triques externes.Si le dimensionnement est effectuĂ© sur la base d'objets / de mĂ©triques externes, il est possible de rĂ©duire automatiquement Ă  0 rĂ©pliques lorsque les charges de travail sont inactives, afin d'Ă©conomiser des ressources. Cette fonctionnalitĂ© devrait ĂȘtre particuliĂšrement utile dans les cas oĂč les workers demandent des ressources GPU, et oĂč le nombre de diffĂ©rents types de workers inactifs dĂ©passe le nombre de GPU disponibles.
  • Nouveau client — k8s.io/client-go/metadata.Client — pour un accĂšs « gĂ©nĂ©rique » aux objets. Il est conçu pour faciliter l’obtention des mĂ©tadonnĂ©es (c’est-Ă -dire la subdivision mĂ©tadonnĂ©es) des ressources du cluster et d'effectuer des opĂ©rations telles que le nettoyage et la quotisation.
  • La collecte de Kubernetes est maintenant possible sans les fournisseurs de cloud obsolĂštes (« intĂ©grĂ©s » dans in-tree) (version alpha).
  • Dans l'outil kubeadm ont ajoutĂ© la possibilitĂ© expĂ©rimentale (version alpha) d'appliquer des correctifs kustomize lors des opĂ©rations init, joindre et de mise Ă  niveau. Pour plus d'informations sur l'utilisation du drapeau --experimental-kustomize, consultez KEP.
  • Nouveau point de terminaison pour apiserver — readyz, — permettant d'exporter des informations sur sa disponibilitĂ©. De plus, le serveur API a maintenant un drapeau --maximum-startup-sequence-duration, qui permet de rĂ©guler ses redĂ©marrages.
  • Deux fonctionnalitĂ©s pour Azure ont Ă©tĂ© dĂ©clarĂ©es stables : prise en charge des zones de disponibilitĂ© (Availability Zones) et cross resource group (RG). De plus, Azure a ajoutĂ© :
  • AWS a reçu la prise en charge pour EBS sur Windows et optimisĂ© les appels API EC2 DescribeInstances.
  • Kubeadm migre dĂ©sormais automatiquement la configuration de CoreDNS lors de la mise Ă  jour de la version de CoreDNS. Les binaires
  • dans l'image Docker correspondante etcd sont exĂ©cutables dans le monde, ce qui permet de lancer cette image sans nĂ©cessitĂ© de droits root. De plus, l'image de migration etcd fait a cessĂ© de prendre en charge la version etcd2. Cluster Autoscaler 1.16.0
  • Dans est passĂ© Ă  l'utilisation de distroless comme image de base, a amĂ©liorĂ© les performances, et a ajoutĂ© de nouveaux fournisseurs de cloud (DigitalOcean, Magnum, Packet). Mises Ă  jour des logiciels utilisĂ©s / dĂ©pendants : Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.
  • Kubernetes 1.15 : aperçu des principales nouveautĂ©s

P.S.

Lisez aussi dans notre blog :

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster