Qu'est-ce que Kubernetes ?

Plateforme d'orchestration qui place des conteneurs sur un cluster de nombreuses machines (nœuds), maintient leur nombre, les met à jour et leur fournit des points d'accès. Les utilisateurs déclarent un état souhaité avec des ressources comme les Deployments et les Services, et des contrôleurs observent l'état réel et le rapprochent de la déclaration (réconciliation). La plus petite unité est le Pod ; les Pods perdus sont recréés automatiquement, et les mises à jour progressives ainsi que la mise à l'échelle automatique selon la charge sont prises en charge. On l'abrège aussi en K8s.

Nom japonais: Kubernetes

« Kubernetes » apparaît dans 10 questions d'entraînement réparties sur 1 thèmes, dont Bases du cloud et des conteneurs.

Domaine: Bases du cloud et des conteneurs

Principales ressources

Un Pod est la plus petite unité qui regroupe des conteneurs, un ReplicaSet maintient le nombre de Pods, et un Deployment utilise des ReplicaSets pour déployer de nouvelles versions et revenir en arrière. Un Service donne à plusieurs Pods un nom et une adresse stables, et un Ingress aiguille les requêtes HTTP venant de l'extérieur du cluster vers les Services selon le chemin ou le nom d'hôte. Les ConfigMaps et les Secrets transmettent la configuration et les valeurs confidentielles séparément des images, et les espaces de noms découpent un cluster par équipe ou par environnement.

Déclaration et réconciliation

Les utilisateurs déclarent un état comme « faire tourner trois Pods de cette version » en YAML ou dans un format similaire et l'enregistrent auprès de Kubernetes. Des contrôleurs vérifient sans cesse l'état réel, recréent les Pods qui disparaissent et suppriment ceux en trop. Comme c'est le résultat et non les étapes qui est déclaré, appliquer la même définition un nombre quelconque de fois aboutit au même état, et le système se rétablit automatiquement après la panne d'un nœud.

Réglages de ressources et sondes

Chaque conteneur indique le CPU et la mémoire qu'il veut se voir réserver (requests) et ses limites supérieures (limits), et l'ordonnanceur choisit un nœud pour chaque Pod d'après les requests. Une sonde readiness vérifie si un conteneur peut accepter des requêtes et commande l'aiguillage, et une sonde liveness fait redémarrer un conteneur qui ne répond plus. Un HorizontalPodAutoscaler modifie le nombre de Pods d'après des métriques comme l'utilisation rapportée aux requests.

S'entraîner : questions sur Kubernetes

Dans Kubernetes, quelle est la plus petite unité déployée et gérée, qui regroupe un ou plusieurs conteneurs partageant la même adresse IP et les mêmes volumes ?

  1. ANœud (node)
  2. BService
  3. CPod
Afficher la réponse et l'explication

Réponse : C. Pod

Un Pod est la plus petite unité que Kubernetes place et exécute. Les conteneurs qu'il contient partagent un espace de noms réseau : ils peuvent donc communiquer entre eux par localhost et utiliser les mêmes volumes. Un Pod contient habituellement un seul conteneur applicatif, et l'on ajoute parfois au même Pod des conteneurs auxiliaires, par exemple pour transférer les journaux. Les Pods sont jetables et reçoivent une nouvelle adresse IP quand ils sont recréés : on les gère donc normalement de façon indirecte, par un Deployment ou un objet similaire. Un nœud est une machine sur laquelle s'exécutent des Pods, et un Service est un point d'accès stable pour plusieurs Pods.

Dans Kubernetes, un Deployment avec replicas: 3 fait tourner trois Pods. Quelle description de ce qui se passe quand l'un de ces Pods est supprimé avec kubectl delete pod est correcte ?

  1. ALe réglage du Deployment est lui aussi réécrit en replicas: 2, et deux Pods continuent de tourner
  2. BUn contrôleur détecte que le nombre réel est passé sous le nombre indiqué de 3 et crée un nouveau Pod
  3. CLes deux autres Pods du Deployment sont aussi supprimés, et tout le Deployment s'arrête
Afficher la réponse et l'explication

Réponse : B. Un contrôleur détecte que le nombre réel est passé sous le nombre indiqué de 3 et crée un nouveau Pod

