Kubernetes vs Docker: comprendre les conteneurs et l'orchestration

Si vous avez suivi les dernières tendances en matière de développement logiciel, vous avez sans aucun doute rencontré deux termes: Docker et Kubernetes, qui sont essentiellement des abréviations pour  conteneurs  et  orchestration .

Les conteneurs Docker ont contribué à rationaliser le processus de déplacement des applications à travers le développement et les tests et vers la production, tandis que Docker et Kubernetes ont contribué à réinventer la façon dont les applications sont construites et déployées, sous forme de collections de microservices au lieu de piles monolithiques.

Pourquoi Docker et Kubernetes sont-ils importants, comment changent-ils le développement logiciel et quel rôle chacun joue-t-il dans le processus? Je vais essayer de répondre à ces questions ci-dessous.

Docker et conteneurs

Les conteneurs, pris en charge sous Linux, Windows et d'autres systèmes d'exploitation modernes, permettent aux logiciels de s'exécuter dans des mini-environnements autonomes isolés du reste du système. Les conteneurs ont été assimilés à des VM, mais ce ne sont pas des VM: ils sont beaucoup plus simples, plus rapides à démarrer et à arrêter, et beaucoup plus flexibles et portables. Étant donné que les conteneurs peuvent être augmentés ou réduits ou mis à l'échelle en quelques secondes, ils facilitent l'exécution d'applications dans des environnements élastiques comme le cloud. 

Linux et d'autres systèmes d'exploitation prennent en charge les applications conteneurisées depuis de nombreuses années, mais travailler avec des conteneurs n'était pas vraiment convivial. Docker, à la fois dans ses incarnations open source et commerciales, est un logiciel qui fait des conteneurs un produit convivial et convivial pour les développeurs. Docker fournit un ensemble commun d'outils et de métaphores pour les conteneurs afin que vous puissiez empaqueter des applications dans des images de conteneur qui peuvent être facilement déployées et réutilisées dans votre propre organisation ou ailleurs.

En bref, Docker facilite la création d'images de conteneurs, les versions, les partage, les déplace et les déploie sur des hôtes compatibles Docker en tant que conteneurs en cours d'exécution.

Quand utiliser Docker et des conteneurs?

Docker et les conteneurs sont les mieux adaptés lorsque vous traitez des charges de travail qui doivent avoir une ou plusieurs des qualités suivantes:

  • Évolutivité élastique.  Vous ne savez pas combien d'instances d'une application vous devrez exécuter pour répondre à la demande. Une application ou un service conteneurisé peut être mis à l'échelle pour répondre à la demande en déployant moins ou plus d'instances de ses conteneurs.
  • Isolement.  Vous ne voulez pas que l'application interfère avec d'autres applications. Peut-être que vous exécuterez plusieurs versions de l'application côte à côte pour satisfaire différentes révisions d'une API. Ou peut-être voulez-vous garder le système sous-jacent propre (toujours une bonne idée).
  • Portabilité.  Vous devez exécuter cette application dans une variété d'environnements et vous avez besoin que chaque configuration soit reproductible. Les conteneurs vous permettent de regrouper l'ensemble de l'environnement d'exécution de votre application, ce qui facilite le déploiement de l'application partout où vous trouvez un hôte compatible Docker: un bureau de développeur, une machine de test QA, un fer local ou un cloud distant.

En savoir plus sur Docker et les conteneurs

  • Qu'est-ce que Docker? L'étincelle de la révolution des conteneurs
  • Pourquoi utiliser Docker et les conteneurs
  • Démarrez avec Docker
  • Les avantages cachés de Docker pour l'assurance qualité
  • 12 outils open source qui améliorent Docker
  • Plus d'informations, d'analyses, de procédures, de critiques et de conseils Docker

Kubernetes et l'orchestration de conteneurs

