Contactez-nous
-
kubernetes

10 plugins Krew incontournables pour Kubernetes

10 plugins Krew incontournables pour Kubernetes

Sommaire

Introduction

Krew est le gestionnaire de packages pour les plugins de kubectl. Il vous permettra de rechercher, d’installer et de mettre à jour l’ensemble de vos plugins facilement et rapidement.

Installation

La procédure d’installation se trouve dans la documentation de Krew, disponible pour les systèmes macOS/Linux ainsi que Windows. En prérequis, vous devez avoir les outils “git” et “kubectl” (forcément). L’installation de Krew ne vous prendra pas plus d’une minute.

Plugins

Vous trouverez un large choix de plugins (213 à ce jour, 04/04/2023), qui sont répertoriés sur le site de Krew. Pour gérer vos plugins, c’est très simple :

  • Installation : kubectl krew install <plugin>
  • Recherche : kubectl krew search <keywords>
  • Information : kubectl krew info <plugin>
  • Actualisation : kubectl krew update
  • Mise à jour : kubectl krew upgrade <plugin>
  • Suppression : kubectl krew uninstall <plugin>
  • Liste : kubectl krew list

Si vous ne trouvez pas votre bonheur parmi ces plugins, sachez qu’il est possible d’ajouter d’autres repositories dans Krew. Ces repositories sont nommés “index” dont celui par défaut qui pointe vers https://github.com/kubernetes-sigs/krew-index.git. La documentation précise le fonctionnement des repositories.

Notre sélection

Nous avons fait une sélection de 10 plugins que nous utilisons couramment. Dans ces exemples, nous utiliserons un cluster Kubernetes managé (Kapsule) de chez Scaleway, en version 1.26.2 avec Cilium comme CNI (proposé par défaut).

Plugin ctx

Premier plugin incontournable, il permet de basculer rapidement de contexte de manière rapide et intuitive :

kubectl ctx

Plugin ns

Second plugin incontournable, il permet de se placer/déplacer dans un namespace qui sera celui par défaut pour votre contexte. De cette manière, fini les options “-n <namespace>” :

kubectl ns <namespace>

Liste des contextes et changement de namespace

Plugin rolesum

Il permet d’afficher un résumé des rôles RBAC à partir d’un sujet (ServiceAccount, User ou Group). La sortie est assez explicite pour comprendre rapidement les droits que vous avez :

kubectl get sa
kubectl rolesum <sa> 

Affichage des permissions sur le ServiceAccount kube-system/metrics-server

Plugin df-pv

Il permet d’afficher l’utilisation de vos PersistentVolumes. Nativement, il n’existe rien de tel avec la commande kubectl, c’est pourquoi l’utilisation de ce plugin peut être fort utile !

Dans l’exemple ci-dessous, nous avons déployé une stack Redis (via Helm) avec l’utilisation de 4 volumes pour les données. Nous avons rempli l’un des volumes volontairement.

kubectl df-pv

Affichage de la consommation de tous les PVC

Plugin deprecations

Il permet de vérifier les objets obsolètes. Très pratique lorsque vous souhaitez préparer l’upgrade de version de votre cluster. Cela vous permet de voir l’essentiel d’un premier coup d'œil !

Dans cet exemple, nous avons volontairement créé un objet PodSecurityPolicy, qui est déprécié depuis la version 1.21 et est supprimé à partir de la version 1.25, le cluster utilisé étant en 1.23.

kubectl deprecations

Affichage des changements d’APIs entre v1.23.12 vers v1.24.0

Affichage des changements d’APIs entre v1.23.12 vers v1.25.0

L’option “--k8s-version” vous permettra de définir la version exacte de votre cible. Par défaut, il fait la comparaison avec la dernière version disponible, mais ce ne sera peut-être pas votre cas.

Aussi, les options “--error-on-deleted” et “--error-on-deprecated” peuvent être utiles dans un contexte de CI/CD.

Plugin ice

