Accéder au contenu principal

L'architecture de Kubernetes expliquée : Une plongée en profondeur dans l'évolutivité Cloud-Native

Un guide complet de l'architecture Kubernetes, couvrant les composants du plan de contrôle, les nœuds de travailleur, l'évolutivité et les meilleures pratiques pour le déploiement d'applications cloud-natives.
Actualisé 11 févr. 2025  · 11 min de lecture

Kubernetes est devenu la technologie par défaut pour la gestion des applications conteneurisées dans les environnements cloud modernes. Alors que les entreprises s'orientent vers les microservices et les architectures cloud-natives, Kubernetes fournit tout ce dont elles ont besoin pour automatiser le déploiement, mettre à l'échelle les applications et garantir la haute disponibilité. 

Kubernetes est un orchestrateur de conteneurs open-source qui simplifie le processus complexe de gestion des conteneurs à l'échelle. Il fait abstraction des problèmes d'infrastructure, ce qui permet aux développeurs de se concentrer sur la création d'applications plutôt que de se préoccuper des serveurs sous-jacents.

Comprendre l'architecture Kubernetes est essentiel pour tous ceux qui cherchent à déployer et à gérer des applications évolutives, résilientes et de qualité production. 

Aujourd'hui, je souhaite partager une vision plus approfondie de l'architecture Kubernetes avec des apprenants de niveau intermédiaire déjà familiarisés avec les concepts de base de Kubernetes. 

Qu'est-ce que Kubernetes ?

Kubernetes est un puissant système distribué conçu pour orchestrer et gérer des applications conteneurisées à l'échelle. Il permet aux entreprises de déployer des charges de travail sur plusieurs machines physiques ou virtuelles, appelées nœuds, afin de garantir la disponibilité, l'évolutivité et la résilience des applications en cas de défaillance.

L'un des principaux atouts de Kubernetes est sa capacité à gérer efficacement les charges de travail dynamiques. En répartissant automatiquement les conteneurs sur les nœuds, Kubernetes garantit que les applications peuvent évoluer horizontalement, en équilibrant les charges de travail en fonction des ressources disponibles. Si un nœud est surchargé, Kubernetes réorganise les charges de travail vers les nœuds voisins sains, ce qui minimise les temps d'arrêt et maintient les performances.

Si vous êtes encore un débutant avec cette technologie, consultez cette Introduction à Kubernetes pour commencer.

Un bref historique de Kubernetes

À l'origine, Google a développé Kubernetes en tant que successeur open-source de Borg, son système interne de gestion des conteneurs. Sorti en 2014, Kubernetes est rapidement devenu la norme industrielle pour l'orchestration de conteneurs, soutenue par un vaste écosystème d'outils et de fournisseurs de cloud. Aujourd'hui, il est maintenu par la Cloud Native Computing Foundation (CNCF) et est largement adopté dans tous les secteurs pour gérer les applications cloud-natives.

Qu'est-ce que l'architecture Kubernetes ?

Le diagramme suivant représente visuellement l'architecture de Kubernetes :

L'architecture Kubernetes.

