Aller au contenu principal

Maîtriser K9s, L'outil incontournable pour Kubernetes

logo k9s

En tant que spécialiste DevOps, j'apprécie particulièrement les outils qui rendent la gestion des clusters Kubernetes plus fluide et intuitive. Parmi eux, K9s se distingue comme un outil incontournable. Conçu pour les administrateurs système et les développeurs travaillant avec Kubernetes, K9s offre une interface utilisateur basée sur le terminal, combinant puissance et simplicité d'utilisation.

L'objectif de K9s est de fournir une vue d'ensemble rapide et complète de l'état d'un cluster Kubernetes. Grâce à son interface en mode texte, il permet de naviguer aisément à travers les différentes ressources Kubernetes, telles que les pods, les déploiements, et les services. Cette approche est particulièrement appréciée pour sa rapidité, surtout lorsqu'on travaille avec de grands clusters comportant de nombreuses ressources.

Installation K9s

Installation de K9s

L'installation de K9s est relativement simple et varie légèrement en fonction de votre système d'exploitation. Pour les utilisateurs de Linux et macOS, vous pouvez utiliser des gestionnaires de paquets comme Homebrew sur macOS ou des outils similaires sous Linux.

Sur Linux

Comme d'habitude, je vous conseille de l'installer avec asdf-vm :

asdf plugin add k9s
asdf install k9s latest
asdf global k9s latest

Sur Windows

Le classique Choco ou Scoop :

# Via scoop
scoop install k9s
# Via chocolatey
choco install k9s

Sur MacOS

brew install derailed/k9s/k9s

Utilisation de K9s

Maintenant que k9s est installé, vous pouvez le lancer depuis votre terminal avec la commande k9s. Si vous avez plusieurs fichiers config.yaml, vous indiquez lequel utiliser grâce à l'option --kubeconfig ~/.kube/config.yaml. Dans le cas où plusieurs contextes existent, il vous demandera de choisir lequel utilisé. Sinon k9s affichera par défaut la liste des pods du cluster dans le namespace default.

k9s

Lorsque vous quittez l'application, k9s stocke les infos de namespace et de types de ressources utilisées pour les réafficher lors de sa prochaine utilisation.

k9s possède d'autres options dont les plus importantes :

  • --refresh=n pour modifier la tempo de refresh (par défaut 2s)
  • --namespace=<namespace> ou -n <namespace> pour se rendre directement sur un namespace particulier.
  • -c <view> : accède directement à une vue. Par défaut po (pod), mais on peut utiliser : ns (namespace), ctx (context), pu (pulses) et pop (popeye).
  • --readonly Accès en lecture seul
  • --all-namespaces : affiche tous les namespaces

k9s info : qui donne des infos sur la version et la localisation des différents répertoires : logs, config et capture d'écran.

k9s info
____ __.________
| |/ _/ __ \______
| < \____ / ___/
| | \ / /\___ \
|____|__ \ /____//____ >
\/ \/

Version: v0.30.6
Config: /home/bob/.config/k9s/config.yaml
Custom Views: /home/bob/.config/k9s/views.yaml
Plugins: /home/bob/.config/k9s/plugins.yaml
Hotkeys: /home/bob/.config/k9s/hotkeys.yaml
Aliases: /home/bob/.config/k9s/aliases.yaml
Skins: /home/bob/.config/k9s/skins
Context Configs: /home/bob/.local/share/k9s/clusters
Logs: /home/bob/.local/state/k9s/k9s.log
Benchmarks: /home/bob/.local/state/k9s/benchmarks
ScreenDumps: /home/bob/.local/state/k9s/screen-dumps

Lorsque vous lancez K9s, vous êtes accueilli par une vue par défaut qui affiche tous les pods dans le cluster actuellement sélectionné. Cette vue est le point de départ pour naviguer à travers les différentes ressources de votre cluster.

interface k9s

La conception de l'interface est centrée sur la simplicité et l'efficacité. En haut, vous trouverez une barre d'état qui affiche des informations essentielles comme le contexte Kubernetes actuel et le namespace. Au bas de l'écran, une ligne de commande vous permet d'entrer des commandes directement.

La navigation dans K9s est principalement basée sur des raccourcis clavier. Par exemple :

  • Changer de ressource : Pour basculer entre différentes ressources Kubernetes (comme les services, déploiements, etc.), vous pouvez utiliser les touches : suivies du nom de la ressource. Par exemple, :svc vous amènera à la liste des services.
  • Naviguer dans les listes : Utilisez les touches fléchées pour vous déplacer dans les listes. La touche Enter permet de voir les détails d'un élément sélectionné.
  • Retour à l'écran précédent : La touche Esc vous ramène à l'affichage précédent.

Les autres vues :

  • :popeye : Signale d'éventuels problèmes avec les ressources de votre cluster.
  • :xray : Affiche les dépendances entre ressource
  • :pulse : un tableau de bord affichant l'état de santé de votre cluster
  • :rbac : affiche les infos rbac si elles sont activées.

Les touches de contrôles

