Les moteurs d'orchestration des conteneurs (COE) simplifient la gestion des workloads conteneurisés en automatisant les tâches opérationnelles telles que la planification, l'équilibrage des charges, l'évolutivité, la mise en réseau, la garantie de disponibilité élevée (HA) et la gestion des logs. Kubernetes et Apache Mesos sont deux des COE les plus populaires.
Ces deux technologies ont une approche différente de la gestion des conteneurs. Kubernetes fonctionne entièrement comme un orchestrateur de conteneurs. Mesos ressemble davantage à un « système d'exploitation pour votre datacenter ».
Dans cet article, nous allons parler de Kubernetes et de Mesos avant de comparer leurs principales caractéristiques. Avant toute chose, nous commencerons par présenter les COE et leur rôle essentiel dans la gestion des conteneurs.
Pourquoi avez-vous besoin de moteurs d'orchestration de conteneurs ?
La plupart des applications distribuées actuelles sont bâties sur des conteneurs. Les conteneurs ont besoin de moins de ressources et contribuent à rendre le développement d'application plus rapide et plus sécurisé.
Il est plutôt simple de gérer une dizaine ou une vingtaine de conteneurs, mais une équipe peut se sentir rapidement débordée lorsque ce nombre passe à plusieurs centaines voire milliers sur un réseau distribué. Bien que les conteneurs soient légers et éphémères, leur utilisation au sein de vastes clusters entraîne de nombreux éléments mobiles qui nécessitent une certaine synchronisation.
De plus, la plupart des environnements de conteneurs de production peuvent s'avérer complexes. Ils peuvent exécuter plusieurs systèmes d'exploitation (ou le même OS avec différentes versions de noyau) et proposent des configurations complexes en matière de réseau et de sécurité. Les environnements multicloud ou hybrides ajoutent encore davantage de complexité à cette situation.
C'est là qu'interviennent les COE.
Les COE simplifient et automatisent les tâches liées à la gestion des conteneurs. Ces tâches comprennent notamment :
- DÉPLOIEMENT
- Répartition de la charge
- Planification des conteneurs
- Allocation des ressources
- Surveillance des performances
- Configuration des réseaux
L'automatisation facilite grandement l'exécution d'environnements conteneurisés à grande échelle, ce qui libère l'équipe DevOps pour qu'elle se consacre à des tâches à plus forte valeur ajoutée.
Les COE assurent également la disponibilité des applications en automatisant les contrôles d'intégrité. La répartition de la charge garantit l'acheminement automatique des requêtes vers des instances de conteneur saines. Quant à l'autoscaling, elle veille à la disponibilité d'un nombre suffisant de conteneurs pour traiter la charge actuelle.
Brève introduction à Kubernetes et Mesos
Kubernetes est le système de gestion et d'orchestration de conteneurs publié par Google en 2014. Compte tenu de leur dépendance à Docker, Google a développé Kubernetes pour déployer et planifier les conteneurs à l'échelle, gérer les ressources des clusters, mettre en œuvre la disponibilité élevée et acheminer le trafic des applications.
De nos jours, la plupart des fournisseurs de services cloud (y compris les plus importants) prennent en charge Kubernetes. À cette fin, ils fournissent l'infrastructure et les intégrations pour exécuter des workloads hébergés sur Kubernetes.
Les principales caractéristiques de Kubernetes sont les suivantes :
- Autoscaling
- Orchestration du stockage
- Gestion du volume
- Gestion du secret et des configurations
- Restauration automatique
- Exécution par lots
- Détection des services
- Assemblage automatique des ressources
Kubernetes bénéficie également d'une assistance solide de la part de la communauté DevOps, et de nombreux fournisseurs proposent des applications gratuites ou payantes qui ajoutent des fonctionnalités en sus de Kubernetes.
Mesos est un noyau distribué créé en 2009 par des doctorants de l'UC Berkeley. Il sépare par abstraction les ressources de calcul comme le processeur, la mémoire et le stockage des machines (physiques comme virtuelles) en cours d'exécution sur site et dans le cloud. Le noyau Mesos s'exécute sur chaque machine des environnements distribués, et les charges de travail conteneurisées comme non conteneurisées peuvent utiliser l'API Mesos pour la gestion et la planification des ressources.
Dans cet article de comparaison entre Mesos et Kubernetes, nous évoquerons Mesos et Marathon. Marathon est un plugin pour le système d'exploitation de centre de données de Mesosphere (DC/OS) et Apache Mesos, qui permet aux utilisateurs une gestion simplifiée des conteneurs.
Les caractéristiques de la combinaison Mesos et Marathon sont les suivantes :
- API
- Évolutivité linéaire
- Isolation enfichable
- Prise en charge inter-plateforme
- Planification à deux niveaux
- Tolérance aux failles
- Instance maîtresse répliquée à l'aide de ZooKeeper
- Prise en charge multilingue
Les géants de la technologie tels que Twitter, Netflix et Airbnb plébiscitent Mesos.
Kubernetes et Mesos : comparaison des fonctionnalités
Lors de l'évaluation d'une plateforme COE, certains des facteurs les plus déterminants sont la haute disponibilité, la répartition de la charge, l'autoscaling, le stockage et la mise en réseau.
Haute disponibilité
Les pods Kubernetes peuvent se répliquer sur plusieurs nœuds (VM et serveurs physiques) pour garantir le maintien en ligne de l'application même si l'un des nœuds du cluster tombe en panne.
Le plan de contrôle Kubernetes gère les pods et les nœuds de travail sur l'ensemble du cluster en fonction de l'intégrité des nœuds. Kubernetes s'occupe de la planification ainsi que de la détection et de la réponse aux défaillances. Vous pouvez rendre Kubernetes hautement disponible en implémentant une topologie etcd empilée ou externe avec plusieurs composants d'architecture essentiels (par exemple, plusieurs instances maîtresses ou répliques etcd).
Dans le cas de Mesos, les applications s'exécutent sur des clusters dotés de plusieurs agents Mesos pour augmenter la disponibilité. Vous pouvez rendre Mesos hautement disponible en implémentant trois à cinq maîtres, un chef et le reste des nœuds comme sauvegardes. Apache ZooKeeper désigne le chef et détecte automatiquement les maîtres, les esclaves et les pilotes de planificateur.
Répartition de la charge
Kubernetes expose les pods en externe via des « services » (un groupe de pods sous un nom commun). Ceci permet aux services de se détecter les uns les autres de façon dynamique sans recourir à des adresses IP codées en dur. Les services coordonnent les connexions aux pods pour fournir des fonctionnalités de répartition de la charge.
Vous pouvez implémenter différentes stratégies de répartition de la charge avec Kubernetes, notamment les suivantes :
- À la ronde
- Répartition de la charge à la ronde L4 du Kube-proxy
- Répartition de la charge à la ronde L7
- Hachage cohérent/hash en anneau
Le DNS Mesos fournit des services de base de répartition de la charge pour votre application. Il génère des enregistrements SRV pour chaque tâche Mesos et les transfère à l'adresse IP et au port désignés sur la machine de l'application. Vous pouvez également utiliser Marathon-lb pour faciliter la répartition de la charge.
Mesos prend notamment en charge les fonctionnalités avancées suivantes :
- Connexions rémanentes
- Déchargement SSL
- Répartition de la charge basée sur VHost pour vous permettre de spécifier des VM individuelles pour votre application
Autoscaling
Kubernetes vous permet de définir un nombre cible de pods par le biais de déploiements. Pour déclencher l'autoscaling, vous pouvez également définir des seuils d'indicateurs de ressource, tels que l'utilisation du processeur ou de la mémoire.
Mesos surveille en permanence le nombre de conteneurs et planifie un conteneur sur un autre nœud esclave en cas de défaillance. Il ne prend pas nativement en charge l'autoscaling selon les indicateurs de ressources, mais il existe des composants gérés par la communauté.
Stockage
Kubernetes prend en charge les volumes non persistants et éphémères comme emptyDir, configMap, downwardAPI et CSI ephemeral pour le stockage à court terme.
Il prend également en charge le stockage persistant (fichier ou bloc), notamment iSCSI, NFS, FC, ainsi que le stockage dans le cloud tel que disponible dans AWS ou Azure. Les applications exécutées sur des conteneurs hébergés par Kubernetes ne communiquent pas directement avec le stockage, car Kubernetes sépare la couche par abstraction.
Mesos prend en charge le stockage local persistant sur les ressources réservées pour les applications avec état. Les conteneurs doivent s'exécuter sur le même nœud car les volumes sont créés localement sur ce nœud.
Mesos prend en charge le stockage externe persistant, mais le contournement de la gestion des ressources rend le contrôle des quotas, la réservation et le partage équitable difficiles à appliquer.
Mise en réseau
Kubernetes attribue des IP uniques aux pods et supprime ainsi le besoin de mapper les ports des conteneurs au port de l'hôte. Il exploite un réseau à plat, avec un réseau pour les pods et un autre pour les services. Les pods peuvent communiquer librement avec les autres pods et services. Des tables IP contrôlent la connectivité entre les pods et traitent la plupart des règles de mise en réseau et de transfert de port.
Mesos prend en charge deux types de mise en réseau : IP par conteneur et correspondance réseau-port. Les conteneurs n'obtiennent pas leur IP par défaut, mais l'utilisation de l'intégration Calico donne à chaque conteneur Mesos sa propre adresse IP. Cela empêche les conflits de ports, rend caduque l'allocation dynamique des ports et permet la détection de services basée sur l'enregistrement A du DNS. Les conteneurs ne peuvent communiquer entre eux sur un hôte local.
Journalisez toutes vos données et répondez à toutes les questions – gratuitement
Falcon LogScale Community Edition (anciennement Humio) offre une plateforme moderne et gratuite de gestion des logs pour le cloud. Exploitez l'ingestion des données de streaming pour bénéficier d'une visibilité instantanée sur les systèmes distribués, de même que détecter et résoudre les incidents.
Falcon LogScale Community Edition, disponible instantanément et gratuitement, inclut les fonctionnalités suivantes :
- Ingestion de jusqu'à 16 Go de données par jour
- Durée de rétention de 7 jours
- Aucune carte de crédit n'est requise
- Accès continu sans période d'essai
- Journalisation sans index, alertes en temps réel et tableaux de bord en direct
- Accès à notre place de marché et à nos packages, y compris aux guides de création de nouveaux packages
- Formation et collaboration avec une communauté active