Il permet d’afficher les paramètres de configuration des pods. Une excellente boîte à outils qui vous permet de gagner du temps sur des actions relativement basiques.

kubectl ice <command>

Affichage des images utilisées par les Pods du namespace argocd

Affichage des ressources (cpu & mémoire) des Pods du namespace argocd

Liste des options disponibles du plugin ice

Plugin ktop

Il permet d’afficher la consommation de votre cluster, tel que htop/btop pour Linux. Par défaut, il affiche tous les namespaces mais vous pouvez préciser un namespace en particulier avec l’option --namespace.

kubectl ktop

Vue global de la consommation du cluster

Cependant, il faut savoir qu’il n’est pas possible d’avoir la vue d’un nœud en particulier.

Plugin node-shell

Il permet de créer un shell root (via un pod avec des privilèges) sur un nœud cible. À partir d’ici, vous pouvez effectuer votre debug assez facilement comme si vous étiez dessus :

kubectl node-shell <node>

Connexion “shell” sur un noeud du cluster, par l’intermédiaire d’un pod

Plugin outdated

Il permet d’afficher la liste des images utilisées par les Pods dans le cluster ainsi que les potentielles mises à jour :

kubectl outdated

Liste des images, incluant les versions utilisées et disponibles

Plugin stern

Il permet d’afficher et de suivre les logs de plusieurs pods et conteneurs. Chaque ligne est colorée en fonction de son pod d’origine, ce qui permet une lecture facile et rapide. La sortie (raw par défaut) vous permettra de savoir exactement qui a fait quoi et donc de pouvoir rapidement cibler ce que vous cherchez. La sélection se fait à l’aide d’une expression régulière.

Cas d’utilisation standard avec les pods “redis-replicas” :

kubectl stern <pods-regex>

Affichage des logs pour les Pods ayant pour nom “redis-replicas*” 

Similaire, mais avec le label “app.kubernetes.io/name=redis” (cette fois-ci le redis-master vient s’ajouter puisqu’il possède ce label) :

kubectl stern -l <label>

Affichage des logs pour les Pods ayant un label spécifique

Cas d’utilisation en incluant un pattern pour les logs si vous avez déjà une idée de votre recherche (l’inverse étant aussi possible avec l’option --exclude) :

kubectl stern <label|pod-regex> --<include|exclude> ‘pattern-regex’

Affichage des logs contenant “Synchronization with” pour les Pods ayant un label spécifique

Outre ces quelques exemples, vous retrouverez aussi l’ajout d’un timestamp (via stern si votre application ne le gère pas) qui peut s’avérer fort pratique, ainsi qu’une sortie au format raw/json/extjson, etc.

Conclusion

Ces plugins sont intéressants puisqu’ils vous feront gagner un temps précieux lors de vos actions quotidiennes. Certains pour éviter d’avoir une longue ligne à taper ou pour éviter la répétition, tandis que d’autres pour faire ce que kubectl ne permet pas de faire.

La plupart des plugins sont développés en Go, et par l’intermédiaire de Krew, nous téléchargeons le binaire déjà compilé lié à notre architecture. Si jamais vous utilisez les processeurs M1/M2 d’Apple, vous pourriez rencontrer des problèmes si le plugin n’a pas été compilé pour l’architecture ARM. Un message similaire à celui-ci apparaîtra :

Installation du plugin “topology” impossible à cause de l’architecture

Mais rassurez-vous, ce n’est pas perdu pour autant ! Vous pouvez compiler le plugin en dehors de Krew (via go directement). Par ailleurs, si vous êtes motivé, nous vous invitons à proposer vos modifications avec une PR pour la prise en charge, le cas par exemple avec “pod-dive”.

Il faut également savoir que tous les plugins ne sont pas multiplateformes (macOS, Linux & Windows). C’est par exemple le cas avec allctx ou assert puisqu’ils sont développés en Bash.

N’hésitez pas à nous faire découvrir et partager vos plugins préférés !