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
- Installation : kubectl krew install ctx
- GitHub : https://github.com/ahmetb/kubectx
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
- Installation : kubectl krew install ns
- GitHub : https://github.com/ahmetb/kubectx
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
- Installation : kubectl krew install rolesum
- GitHub : https://github.com/Ladicle/kubectl-rolesum
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
- Installation : kubectl krew install df-pv
- GitHub : https://github.com/yashbhutwala/kubectl-df-pv
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.
- Installation : kubectl krew install deprecations
- Github : https://github.com/rikatz/kubepug
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
- Installation : kubectl krew install ice
- GitHub : https://github.com/NimbleArchitect/kubectl-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.
- Installation : kubectl krew install ktop
- GitHub : https://github.com/vladimirvivien/ktop
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
- Installation : kubectl krew install node-shell
- GitHub : https://github.com/kvaps/kubectl-node-shell
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
- Installation : kubectl krew install outdated
- GitHub : https://github.com/replicatedhq/outdated
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.
- Installation : kubectl krew install stern
- GitHub : https://github.com/stern/stern
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 !