Contextes et outils tiers Kubernetes
Objectifs du chapitre et prérequis
Kubernetes est un outil relativement complexe. Avant d’aller plus loin dans la mise en place de clusters, vous allez découvrir quelques outils intéressants à utiliser en cas de problème ou pour vous simplifier la vie.
En premier lieu, la notion de contextes sera abordée ainsi que la présentation d’outils pour les manipuler (kubectx, kubens, kube-ps1). Du temps sera également consacré à ajouter du contexte dans l’invite de l’utilisateur pour savoir rapidement sur quel cluster vous êtes en train de travailler.
Viendra ensuite une présentation de différents outils permettant de vous faciliter les choses, comme la surveillance de l’état des pods ou la capture du trafic réseau d’un conteneur.
Gestion des contextes avec kubectl
1. Origine du besoin
Avant de tester des clusters Kubernetes de différentes origines, il est intéressant de comprendre comment est stockée l’information de connexion en local, ceci afin de :
-
pouvoir facilement passer d’un cluster à un autre ;
-
stocker l’information quelque part (pour l’archiver, par exemple).
2. Lister les contextes
Au lancement de Minikube, le lecteur a créé un contexte par défaut : minikube.
Un bon moyen de s’en rendre compte est d’utiliser la commande kubectl suivie de l’option config et du mot-clé get-contexts :
$ kubectl config get-contexts
Dans le cas où vous auriez configuré un accès à minikube ainsi qu’un cluster créé chez Google, la sortie pourrait ressembler à ce qui suit :
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
gke-test gke-test gke-test
* minikube minikube minikube
Toujours avec l’option config, la sous-option current-context permet de récupérer le champ NAME du contexte par défaut :
$ kubectl config current-context
Dans le cas où minikube serait le contexte par défaut, la commande renverra le résultat suivant :
minikube
3. Variable d’environnement KUBECONFIG
a. Spécifier l’emplacement du fichier
La variable d’environnement KUBECONFIG permet de faire cohabiter plusieurs clusters. Cette dernière permet de spécifier un fichier différent de celui par défaut (~/.kube/config).
L’export de la variable d’environnement se fait de la manière suivante :
$ export KUBECONFIG=~/kubeconfig/cluster-prod
Consultez à nouveau les contextes vus par la commande kubectl :
$ kubectl config get-contexts
Les contextes sont différents de la fois précédente :
CURRENT NAME CLUSTER AUTHINFO NAMESPACE
* hp-a.ex.com hp-a.ex.com hp-a.ex.com
b. Spécifier plusieurs fichiers
À noter que la variable KUBECONFIG se comporte comme la variable...
Utilitaires Kubernetes
1. Krew : gestionnaire d’extensions
a. Présentation du mécanisme d’extensions
La commande kubectl permet, un peu de la même manière que Git, d’être étendue à l’aide d’extensions (plugins). Pour cela, il faut créer un fichier commençant par « kubectl » suivi d’un tiret (-) et du mot-clé de l’extension.
Pour une extension hello qui afficherait un message à l’utilisateur, créez le fichier /usr/local/bin/kubectl-hello avec le contenu suivant :
#!/bin/sh
echo hello from Kubectl plugin
Rendez le contenu de ce fichier exécutable :
$ sudo chmod +x /usr/local/bin/kubectl-hello
Puis, pour tester l’extension, lancez l’appel suivant :
$ kubectl hello
La commande doit alors renvoyer le message suivant :
hello from Kubectl plugin
b. Installation de Krew
Ce mécanisme d’extension est particulièrement intéressant, mais la création d’extensions demande un certain savoir-faire. L’extension Krew est là pour gérer la mise à disposition d’extensions par la communauté.
L’installation de cette extension se fait en exécutant le shell suivant :
(
set -x; cd "$(mktemp -d)" &&
OS="$(uname | tr '[:upper:]' '[:lower:]')" &&
ARCH="$(uname -m | sed -e 's/x86_64/amd64/' -e 's/
\(arm\)\(64\)\?.*/\1\2/' -e 's/aarch64$/arm64/')" &&
KREW="krew-${OS}_${ARCH}" &&
curl -fsSLO "https://github.com/kubernetes-sigs/krew/releases/
latest/download/${KREW}.tar.gz" &&
tar zxvf "${KREW}.tar.gz" &&
./"${KREW}" install krew
)
Sauvegardez ce fichier sous le nom install-krew.sh puis exécutez-le de la manière suivante :
$ sh install-krew.sh
En fin d’installation, le shell vous indiquera d’ajouter la ligne suivante dans votre shell courant (~/.zshrc pour zsh ou ~/.bashrc pour bash) :
export PATH="${KREW_ROOT:-$HOME/.krew}/bin:$PATH"...