Désinfecter votre cluster Kubernetes avec Popeye !
Plan
Plan
Présentation de l’outil
En cherchant un outil me permettant de diagnostiquer rapidement un de mes clusters Kubernetes, je suis tombé, un peu par hasard, sur Popeye !
Popeye est un outil qui analyse un cluster Kubernetes et qui en remonte les problèmes potentiels de ressources et configurations. Il peut aussi alerter sur la sous-capacité CPU et mémoire du cluster en s’appuyant sur le serveur de métriques déployé sur celui-ci. Pour information, cet outil communique avec le cluster uniquement en lecture seule, il n’y a donc pas de risques à l’utiliser.
Popeye est open source et a été créé par Fernand Galiana qui aussi à l’initiative du client de gestion de cluster Kubernetes K9S (que j'évoquerai dans un futur article).
Actuellement, il est compatible avec les versions de Kubernetes 1.13 et +.
Et on l’installe comment ?
Il y a plusieurs manières d’installer / déployer Popeye :
- En clonant le repository git et en lançant la commande
go install
- En déployant un CronJob sur le cluster Kubernetes à l’aide d’un
kubectl apply
(Attention de bien appliquer les RBAC afin de donner à Popeye les droits en lecture sur les ressources Kubernetes) - En l’installant sous forme de plugin kubectl avec Krew
C’est cette dernière solution que j’ai choisie et que je vais décrire pour sa simplicité et rapidité d’utilisation.
Krew : à quoi ça sert ?
Krew
est un gestionnaire de paquets pour les plugins de kubectl.
Il permet de simplifier la gestion de plugins kubectl en permettant leur recherche et installation.
Actuellement, il y a plus de 80 plugins kubectl accessibles via Krew.
Par chance Popeye est depuis peu disponible comme plugin de kubectl !
Installation de Krew
J’ai installé Krew sur une distribution Debian pour les autres OS, la procédure est ici .
Prérequis : git doit être installé
Lancer cette commande pour installer la dernière version de Krew :
|
|
Ajouter $HOME/.krew/bin directory
à votre variable d’environnement PATH.
Pour cela, mettez à jour votre fichier .bashrc
et ajoutez-y la ligne suivante :export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"
puis redémarrez votre shell.
Lancer la commande kubectl krew version
afin de vérifier l’installation.
Installation du plugin kubectl Popeye
La première étape consiste à mettre à jour la liste des plugins en local :
|
|
Ensuite, installer le plugin Popeye :
|
|
Puis, lancer la commande kubectl popeye version
pour vérifier l’installation.
Utilisation de l’outil Popeye
Lancer la commande suivante :
|
|
De nombreuses options sont disponibles, je vais ici vous en décrire quelques unes.
|
|
La commande la plus simple est :
|
|
Elle permet de lancer un scan complet de votre cluster en utilisant la configuration kubeconfig.yml
définie dans la variable d’environnement KUBECONFIG
.
Plus simplement, cette commande lance un scan sur votre cluster actif.
Le résultat du scan sera directement affiché dans votre terminal.
La majorité des ressources du cluster est analysée : roles, configmap, deployement, pods, services…
Au final, un nombre de points et une note sont donnés à votre cluster : la meilleure note étant A, et la moins bonne note F. Les points vont également de 0 (moins bon score) à 100 (meilleur score).
Voici 2 exemples (“bon” cluster et “mauvais” cluster) tirés de la documentation officielle de l’outil. Je n’utilise pas ici mes propres résultats pour des questions de confidentialité.
La dernière version de Popeye remonte plus d’informations sur plus de resources que ces exemples.
Cluster avec un score D
Ici, des recommandations sont remontées concernant les Pods :
- pas de resource limits définies
- pas de probes définis
- utilisation d’une image taggée latest
- …
Conseil
Cluster avec un score A
Voici quelques options à passer à votre commande kubectl popeye
:
--kubeconfig
pour spécifier un autre fichier de configuration kubeconfig-n
pour spéficier le namespace sur lequel effectuer le scan-l
le niveau de scan effectué : ok, info, warn, error (“ok” par défaut)-o
le mode d’affichage des résultats (standard, jurassic, yaml, json, html, junit, prometheus, score) (“standard” par défaut)- …
Pour aller plus loin…
Si vous avez plus de temps et d’envie, voici quelques cas d’utilisation plus poussés de l’outil :
- Sauvegarde des résultats dans un stockage S3 AWS (paramètre
s3-bucket
) - Utilisation d’un fichier de configuration
spinach.yml
afin de paramètrer le scan : paramètrage des cpu et mémoire alloués, exclusion de règles et/ou ressources… - Lancer les scans via un CronJob
- Export des résultats dans Prometheus
en combinant les 2 paramètres suivants :
-o prometheus
et--pushgateway-address
Les problèmes rencontrés
De mon côté, les couleurs ne s’affichaient pas dans le terminal.
Afin de corriger ce souci, j’ai soumis une pull request
qui résoud désormais ce problème.
Si les emojis reste en noir et blanc, vous pouvez installer la police Noto Color Emoji .
Convaincu ?
Pour résumer, Popeye est un outil sans prétention, simple d’utilisation et qui donne rapidement un aperçu de l'état d’un cluster Kubernetes.
Pour ma part, je l’utilise à la demande et il me donne entièrement satisfaction !
C’est un outil open source, n’hésitez donc pas à collaborer ici .
Et vous, l’utilisez vous ? L’avez-vous testé ? Qu’en pensez-vous ?