Même si Kubernetes offre par défaut de nombreuses fonctionnalités, le système open source est loin d'être complet. Parfois, pour un cas d’usage ou un besoin particulier, les fonctionnalités par défaut de Kubernetes sont insuffisantes, comme le support de base de données, ou simplement absentes tel la livraison continue. C'est là que la communauté Kubernetes joue pleinement son rôle, livrant des add-ons, des extensions et des extras pour le framework d'orchestration de conteneurs. Voilà une sélection de 11 excellents outils pour Kubernetes, qui peuvent servir soit à compléter des nœuds de clusters, soit à satisfaire des besoins spécifiques.

Gravity : des clusters Kubernetes portables

De nombreuses applications disposent de diagrammes de Helm pour guider et automatiser le déploiement d’une application dans Kubernetes. Mais comment faire pour déployer un cluster Kubernetes tel quel, ici ou là ? Gravity prend des instantanés des clusters, de leurs registres des conteneurs et de leurs applications en cours d'exécution, appelées « bundles d'applications ». Le bundle, qui n’est rien de plus qu’un fichier .tar, peut répliquer le cluster partout où Kubernetes est exécuté. Gravity garantit également que l'infrastructure cible peut supporter les mêmes exigences comportementales que la source, et que le temps d'exécution de Kubernetes sur la cible est compatible avec le besoin. La version entreprise de Gravity ajoute des fonctions de sécurité, notamment des contrôles d'accès basés sur les rôles et la possibilité de synchroniser les configurations de sécurité sur plusieurs déploiements de cluster.

Kaniko : construire des conteneurs dans un cluster Kubernetes

La plupart des images de conteneurs sont construites sur un système qui se trouve à l'extérieur de la pile de conteneurs. Mais parfois, on souhaite exécuter le processus de compilation à l'intérieur d'une pile de conteneurs. Par exemple, dans un conteneur en cours d'exécution ou quelque part sur un cluster Kubernetes. Kaniko réalise des constructions de conteneurs à l'intérieur d'un environnement de conteneurs, mais sans dépendre pour cela d'un daemon de conteneurs comme Docker. Kaniko prend l'image de base, extrait le système de fichiers, puis exécute toutes les commandes de compilation dans l'espace utilisateur au-dessus du système de fichiers qu’il a extrait, prenant un instantané du système de fichiers après chaque commande. À noter que, pour l’instant, Kaniko ne peut pas construire de conteneurs Windows.

Kedge : des définitions concises pour le déploiement de Kubernetes

La critique la plus fréquente à propos de Kubernetes concerne la complexité et la verbosité de ses manifestes ou définitions d'application. Il n'est donc pas étonnant que les utilisateurs se tournent vers des outils tiers pour alléger cette tâche. C’est le cas de Kedge, qui offre une syntaxe plus simple et plus concise. Il suffit de fournir la version simple du fichier de définition Kubernetes à Kedge, et ce dernier traduit cette définition simple dans son équivalent Kubernetes complet. Contrairement à Koki Short (voir ci-plus loin), Kedge n'utilise pas de syntaxe modulaire pour ses fichiers de déclaration : il résume simplement les définitions d'application en raccourcis communs. À noter que la dernière version de Kedge date d'avril 2018.

Koki Short : des manifestes Kubernetes faciles à gérer

À l’image de Kedge, Koki Short cherche à améliorer la manière dont fonctionnent les définitions d'application, ou manifestes dans Kubernetes. Comme dans le cas de son homologue, les définitions de Koki Short utilisent une syntaxe abrégée pour décrire les pods de Kubernetes, lesquels peuvent être traduits dans la syntaxe complète et inversement. Contrairement aux définitions de Kedge, celles de Koki Short sont modulaires, ce qui signifie que les détails d'une déclaration Short peuvent être réutilisés dans d'autres définitions, ce qui permet de définir succinctement de nombreux modules avec des éléments communs.

Kubecost : mesurer les coûts d'exploitation de Kubernetes

