Qu'est-ce que Kubernetes? Votre prochaine plateforme d'application

Kubernetes est une plate-forme open source populaire pour l' orchestration de conteneurs , c'est-à-dire pour la gestion d'applications construites à partir de plusieurs environnements d'exécution largement autonomes appelés conteneurs. Les conteneurs sont devenus de plus en plus populaires depuis le lancement du projet de conteneurisation Docker en 2013, mais les grandes applications conteneurisées distribuées peuvent devenir de plus en plus difficiles à coordonner. En facilitant considérablement la gestion des applications conteneurisées à grande échelle, Kubernetes est devenu un élément clé de la révolution des conteneurs.

Qu'est-ce que l'orchestration de conteneurs?

Les conteneurs prennent en charge la séparation des problèmes de type VM, mais avec beaucoup moins de frais généraux et une flexibilité beaucoup plus grande. En conséquence, les conteneurs ont remodelé la façon dont les gens envisagent le développement, le déploiement et la maintenance des logiciels. Dans une architecture conteneurisée, les différents services qui constituent une application sont regroupés dans des conteneurs séparés et déployés sur un cluster de machines physiques ou virtuelles. Mais cela entraîne le besoin d' orchestration de conteneurs, un outil qui automatise le déploiement, la gestion, la mise à l'échelle, la mise en réseau et la disponibilité des applications basées sur des conteneurs.

Qu'est-ce que Kubernetes?

Kubernetes est un projet open source qui est devenu l'un des outils d'orchestration de conteneurs les plus populaires; il vous permet de déployer et de gérer des applications multi-conteneurs à grande échelle. Alors qu'en pratique, Kubernetes est le plus souvent utilisé avec Docker, la plate-forme de conteneurisation la plus populaire, il peut également fonctionner avec tout système de conteneur conforme aux normes Open Container Initiative (OCI) pour les formats d'image de conteneur et les environnements d'exécution. Et comme Kubernetes est open source, avec relativement peu de restrictions sur la façon dont il peut être utilisé, il peut être utilisé librement par tous ceux qui souhaitent exécuter des conteneurs, presque partout où ils veulent les exécuter - sur site, dans le cloud public, ou les deux .

Google et Kubernetes

Kubernetes a commencé sa vie en tant que projet au sein de Google. C'est un successeur - mais pas un descendant direct de - Google Borg, un ancien outil de gestion de conteneurs que Google utilisait en interne. Google a ouvert Kubernetes en 2014, en partie parce que les architectures de microservices distribués facilitées par Kubernetes facilitent l'exécution d'applications dans le cloud. Google considère que l'adoption de conteneurs, de microservices et de Kubernetes peut conduire les clients vers ses services cloud (bien que Kubernetes fonctionne également avec Azure et AWS). Kubernetes est actuellement géré par la Cloud Native Computing Foundation, qui est elle-même sous l'égide de la Linux Foundation.

Kubernetes contre Docker et Kubernetes contre Docker Swarm

Kubernetes ne remplace pas Docker, mais l'augmente. Cependant, Kubernetes ne remplace certaines des technologies de plus haut niveau qui ont émergé autour Docker.

L'une de ces technologies est Docker Swarm, un orchestrateur fourni avec Docker. Il est toujours possible d'utiliser Docker Swarm au lieu de Kubernetes, mais Docker Inc. a choisi d'intégrer Kubernetes dans les éditions Docker Community et Docker Enterprise à l'avenir.

Non pas que Kubernetes soit un remplacement de Docker Swarm. Kubernetes est nettement plus complexe que Swarm et nécessite plus de travail pour être déployé. Mais encore une fois, le travail est destiné à fournir un gros gain à long terme - une infrastructure d'application plus gérable et résiliente. Pour les travaux de développement et les clusters de conteneurs plus petits, Docker Swarm présente un choix plus simple. 

Kubernetes contre Mesos

Un autre projet dont vous avez peut-être entendu parler en tant que concurrent de Kubernetes est Mesos. Mesos est un projet Apache qui a émergé à l'origine des développeurs de Twitter; il était en fait considéré comme une réponse au projet Google Borg.

Mesos propose en effet des services d'orchestration de conteneurs, mais ses ambitions vont bien au-delà: il se veut une sorte de système d'exploitation cloud capable de coordonner à la fois les composants conteneurisés et non conteneurisés. À cette fin, de nombreuses plates-formes différentes peuvent fonctionner dans Mesos, y compris Kubernetes lui-même.

Architecture Kubernetes: comment fonctionne Kubernetes

L'architecture de Kubernetes utilise divers concepts et abstractions. Certaines d'entre elles sont des variations de notions existantes et familières, mais d'autres sont spécifiques à Kubernetes.

Clusters Kubernetes

L'abstraction Kubernetes de plus haut niveau, le cluster , fait référence au groupe de machines exécutant Kubernetes (elle-même une application en cluster) et aux conteneurs gérés par celui-ci. Un cluster Kubernetes doit avoir un maître , le système qui commande et contrôle toutes les autres machines Kubernetes du cluster. Un cluster Kubernetes hautement disponible réplique les installations du maître sur plusieurs machines. Mais un seul maître à la fois exécute le planificateur de travaux et le contrôleur-gestionnaire.