Image par l'auteur. L'architecture Kubernetes. 

  • Les composants du plan de contrôle gèrent la grappe et veillent à ce que l'état souhaité soit maintenu.
  • Les nœuds de travail exécutent les charges de travail, en faisant fonctionner les conteneurs à l'intérieur des pods.
  • Le serveur API sert de passerelle entre les interactions des utilisateurs (via l'interface utilisateur ou le CLI) et le cluster.
  • Les modules complémentaires de mise en réseau et de stockage étendent les capacités de Kubernetes pour les environnements de production.

Avec cette base en place, nous pouvons maintenant explorer les rôles détaillés de chaque composant dans l'architecture de cluster de Kubernetes.

Composants essentiels de l'architecture Kubernetes

Kubernetes se compose de deux couches principales : le plan de contrôle et les composants de nœuds. Examinons-les l'une après l'autre :

Plan de contrôle

Le plan de contrôle Kubernetes est la couche de gestion centrale chargée de maintenir l'état souhaité du cluster, de planifier les charges de travail et de gérer l'automatisation. Il veille à ce que les applications fonctionnent comme prévu en surveillant en permanence les conditions de la grappe et en procédant aux ajustements nécessaires.

Composants du plan de contrôle.

Image par l'auteur. Composants du plan de contrôle. 

Serveur API (kube-apiserver)

Le serveur API est la passerelle vers le cluster Kubernetes. Il traite toutes les demandes de gestion, qu'elles proviennent de la CLI (kubectl), des tableaux de bord de l'interface utilisateur ou des outils d'automatisation. Sans API Server en cours d'exécution, le cluster reste fonctionnel, mais les administrateurs perdent le contrôle direct sur les déploiements et les configurations.

Gestionnaire de contrôleur (kube-controller-manager)

Kubernetes fonctionne sur le modèle des contrôleurs, qui surveillent l'état du système et prennent des mesures correctives. Le responsable des contrôleurs supervise ces contrôleurs et veille à ce qu'ils remplissent les fonctions essentielles suivantes

  • Évolution des charges de travail en fonction de la demande.
  • Gestion des nœuds défaillants et reprogrammation des charges de travail.
  • Renforcer les états souhaités (par exemple, s'assurer qu'un déploiement exécute toujours le nombre spécifié de répliques).

Ordonnanceur (kube-scheduler)

Le planificateur affecte les pods aux nœuds de travail, en tenant compte de facteurs tels que

  • Disponibilité des ressources (CPU, mémoire).
  • Règles d'affinité et d'anti-affinité des nœuds.
  • Distribution des pods pour éviter les surcharges.

Il suit un processus de filtrage et de notation pour sélectionner le nœud optimal pour chaque nouveau pod, en assurant une utilisation équilibrée des ressources.

etcd (Distributed Key-Value Store)

etcd sert de source unique de vérité pour Kubernetes, en stockant toutes les données du cluster, y compris :

  • Paramètres de configuration.
  • Secrets et références.
  • État actuel et historique des charges de travail.

Étant donné que le fait de compromettre etcd permet d'avoir un contrôle total sur la grappe, il faut le sécuriser et lui donner des ressources matérielles adéquates pour maintenir les performances et la fiabilité.

Responsable du contrôle du cloud

Pour les déploiements Kubernetes basés sur le cloud, le gestionnaire de contrôleur cloud intègre le cluster avec les services des fournisseurs de cloud, la manipulation :

  • Approvisionnement des équilibreurs de charge.
  • Allocation des volumes de stockage permanent.
  • Évolution dynamique de l'infrastructure (par exemple, ajout de machines virtuelles en tant que nœuds)

Composants du nœud

Les nœuds de travail constituent l'épine dorsale informatique d'un cluster Kubernetes, responsable de l'exécution des charges de travail des applications. Chaque nœud fonctionne de manière indépendante tout en maintenant une communication constante avec le plan de contrôle afin d'assurer une orchestration sans heurts.

Kubernetes planifie dynamiquement les Pods sur les nœuds de travail en fonction de la disponibilité des ressources et des demandes de charge de travail. Les nœuds peuvent être des machines physiques ou virtuelles, et un cluster prêt pour la production se compose généralement de plusieurs nœuds pour permettre une évolution horizontale et une haute disponibilité. Chaque nœud de travailleur comprend les éléments essentiels suivants :

Kubelet : L'agent de nœud

Kubelet est l'agent principal au niveau du nœud qui gère l'exécution des conteneurs. Il :

  • Communique en permanence avec le serveur API pour recevoir des instructions.
  • Veille à ce que les pods fonctionnent conformément à leurs spécifications.
  • Extrait les images des conteneurs et démarre les conteneurs nécessaires.
  • Surveille l'état des conteneurs et les redémarre si nécessaire.

Sans Kubelet, le nœud serait déconnecté de la grappe et les charges de travail programmées ne seraient pas gérées correctement.

Kube-Proxy : Mise en réseau et équilibrage de la charge

Kube-Proxy est responsable de la gestion de la communication réseau entre les services fonctionnant sur différents nœuds. Il :

  • Configure les règles du réseau pour permettre une communication transparente entre les pods.
  • Facilite la découverte de services et l'équilibrage des charges pour le réseau inter-Pods.
  • Veille à ce que le trafic soit acheminé correctement entre les nœuds et les clients externes.

En cas de défaillance de Kube-Proxy, les pods situés sur le nœud concerné peuvent devenir inaccessibles, ce qui perturbe le trafic réseau au sein de la grappe.

Temps d'exécution du conteneur : Exécution des conteneurs

Le moteur d'exécution du conteneur est le logiciel qui exécute les applications conteneurisées au sein des pods. Kubernetes prend en charge plusieurs options d'exécution, notamment :

  • containerd (le plus couramment utilisé)
  • CRI-O (léger et natif de Kubernetes)
  • Moteur Docker (support hérité via dockershim)

Le moteur d'exécution interagit avec le système d'exploitation pour isoler les charges de travail à l'aide de technologies telles que les cgroups et les espaces de noms, garantissant ainsi une utilisation efficace des ressources.

Comment les nœuds de travail interagissent avec le plan de contrôle

  • Les nœuds rejoignent la grappe à l'aide d'un jeton émis par le plan de contrôle.
  • Une fois qu'un nœud est enregistré, le planificateur attribue les charges de travail en fonction des ressources disponibles.
  • Le plan de contrôle surveille en permanence l'état des nœuds et peut reprogrammer les charges de travail si un nœud devient malsain ou surchargé.

En combinant Kubelet, Kube-Proxy et un runtime de conteneur, les nœuds de travail forment une couche d'exécution évolutive et résiliente qui alimente les applications Kubernetes.

Extension de Kubernetes avec des modules complémentaires

Kubernetes est conçu pour être hautement extensible, ce qui vous permet de personnaliser et d'améliorer ses fonctionnalités grâce à des modules complémentaires. Alors que le plan de contrôle et les nœuds de travail constituent l'infrastructure de base, les modules complémentaires fournissent des capacités de mise en réseau, de stockage, de surveillance et d'automatisation qui rendent Kubernetes plus puissant et prêt pour la production.

Solutions de mise en réseau

La mise en réseau Kubernetes suit une approche basée sur des plugins, nécessitant un plugin compatible avec l'interface de réseau de conteneurs (CNI) pour permettre une communication transparente entre les pods. Parmi les solutions de mise en réseau les plus répandues, on peut citer

  • Calico: Politiques de réseau sécurisées et routage de haute performance.
  • Cilium: réseau et sécurité basés sur l'eBPF.
  • Flanelle: Réseau superposé léger et facile à configurer.

La plupart des distributions Kubernetes gérées sont préconfigurées avec une solution de mise en réseau, mais les clusters autogérés nécessitent l'installation manuelle d'un plugin CNI.

Solutions de stockage

Kubernetes offre un provisionnement dynamique du stockage grâce aux classes de stockage, ce qui permet aux charges de travail d'interagir avec divers backends de stockage :

  • Stockage local: Utilise le système de fichiers d'un nœud.
  • Stockage en bloc dans le cloud: S'intègre aux fournisseurs de cloud (par exemple, AWS EBS, Azure Disk, GCP Persistent Disks).
  • Stockage distribué : Des solutions telles que Ceph, Longhorn et Rook permettent un stockage persistant et répliqué entre les nœuds.

Étant donné que Kubernetes ne comprend pas de registre de conteneurs intégré, vous devez utiliser un registre externe (par exemple, Docker Hub, Harbor ou Amazon ECR) pour stocker et distribuer des images de conteneurs.

Suivi et observabilité

Une surveillance et une journalisation efficaces sont essentielles pour gérer les charges de travail Kubernetes. Les solutions les plus courantes sont les suivantes :

  • Prométhée: Collecte de données et alertes.
  • Grafana: Tableaux de bord de visualisation.
  • Pile ELK (Elasticsearch, Logstash, Kibana): Agrégation et analyse des journaux.

Ces outils permettent de curer l'état des grappes, de diagnostiquer les problèmes et d'optimiser les performances.

Contrôleurs de pénétration

Les contrôleurs d'entrée gèrent l'accès externe aux applications à l'intérieur du cluster, en s'occupant du trafic HTTP/HTTPS et de l'équilibrage de la charge. Les options les plus courantes sont les suivantes :

  • NGINX Ingress Controller - Largement utilisé pour gérer le trafic web.
  • Traefik - Routage dynamique avec prise en charge intégrée de Let's Encrypt.
  • HAProxy Ingress - Équilibrage de charge haute performance.

Fonctionnalité personnalisée avec les CRD

Kubernetes permet aux utilisateurs d'étendre son API par le biais de définitions de ressources personnalisées (CRD), ce qui permet de créer des objets personnalisés et des flux d'automatisation.

Les opérateurs et les contrôleurs peuvent automatiser des tâches complexes, telles que :

  • Provisionnement des bases de données lorsqu'un objet PostgresDatabaseConnection personnalisé est ajouté.
  • Gestion dynamique des politiques de sécurité.
  • Mise à l'échelle des applications sur la base de mesures personnalisées.

En s'appuyant sur les CRD, Kubernetes peut être transformé en une plateforme entièrement personnalisable, s'adaptant aux besoins spécifiques des entreprises.

Architecture du cluster Kubernetes

Kubernetes introduit plusieurs couches d'abstraction pour aider à définir et à gérer efficacement les applications. Ces abstractions simplifient le déploiement, la mise à l'échelle et la gestion dans des environnements distribués.

Nœuds maître et ouvrier

Un cluster Kubernetes se compose de deux principaux types de nœuds :

  • Nœuds maîtres (plan de contrôle): Responsable de l'orchestration et de la gestion du cluster. Ces nœuds exécutent le serveur API, le planificateur, le gestionnaire de contrôle et etcd pour garantir que les charges de travail sont déployées et maintenues comme prévu.
  • Nœuds de travail (plan de données): Exécutez des charges de travail d'application en exécutant des pods, qui contiennent des conteneurs. Chaque nœud de travail est géré par le Kubelet, interagit avec le Kube-Proxy pour la mise en réseau et exécute un runtime de conteneur comme Docker ou containerd.

Ensemble, le nœud maître et le nœud travailleur forment une infrastructure auto-réparatrice et évolutive où les applications peuvent s'exécuter de manière transparente. Si vous souhaitez mieux comprendre la conteneurisation et la virtualisation, suivez ce cours dirigé par des experts. Le cursus Conteneurisation et virtualisation.

Architecture en nacelle

Au cœur de Kubernetes se trouve le pod, qui est la plus petite unité déployable du système. Un pod encapsule un ou plusieurs conteneurs qui partagent des paramètres de stockage, de réseau et de configuration.

  • Dosettes à usage unique: La configuration la plus courante, où chaque Pod contient un conteneur exécutant un microservice.
  • Dosettes multi-conteneurs: Utilisé lorsque des conteneurs étroitement couplés doivent partager des ressources et communiquer efficacement.

Les pods sont éphémères, ce qui signifie qu'ils peuvent être reprogrammés ou redémarrés si nécessaire. Kubernetes gère les pods par le biais de déploiements, de StatefulSets et de DaemonSets, garantissant ainsi l'évolutivité et la disponibilité.

L'architecture de Pod.

Image par l'auteur. L'architecture de Pod. 

Espace de noms et segmentation

Les espaces de noms permettent une segmentation logique au sein d'un cluster Kubernetes. Ils aident :

  • Isolez les charges de travail pour différentes équipes, différents projets ou différents environnements (par ex, dev, staging, production).
  • Appliquez le contrôle d'accès basé sur les rôles (RBAC) pour restreindre les autorisations.
  • Gérer les quotas de ressources pour éviter une consommation excessive des ressources.

En organisant les charges de travail en espaces de noms, Kubernetes permet d'améliorer la sécurité, la gestion des ressources et l'évolutivité au sein d'un même cluster.

Avec cette base en place, nous pouvons maintenant explorer comment l'architecture Kubernetes prend en charge les déploiements de microservices dans la section suivante. 

Kubernetes Microservices Architecture

Kubernetes est idéal pour les microservices, offrant évolutivité, résilience et automatisation pour les applications distribuées. Il permet :

  • Mise à l'échelle automatisée: Ajuste les ressources en fonction de la demande.
  • Auto-guérison: Détecte et remplace les conteneurs défaillants.
  • Découverte des services et équilibrage de la charge: Communication efficace entre les microservices.
  • Portabilité: S'exécute dans des environnements cloud et sur site.
  • Configuration déclarative: Utilise YAML pour des déploiements prévisibles.

Une préoccupation commune des professionnels est de savoir s'il faut utiliser Kubernetes ou Docker Compose pour vos microservices. Si c'est votre cas, je vous recommande le guide suivant Docker Compose vs Kubernetes pour mieux comprendre.

Meilleures pratiques

Vous trouverez ci-dessous quelques-unes des meilleures pratiques à respecter :

  • Espaces de noms pour l'isolation de la charge de travail: Organisez et isolez les charges de travail pour améliorer la sécurité et la gestion des ressources.
  • Services Kubernetes et Ingress pour la gestion du trafic: Permettre une communication efficace entre les microservices et les clients externes.
  • Autoscaling & Rolling Updates pour des performances sans faille: Utilisez Horizontal Pod Autoscaler et des déploiements continus pour maintenir la disponibilité.
  • ConfigMaps & Secrets pour des configurations sécurisées: Gérez les données sensibles et les configurations de l'environnement en toute sécurité.
  • Surveillance et journalisation avec Prometheus et Grafana: Obtenez des informations et résolvez les problèmes de manière efficace grâce à des outils d'observabilité robustes.

En suivant ces pratiques, Kubernetes rationalise le déploiement de microservices, en garantissant la flexibilité et la haute disponibilité.

Cas d'utilisation de l'architecture Kubernetes

Kubernetes est largement adopté dans tous les secteurs d'activité pour sa capacité à mettre à l'échelle les applications, à assurer la haute disponibilité et à prendre en charge les environnements multi-cloud. Son architecture permet une gestion transparente de la charge de travail, ce qui en fait un choix privilégié pour les applications cloud-natives modernes.

Évolutivité des applications 

Kubernetes permet une mise à l'échelle horizontale, ce qui permet aux applications de gérer efficacement des charges de travail variables :

  • Horizontal Pod Autoscaler (HPA) ajuste le nombre de Pods en fonction du CPU, de la mémoire ou de mesures personnalisées.
  • Cluster Autoscaler ajoute ou supprime dynamiquement des nœuds de travail pour répondre à la demande.
  • L'équilibrage de la charge garantit que le trafic est réparti uniformément entre les répliques.

Kubernetes est donc idéal pour les applications dont le trafic fluctue, comme les plateformes de commerce électronique, les services de streaming et les applications SaaS.

Haute disponibilité et tolérance aux pannes 

Kubernetes assure un fonctionnement continu en :

  • Réplication des charges de travail sur plusieurs nœuds pour éviter les interruptions de service.
  • Mécanismes d'autoréparation qui redémarrent automatiquement les conteneurs défaillants.
  • L'élection d'un leader dans le plan de contrôle pour maintenir la stabilité en cas de défaillance.

Grâce à ces caractéristiques, Kubernetes convient aux applications critiques qui nécessitent des temps d'arrêt quasi nuls.

Déploiements hybrides et multiclouds.

Kubernetes fait abstraction de la complexité de l'infrastructure, ce qui facilite le déploiement des charges de travail dans les environnements sur site, hybrides et multi-cloud :

  • Gestion cohérente des applications sur AWS, Google Cloud, Azure et les clusters sur site.
  • Routage du trafic entre les fournisseurs de cloud pour une latence et une rentabilité optimales.
  • Stratégies de reprise après sinistre avec des configurations de basculement cross-cloud.

Conclusion

Kubernetes a révolutionné l'orchestration de conteneurs, devenant la norme industrielle pour le déploiement, la gestion et la mise à l'échelle des applications dans les environnements cloud modernes. Son architecture permet une mise à l'échelle automatisée, une haute disponibilité et une compatibilité cross-cloud, ce qui en fait un outil puissant pour les organisations qui adoptent des stratégies microservices et cloud-natives.

En comprenant l'architecture de Kubernetes, les développeurs et les équipes informatiques peuvent :

  • Optimisez les performances de vos applications grâce à une planification et une mise à l'échelle efficaces.
  • Améliorez la résilience du système grâce à l'autorégénération et à la haute disponibilité.
  • Assurez des déploiements multi-cloud et hybrides transparents, en évitant le verrouillage des fournisseurs.

De la gestion du plan de contrôle à l'exécution des nœuds de travail et aux modules complémentaires personnalisables, Kubernetes offre la flexibilité nécessaire pour exécuter des applicationscritiques à l'échelle. Alors que l'écosystème du cloud évolue, Kubernetes reste au premier plan, permettant aux entreprises d'innover en toute confiance.

Kubernetes est un outil puissant pour gérer les applications modernes, mais sa maîtrise nécessite une expérience pratique. Poursuivez votre apprentissage avec :


Josep Ferrer's photo
Author
Josep Ferrer
LinkedIn
Twitter

Josep est data scientist et chef de projet à l'Office du tourisme de Catalogne, où il utilise les données pour améliorer l'expérience des touristes en Catalogne. Son expertise comprend la gestion du stockage et du traitement des données, associée à des analyses avancées et à la communication efficace des données.

Il est également un éducateur dévoué, enseignant le programme de Master Big Data à l'Université de Navarre, et contribuant régulièrement à des articles perspicaces sur la science des données sur Medium et KDNuggets.

Il est titulaire d'une licence en ingénierie physique de l'université polytechnique de Catalogne et d'une maîtrise en systèmes interactifs intelligents de l'université Pompeu Fabra.

Actuellement, il s'engage avec passion à rendre les technologies liées aux données plus accessibles à un public plus large par le biais de la publication ForCode'Sake sur Medium.

Sujets

Les meilleurs cours de DataCamp

Certification disponible

cours

Introduction à Kubernetes

3 hr
5.5K
Dans ce cours, vous apprendrez les fondamentaux de Kubernetes et à déployer et orchestrer des conteneurs à l'aide de Manifests et d'instructions kubectl.
Afficher les détailsRight Arrow
Commencer le cours
Voir plusRight Arrow