La plupart des outils d'administration de Kubernetes se concentrent sur la facilité d'utilisation, la surveillance, la compréhension du comportement des pods, etc. Mais qu'en est-il de la surveillance des coûts - en dollars et en cents - associés à la gestion de Kubernetes ? Kubecost utilise des mesures de la plateforme open source en temps réel et des informations sur les coûts réels liés à l'exécution de clusters sur les plates-formes des principaux fournisseurs de cloud afin d’offrir une vue d'ensemble sur le coût mensuel du déploiement de chaque cluster. Les coûts pour la mémoire, le CPU, le GPU et le stockage sont tous répartis par composant Kubernetes (conteneur, pod, service, déploiement, etc.). Kubecost peut également suivre les coûts des ressources « hors cluster », comme les buckets Amazon S3, mais la fonction est limitée à AWS. Les données sur les coûts peuvent même être partagées avec Prometheus, ce qui permet d'utiliser les données pour modifier par programmation le comportement des clusters.

KubeDB : exécuter des bases de données de production dans Kubernetes

La gestion judicieuse des bases de données a toujours été difficile avec Kubernetes. Et l'ensemble de fonctionnalités natives de Kubernetes ne résout pas directement la plupart des problèmes spécifiques des bases de données. KubeDB permet à un administrateur de créer des opérateurs Kubernetes pour la gestion des bases de données. KudeDB facilite l'exécution de sauvegarde, de clonage, de surveillance, de snapshot et la création déclarative de bases de données. Le clustering est également supporté, mais seulement sur certaines bases de données. En particulier, le clustering est disponible avec PostgreSQL, mais pas (encore) avec MySQL.

Kube-monkey : un chaos pour mettre à l’épreuve Kubernetes

Une méthode fiable pour mettre à l'épreuve un système est de provoquer des pannes au hasard. C'est le principe appliqué par l’outil d'ingénierie du chaos Chaos Monkey de Netflix. Ce dernier stoppe au hasard les machines virtuelles et les conteneurs en production pour « encourager » les développeurs à construire des systèmes plus résilients. Kube-monkey est l’équivalent des stress tests pour les clusters Kubernetes. Il fonctionne en détruisant au hasard des pods dans un groupe choisi spécifiquement par l’administrateur. Il est possible d’affiner la procédure en fixant la destruction à des moments et dans des périodes de temps donnés.

Kubernetes Ingress Controller pour AWS

Avec Ingress, Kubernetes délivre des services de load balancing externe et des services réseau à un cluster. Amazon Web Services fournit aussi une fonctionnalité d'équilibrage de charge, mais ne couple pas automatiquement ces services aux installations de Kubernetes. Le contrôleur d'entrée Kubernetes Ingress Controller pour AWS comble cette lacune. Il gère automatiquement les ressources AWS pour chaque objet Ingress d'un cluster, en créant des load balancers pour les nouvelles ressources d'entrée et en les effaçant pour les ressources supprimées, en s’appuyant sur AWS CloudFormation pour assurer l'état constant du cluster. Le contrôleur gère aussi automatiquement d'autres éléments utilisés dans le cluster comme les certificats SSL et les groupes de mise à l'échelle automatique EC2 Auto Scaling Groups.

Skaffold : du développement itératif pour Kubernetes

Cet outil, développé par Google pour Kubernetes, permet d'effectuer un déploiement continu pour les applications Kubernetes. Skaffold est capable de détecter automatiquement les modifications apportées à un code source. Et il peut ensuite déclencher le processus de compilation et de déploiement et d’envoyer des alertes s’il détecte des erreurs. L’outil fonctionne entièrement du côté client. Il peut être utilisé dans un pipeline CI/CD existant, et s'intègre avec quelques outils de compilation externes, mais principalement avec Bazel de Google.

Teresa : un PaaS simple sur Kubernetes

Teresa est un système de déploiement d'applications qui fonctionne comme un simple PaaS sur Kubernetes. Les utilisateurs, organisés en équipes, peuvent déployer et gérer les applications qui leur appartiennent. Les personnes de l’équipe peuvent ainsi travailler plus facilement avec une application donnée, sans avoir à traiter directement avec Kubernetes.

Tilt : des mises à jour de conteneurs en streaming vers les clusters Kubernetes

Développé par Windmill Engineering, Tilt surveille les modifications apportées aux Dockerfiles en temps réel, puis les déploie progressivement dans les conteneurs appropriés d'un cluster Kubernetes. L’outil permet surtout aux développeurs de mettre à jour un cluster en temps réel, en mettant simplement à jour un Dockerfile. Tilt effectue la compilation à l'intérieur du cluster, en ne prenant en compte que les changements de code source.