Qu'est-ce que l'architecture Kubernetes ? Importance + meilleures pratiques

Publié: 2023-06-12

Kubernetes a connu une croissance fulgurante dans son adoption depuis 2014. Inspiré de la solution de gestion de cluster interne de Google, Borg, Kubernetes simplifie le déploiement et l'administration de vos applications. Comme tous les logiciels d'orchestration de conteneurs , Kubernetes devient populaire parmi les professionnels de l'informatique car il est sécurisé et simple. Cependant, comme pour tout outil, reconnaître comment son architecture vous aide à l'utiliser plus efficacement.

Découvrons les fondements de l'architecture Kubernetes, en commençant par ce qu'elle est, ce qu'elle fait et pourquoi elle est importante.

Google a créé le système adaptable de gestion de conteneurs Kubernetes, qui gère les applications conteneurisées dans de nombreux paramètres. Il permet d'automatiser le déploiement d'applications conteneurisées, d'apporter des modifications et de faire évoluer ces applications.

Cependant, Kubernetes n'est pas seulement un orchestrateur de conteneurs . De la même manière, les applications de bureau fonctionnent sur MacOS, Windows ou Linux ; c'est le système d'exploitation des applications natives du cloud, car il sert de plate-forme cloud pour ces programmes.

Qu'est-ce qu'un conteneur ?

Les conteneurs sont une approche standard pour empaqueter les applications et leurs dépendances afin que les applications puissent être exécutées facilement dans les environnements d'exécution. À l'aide de conteneurs, vous pouvez prendre des mesures essentielles pour réduire le temps de déploiement et accroître la fiabilité des applications en regroupant le code, les dépendances et les configurations d'une application dans un bloc de construction unique et facile à utiliser.

Le nombre de conteneurs dans les applications d'entreprise peut devenir ingérable. Pour tirer le meilleur parti de vos conteneurs, Kubernetes vous aide à les orchestrer.

À quoi sert Kubernetes ?

Kubernetes est une plate-forme incroyablement adaptable et extensible pour exécuter des charges de travail de conteneur. La plate-forme Kubernetes fournit non seulement l'environnement pour créer des applications cloud natives, mais elle aide également à gérer et à automatiser leurs déploiements.

Il vise à soulager les opérateurs d'applications et les développeurs de l'effort de coordination de l'infrastructure de calcul, de réseau et de stockage sous-jacente, leur permettant de se concentrer uniquement sur les processus centrés sur les conteneurs pour un fonctionnement en libre-service. Les développeurs peuvent également créer des procédures de déploiement et de gestion spécialisées, ainsi que des niveaux d'automatisation plus élevés pour les applications composées de plusieurs conteneurs.

Kubernetes peut gérer toutes les charges de travail backend importantes, y compris les applications monolithiques, les programmes sans état ou avec état, les microservices, les services, les tâches par lots et tout le reste.

Kubernetes est souvent choisi pour les avantages suivants.

  • L'infrastructure de Kubernetes est supérieure à celle de nombreuses technologies DevOps.
  • Kubernetes décompose les conteneurs en composants plus petits pour une gestion précise.
  • Kubernetes déploie des mises à jour logicielles rapidement et régulièrement.
  • Kubernetes fournit une plate-forme pour développer des applications cloud natives.

Architecture et composants Kubernetes

L'architecture de base de Kubernetes comprend de nombreux composants, également appelés composants K8, donc avant de nous lancer, il est important de se rappeler les concepts suivants.

  • L'architecture de base de Kubernetes consiste en un plan de contrôle qui gère les nœuds et les nœuds de travail qui exécutent des applications conteneurisées.
  • Alors que le plan de contrôle gère l'exécution et la communication, les nœuds de travail exécutent en fait ces conteneurs.
  • Un cluster Kubernetes est un groupe de nœuds, et chaque cluster a au moins un nœud de travail.

Schéma d'architecture Kubernetes

Schéma d'architecture Kubernetes

Plan de contrôle Kubernetes

