 Kubernetes 1.11 a
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
Slide from Scaling Kubernetes de Huawei to Support 50,000 Services presentation at KubeCon Europe 2017Qu'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 namespaceSelectoretpodSelector;
- 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-ipcessé de signalerExternalDNS,InternalDNSetExternalIP.
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
Exemples d'utilisation de crictl partir de la documentation du projetLa 
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-- allowou- 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 waitle moment où les ressources spécifiées sont supprimées ou une certaine condition est atteinte.
- Nouvelle commande kubectl api-resourcespour afficher les ressources:
 
  
- Prise en charge de la complétion automatique pour kubectl cp.
- La fonction base64decode est devenue disponible dans les modèles base64decodeGo, dont le nom parle de lui-même.
- Ajout de la prise en charge de l' --dry-rundans lekubectl patch.
- L' --match-server-versiondevenu mondial - lakubectl versiontiendra également compte.
- La kubectl config view --minifyprend désormais en compte l'indicateur decontextglobal.
- kubectl apply --pruneen charge des ressources- kubectl apply --pruneajouté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: