Je gère le fonctionnement de grands clusters Kubernetes depuis plus de trois ans et je souhaite partager mon approche minimaliste de la configuration du terminal kubectl, qui s'est avérée très efficace dans le travail quotidien. Un terminal de ligne de commande bien configuré peut considérablement augmenter votre productivité. C'est comme du pain et du beurre - une combinaison magique.
Mais contrairement aux modifications et aux ajouts fonctionnels populaires, je crois en une configuration simple qui ne nécessite pas l'installation de nouveaux binaires, wrappers ou modifications. Surtout dans le cas de kubectl - un outil natif, raisonnablement bien conçu avec très peu d'inconvénients.
Voici quatre modules complémentaires simples au terminal kubectl. Avec cette configuration, je gère chaque jour 20 grands clusters Kubernetes de 400 machines.
Utilisation de kubetail pour suivre les journaux de plusieurs pods
La première chose que vous remarquez lors de l'utilisation de kubectl est la difficulté de garder une trace des journaux sur plusieurs pods. C'est l'un des scénarios les plus demandés qui n'a pas encore été implémenté dans kubectl.
Si vous avez besoin de suivre le journal d'un seul pod dans kubectl, cela ressemble à ceci:
kubectl logs -f <POD_NAME> -n <NAMESPACE>
Pour suivre plusieurs pods dans kubetail, écrivez simplement:
kubetail <POD_NAME_REGEX> -n <NAMESPACE>
Vous commencerez à suivre tous les pods qui correspondent à l'expression régulière. Étant donné que plusieurs pods sont enregistrés en même temps, kubetail les marque de différentes couleurs pour vous aider à naviguer.
kubetail est un simple wrapper sur kubectl. Il est facile à installer, vous pouvez trouver les instructions ici .
2. Modification dynamique de l'espace de noms par défaut
Finalement, vous serez fatigué de définir encore et encore l'indicateur d'espace de noms pour chaque opération kubectl. Nous devons comprendre comment modifier dynamiquement les espaces de noms par défaut.
Pour ce faire, j'ai écrit une simple fonction d'alias
ksn
(le nom implique un espace de noms défini ).
# Add the following to .zshrc/.bashrc...etc
# Allows setting default namespace while working with kubectl #
alias k='kubectl'
alias ksn='_f(){k get namespace $1 > /dev/null; if [ $? -eq 1 ]; then return $?; fi; k config set-context $(k config current-context) --namespace=$1; echo "Namespace: $1"};_f'
#Usage:
#➜ ~ ksn dev1 (dev-context/dev1)
# Context "dev-context" modified.
# Namespace: dev1
#➜ ~ ksn ff (dev-context/dev1)
# Error from server (NotFound): namespaces "ff" not found
Habituellement, nous travaillons avec un tableau d'espaces de noms en fonction de la tâche en cours. Et comme 80% des problèmes sont associés aux espaces de noms Kafka, cette fonctionnalité est depuis longtemps mon outil par défaut. Cela vous fera gagner beaucoup de temps, en particulier lorsque vous travaillez sur des tâches complexes nécessitant la saisie de nombreuses instructions dans kubectl.
3. Affichage du contexte de kube et de l'espace de noms dans l'invite du shell
Lorsque vous utilisez les commandes kubectl, vous devez toujours faire attention aux fichiers
kube-context
et namespace
. Ce n'est pas si facile lorsque vous gérez simultanément des clusters dans 20 contextes différents et 50 espaces de noms. Il existe un risque d'utiliser la mauvaise commande dans l'environnement, en particulier lorsque vous travaillez sur plusieurs tâches en même temps dans différents clusters et contextes.
Pour résoudre ce problème, il est extrêmement utile d'afficher constamment l'espace de noms et le contexte actifs dans la fenêtre adjacente.
Dans l'exemple ci-dessous, mon contexte est
dev2–1
et l'espace de noms est test
. Il me suffit de regarder ces informations lorsque j'exécute différentes commandes dans le cluster.
Vous pouvez trouver les instructions d'installation et de configuration ici .
4. Les alias kubectl les plus importants
Les alias sont le moyen le plus rapide de personnaliser et d'accélérer votre travail dans le terminal. Voici mes alias les plus utilisés, qui font presque partie de ma nature:
alias k='kubectl '
alias kcc='kubectl config current-context'
alias kdp='kubectl delete po'
alias kgc='kubectl config get-contexts'
alias kge='kubectl get events --sort-by='\''{.lastTimestamp}'\'
alias kgp='kubectl get po'
alias kl='kubectl logs '
alias kpf='kubectl port-forward'
alias ksc='kubectl config use-context'
Moins c'est mieux: ne surchargez pas votre terminal
Nous avons couvert quatre améliorations majeures du terminal pour les utilisateurs de kubectl:
- Utilisation de kubetail pour garder une trace des journaux de plusieurs pods.
- Changer dynamiquement les espaces de noms par défaut pour réduire considérablement la longueur des instructions kubectl.
- Afficher le contexte et les espaces de noms à côté de votre terminal pour éviter les erreurs accidentelles.
- Liste des alias kubectl importants.
Contrairement à cet ensemble minimaliste, les mises à niveau de terminaux populaires (comme les K9 ) sont souvent débordées, pleines de fonctionnalités et d'emballages de bonbons, mais elles sont lentes, distrayantes et, plus important encore, inutiles. Plus vous ajoutez de fonctionnalités (paillettes et nœuds), plus il faut de temps pour parcourir toutes ces informations supplémentaires à l'écran.
L'élégante configuration du terminal vous aide à rester concentré comme rien d'autre.
Une configuration simple basée sur la ligne de commande vous permettra de développer rapidement et efficacement à l'aide de binaires et d'outils natifs. Ceci est très important, en particulier lorsque vous travaillez avec une grande infrastructure, en vous connectant et en vous déconnectant de différents profils sur des machines virtuelles.
La configuration de votre terminal doit vous enrichir en tant que développeur, pas vous donner l'impression d'être sans mains.