K9s permet également d'exécuter des commandes directement depuis son interface. Par exemple, pour obtenir des détails sur un pod spécifique, sélectionnez-le dans la liste et appuyez sur d. Une fenêtre s'ouvrira, affichant des informations détaillées sur ce pod.

Pour obtenir de l'aide, il suffit d'appuyer sur la touche [?].

Description des touches :

  • La touche [0] permet d’afficher les resources de tous les namespaces
  • [1] celle du namespace default et d’autres raccourcis sont ajoutés au fur et à mesure que vous naviguez à travers les namespaces.
  • En fonction de l'écran dans l'écran où vous vous trouvez les commandes disponibles s'afficheront. Par exemple dans la vue pod, [l] pour afficher les logs d'un pod, [d] pour afficher la description, [e] pour éditer une ressource, [s] pour exécuter un shell sur un pod
  • [/] suivit d'une string ou d'une regex permet de filtrer les informations affichées
  • [/] suivit -l <label> filtre par label
  • [/] suivit de -f <filter>fait du fuzzy find
  • [:] suivi du nom d'une vue : pulses, pod, popeye, xray
  • Pour sortir d'un écran utilisez la touche [esc]
  • Pour quitter [CTRL] + [C] ou [:]quit

k9s filtres

Personnalisation de k9s

L'un des aspects les plus attrayants de K9s est sa capacité à être personnalisé selon les préférences de chaque utilisateur. Cette personnalisation améliore non seulement l'expérience utilisateur, mais permet également une interaction plus rapide et plus efficace avec vos clusters Kubernetes.

Pour personnaliser ces paramètres, vous devez modifier le fichier de configuration de K9s. Ce fichier se trouve généralement dans votre répertoire personnel sous .k9s/config.yml.

Le fichier d'origine :

cat ~/.config/k9s/config.yaml
k9s:
liveViewAutoRefresh: false
screenDumpDir: /home/bob/.local/state/k9s/screen-dumps
refreshRate: 2
maxConnRetry: 5
readOnly: false
noExitOnCtrlC: false
ui:
enableMouse: false
headless: false
logoless: false
crumbsless: false
noIcons: false
skipLatestRevCheck: false
disablePodCounting: false
shellPod:
image: busybox:1.35.0
namespace: default
limits:
cpu: 100m
memory: 100Mi
imageScans:
enable: false
exclusions:
namespaces: []
labels: {}
logger:
tail: 100
buffer: 5000
sinceSeconds: -1
fullScreenLogs: false
textWrap: false
showTime: false
thresholds:
cpu:
critical: 90
warn: 70
memory:
critical: 90
warn: 70

K9s offre plusieurs options de personnalisation pour adapter son interface à vos besoins :

  • Thèmes : K9s supporte plusieurs thèmes, vous permettant de changer l'apparence de l'interface. Vous pouvez choisir un thème par défaut ou en créer un personnalisé.
  • Configuration des vues : Vous pouvez configurer les colonnes affichées pour chaque type de ressource Kubernetes. Cela vous permet de concentrer votre attention sur les informations les plus pertinentes pour votre travail.
  • Raccourcis Claviers : Bien que K9s vienne avec un ensemble de raccourcis par défaut, vous pouvez les personnaliser pour mieux correspondre à vos habitudes de travail.

Changement de Thème

Si vous voulez créer un thème personnalisé, vous pouvez définir les couleurs pour différents éléments de l'interface. Il faut créer un fichier dans le répertoire ~/.config/k9s/skins. Créons le fichier in-the-vay.yaml avec ce contenu :

# $XDG_CONFIG_HOME/k9s/in_the_navy_skin.yaml
k9s:
# General K9s styles
body:
fgColor: dodgerblue
bgColor: '#ffffff'
logoColor: '#0000ff'

# ClusterInfoView styles
info:
fgColor: lightskyblue
sectionColor: steelblue

# Frame styles
frame:
# Borders styles
border:
fgColor: dodgerblue
focusColor: aliceblue

# MenuView attributes and styles
menu:
fgColor: darkblue
keyColor: cornflowerblue
# Used for favorite namespaces
numKeyColor: cadetblue

# CrumbView attributes for history navigation.
crumbs:
fgColor: white
bgColor: steelblue
activeColor: skyblue

# Resource status and update styles
status:
newColor: '#00ff00'
modifyColor: powderblue
addColor: lightskyblue
errorColor: indianred
highlightcolor: royalblue
killColor: slategray
completedColor: gray

# Border title styles.
title:
fgColor: aqua
bgColor: white
highlightColor: skyblue
counterColor: slateblue
filterColor: slategray
# Specific views styles
views:
# TableView attributes.
table:
fgColor: blue
bgColor: darkblue
cursorColor: aqua
# Header row styles.
header:
fgColor: white
bgColor: darkblue
sorterColor: orange

# YAML info styles.
yaml:
keyColor: steelblue
colonColor: blue
valueColor: royalblue

# Logs styles.
logs:
fgColor: white
bgColor: black

Pour changer le thème, ouvrez le fichier config.yml et modifiez la section k9s.skin.

Par exemple, pour utiliser le thème "dracula" :

k9s:
ui:
skin:
name: in-the-navy

Dans le projet K9s, vous trouverez plusieurs thèmes prédéfinis, et vous pouvez également créer le vôtre.

Les Raccourcis Claviers

Les raccourcis clavier sont essentiels pour naviguer rapidement dans K9s.

  • Modification des raccourcis : Les raccourcis peuvent être modifiés en éditant le fichier de configuration de K9s. Vous pouvez relier des actions spécifiques à des touches différentes, en fonction de vos préférences.

Il faut créer un fichier ~/.config/k9s/hotkeys.yaml :

# $XDG_DATA_HOME/k9s/hotkeys.yaml
hotKeys:

# Hitting Shift-0 navigates to your pod view matching pods with labels app=kindnet
shift-0:
shortCut: Shift-0
description: Viewing pods
command: pods app=kindnet

# Hitting Shift-1 navigates to your deployments
shift-1:
shortCut: Shift-1
description: View deployments
command: dp

# Hitting Shift-2 navigates to your xray deployments
shift-2:
shortCut: Shift-2
description: XRay Deployments
command: xray deploy

Définition de plugins

L'utilisation de plugins dans K9s enrichit considérablement votre expérience de gestion des clusters Kubernetes, en vous permettant d'étendre les fonctionnalités de base de l'outil. Voici comment installer et utiliser des plugins avec K9s.

Dans le répertoire ~/.config/k9s créez un fichier plugins.yaml :

plugins:
dive:
shortcut: d
confirm: false
description: "Dive image"
scopes:
- containers
command: dive
background: false
args:
- $COL-IMAGE

Ici on définit un plugin permettant d'utiliser l'outil dive.

Composants d'un Plugin

Un plugin K9s est composé des éléments suivants :

  • shortcut : Il s'agit de la combinaison de touches utilisée pour activer votre plugin dans K9s. Par exemple, d peut être un raccourci pour activer le plugin dive.
  • description : C'est un texte explicatif qui s'affiche à côté du raccourci dans le menu de K9s. Il décrit brièvement ce que fait le plugin.
  • scopes : Ceci définit une collection de noms ou de noms courts de ressources associées à votre plugin. Par exemple, si votre plugin est conçu pour fonctionner avec des pods, vous définirez 'pods' dans les portées.
  • command : Elle représente la commande exécutée par votre plugin lors de son activation. Cette commande peut être un script shell ou tout autre exécutable.
  • background : Ce paramètre spécifie si la commande doit s'exécuter en arrière-plan ou non.
  • args : Ce sont les différents arguments qui doivent être appliqués à la commande définie dans le champ Commande.

Variables d'Environnement Prédéfinies

Lors de la création de votre plugin, vous avez accès à certaines variables d'environnement prédéfinies que vous pouvez utiliser :

  • $NAMESPACE : Le namespace de la ressource sélectionnée.
  • $NAME : Le nom de la ressource sélectionnée.
  • $CONTAINER : Le conteneur actuel, si applicable.
  • $FILTER : Le filtre actuel, s'il y en a un.
  • $KUBECONFIG : L'emplacement du KubeConfig.
  • $CLUSTER : Le nom du cluster actif.
  • $CONTEXT : Le nom du contexte actif.
  • $USER : L'utilisateur actif.
  • $GROUPS : Les groupes actifs.
  • $POD : Utilisé lors de la vue d'un conteneur.
  • $COL-<NOM_COLONNE_RESSOURCE> : Utilisez un nom de colonne donné pour une ressource visualisée. Doit être préfixé par COL-!

Conclusion

Créer un plugin pour K9s ouvre un monde de possibilités pour personnaliser et étendre les capacités de gestion de vos clusters Kubernetes. En utilisant ces composants et variables d'environnement, vous pouvez concevoir des plugins qui s'intègrent parfaitement avec votre workflow et répondent à des besoins spécifiques. Que vous souhaitiez simplifier des tâches répétitives, ajouter des fonctionnalités de surveillance, ou intégrer des outils externes, les plugins K9s offrent une solution flexible et puissante.

Conclusion

La personnalisation de K9s joue un rôle crucial dans l'optimisation de votre expérience de gestion des clusters Kubernetes. En adaptant l'interface et les raccourcis à vos besoins, vous pouvez améliorer significativement votre efficacité et votre confort d'utilisation. Dans le prochain et dernier chapitre, je partagerai des astuces et des bonnes pratiques pour maximiser les bénéfices de K9s dans votre travail quotidien.

Plus d'infos

  • Dépôt GitHub de K9s : Le dépôt GitHub offre un aperçu du projet, les dernières mises à jour, et des instructions sur l'installation et la configuration. Vous pouvez le consulter à cette adresse : GitHub - derailed/k9s.

  • Site Officiel de la Documentation K9s : Pour des informations plus détaillées sur l'installation, l'utilisation, la personnalisation, les raccourcis clavier, les plugins, et plus encore, vous pouvez visiter le site officiel de la documentation de K9s : K9s Documentation.