Les conteneurs sont principalement conçus pour isoler les processus ou les applications les uns des autres et du système sous-jacent. La création et le déploiement de conteneurs individuels sont faciles. Mais que se passe-t-il si vous souhaitez assembler plusieurs conteneurs - par exemple, une base de données, un front-end Web, un back-end de calcul - dans une grande application qui peut être gérée comme une unité, sans avoir à vous soucier du déploiement, de la connexion, de la gestion, et mettre à l'échelle chacun de ces conteneurs séparément? Vous avez besoin d'un moyen d'  orchestrer  toutes les parties en un tout fonctionnel.

C'est le travail de Kubernetes. Si les conteneurs sont des passagers d'une croisière, Kubernetes est le directeur de la croisière.

Kubernetes, basé sur des projets créés chez Google, offre un moyen d'automatiser le déploiement et la gestion d'applications multi-conteneurs sur plusieurs hôtes, sans avoir à gérer chaque conteneur directement. Le développeur décrit la disposition de l'application sur plusieurs conteneurs, y compris des détails tels que la façon dont chaque conteneur utilise la mise en réseau et le stockage. Kubernetes gère le reste au moment de l'exécution. Il gère également la gestion des détails fastidieux tels que les secrets et les configurations d'applications.

Kubernetes nécessite une certaine expertise pour bien être utilisé, bien qu'il s'agisse bien plus d'une solution clé en main qu'auparavant. Une partie des progrès dans la facilité d'utilisation est due à des recettes facilement disponibles pour les applications courantes (graphiques Helm); certains sont dus à une multitude de distributions Kubernetes produites par des entreprises de marque (Red Hat, Canonical, Docker) qui fonctionnent main dans la main avec des piles d'applications et des cadres de développement populaires.

Quand utiliser Kubernetes et l'orchestration de conteneurs?

Les applications conteneurisées simples qui desservent un petit nombre d'utilisateurs ne nécessitent généralement pas d'orchestration, sans parler de Kubernetes. Mais si une application a plus qu'un niveau de fonctionnalité trivial ou un nombre insignifiant d'utilisateurs, il devient difficile de ne pas réinventer la roue fournie par les systèmes d'orchestration. Voici quelques règles de base pour déterminer quand l'orchestration doit entrer en scène.

  • Vos applications sont complexes.  Toute application qui implique plus de deux conteneurs convient probablement. Cela dit, des applications modestes qui ne desservent qu'un petit nombre d'utilisateurs pourraient être orchestrées via une solution plus minimale comme le mode Swarm Docker plutôt que Kubernetes.
  • Vos applications ont des exigences élevées en matière d'évolutivité et de résilience.  Kubernetes et d'autres orchestrateurs vous permettent d'équilibrer les charges et de faire tourner les conteneurs pour répondre à la demande de manière déclarative, en décrivant l'état souhaité du système au lieu de coder manuellement les réactions aux conditions changeantes.
  • Vous voulez tirer le meilleur parti des techniques CI / CD modernes.  Les systèmes d'orchestration prennent en charge les modèles de déploiement pour les applications utilisant un déploiement bleu / vert ou des mises à niveau progressives.

Il peut arriver un jour où Docker et Kubernetes seront éclipsés par des abstractions encore plus conviviales et céderont la place à des moyens plus élégants de créer et de gérer des conteneurs. Pour l'instant, cependant, Docker et Kubernetes sont essentiels à connaître et à comprendre.

En savoir plus sur Kubernetes et l'orchestration

  • Qu'est-ce que Kubernetes? Votre prochaine plateforme d'application
  • 4 raisons pour lesquelles vous devriez utiliser Kubernetes
  • 10 distributions Kubernetes menant la révolution des conteneurs
  • Managed Kubernetes: AWS contre Azure contre Google Cloud
  • Hello MicroK8s: un Kubernetes plus simple
  • Quoi de neuf dans Kubernetes
  • Plus d'actualités, de procédures, de critiques, de conseils et d'analyses Kubernetes