Sommaire
L'Essor de Kubernetes
Kubernetes est aujourd’hui la plateforme d’orchestration de conteneurs la plus utilisée dans le monde. Dans son rapport The State of Cloud Native Development, SlashData, montre qu’environ 5.6 millions de développeurs utilisent Kubernetes. Parmi les facteurs pouvant expliquer cette réussite, il y a très certainement la portabilité qu’offre Kubernetes. La possibilité qu’une application puisse être déployée dans différents types d’environnements (on premise, cloud public et privé, hybride) sans avoir à la modifier est un atout majeur pour cette technologie. Elle permet ainsi un gain de temps significatif pour les développeurs. La facilité de maintenance des applications et une meilleure gestion des ressources utilisées font aussi partie des fonctionnalités les plus plébiscitées des utilisateurs de Kubernetes.
La Cloud Native Computing Foundation (CNCF) montre aussi qu’environ 96% des organisations à travers le monde, utilisent ou évaluent Kubernetes (sur un échantillon de 3800 participants, source CNCF Annual Survey 2021). Les entreprises les plus importantes en termes de nombre d’employés (plus de 5000 employés) ont plus tendance à utiliser Kubernetes que les autres. Selon le rapport The State of Kubernetes 2022 de VMware Tanzu, le nombre de clusters déployés dépasse 50 pour 29% des organisations. Cette étude estime aussi qu’il y aurait une augmentation d’environ 50% du nombre de clusters déployés dans les prochains mois à venir.
Les différents types de cluster Kubernetes
Lorsque vous déployez un cluster Kubernetes, vous pouvez choisir soit de gérer vous-même toute l’infrastructure sous-jacente soit de déléguer cette gestion à une plateforme spécialisée.
En gérant vous-même votre cluster Kubernetes, vous avez un contrôle complet sur sa configuration, sa sécurité et l’infrastructure sous-jacente. Ce choix implique aussi une gestion plus “intense” du cluster, de ses nœuds, de la mise à jour système, des ressources allouées en plus de la gestion de vos applications. Parmi les offres vous permettant de déployer vos clusters dans vos propres datacenters, il y a les offres Tanzu, Rancher ou encore Openshift. Le choix entre ces outils dépend de votre infrastructure déjà existante. Si vous utilisez VMware, Tanzu est alors le choix à privilégier. Il vous permettra de créer plus facilement vos clusters Kubernetes avec moins de ressources.
Si vous êtes dans un environnement avec beaucoup de produits Red Hat, OpenShift serait peut-être mieux adapté. Il est compatible avec les distributions Red Hat (Red Hat Enterprise Linux, Red Hat Atomic) et est très axé sécurité.
Quant à Rancher, il a l’avantage d’être compatible avec divers types d’OS, il est très léger et s’intègre avec divers types d’outils Kubernetes comme Prometheus, Istio, OPA Gatekeeper, et CIS Scan.
Pour alléger les tâches d’administration de la couche d’infrastructure des clusters, de plus en plus d’entreprises (environ 79% selon le rapport de la CNCF Annual Survey 2021) choisissent d’utiliser les plateformes Kubernetes managées. Ces plateformes s’occupent de gérer toute l’infrastructure à votre place et vous permettent de vous concentrer sur la gestion de vos applications. Dans la documentation Kubernetes, vous trouverez une liste des plateformes certifiées pour héberger votre cluster.
Les plus populaires, selon l’enquête de la CNCF, sont Amazon Elastic Container Service for Kubernetes (EKS) (39%), Azure Kubernetes Service (AKS) (23%) et Google Kubernetes Engine (GKE) (17%). La figure-1 suivante, issue du rapport de la CNCF Annual Survey 2021 montre la prédominance de ces plateformes selon la zone géographique.
Figure-1 : Estimation géographique de l’utilisation des plateformes Clouds Kubernetes, source : CNCF Annual Survey 2021
Le service Kubernetes proposé par les cloud providers (EKS, AKS et GKE) est assez similaire. Cependant, certains points sont à privilégier pour vos besoins de production. Pour une application critique nécessitant un niveau de service élevé, il est préférable de déployer vos clusters Kubernetes sur le EKS d’AWS. EKS possède le meilleur niveau de service avec 99,95%. Pour avoir le même niveau de service, il faut déployer un cluster à l’échelle régionale chez GKE et dans plusieurs zones de disponibilité pour AKS.
EKS s’intègre aussi facilement avec les autres services d’AWS (si vous utilisez déjà ce Cloud Provider). Par ailleurs, il vous donne la possibilité d’appliquer une configuration plus poussée de l’infrastructure sous-jacente de vos clusters.
Les clusters AKS ont l’avantage de permettre l’utilisation des RBAC avec Azure Active Directory, élément central de la gestion des utilisateurs sur le cloud de Microsoft.
Si vous souhaitez vous concentrer uniquement sur vos applications, l’offre Autopilot GKE de Google répondra à vos besoins. Ces clusters sont préconfigurés pour vous permettre de déployer vos applications. Dans la même logique, AWS met à votre disposition son offre AWS Fargate et s’occupe de gérer les serveurs à votre place.
Si votre besoin s’y prête, vous avez également la possibilité d’utiliser des offres hybrides. Ces offres vous permettent de créer vos clusters Kubernetes à la fois au sein de vos datacenters et sur des plateformes purement Cloud. Les outils disponibles sur le marché sont entre autres l’outil EKS Anywhere d’AWS, GKE On-Prem de Google, on-premises Kubernetes with AKS d’Azure, Tanzu, OpenShift et Rancher. Les chiffres du rapport The State of Kubernetes 2022 de VMware Tanzu montrent qu’en 2022 (Figure-2), seulement 11 % des entreprises utilisent des déploiements on-premise, 41% font des déploiements hybrides (on-premise + Cloud) et 47% des clusters sont hébergés chez un ou plusieurs Cloud providers.
Figure-2 : Environnements de déploiement des clusters Kubernetes et leur pourcentage, source : The State of Kubernetes 2022
En 2023, vu la popularité des services d’AWS, EKS risque de rester dominant parmi les clusters managés avec une expansion non négligeable de GKE. Côté on-premise, Rancher pourrait être l’outil émergent vue sa compatibilité avec plusieurs OS et outils Kubernetes.
Les outils Kubernetes en pleine expansion
Installateurs Kubernetes
Pour installer votre cluster Kubernetes vous avez peut-être utilisé des outils d’installation comme Kubeadm. Ces outils vous aident à installer, configurer, gérer et mettre à niveau votre cluster. La figure ci-dessous illustre la diversité de ces installateurs avec une préférence pour Kubeadm (20%) suivi de Gardener (15%) et de Harmonycloud (14,5%).
Figure-3 : Pourcentage d’utilisation des Installateurs Kubernetes, source : https://github.com/cncf/surveys/tree/main/cloudnative
Kubeadm est l’outil le plus utilisé parce qu’il bénéficie d’une documentation assez importante. Vous trouverez en effet plusieurs guides vous expliquant comment installer votre cluster avec Kubeadm (Création d'un Cluster a master unique avec kubeadm | Kubernetes). C’est donc un outil par lequel vous pourrez débuter pour mettre en place vos clusters.
Concernant Gardener, il est surtout utilisé pour harmoniser les clusters déployés sur différents environnements : Cloud public/privé et on-premise. Il possède sa propre architecture et introduit de nouveaux objets API dans un cluster Kubernetes déjà existant.
Dans cette même logique de déployer des clusters homogènes sur différentes plateformes, il existe d’autres outils comme la Cluster API ou encore Rancher. Ces derniers permettent de créer, configurer et gérer de manière homogène vos clusters Kubernetes dans différents types d’environnements (AWS, AZURE, GCP, IBM, vSphere…). Ces outils sont assez complexes à utiliser et ne sont pas vraiment adaptés si vous débutez et n’avez pas les compétences nécessaires.
Contrairement à Kubeadm et Gardener, Harmonycloud est l’outil qui bénéficie le moins de documentation. Il n’est donc pas recommandé si vous n’avez pas de bonnes connaissances de cet outil.
Le pari 2023 porte encore sur une vaste utilisation de Kubeadm pour la mise en place des clusters Kubernetes.
Container Runtime Interface Plugins
Un des composants essentiels de Kubernetes est le Container Runtime qui permet de gérer le cycle de vie des conteneurs au niveau des nœuds du cluster. Ce composant est aussi chargé de récupérer les images des conteneurs, d'assurer l'isolation et la gestion des ressources au niveau du système.
Pour utiliser un Container Runtime au sein de Kubernetes, celui-ci doit être compatible avec
le Container Runtime Interface (CRI) qui permet à Kubernetes d'interagir avec divers types de Container Runtime. Parmi ceux compatibles avec Kubernetes, il y a entre autre :
- containerd
- CRI-O
- Docker Engine
- Mirantis Container Runtime
- Kata Containers
- AWS Firecracker
Le tableau-1 suivant, issu de l’étude Container Runtime Interface (CRI): Past, Present, and Future, montre les avantages et inconvénients de quelques containers runtimes :
Container Runtime |
Plateformes Kubernetes supportées |
Avantages |
Inconvénients |
Containerd |
Google Kubernetes Engine, IBM Kubernetes Service, Alibaba, Amazon Elastic Container Service for Kubernetes*, Azure Kubernetes Service* |
Testé à grande échelle, utilisé dans tous les conteneurs Docker. Utilise moins de mémoire et de CPU que Docker. Supporté par Linux et Windows |
Pas de Docker API socket. Outils CLI pour Docker complexe à utiliser* |
CRI-O |
Red Hat OpenShift, SUSE Container as a Service |
Léger, toutes les fonctionnalités nécessaires à Kubernetes et pas plus. Séparation de type UNIX (client, registry, build) |
Surtout utilisé sur les plateformes Red Hat. Pas facile d’installation sur les plateformes n’utilisant pas l’OS Red Hat. Seulement supporté par Windows Server 2019 et plus |
Kata Containers |
OpenStack |
Fournit une virtualisation complète basée sur QEMU. Améliore la sécurité. Intégré avec Docker, CRI-O, containerd, et Firecracker. Prend en charge ARM, x86_64, AMD64 |
Utilisation plus élevée des ressources. Ne convient pas aux cas d'utilisation de conteneurs légers |
AWS Firecracker |
Tous les services AWS |
Accessible via direct API ou containerd. Accès restreint au noyau avec le mode seccomp |
Nouveau projet, moins mature que les autres Containers Runtimes. Nécessite plus d'étapes manuelles |
Tableau-1 : Avantages et Inconvénients des principaux Containers Runtimes, source : Container Runtime Interface (CRI): Past, Present, and Future. * : Amazon Elastic Container Service for Kubernetes et Azure Kubernetes Service sont des ajouts de notre part basés sur la documentation d'AWS et d’Azure.
Docker Engine était le container runtime utilisé par défaut dans Kubernetes jusqu'à l'annonce en 2020 du retrait de dockershim dans les versions futures de Kubernetes, à partir de la version 1.24. L’objectif principal de cette décision est de permettre l’émergence et l’intégration des autres containers runtimes compatibles avec Kubernetes.
Cela a, en particulier, favorisé l’adoption massive de containerd et CRI-O. Dans son rapport CNCF Annual Survey 2021, la CNCF montre une estimation de l’augmentation de l’utilisation de containerd d’environ 500% entre 2020 et 2021 au sein des entreprises utilisant la conteneurisation.
Vu l’adoption de plus en plus forte de containerd, y compris chez les Clouds Providers les plus dominants (AWS, Azure et Google), il restera largement en tête des containers runtimes en 2023. Il est donc recommandé d’utiliser containerd si vous envisagez des déploiements de clusters Kubernetes.
CRI-O est surtout utilisé dans la plateforme de Red Hat OpenShift Container. Il a l'avantage d’être léger. Il est recommandé si vous êtes dans un environnement avec des produits Red Hat et envisagez d’installer Kubernetes.
Container Network Interface Plugins
Pour gérer la communication réseau au sein de votre cluster Kubernetes, il est indispensable d’installer un plugin CNI (Container Network Interface). Le plugin configure entre autres le réseau entre les pods, les nœuds du cluster et peut vous donner la possibilité de définir des règles de filtrage réseau, appelées Network Policies.
Il existe aujourd’hui une grande variété de plugins CNI listés sur le repo git CNI. Les plus populaires sont Flannel, Calico, WeaveNet, Cilium, et Canal. Le choix parmi ces plugins dépend du contexte dans lequel vous utilisez votre cluster. Une étude de 2020, présentée dans l’article Benchmark results of Kubernetes network plugins (CNI) over 10Gbit/s network de Alexis Ducastel, compare les performances de plusieurs plugins, résumées dans le tableau-2.
Tableau-2 : Comparaison des performances de plusieurs CNI, source : Benchmark results of Kubernetes network plugins (CNI) over 10Gbit/s network (Updated: August 2020) | by Alexis Ducastel | ITNEXT
En se basant sur les résultats présentés dans le tableau-2, le choix du plugin CNI peut se faire sur trois principaux critères : la performance, la consommation des ressources et la sécurité.
Il apparaît clairement que Flannel est le choix le plus pertinent si la sécurité de votre cluster vous importe peu. Il est le plus performant en termes d’échange réseau et consomme peu de ressources mémoire et CPU. Par contre, il ne donne pas la possibilité d’implémenter des Networks Policies pour sécuriser les échanges entre pods.
Pour des clusters en production, là où la sécurité est essentielle, Calico apparaît être le meilleur choix. Il permet l’utilisation des Networks Policies et vous pouvez activer le chiffrement des échanges réseaux à tout moment. Il utilise par contre plus de ressources mémoire et CPU comparé à Flannel.
L’étude montre que Cilium est celui qui utilise le plus de ressources mémoire et CPU. Mais il est réputé pour être plus adapté à des clusters de grande échelle et permet un contrôle plus fin de la sécurité.
Quel plugin CNI sera dominant en 2023? A notre avis, Calico offre des avantages de performance, de sécurité et de consommation de ressources assez raisonnables pour être largement adopté en 2023. Si vous avez des besoins poussés en termes de performances et de sécurité, prêtez attention à Cilium qui risque de prendre des parts de marché.
Conclusion
Kubernetes est aujourd'hui l’outil d’orchestration des conteneurs le plus populaire et le plus utilisé du marché. Il a ainsi permis l’émergence d’une diversité de technologies pour vous permettre de mettre en place et de gérer vos clusters. Pour connaître celles qui sont les plus utilisées, nous nous sommes basés sur des chiffres de 2021 et 2022, qui sont les données les plus récentes disponibles au moment de l’écriture de cet article. Sur cette base, nous avons pu faire ressortir les tendances du moment et extrapoler sur 2023. Le tableau-3 résume les outils Kubernetes qui, pour nous, seront les plus utilisés en 2023.
Outils Kubernetes |
Prédominance en 2023 |
Cluster managé |
EKS |
Cluster autogéré on-premise |
Rancher |
Installateur Kubernetes |
Kubeadm |
Container Runtime Plugin |
Containerd |
Container NetworkPlugin |
Calico / Cilium |
Tableau-3 : Outils Kubernetes Prédominants en 2023
Ainsi, côté clusters managés dans le Cloud, l’offre EKS d’AWS risque de continuer à dominer le marché avec une émergence de plus en plus forte de GKE. Rancher pourrait être privilégié pour les déploiements on-premise. L’installation des clusters via Kubeadm restera certainement la démarche préférée des utilisateurs souhaitant avoir la main mise sur toute la configuration.
Vu l’essor de containerd et son adoption par de nombreux Cloud Providers, il sera le container runtime en tête en 2023.
Calico est selon nous le meilleur compromis pour la majorité des installations pour gérer le réseau au sein de Kubernetes. Nous gardons un oeil attentif à Cilium qui s’avère être une alternative très intéressante.