Nœuds et pods Kubernetes

Chaque cluster contient des nœuds Kubernetes . Les nœuds peuvent être des machines physiques ou des machines virtuelles. Encore une fois, l'idée est l'abstraction: quelle que soit l'application en cours d'exécution, Kubernetes gère le déploiement sur ce substrat. Kubernetes permet même de s'assurer que certains conteneurs ne fonctionnent que sur des VM ou uniquement sur du bare metal.

Les nœuds exécutent des pods , les objets Kubernetes les plus basiques qui peuvent être créés ou gérés. Chaque pod représente une instance unique d'une application ou d'un processus en cours d'exécution dans Kubernetes et se compose d'un ou de plusieurs conteneurs. Kubernetes démarre, arrête et réplique tous les conteneurs d'un pod en tant que groupe. Les pods attirent l'attention de l'utilisateur sur l'application, plutôt que sur les conteneurs eux-mêmes. Les détails sur la façon dont Kubernetes doit être configuré, à partir de l'état des pods, sont conservés dans Etcd , un magasin de clés-valeurs distribué.

Les pods sont créés et détruits sur les nœuds selon les besoins pour se conformer à l'état souhaité spécifié par l'utilisateur dans la définition de pod. Kubernetes fournit une abstraction appelée contrôleur pour gérer la logistique de la rotation, du déploiement et de la rotation des pods. Les contrôleurs sont disponibles dans plusieurs saveurs différentes selon le type d'application gérée. Par exemple, le contrôleur «StatefulSet» récemment introduit est utilisé pour traiter les applications qui ont besoin d'un état persistant. Un autre type de contrôleur, le déploiement , est utilisé pour augmenter ou réduire une application, mettre à jour une application vers une nouvelle version ou restaurer une application vers une version connue en bon état en cas de problème.

Services Kubernetes

Étant donné que les pods vivent et meurent selon les besoins, nous avons besoin d'une abstraction différente pour gérer le cycle de vie des applications. Une application est censée être une entité persistante, même lorsque les pods exécutant les conteneurs qui composent l'application ne sont pas eux-mêmes persistants. À cette fin, Kubernetes fournit une abstraction appelée service.

Un service dans Kubernetes décrit comment un groupe donné de pods (ou d'autres objets Kubernetes) est accessible via le réseau. Comme le dit la documentation Kubernetes, les pods qui constituent le back-end d'une application peuvent changer, mais le front-end ne devrait pas avoir à le savoir ou à le suivre. Les services rendent cela possible.

Quelques autres éléments internes à Kubernetes complètent le tableau. Le planificateur répartit les charges de travail entre les nœuds afin qu'elles soient équilibrées entre les ressources et que les déploiements répondent aux exigences des définitions d'application. Le gestionnaire de contrôleur s'assure que l'état du système (applications, charges de travail, etc.) correspond à l'état souhaité défini dans les paramètres de configuration d'Etcd.

Il est important de garder à l'esprit qu'aucun des mécanismes de bas niveau utilisés par les conteneurs, tels que Docker lui-même, n'est remplacé par Kubernetes. Au contraire, Kubernetes fournit un plus grand ensemble d'abstractions pour utiliser ces mécanismes dans le but de maintenir les applications à grande échelle.

Entrée Kubernetes

Les services Kubernetes sont considérés comme s'exécutant au sein d' un cluster. Mais vous voudrez pouvoir accéder à ces services depuis le monde extérieur. Kubernetes a plusieurs composants qui facilitent cela avec différents degrés de simplicité et de robustesse, y compris NodePort et LoadBalancer, mais le composant le plus flexible est Ingress. Ingress est une API qui gère l'accès externe aux services d'un cluster, généralement via HTTP.

Ingress nécessite un peu de configuration pour être correctement configuré - Matthew Palmer, qui a écrit un livre sur le développement de Kubernetes, vous guide tout au long du processus sur son site Web.

Tableau de bord Kubernetes

Un composant Kubernetes qui vous aide à rester au courant de tous ces autres composants est Dashboard, une interface utilisateur Web avec laquelle vous pouvez déployer et dépanner des applications et gérer les ressources du cluster. Le tableau de bord n'est pas installé par défaut, mais l'ajouter n'est pas trop compliqué.

Vidéo connexe: Qu'est-ce que Kubernetes?

Dans cette vidéo de 90 secondes, découvrez Kubernetes, le système open source d'automatisation des applications conteneurisées, par l'un des inventeurs de la technologie, Joe Beda, fondateur et CTO chez Heptio.

Avantages Kubernetes

Étant donné que Kubernetes introduit de nouvelles abstractions et concepts et que la courbe d'apprentissage de Kubernetes est élevée, il est normal de se demander quels sont les bénéfices à long terme de l'utilisation de Kubernetes. Voici un aperçu de certaines des manières spécifiques dont l'exécution d'applications dans Kubernetes devient plus facile.

Kubernetes gère pour vous la santé des applications, la réplication, l'équilibrage de charge et l'allocation des ressources matérielles

L'une des tâches les plus élémentaires de Kubernetes est le travail acharné consistant à maintenir une application opérationnelle, en cours d'exécution et adaptée aux demandes des utilisateurs. Les applications qui deviennent «malsaines» ou qui ne sont pas conformes à la définition de la santé que vous leur décrivez peuvent être automatiquement réparées.

Un autre avantage de Kubernetes est de maximiser l'utilisation des ressources matérielles, notamment la mémoire, les E / S de stockage et la bande passante du réseau. Les applications peuvent avoir des limites souples et strictes sur leur utilisation des ressources. De nombreuses applications qui utilisent des ressources minimales peuvent être regroupées sur le même matériel; les applications qui doivent s'étendre peuvent être placées sur des systèmes où elles ont de la place pour se développer. Et encore une fois, le déploiement des mises à jour sur un cluster ou la restauration en cas d'interruption des mises à jour peut être automatisé.

Kubernetes facilite le déploiement d'applications préconfigurées avec des graphiques Helm

Les gestionnaires de paquets tels que APT de Debian Linux et Pip de Python évitent aux utilisateurs d'installer et de configurer manuellement une application. Ceci est particulièrement pratique lorsqu'une application a plusieurs dépendances externes.

Helm est essentiellement un gestionnaire de packages pour Kubernetes. De nombreuses applications logicielles courantes doivent s'exécuter dans Kubernetes en tant que groupe de conteneurs interdépendants. Helm fournit un mécanisme de définition, un «graphique», qui décrit comment une application ou un service peut être exécuté en tant que groupe de conteneurs dans Kubernetes.

Vous pouvez créer vos propres graphiques Helm à partir de zéro, et vous devrez peut-être le faire si vous créez une application personnalisée à déployer en interne. Mais si vous utilisez une application populaire qui a un modèle de déploiement commun, il y a de fortes chances que quelqu'un ait déjà composé un graphique Helm et l'a publié dans le référentiel officiel de graphiques Helm. Le répertoire Kubeapps.com est un autre endroit pour rechercher les graphiques officiels de Helm.

Kubernetes simplifie la gestion du stockage, des secrets et d'autres ressources liées aux applications

Les conteneurs sont censés être immuables; tout ce que vous y mettez n'est pas censé changer. Mais les applications ont besoin d'un état, ce qui signifie qu'elles ont besoin d'un moyen fiable de gérer les volumes de stockage externes. Cela est d'autant plus compliqué par la façon dont les conteneurs vivent, meurent et renaissent tout au long de la vie d'une application.

Kubernetes fournit des abstractions pour permettre aux conteneurs et aux applications de gérer le stockage de la même manière découplée que les autres ressources. De nombreux types de stockage courants, des volumes Amazon EBS aux anciens partages NFS, sont accessibles via des pilotes de stockage Kubernetes, appelés volumes. Normalement, les volumes sont liés à un pod spécifique, mais un sous-type de volume appelé «volume persistant» peut être utilisé pour les données qui doivent vivre indépendamment de tout pod.

Les conteneurs ont souvent besoin de travailler avec des «secrets» - des informations d'identification telles que des clés d'API ou des mots de passe de service que vous ne voulez pas coder en dur dans un conteneur ou cachées ouvertement sur un volume de disque. Bien que des solutions tierces soient disponibles pour cela, comme les secrets Docker et HashiCorp Vault, Kubernetes dispose de son propre mécanisme pour gérer nativement les secrets, bien qu'il doive être configuré avec soin. Par exemple, Etcd doit être configuré pour utiliser SSL / TLS lors de l'envoi de secrets entre les nœuds, plutôt qu'en texte brut. 

Les applications Kubernetes peuvent s'exécuter dans des environnements hybrides et multicloud

L'un des rêves de longue date du cloud computing est de pouvoir exécuter n'importe quelle application dans n'importe quel cloud, ou dans n'importe quel mélange de clouds publics ou privés. Ce n'est pas seulement pour éviter le blocage des fournisseurs, mais aussi pour tirer parti des fonctionnalités spécifiques aux clouds individuels.

Kubernetes fournit un ensemble de primitives, collectivement appelées fédération, pour maintenir plusieurs clusters synchronisés les uns avec les autres dans plusieurs régions et clouds. Par exemple, un déploiement d'application donné peut être maintenu cohérent entre plusieurs clusters, et différents clusters peuvent partager la découverte de services afin qu'une ressource back-end soit accessible à partir de n'importe quel cluster. La fédération peut également être utilisée pour créer des déploiements Kubernetes hautement disponibles ou tolérants aux pannes, que vous couvriez ou non plusieurs environnements cloud.

La fédération est encore relativement nouvelle pour Kubernetes. Toutes les ressources d'API ne sont pas encore prises en charge dans les instances fédérées, et les mises à niveau ne disposent pas encore d'une infrastructure de test automatique. Mais ces lacunes devraient être corrigées dans les futures versions de Kubernetes.

Où trouver Kubernetes