Présentation
Kubernetes est une plateforme Open Source d'orchestration des conteneurs qui automatise de nombreux processus manuels associés au déploiement, à la gestion et à la mise à l'échelle des applications conteneurisées.
Kubernetes automatise la configuration des applications tout en assurant et en suivant l'allocation des ressources. Présenté initialement en 2014, ce projet de la CNCF (Cloud Native Computing Foundation) est devenu une plateforme de référence pour exécuter des applications et services distribués à grande échelle.
Concepts de base
Kubernetes est une plateforme de gestion des conteneurs. Elle regroupe le code, la configuration et les dépendances d'une application de sorte que celle-ci s'exécute de manière isolée, avec ses propres ressources, chaque application étant associée à un ou plusieurs conteneurs réunis dans des pods Kubernetes.
Kubernetes peut s'exécuter sur des serveurs bare metal, sur des machines virtuelles ou dans des clouds publics, privés et hybrides, et peut fonctionner sur de nombreux types d'infrastructures. C'est un avantage non négligeable.
Comme expliqué dans le guide de mise en œuvre, la plateforme Kubernetes est conçue pour aider les utilisateurs à suivre trois principes de conception fondamentaux. Un déploiement Kubernetes doit être :
- Sécurisé : il doit suivre les meilleures pratiques les plus récentes en matière de sécurité.
- Intuitif : on doit pouvoir le faire fonctionner avec quelques commandes simples.
- Adaptable : il doit être personnalisable via un fichier de configuration et ne pas dépendre d'un fournisseur.
Ressources Red Hat
Avantages
Kubernetes automatise les tâches pénibles de déploiement et de mise à l'échelle des applications et permet d'adopter des méthodes de développement cloud-native qui accélèrent les processus et la mise sur le marché des logiciels.En voici les principaux avantages :
Prise en charge des grands environnements complexes : les environnements de production qui exécutent plusieurs applications nécessitent de déployer et faire fonctionner en synergie une multitude de conteneurs sur un grand nombre d'hôtes. Kubernetes fournit les outils d'orchestration et de gestion requis pour déployer des conteneurs à une échelle adaptée aux charges de travail volumineuses.
Évolutivité : Kubernetes évolue automatiquement en fonction des besoins pour fournir la capacité suffisante aux applications, à moindre coût et en préservant les ressources.
Portabilité : Kubernetes peut s'exécuter sur site dans un datacenter, un cloud public ou des configurations hybrides avec clouds publics et privés. Quel que soit l'environnement utilisé, les commandes restent les mêmes.
Déploiements cohérents : les déploiements Kubernetes sont cohérents sur l'ensemble de l'infrastructure, qui est immuable. Les conteneurs regroupent toutes les dépendances et instructions de configuration requises pour l'exécution d'une application.
Exploitation et développement séparés et automatisés : les conteneurs font gagner du temps aux équipes de développement en accélérant les cycles d'itération. Avec Kubernetes, les équipes d'exploitation peuvent également compter sur la stabilité du système.
Compatibilité avec les stratégies de cloud hybride : de nombreuses entreprises utilisent à la fois des datacenters sur site et des solutions de cloud public ou privé. En répartissant ainsi les charges de travail entre plusieurs fournisseurs de cloud, elles bénéficient des meilleurs tarifs et niveaux de service. La cohérence et la portabilité de Kubernetes permettent de mettre en œuvre ces stratégies hybrides.
Prise en charge continue des applications traditionnelles : Kubernetes peut aider à distribuer et gérer les applications conteneurisées, existantes et cloud-native ainsi que celles décomposées en microservices.
Gestion des environnements complexes : dans les conteneurs, les microservices facilitent l'orchestration des services, notamment le stockage, la mise en réseau et la sécurité. Toutefois, ils augmentent également le nombre de conteneurs, ce qui complexifie l'environnement. Kubernetes regroupe les conteneurs dans des pods et aide ainsi à planifier les charges de travail et à fournir les services nécessaires (réseau, stockage, etc.) à ces conteneurs.
Sécurité renforcée : les pratiques de sécurité Kubernetes favorisent la protection efficace des systèmes informatiques. Les équipes d'administration peuvent appliquer des politiques de sécurité et de gouvernance, et les segmenter par pod ou groupe de pods. Les équipes de développement, quant à elle, peuvent identifier les problèmes de sécurité survenant lors de l'exécution des conteneurs et les résoudre à l'étape de création, au lieu de mettre à jour ou de corriger les systèmes en production. En outre, le contrôle d'accès basé sur les rôles permet d'attribuer des autorisations spécifiques aux utilisateurs et aux comptes de service. Les secrets Kubernetes protègent les données sensibles comme les clés de chiffrement.
Adoption du DevOps : l'infrastructure cohérente qu'offre Kubernetes pour les conteneurs permet d'adopter une approche DevOps qui invite les équipes de développement et d'exploitation à collaborer efficacement. Le modèle d'intégration et de distribution/déploiement continus (CI/CD) aide à rationaliser et accélérer le cycle de développement des logiciels. Et avec la forme évoluée du DevOps, le DevSecOps, les contrôles de sécurité et la gestion des vulnérabilités s'effectuent plus tôt dans ce cycle.
Clusters Kubernetes
Un déploiement Kubernetes actif est un cluster, c'est-à-dire un groupe d'hôtes qui exécutent des conteneurs.
Les équipes d'administration définissent l'état souhaité d'un cluster Kubernetes, qui détermine les applications ou autres charges de travail à exécuter, ainsi que les images à utiliser, les ressources qui leur sont allouées et d'autres informations de configuration.
Un cluster Kubernetes est constitué d'un plan de contrôle et d'un ensemble de nœuds de calcul (généralement des serveurs physiques ou virtuels).
Le plan de contrôle est responsable du maintien du cluster dans un état souhaité, c'est-à-dire qu'il vérifie, par exemple, les applications exécutées et les images de conteneurs utilisées.
Les nœuds suivent les instructions du plan de contrôle et exécutent les applications et charges de travail. Chaque nœud est son propre environnement Linux®. Il peut s'agir d'une machine virtuelle ou physique. Un cluster Kubernetes requiert au moins un nœud de calcul, mais en général il en contient un grand nombre.
Un nœud Kubernetes se compose de pods, chacun représentant une seule instance d'application. Un pod est constitué d'un conteneur ou d'un ensemble de conteneurs étroitement couplés, ainsi que des options qui permettent de contrôler l'exécution de ces conteneurs.
Divers services Kubernetes se concertent pour déterminer automatiquement le nœud adapté à une tâche, allouer des ressources et affecter des pods à ce nœud afin d'accomplir la tâche demandée. Kubernetes envoie automatiquement des demandes dans le bon pod, même si celui-ci a été déplacé dans le cluster ou s'il a été remplacé.
Tout est sous le contrôle de Kubernetes, qui fournit une interface de programmation d'application (API) unique pour gérer, créer et configurer le cluster.
Architecture
Voici comment fonctionne précisément un cluster Kubernetes.
Le plan de contrôle est le centre névralgique. Il contient les composants qui contrôlent le cluster, ainsi que des données sur l'état et la configuration du cluster. Ces principaux composants de Kubernetes s'assurent que suffisamment de conteneurs peuvent fonctionner avec les ressources nécessaires.
L'API de Kubernetes, kube-apiserver, est la partie frontale du plan de contrôle. Elle prend en charge les demandes internes et externes. Le serveur d'API détermine si une demande est valide ou non et la traite, le cas échéant. On peut accéder à l'API via des appels REST, à l'aide de l'interface en ligne de commande kubectl ou d'autres outils en ligne de commande tels que kubeadm.
En plus de l'intégrité du cluster, le planificateur Kubernetes, kube-scheduler, doit prendre en compte les besoins en ressources (par exemple, processeur ou mémoire) d'un pod. Il planifie ensuite l'attribution du pod au nœud de calcul adéquat.
Les contrôleurs, kube-controller-manager, assurent l'exécution du cluster, tandis que le gestionnaire de contrôleur Kubernetes, controller-manager, regroupe plusieurs fonctions de contrôleur. Un contrôleur se réfère au planificateur pour s'assurer qu'un nombre suffisant de pods est exécuté. Si un pod est défaillant, un autre contrôleur le remarque et réagit.
« etcd » est une base de données clé-valeur qui comprend les données de configuration et les informations sur l'état du cluster. Distribuée et tolérante aux pannes, la base de données etcd constitue la référence unique concernant un cluster.
Chaque nœud dispose d'un moteur qui permet d'exécuter les conteneurs.Docker en est un exemple, mais Kubernetes prend en charge d'autres environnements conformes à l'OCI (Open Container Initiative), tels que rkt et CRI-O.
Chaque nœud contient un kubelet, une petite application qui communique avec le plan de contrôle. Le kubelet s'assure que les conteneurs sont exécutés dans un pod. Lorsque le plan de contrôle envoie une requête vers un nœud, le kubelet exécute l'action.
Chaque nœud contient également un proxy réseau, kube-proxy, qui facilite la mise en œuvre des services de mise en réseau de Kubernetes. Le composant kube-proxy gère les communications réseau dans et en dehors du cluster. Il utilise la couche de filtrage de paquets du système d'exploitation si elle est disponible, sinon il transmet le trafic lui-même.
En plus des conteneurs qui exécutent une application, Kubernetes peut gérer les données d'application liées à un cluster. Un utilisateur peut demander des ressources de stockage, sans nécessairement connaître les détails de l'infrastructure de stockage sous-jacente. Les volumes persistants sont spécifiques d'un cluster et non d'un pod. Ils peuvent donc avoir une durée de vie supérieure à celle d'un pod.
Le registre de conteneurs stocke les images de conteneurs sur lesquelles repose Kubernetes. Il peut s'agir d'un registre tiers ou d'un registre que l'on a configuré soi-même.
Knative et Kubernetes serverless
Le serverless est un modèle de développement cloud-native qui permet aux équipes de développement de créer et d'exécuter des applications sans avoir à gérer des serveurs. Ce modèle nécessite quand même des serveurs, mais leur gestion est dissociée du développement des applications. Les équipes n'ont alors plus qu'à mettre en paquet leur code dans des conteneurs pour déployer les applications.
Une fois que les applications serverless sont déployées, elles répondent à la demande et s'adaptent automatiquement en cas de besoin. En général, les offres serverless des fournisseurs de cloud public sont facturées à la demande, sur la base d'un modèle d'exécution orienté événements. Par conséquent, lorsqu'une fonction serverless est inactive, elle ne coûte rien.
La plateforme Kubernetes est souvent choisie pour exécuter des environnements serverless. Toutefois, utilisée seule, elle n'est pas capable d'exécuter nativement des applications serverless. Knative est un projet communautaire Open Source qui ajoute des composants pour le déploiement, l'exécution et la gestion des applications serverless sur Kubernetes.
Avec Knative, un service est créé en mettant le code en paquet en tant qu'image de conteneur et en le remettant au système. Le code ne s'exécute que lorsque c'est nécessaire et Knative démarre et arrête les instances automatiquement.
Opérateurs Kubernetes
Un opérateur Kubernetes est un contrôleur propre à une application qui permet d'enrichir les fonctionnalités de l'API Kubernetes afin de créer, configurer et gérer des instances d'applications complexes au nom d'un utilisateur Kubernetes, mais aussi d'ajouter des fonctions à ces dernières. Il s'appuie sur les concepts de base de ressource et contrôleur Kubernetes, et inclut des connaissances spécifiques d'une application ou d'un domaine pour automatiser le cycle de vie complet du logiciel dont il assure la gestion.
Mise à l'échelle d'une application complexe, mise à niveau des versions d'applications, gestion des modules de noyau pour des nœuds dans un cluster de calcul avec du matériel spécialisé… Un opérateur Kubernetes peut effectuer presque tout type d'action. Plusieurs logiciels et outils sont déployés en tant qu'opérateurs Kubernetes, notamment Prometheus pour la surveillance et Elastic Kubernetes pour l'automatisation de la recherche.
Différence entre Kubernetes et Red Hat OpenShift
Kubernetes est un logiciel Open Source pour le déploiement, la gestion et la mise à l'échelle des conteneurs. Son utilisation pratique n'est pas sans difficulté. La plupart des entreprises souhaiteront également y intégrer d'autres capacités, comme l'automatisation, la surveillance, l'analyse des journaux, un Service Mesh, une infrastructure serverless et des outils de productivité pour le développement. Des outils supplémentaires peuvent s'avérer intéressants pour la mise en réseau, les entrées, l'équilibrage de charge, le stockage, la surveillance, la journalisation, la gestion de clusters multiples et le CI/CD. En somme, Kubernetes est une plateforme que l'on n'utilise pas seule.
De nombreux éditeurs de logiciels proposent leur propre version de Kubernetes sous forme de distribution autogérée, de service hébergé, de programme d'installation ou de solution PaaS (Platform-as-a-Service). Il existe aussi plusieurs dizaines de plateformes Kubernetes certifiées par la CNCF.
Red Hat® OpenShift® est l'une de ces solutions certifiées et possède de nombreux autres atouts. Elle utilise Kubernetes comme base d'une plateforme complète pour la distribution cohérente des applications cloud-native dans les environnements de cloud hybride.
Kubernetes est le moteur d'orchestration des conteneurs de Red Hat OpenShift, qui comprend de nombreuses autres fonctions issues de l'écosystème Open Source de la CNCF, toutes testées, mises en paquets et prises en charge par Red Hat. Red Hat OpenShift est disponible en tant que service de cloud public fourni par les leaders du cloud, comme Amazon Web Services (AWS), Microsoft Azure, Google et IBM, ou en tant que logiciel autogéré sur de nombreuses infrastructures bare metal et virtuelles, dans des datacenters, clouds publics et sites d'edge computing.
OKD
OKD est un projet communautaire qui comprend les composants logiciels en paquets requis pour utiliser Kubernetes. En plus de Kubernetes, OKD propose des outils de développement et d'exploitation afin d'aider à accélérer le développement des applications, à réaliser des déploiements et des mises à l'échelle efficaces, ainsi qu'à assurer la maintenance des applications à long terme. Avec OKD, les équipes de développement peuvent créer, tester et déployer des applications dans le cloud en utilisant différents langages de programmation, parmi lesquels Go, Node.js, Ruby, Python, PHP, Perl et Java.
OKD est le projet en amont de Red Hat OpenShift, optimisé pour le développement et le déploiement continus d'applications. En général, OKD bénéficie de nouvelles fonctions avant OpenShift, car les mises à jour communautaires y sont déployées en premier et y sont testées pour une utilisation en entreprise.
Contrairement à OKD, OpenShift est une solution validée et testée par Red Hat qui, grâce au modèle de souscription, répond aux besoins opérationnels de chaque entreprise. En plus de l'assistance technique, la souscription Red Hat OpenShift inclut l'accès à des équipes d'intervention, des options d'assistance à long terme, des opérateurs tiers validés, ainsi que des bases de données et des solutions de middleware certifiées.
Nos solutions pour les plateformes d'applications
Nous sommes l'un des leaders du secteur et l'un des principaux contributeurs des technologies Open Source de conteneurisation, notamment Kubernetes. Nous créons les outils essentiels pour sécuriser, simplifier et mettre à jour automatiquement l'infrastructure de conteneurs.
Avec Red Hat OpenShift, les équipes de développement peuvent créer des applications conteneurisées, les héberger et les déployer dans le cloud tout en bénéficiant du niveau d'évolutivité, de contrôle et d'orchestration nécessaire pour concrétiser rapidement toutes les idées. En ce qui concerne le déploiement et la migration des charges de travail Kubernetes vers un service cloud géré, OpenShift est également disponible sous forme de service cloud-native sur AWS, Microsoft Azure, Google Cloud, IBM Cloud et auprès d'autres fournisseurs.
En s'appuyant sur OpenShift, il est possible d'utiliser Red Hat Advanced Cluster Management et Red Hat Ansible® Automation Platform ensemble pour déployer et gérer efficacement plusieurs clusters Kubernetes dans tous les environnements, notamment ceux de cloud public, sur site et en périphérie du réseau.
Le blog officiel de Red Hat
Découvrez les dernières informations concernant notre écosystème de clients, partenaires et communautés.