Bien que la virtualisation reste la technologie la plus utilisée sur le marché du Cloud, la conteneurisation vient répondre à des besoins d’hébergement d’applications métiers, web et mobile d’une façon encore plus efficace. L’adoption de ces solutions est d’ailleurs largement partagée auprès des entreprises.
Docker reste la solution de conteneurisation la plus utilisée aujourd’hui. C’est un outil qui permet d’empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n’importe quel serveur.
Mais, en cas d’utilisation intensive de Docker, la gestion de plusieurs conteneurs différents devient rapidement fastidieuse. Kubernetes est donc un outil qui permet de surmonter ce problème et d’orchestrer des milliers de conteneurs.
Kubernetes, retour sur les fondamentaux …
L’orchestration des conteneurs consiste essentiellement à gérer leur cycle de vie, en particulier dans les grands environnements dynamiques.
Kubernetes est une plate-forme open source portable et extensible pour la gestion des workloads et des services conteneurisés, facilitant à la fois la configuration et l’automatisation.
Kubernetes n’est pas un PaaS « Platform As A Service » traditionnel, étant donné qu’il opère au niveau du conteneur plutôt qu’au niveau du matériel. Il fournit certaines fonctionnalités, généralement communes aux offres PaaS, telles que :
- Le déploiement,
- La mise à l’échelle,
- L’équilibrage de la charge,
- La journalisation,
- Et la surveillance.
Cette solution regroupe plusieurs composants avec chacun sa fonction.
Kubernetes contient plusieurs abstractions représentant l’état du système :
- Applications et processus conteneurisés déployés,
- Leurs ressources réseau et disque associées,
- Ainsi que d’autres informations sur les activités du cluster.
Les objets de base de Kubernetes incluent les Pods, les Services, les Volumes et les Namespaces…
Les principales fonctionnalités offertes par Kubernetes sont les suivantes [1] :
- Provisionnement et déploiement de conteneurs ;
- Redondance et disponibilité des conteneurs ;
- Suppression ou mise à l’échelle des conteneurs pour répartir la charge d’application uniformément sur l’infrastructure hôte ;
- Déplacement des conteneurs d’un hôte à un autre en cas d’un manque de ressources dans un hôte ou si ce dernier n’est pas disponible ;
- Exposition des services d’un conteneur aux réseaux externes ;
- Découverte de service (Service Discovery) ;
- Surveillance de l’état des services.
- Mécanisme de redémarrage automatique des pods en fonction de leur santé
Tout d’abord le Master-node…
Le serveur Maître (Master) fournit le plan de contrôle du cluster. Il prend les décisions globales (par exemple, la planification), détecte les événements du cluster et y répond (démarrage d’un nouveau pod par exemple).
Le serveur maître est constitué de :
- kube-apiserver : Fournit l’API de Kubernetes via laquelle tous les autres composants interagissent. C’est le front-end du plan de contrôle de Kubernetes. Il valide et configure les données pour les objets API, notamment les pods, les services, les contrôleurs de réplication, etc.
- etcd : Magasin clé-valeur distribué, cohérent et hautement disponible, utilisé comme moyen de sauvegarde de toutes les données du cluster Kubernetes.
- kube-scheduler : Attribue pour chaque pod nouvellement créé un nœud sur lequel il s’exécute.
- kube-controller-manager : Exécute des contrôleurs, qui surveillent l’état partagé du cluster via l’api-server, et apportent des modifications en tentant de déplacer l’état actuel vers l’état souhaité.
Ces contrôleurs incluent le contrôleur des nœuds, de réplications, des endpoints ainsi que les comptes de services et jetons.
Logiquement, chaque contrôleur est un processus distinct, mais pour réduire la complexité, ils sont tous regroupés dans un seul composant, et exécutés dans un seul processus.
- cloud-controller-manager : Il exécute les contrôleurs qui interagissent avec des fournisseurs de Cloud sous-jacents. Les contrôleurs suivants dépendent du fournisseur de Cloud utilisé :
- contrôleur de noeud : Vérifie le fournisseur de Cloud afin de déterminer si un nœud a été supprimé dans le Cloud après avoir cessé de répondre.
- router controller: Configure les routes dans l’infrastructure Cloud sous-jacente.
- service controller : Crée, met à jour et supprime les équilibreurs de charge de fournisseur de Cloud.
- contrôleur de volume : Crée, attache, monte des volumes et interagit avec le fournisseur de Cloud pour orchestrer des volumes.
Ensuite le Worker-node …
Plusieurs composants s’exécutent sur chacun des noeuds. Ils sont chargés de la conservation des pods en cours d’exécution et de la fourniture de l’environnement d’exécution Kubernetes :
- kubelet : Un agent qui s’exécute sur chaque nœud du cluster. Il s’assure que les conteneurs s’exécutent dans un pod.
- kube-proxy : Il active l’abstraction du service Kubernetes, en maintenant les règles réseaux sur l’hôte et en effectuant le transfert de connexion.
- Container Runtime : Le moteur d’exécution du conteneur est le logiciel responsable de l’exécution des conteneurs. Kubernetes prend en charge plusieurs environnements d’exécution : Docker, rkt, runc et toute implémentation d’exécution OCI.
Aujourd’hui, plusieurs solutions permettant le déploiement d’un cluster Kubernetes soit on-premise soit chez un Cloud provider sont disponibles sur le marché.
Chacune de ces solutions présente des avantages et des inconvénients.
KUBESPRAY
Kubespray est un playbook Ansible qui permet aux utilisateurs de déployer un ou plusieurs clusters kubernetes on-premise ou chez un Cloud provider [2].
Avantages
- Mises à jour facile ;
- Basé sur Kubeadm ;
- Personnalisation facile du cluster (Runtime , cni, …) ;
- Support des distributions Linux les plus populaires ;
- Supportée par plusieurs Cloud Provider.
Inconvénients
- Maîtrise d’Ansible et Kubernetes ;
- Installation lente ;
- Défaillances possibles dans les configurations avec un impact majeur ;
- En retard par rapport à la nouvelle version de Kubernetes.
KUBEADM
Solution officielle pour l’installation des clusters Kubernetes (Open Source).
C’est un outil permettant de déployer un cluster Kubernetes d’une manière simple. Il permet une configuration facile des clusters à nœud unique ou de haute disponibilité. Kubeadm peut aussi être utilisé on-premise et dans le Cloud [3].
Avantages
- Installation très simple ;
- Mise à jour facile « Kubeadm upgrade » ;
- Supporte la dernière version de Kubernetes.
Inconvénients
- Nécessite une configuration préalable ;
- Installation d’un cluster hautement disponible compliquée et nécessite de nombreuses étapes manuelles.
RANCHER
Rancher, un projet open-source créé par la société Rancher Labs.
C’est un orchestrateur de cluster Kubernetes, il permet de déployer un ou plusieurs clusters Kubernetes sur de multiples plateformes (vSphere, bare-metal, Openstack, AWS, GCP, Azure,..).. Il permet également la centralisation de la gestion des politiques de sécurité du réseau et des pods [4].
RKE – RANCHER KUBERNETES ENGINE
Dans certains use-cases, essentiellement pendant la phase d’embarquement sur K8S, l’utilisation de Rancher comme solution « Kubernetes as a Service » peut s’avérer un « Over-Kill ».
En effet, avoir la capacité d’importer des clusters existants, mettre en œuvre un système d’authentification avancée, ou encore faire de l’orchestration multi-cluster ne sont probablement pas des exigences de haute priorité durant la phase d’introduction à l’orchestration des conteneurs.
D’où le besoin d’avoir une solution qui assure la création d’un cluster d’expérimentation Kubernetes d’une manière simple et rapide. C’est là où RKE joue un premier rôle.
RKE est une distribution Kubernetes certifiée CNCF (Cloud Native Computing Foundation) qui fonctionne entièrement dans des conteneurs Docker. Il permet la création de clusters Kubernetes sur un environnement bare-metal ou virtualisé [5].
RKE est l’acronyme de Rancher Kubernetes Engine et est l’outil en mode ligne de commande de Rancher pour la création, la gestion et la mise à jour des clusters Kubernetes. En créant un simple fichier de configuration de cluster YAML (appelé cluster.yml par défaut), vous pouvez exécuter la commande « rke up » et RKE créera un cluster Kubernetes selon les détails que vous avez spécifiés dans votre configuration [5].
Avantages
- Simple à installer et à utiliser ;
- Mises à jour faciles ;
- Gestion multi-clusters ;
- Monitoring par infrastructure et par projet ;
- Intégration de ISTIO ;
- OpenPolicy agent ;
- Multi-tenancy.
Inconvénients
- Pas de “Registry” par défaut ;
- Bare metal « RKE » (il faut au minimum un cluster rancher pour déployer des cluster K8s).
VMWARE TANZU KUBERNETES GRID
Projet créé par la société VMware, Tanzu est un ensemble de solutions permettant d’orchestrer des clusters Kubernetes.
Tanzu Kubernetes Grid est une distribution Kubernetes qui permet de provisionner des environnements sur :
- vSphere ;
- GCP ;
- AWS ;
- Azure.
Il utilise Kubernetes In Docker pour bootstrapper. Cet environnement éphémère KinD permet d’installer un cluster de Management.
Ce produit permet de déployer des cluster Kubernetes qui sont supportés par VMware.
Il se présente sous la forme d’un binaire nommé tkg et il permet d’instancier les clusters en fonction de plan prédéfinis. L’installation commence par un cluster de management sur la plateforme d’accueil (VMware ou Cloud Provider).
Les configurations et objets gérés par les clusters de workload sont stockées dans l’etcd du cluster de management qui leur est associé.
Il est également recommandé d’avoir des clusters de management différents pour des clusters de workload d’environnements différents (ex : dev/prod)
Le binaire tkg permet d’effectuer simplement les opérations d’installation, de redimensionnement, de mise à jour et de suppression de clusters.
Note : la mise à jour entraine l’instanciation de nouveaux nœuds puis la suppression des anciens de manière automatique.
Les clusters sont provisionnés à partir d’OVA basées sur Photon, le système d’exploitation développé par VMware.
TKG utilise également ces produits sous forme d’extensions :
- cert-manager pour la gestion des certificats ;
- contour pour la gestion d’ingress ;
- prometheus/grafana pour le monitoring ;
- fluent-bit pour les logs ;
- dex/gangway pour l’authentification.
Avantages
- Installation et utilisation simples ;
- Mises à jour faciles ;
- Gestion multi-clusters ;
- Monitoring par infrastructure et par projet ;
- Intégration de VMware (notamment en VS v7) ;
- Multi-tenancy ;
- Support VMware ;
- Nombreux ajouts de fonctionnalités à chaque version.
Inconvénients
- Pas de registry par default dans tkg (dispo dans Application Catalog) ;
- Pas de gestion du Baremetal ;
- Overhead du cluster de management par socle (VMware, AWS, Azure).
K3S – LIGHTWEIGHT KUBERNETES
K3S est un Kubernetes léger développé par Rancher.
Facile à installer, peu gourmand en termes de ressources compute et condensé dans un binaire de moins de 100 Mo, Rancher K3S est un bon candidat pour les use-cases IoT, la CI ou les architectures ARM.
K3s est présenté sous la forme d’un seul binaire, ce qui réduit les dépendances et les étapes nécessaires pour installer, exécuter et mettre à jour automatiquement un cluster Kubernetes de production [6].
Avantages
- Facile à installer ;
- Binaire de moins de 100 Mo.
Inconvénients
- Base de données interne « SQLite » ;
- Nombre limité d’API.
OPENSHIFT
OpenShift est un PaaS qui s’appuie sur Kubernetes et permet de construire, déployer et gérer des applications dans des conteneurs.
Avec cette plateforme open source, les développeurs peuvent créer, tester et exécuter leurs applications, puis les déployer dans leurs plateformes.
OpenShift prend en charge les langages de programmation Node.js, Ruby, Python, PHP, Perl et Java. La plateforme est extensible, ce qui permet aux développeurs d’utiliser d’autres langages [7].
OKD « Openshift Kubernetes Distribution » propose les mêmes fonctionnalités que OpenShift en version open source. Les principales différences c’est que le support est communautaire et l’installation est moins automatisée.
Avantages
- Solution complète ;
- PAAS ;
- Monitoring ;
- Pipeline CICD ;
- Support ;
- Multi-tenancy.
Inconvénients
- Installation et utilisation difficile ;
- Verrouillage du vendeur.
En synthèse …
Nous arrivons à la fin de cet article et voici une synthèse des différentes solutions évaluées :
Plusieurs solutions existent pour faciliter les déploiements de Kubernetes, profiter de son utilisation et améliorer sa gestion.
Chaque solution répond à des besoins spécifiques comme Rancher et Openshift utilisés généralement par les entreprises alors que K3s répond mieux aux use-cases IoT, CI « continuous integration » ou architectures ARM.
Donc avant de vous lancer, la tête dans le guidon dans les tests des solutions, voici quelques recommandations :
- Identifier vos use-cases,
- Faire un point sur votre organisation et identifier les personnes qui vont utiliser, administrer et exploiter votre plateforme,
- Etudier le besoin d’un Cloud hybride,
- Vérifier la complexité d’intégration avec votre SI existant (bare-metal, virtualisation, compatibilité, solutions existantes, …),
- Et bien d’autres sujets en fonction de votre contexte et de vos besoins.
Alors contactez-nous pour en échanger !
A bientôt !
Chawki MERAH, Consultant Cloud