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 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
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 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
- 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: