Kubernetes 1.11: un aperçu des principales innovations


Kubernetes 1.11 a été publié mercredi . Nous continuons notre tradition et parlons des changements les plus importants, basés sur les données de CHANGELOG-1.11 et de nombreux problèmes, demandes de pull et propositions de conception. Quoi de neuf dans K8s 1.11?

Réseaux


Commençons par les réseaux, car l'annonce de Kubernetes 1.11 a marqué la stabilisation officielle (c'est-à-dire le transfert en statut de disponibilité générale) de deux innovations importantes présentées dans les versions précédentes. Le premier d'entre eux est l'équilibrage de charge des services au sein du cluster, basé sur IPVS (IP Virtual Server). Cette opportunité est venue de Huawei qui, au printemps dernier, a présenté à la communauté les résultats de son travail pour améliorer l'équilibrage de charge de plus de 50 000 services utilisant IPVS au lieu d'iptables. Ce choix a été expliqué de manière assez logique: «Si iptables sont créés pour les pare-feu et sont basés sur des listes de règles dans le noyau, alors IPVS est conçu pour l'équilibrage de charge et est basé sur des tables de hachage dans le noyau; en outre, IPVS prend en charge des algorithmes d'équilibrage de charge plus avancés que iptables, ainsi qu'un certain nombre d'autres fonctionnalités utiles (par exemple, vérification de l'état, nouvelles tentatives, etc.). "


Slide from Scaling Kubernetes de Huawei to Support 50,000 Services presentation at KubeCon Europe 2017

Qu'est-ce que cela a apporté dans la pratique? «Une meilleure bande passante réseau, moins de latence logicielle [en parlant du temps qu'il faut pour que de nouveaux points de terminaison soient ajoutés aux services - env. perev. ] et une meilleure évolutivité pour l'équilibreur de charge dans le cluster. " La version alpha du mode IPVS pour kube-proxy est apparue dans Kubernetes 1.8 et est devenue stable par la version actuelle 1.11: même si par défaut il n'est toujours pas activé, il est déjà officiellement prêt à servir le trafic dans les clusters de production.

La deuxième fonctionnalité arrivée à maturité est CoreDNS en tant que serveur DNS utilisé par le cluster Kubernetes. Nous avons écrit plus sur cette solution dans une revue séparée , et en bref, il s'agit d'un serveur DNS flexible et facilement extensible, basé à l'origine sur le serveur Web Caddy , qui est devenu le successeur de SkyDNS (à propos, kube-dns lui-même est basé dessus, remplacé par CoreDNS) , écrit en Go et axé sur le monde des applications cloud (cloud native). Un autre CoreDNS remarquable est le fait qu'il semble être le seul fichier exécutable et le seul processus du système. Maintenant, ce n'est pas seulement une autre option DNS pour le cluster Kubernetes, mais aussi l'option par défaut pour kubeadm . Les instructions d'utilisation de CoreDNS dans Kubernetes sont disponibles ici (et pour Cluster Federation, ici ).

Parmi les autres mises à jour du réseau "monde" de Kubernetes:

  • dans NetworkPolicies, il est désormais possible de spécifier des sous-domaines spécifiques dans d'autres espaces de noms à l'aide de namespaceSelector et podSelector ;
  • les services peuvent désormais écouter sur les mêmes ports hôtes sur différentes interfaces (spécifiées dans --nodeport-addresses );
  • correction d'un bug à cause duquel Kubelet lors de l'utilisation de --node-ip cessé de signaler ExternalDNS , InternalDNS et ExternalIP .

Installations de stockage


Introduite dans Kubernetes 1.9, la fonction de protection contre la suppression des PVC ( PersistentVolumeClaims ) utilisée par les pods et les PV ( PersistentVolumes ) liés aux PVC, plus tard (dans K8s 1.10) appelée StorageProtection , est déclarée stable.

La possibilité de redimensionner le volume (PV) après le redémarrage du foyer a été traduite en état bêta, et dans la version alpha, le redimensionnement du volume en temps réel est devenu disponible, c'est-à-dire sans avoir besoin de redémarrer le foyer.

À la prise en charge d'AWS EBS et de GCE PD, la limite du nombre maximal possible de volumes connectés à l'hôte a été augmentée, et dans les plug-ins AWS EBS, Azure Disk, GCE PD et Ceph RBD ont implémenté la prise en charge du provisionnement dynamique des volumes de blocs de périphériques bruts. Pour les volumes AWS EBS , la possibilité d'utiliser des pods en mode lecture ReadOnly a également été ajoutée .

De plus, Kubernetes 1.11 a introduit une version alpha de prise en charge des limites dynamiques sur les volumes en fonction du type de nœud, ainsi que la prise en charge API pour les volumes de bloc dans les pilotes de stockage externes CSI ( Container Storage Interface - apparu dans Kubernetes 1.9 ). De plus, CSI a implémenté l' intégration avec le nouveau moteur d' enregistrement de plugin Kubelet .

Noeuds de cluster


Les 5 principaux changements majeurs de la version Kubernetes 1.11 incluent également le transfert vers le statut d'une version bêta de la configuration dynamique Kubelet , qui est apparu pour la première fois dans K8s 1.8 et nécessite plusieurs modifications (vous pouvez les suivre dans le ticket de configuration Dynamic Kubelet original ). Cette fonctionnalité permet de déployer de nouvelles configurations de Kubelet sur des clusters actifs et opérationnels (contrairement à la situation précédente, lorsque les paramètres de Kubelet étaient passés via des indicateurs de ligne de commande). Pour l'utiliser, vous devez définir l' --dynamic-config-dir (au démarrage de Kubelet ).

Le projet cri-tools a été déclaré stable. Il offre aux administrateurs système des outils qui vous permettent d'analyser et de déboguer le fonctionnement des nœuds en production, quel que soit le temps d'exécution du conteneur utilisé. Les packages avec ( crictl ) sont désormais livrés avec les autres utilitaires kubeadm (aux formats DEB et RPM). Nous avons écrit plus sur le but et les capacités de crictl dans un récent article sur l'intégration de containerd avec Kubernetes, remplaçant le Docker "traditionnel".


Exemples d'utilisation de crictl partir de la documentation du projet

La prise en charge expérimentale de sysctls sous Linux a été convertie en état bêta (activée par défaut à l'aide de l' Sysctls fonctionnalité Sysctls ). PodSecurityPolicy objets PodSecurityPolicy et Pod ont des champs spéciaux pour spécifier / contrôler les sysctls .

Toujours dans ResourceQuota est devenu possible de spécifier une classe de priorité (dans ce cas, le quota s'applique uniquement aux pods avec cette classe - voir design-propositions pour plus de détails), et la condition ContainersReady a été ajoutée au statut du pod.

Droits et sécurité


La fonction d'agrégation ClusterRole introduite dans K8s 1.9, qui vous permet d'ajouter des autorisations aux rôles existants (y compris automatiquement créés), est déclarée stable sans recevoir de modifications. Un rôle séparé pour cluster- ClusterRole ( ClusterRole ) a également été ajouté - il est utilisé à la place du système ( cluster-admin ).

Un certain nombre de travaux ont été menés dans le sens de la transparence de ce qui (et pourquoi) se passe à l'intérieur du cluster. En particulier, les informations RBAC dans les journaux d'audit contiennent désormais des annotations supplémentaires pour les événements :

  • authorization.k8s.io/decision - allow ou forbid ;
  • authorization.k8s.io/reason - motif lisible par l'homme de la décision.

Dans les journaux d'audit, des informations ont également été ajoutées sur l'accès à partir de PodSecurityPolicy sous la forme d'annotations podsecuritypolicy.admission.k8s.io/admit-policy et podsecuritypolicy.admission.k8s.io/validate-policy (quelle politique autorise en vertu de?).

Utilitaires de console


De nombreuses améliorations (bien que non significatives, mais utiles!) Sont présentées dans les outils CLI de Kubernetes:

  • Nouvelle commande kubectl wait le moment où les ressources spécifiées sont supprimées ou une certaine condition est atteinte.
  • Nouvelle commande kubectl api-resources pour afficher les ressources:

  • Prise en charge de la complétion automatique pour kubectl cp .
  • La fonction base64decode est devenue disponible dans les modèles base64decode Go, dont le nom parle de lui-même.
  • Ajout de la prise en charge de l' --dry-run dans le kubectl patch .
  • L' --match-server-version devenu mondial - la kubectl version tiendra également compte.
  • La kubectl config view --minify prend désormais en compte l'indicateur de context global.
  • kubectl apply --prune en charge des ressources kubectl apply --prune ajoutée à kubectl apply --prune CronJob .

Autres changements


  • Le planificateur ( kube-scheduler ) a appris à planifier les pods dans DaemonSet (version alpha).
  • Il est possible de spécifier un groupe d'utilisateurs système spécifique ( RunAsGroup ) pour les conteneurs dans l'âtre (version alpha).
  • Possibilité de supprimer des orphelins ( suppression d'orphelins ) pour CustomResources .
  • Améliorations de la prise en charge de l'API Kubernetes pour les foyers et les conteneurs sous Windows - ajout de mesures pour les foyers, les conteneurs et le système de fichiers avec les journaux, les contextes de run_as_user , les volumes constants locaux et fstype pour le lecteur Azure.
  • Azure ajoute la prise en charge de l'équilibreur de charge SKU standard et de l'IP publique.

La compatibilité


  • La version prise en charge de etcd est 3.2.18 (Kubernetes 1.10 était 3.1.12).
  • Versions vérifiées de Docker - de 1.11.2 à 1.13.1 et 17.03.x (n'ont pas changé depuis la sortie de K8s 1.10).
  • La version Go est 1.10.2 (au lieu de 1.9.3), le minimum pris en charge est 1.9.1.
  • La version CNI est 0.6.0.
  • La version CSI est 0.3.0 (au lieu de 0.2.0).

PS


Lisez aussi dans notre blog:

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


All Articles