Dans Kubernetes, les utilisateurs déclarent un état souhaité comme « faire tourner trois Pods », et des contrôleurs observent sans cesse l'état réel et agissent pour le rapprocher de la déclaration quand les deux diffèrent (réconciliation). La suppression d'un Pod ramène le nombre réel à 2 : le contrôleur du ReplicaSet crée donc un nouveau Pod pour revenir à 3. Quand un Pod est perdu à cause de la panne d'un nœud, le même mécanisme le recrée sur un autre nœud. Pour réellement réduire le nombre de Pods, on modifie les replicas du Deployment au lieu de supprimer des Pods.

Questions fréquentes

Quelle est la différence entre Docker et Kubernetes ?

Docker est surtout un outil pour construire des images et exécuter des conteneurs sur une seule machine. Kubernetes est une plateforme qui gère, sur de nombreuses machines, quel nœud exécute quoi, combien d'exemplaires tournent et comment ils sont mis à jour. Kubernetes exécute des conteneurs à partir d'images au format standard construites avec Docker ou d'autres outils.

Faut-il utiliser Kubernetes même pour un petit système ?

Pas nécessairement. Kubernetes excelle dans la haute disponibilité, le rétablissement automatique et la gestion de nombreux services, mais l'exploitation d'un cluster demande des connaissances et des efforts. Pour un petit système, exécuter des conteneurs sur une seule machine ou utiliser un service de conteneurs managé dans le cloud peut mieux convenir.

« Kubernetes » dans les explications

Questions mentionnant « Kubernetes » (10)

  1. Dans Kubernetes, quelle est la plus petite unité déployée et gérée, qui regroupe un ou plusieurs conteneurs partageant la même adresse IP et les mêmes volumes ?
  2. Dans Kubernetes, un Deployment avec replicas: 3 fait tourner trois Pods. Quelle description de ce qui se passe quand l'un de ces Pods est supprimé avec kubectl delete pod est correcte ?
  3. Dans un Deployment Kubernetes, l'image de conteneur du modèle de Pod est remplacée par une nouvelle version. Quelle description de ce qui se passe avec la stratégie de mise à jour par défaut (RollingUpdate) est correcte ?
  4. Dans Kubernetes, un Pod reçoit une adresse IP différente chaque fois qu'il est recréé. Quelle ressource permet à d'autres applications de se connecter, par un nom et une adresse qui ne changent pas, à plusieurs Pods sélectionnés par des labels, en répartissant la charge entre eux ?
  5. Dans un cluster Kubernetes, les requêtes HTTPS qui arrivent pour un même nom d'hôte doivent être envoyées au Service api si le chemin commence par /api, et au Service web sinon. Quelle ressource convient pour définir cette règle d'aiguillage ?
  6. Le mot de passe d'une base de données est stocké dans un Secret Kubernetes. Quelle description d'un Secret est correcte ?
  7. Dans une application web sur Kubernetes, la vérification effectuée par la sonde liveness a été étendue pour tester aussi si l'application peut se connecter à la base de données dont elle dépend. Quel est le problème le plus probable avec ce réglage ?
  8. Un HorizontalPodAutoscaler de Kubernetes a pour cible une utilisation CPU des Pods de 70 % et une plage de 1 à 10 Pods. Actuellement, l'utilisation CPU moyenne de 5 Pods est de 30 %. Si le nombre de Pods nécessaire est calculé par ⌈nombre actuel × utilisation actuelle ÷ utilisation cible⌉ (⌈ ⌉ désigne l'arrondi à l'entier supérieur), combien de Pods faut-il ?
  9. Dans Kubernetes, quelle description des requests et des limits de ressources définies pour un conteneur est correcte ?
  10. Comme ci-dessus, la destination de connexion à la base de données n'est pas écrite dans l'image, mais transmise sous forme de variable d'environnement au démarrage du conteneur. Quel est le principal avantage de cette conception ?

Termes associés

Pod Conteneur Variable d'environnement Image de conteneur DNS (Domain Name System) HTTP (Hypertext Transfer Protocol) TLS (Transport Layer Security) Proxy inverse (reverse proxy) Interblocage (deadlock) Déploiement bleu-vert (blue-green deployment)

Retour au glossaire