Le plan de contrôle est le centre du système nerveux central de la conception du cluster Kubernetes, abritant les composants de contrôle du cluster. Il enregistre également la configuration et l'état de tous les objets Kubernetes du cluster.

Le plan de contrôle Kubernetes maintient une communication régulière avec les unités de calcul pour s'assurer que le cluster fonctionne comme prévu. Les contrôleurs surveillent les états des objets et font en sorte que l'état physique, observé ou actuel des objets système corresponde à l'état ou aux spécifications souhaités en réponse aux modifications du cluster.

Le plan de contrôle est composé de plusieurs éléments essentiels, notamment le serveur d'interface de programmation d'application (API), le planificateur, le gestionnaire de contrôleur, etc. Ces composants fondamentaux de Kubernetes garantissent que les conteneurs s'exécutent avec les ressources appropriées. Ces composants peuvent tous fonctionner sur un seul nœud principal, mais de nombreuses entreprises les dupliquent sur de nombreux nœuds pour une haute disponibilité.

1. Serveur d'API Kubernetes

Le serveur d'API Kubernetes est le frontal du plan de contrôle Kubernetes. Il facilite les mises à jour, la mise à l'échelle, la configuration des données et d'autres types d'orchestration du cycle de vie en offrant une gestion des API pour diverses applications. Étant donné que le serveur d'API est la passerelle, les utilisateurs doivent pouvoir y accéder depuis l'extérieur du cluster. Dans ce cas, le serveur d'API est un tunnel vers les pods, les services et les nœuds. Les utilisateurs s'authentifient via le serveur API.

2. Ordonnanceur Kubernetes

Le kube-scheduler enregistre les statistiques d'utilisation des ressources pour chaque nœud de calcul, évalue si un cluster est sain et décide si et où de nouveaux conteneurs doivent être déployés. Le planificateur évalue l'intégrité globale du cluster et les demandes de ressources du pod, telles que l'unité centrale de traitement (CPU) ou la mémoire. Ensuite, il choisit un nœud de calcul approprié et planifie la tâche, le pod ou le service, en tenant compte des contraintes ou des garanties de ressources, de la localité des données, des exigences de qualité de service, de l'anti-affinité ou des normes d'affinité.

3. Gestionnaire de contrôleur Kubernetes

Dans un environnement Kubernetes, plusieurs contrôleurs régissent les états des points de terminaison (pods et services), des jetons et des comptes de service (espaces de noms), des nœuds et de la réplication (autoscaling). Le gestionnaire de contrôleur kube, souvent appelé gestionnaire de contrôleur cloud ou simplement contrôleur, est un démon qui gère le cluster Kubernetes en effectuant diverses tâches de contrôleur.

Le contrôleur surveille les objets du cluster tout en exécutant les boucles de contrôle principales de Kubernetes. Il les surveille pour leurs états souhaités et existants via le serveur API. Si les états actuel et prévu des objets gérés ne correspondent pas, le contrôleur prend des mesures correctives pour rapprocher l'état de l'objet de l'état souhaité. Le contrôleur Kubernetes gère également les tâches essentielles du cycle de vie.

4. etc.

etcd est une base de données de stockage clé-valeur distribuée et tolérante aux pannes qui conserve les données de configuration et les informations d'état du cluster. Bien qu'etcd puisse être configuré indépendamment, il fait souvent partie du plan de contrôle Kubernetes.

L'algorithme de consensus raft est utilisé pour conserver l'état du cluster dans etcd. Cela aide à traiter un problème typique dans le contexte des machines d'état répliquées et nécessite que de nombreux serveurs s'accordent sur des valeurs. Raft établit trois rôles : leader, candidat et suiveur, et crée un consensus en votant pour un leader.

Par conséquent, etcd est la source unique de vérité (SSOT) pour tous les composants du cluster Kubernetes, répondant aux requêtes du plan de contrôle et collectant différentes informations sur l'état des conteneurs, des nœuds et des pods. etcd est également utilisé pour stocker des informations de configuration telles que les ConfigMaps, les sous-réseaux, les secrets et les données d'état du cluster.

Nœuds de travail Kubernetes

Les nœuds de travail sont des systèmes qui exécutent des conteneurs gérés par le plan de contrôle. Le kubelet - le contrôleur principal de Kubernetes - s'exécute sur chaque nœud en tant qu'agent pour interagir avec le plan de contrôle. De plus, chaque nœud exécute un moteur d'exécution de conteneur, tel que Docker ou rkt. D'autres composants pour la surveillance, la journalisation, la découverte de services et des extras facultatifs sont également exécutés sur le nœud.

Certains composants clés de l'architecture de cluster Kubernetes sont les suivants.

Nœuds

Un cluster Kubernetes doit avoir au moins un nœud de calcul, mais il peut en avoir beaucoup plus en fonction des besoins en capacité. Étant donné que les pods sont coordonnés et planifiés pour s'exécuter sur les nœuds, des nœuds supplémentaires sont nécessaires pour augmenter la capacité du cluster. Les nœuds font le travail d'un cluster Kubernetes. Ils relient les applications ainsi que les ressources réseau, de calcul et de stockage.

Les nœuds des centres de données peuvent être des machines virtuelles (VM) natives du cloud ou des serveurs bare metal.

Moteur d'exécution de conteneur

Chaque nœud informatique utilise un moteur d'exécution de conteneur pour exploiter et gérer les cycles de vie des conteneurs. Kubernetes prend en charge les environnements d'exécution conformes à l'initiative Open Container, tels que Docker, CRI-O et rkt.

Service Kubelet

Un kubelet est inclus sur chaque nœud de calcul. C'est un agent qui communique avec le plan de contrôle pour garantir que les conteneurs d'un pod fonctionnent. Lorsque le plan de contrôle demande qu'une action spécifique soit effectuée dans un nœud, le kubelet obtient les spécifications du pod via le serveur API et fonctionne. Il s'assure ensuite que les conteneurs concernés sont en bon état de fonctionnement.

Service proxy Kube

Chaque nœud de calcul dispose d'un proxy réseau appelé kube-proxy, qui facilite les services de mise en réseau Kubernetes. Pour gérer les connexions réseau à l'intérieur et à l'extérieur du cluster, le kube-proxy transfère le trafic ou dépend de la couche de filtrage de paquets du système d'exploitation.

Le processus kube-proxy fonctionne sur chaque nœud pour s'assurer que les services sont disponibles pour les autres parties et pour faire face à des sous-réseaux hôtes spécifiques. Il agit comme un proxy réseau et un équilibreur de charge de service sur son nœud, gérant le routage réseau pour le trafic du protocole de datagramme utilisateur (UDP) et du protocole de contrôle de transmission (TCP). Le kube-proxy, en réalité, achemine le trafic pour tous les points de terminaison de service.

Gousses

Jusqu'à présent, nous avons couvert les idées internes et liées à l'infrastructure. Les pods, cependant, sont cruciaux pour Kubernetes, car ce sont les principaux composants tournés vers l'extérieur avec lesquels les développeurs interagissent.

Un pod est l'unité la plus simple du modèle de conteneur Kubernetes, représentant une instance unique d'une application. Chaque pod comprend un conteneur ou plusieurs conteneurs étroitement liés qui s'emboîtent logiquement et exécutent les règles qui régissent la fonction du conteneur.

Les pods ont une durée de vie limitée et finissent par mourir après avoir été mis à niveau ou réduits. Bien qu'éphémères, ils exécutent des applications avec état en se connectant à un stockage persistant.

Les pods peuvent également évoluer horizontalement, ce qui signifie qu'ils peuvent augmenter ou diminuer le nombre d'instances en fonctionnement. Ils sont également capables d'effectuer des mises à jour continues et des déploiements Canary.

Les pods fonctionnent ensemble sur des nœuds, ils partagent donc du contenu et du stockage et peuvent communiquer avec d'autres pods via localhost. Les conteneurs peuvent s'étendre sur plusieurs ordinateurs, tout comme les pods. Un seul nœud peut exploiter plusieurs pods, chacun collectant de nombreux conteneurs.

Le pod est l'unité de gestion centrale de l'écosystème Kubernetes, servant de frontière logique pour les conteneurs qui partagent des ressources et un contexte. La méthode de regroupement des pods, qui permet à plusieurs processus dépendants de fonctionner simultanément, atténue les différences entre la virtualisation et la conteneurisation.

Types de gousses

Plusieurs types de pods jouent un rôle essentiel dans le modèle de conteneur Kubernetes.

  • Le type par défaut, ReplicaSet , garantit que le nombre donné de pods est opérationnel.
  • Le déploiement est une méthode déclarative de gestion des pods basés sur des ReplicaSets. Cela inclut les mécanismes de restauration et de mise à jour continue.
  • Daemonset garantit que chaque nœud exécute une instance d'un pod. Des services de cluster tels que la surveillance de l'intégrité et le transfert de journaux sont utilisés.
  • StatefulSet est conçu pour gérer les pods qui doivent endurer ou préserver l'état.
  • Job et CronJob exécutent des tâches planifiées ponctuelles ou prédéfinies.

Autres composants de l'architecture Kubernetes

Kubernetes gère les conteneurs d'une application, mais peut également gérer les données d'application associées dans un cluster. Les utilisateurs de Kubernetes peuvent demander des ressources de stockage sans comprendre l'infrastructure de stockage sous-jacente.

Un volume Kubernetes est un répertoire dans lequel un pod peut accéder aux données et les stocker. Le type de volume détermine le contenu du volume, son origine et le support qui le prend en charge. Les volumes persistants (PV) sont des ressources de stockage spécifiques au cluster souvent fournies par un administrateur. Les PV peuvent également survivre à un pod donné.

Kubernetes dépend des images de conteneurs , qui sont stockées dans un registre de conteneurs . Il peut s'agir d'un registre tiers ou d'un registre créé par l'organisation.

Les espaces de noms sont des clusters virtuels qui existent au sein d'un cluster physique. Ils sont conçus pour créer des environnements de travail indépendants pour de nombreux utilisateurs et équipes. Ils empêchent également les équipes d'interférer les unes avec les autres en limitant les objets Kubernetes auxquels elles peuvent accéder. Les conteneurs Kubernetes au sein d'un pod peuvent communiquer avec d'autres pods via localhost et partager des adresses IP et des espaces de noms réseau.

Kubernetes contre Docker Swarm

Kubernetes et Docker sont des plates-formes qui fournissent la gestion des conteneurs et la mise à l'échelle des applications. Kubernetes fournit une solution efficace de gestion des conteneurs idéale pour les applications à forte demande avec une configuration compliquée. En revanche, Docker Swarm est conçu pour la simplicité, ce qui en fait un excellent choix pour les applications essentielles qui sont rapides à déployer et à entretenir.

Kubernetes contre Docker Swarm

  • Docker Swarm est plus facile à déployer et à configurer que Kubernetes.
  • Kubernetes offre une évolutivité tout-en-un basée sur le trafic, tandis que Docker Swarm donne la priorité à une mise à l'échelle rapide.
  • L'équilibrage de charge automatique est disponible dans Docker Swarm mais pas dans Kubernetes. Cependant, des solutions tierces peuvent lier un équilibreur de charge externe à Kubernetes.

Les exigences de votre entreprise déterminent le bon outil.

Solutions d'orchestration de conteneurs

Les systèmes d'orchestration de conteneurs permettent aux développeurs de lancer plusieurs conteneurs pour le déploiement d'applications. Les responsables informatiques peuvent utiliser ces plates-formes pour automatiser l'administration des instances, l'approvisionnement des hôtes et la connexion des conteneurs.

Voici quelques-uns des meilleurs outils d'orchestration de conteneurs qui facilitent le déploiement, identifient les implémentations de conteneurs défaillantes et gèrent les configurations d'application.

Top 5 des logiciels d'orchestration de conteneurs :

  • Google Cloud Run
  • Amazon Elastic Container Service (Amazon ECS)
  • Moteur Mirantis Kubernetes
  • Moteur Google Kubernetes
  • Service Amazon Elastic Kubernetes (Amazon EKS)

*Les cinq principales solutions d'orchestration de conteneurs du rapport Grid du printemps 2023 de G2.

Cliquez pour discuter avec AI Monty

Bonnes pratiques et principes de conception de l'architecture Kubernetes

La mise en œuvre d'une stratégie de plate-forme prenant en compte la sécurité, la gouvernance, la surveillance, le stockage, la mise en réseau, la gestion du cycle de vie des conteneurs et l'orchestration est essentielle. Cependant, Kubernetes est très difficile à adopter et à faire évoluer, en particulier pour les entreprises qui gèrent à la fois une infrastructure de cloud sur site et publique. Pour simplifier, voici quelques bonnes pratiques à prendre en compte lors de l'architecture des clusters kubernetes.

  • Assurez-vous de toujours disposer de la version la plus récente de Kubernetes.
  • Investir dans la formation des équipes de développement et opérationnelles.
  • Établir une gouvernance à l'échelle de l'entreprise . Assurez-vous que vos outils et fournisseurs sont compatibles avec l'orchestration Kubernetes.
  • Augmentez la sécurité en incluant des techniques de numérisation d'images dans votre flux de travail d'intégration et de livraison continues (CI/CD). Le code open source téléchargé à partir d'un référentiel GitHub doit toujours être traité avec prudence.
  • Implémentez le contrôle d'accès basé sur les rôles (RBAC) dans l'ensemble du cluster. Les modèles basés sur le moindre privilège et la confiance zéro devraient être la norme.
  • N'utilisez que des utilisateurs non root et rendez le système de fichiers en lecture seule pour protéger davantage les conteneurs.
  • Évitez les valeurs par défaut car les déclarations simples sont moins sujettes aux erreurs et communiquent mieux leur objectif.
  • Lorsque vous utilisez des images Docker Hub de base, soyez prudent car elles peuvent inclure des logiciels malveillants ou être gonflées de code inutile. Commencez avec un code simple et propre et progressez. Les images plus petites grandissent plus rapidement, occupent moins d'espace de stockage et extraient les images plus rapidement.
  • Gardez les conteneurs aussi simples que possible. Un processus par conteneur permet à l'orchestrateur de signaler si ce processus est sain ou non.
  • Crash en cas de doute. Ne redémarrez pas en cas d'échec, car Kubernetes redémarrera un conteneur défaillant.
  • Soyez descriptif . Les étiquettes descriptives profitent aux développeurs actuels et futurs.
  • En ce qui concerne les microservices, ne soyez pas trop précis . Chaque fonction d'un composant de code logique ne doit pas être son microservice.
  • Dans la mesure du possible, automatisez . Vous pouvez ignorer complètement les déploiements manuels de Kubernetes en automatisant votre flux de travail CI/CD.
  • Utilisez les sondes de vivacité et de préparation pour vous aider à gérer les cycles de vie des pods ; sinon, les pods peuvent être arrêtés lors de l'initialisation ou de la réception des demandes des utilisateurs avant qu'ils ne soient prêts.

Conseil : Explorez les solutions de gestion des conteneurs pour de meilleures pratiques de déploiement.

Pensez à vos contenants

Kubernetes, le logiciel de gestion centré sur les conteneurs, est devenu la norme de facto pour le déploiement et l'exploitation d'applications conteneurisées en raison de la large utilisation des conteneurs au sein des entreprises. L'architecture de Kubernetes est simple et intuitive. Bien que cela donne aux responsables informatiques un meilleur contrôle sur les performances de leur infrastructure et de leurs applications, il reste encore beaucoup à apprendre pour tirer le meilleur parti de cette technologie.

Envie d'explorer davantage le sujet ? Découvrez la pertinence croissante de la conteneurisation dans le cloud computing !