Aller au contenu
Conteneurs & Orchestration medium

kubectl : maîtrisez la CLI Kubernetes de A à Z

15 min de lecture

logo kubernetes

Pour administrer vos clusters Kubernetes, vous devez installer kubectl, l’outil en ligne de commande de Kubernetes. kubectl vous permet de déployer, inspecter et gérer les ressources Kubernetes directement depuis votre terminal.

Pour installer kubectl sur Linux, suivez ces étapes :

Fenêtre de terminal
# Téléchargez la dernière version de kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# Rendez le fichier exécutable
chmod +x kubectl
# Déplacez le binaire dans votre PATH
sudo mv kubectl /usr/local/bin/
# Vérifiez l'installation
kubectl version --client

Si vous utilisez macOS, vous pouvez installer kubectl via Homebrew :

Fenêtre de terminal
# Installez kubectl avec Homebrew
brew install kubectl
# Vérifiez l'installation
kubectl version --client
Client Version: v1.30.1
Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3

Vous remarquerez que kubectl est installé avec Kustomize, un outil permettant de personnaliser les ressources Kubernetes. Tout est expliqué dans ce guide.

Pour installer kubectl sur Windows, utilisez Chocolatey, un gestionnaire de paquets pour Windows :

Fenêtre de terminal
# Installez kubectl avec Chocolatey
choco install kubernetes-cli
# Vérifiez l'installation
kubectl version --client

Pour installer kubectl on peut aussi utiliser asdf qui permet d’installer une très grande partie des outils permettant de gérer des clusters kubernetes.

Fenêtre de terminal
asdf plugin add kubectl
asdf install kubectl latest
asdf set --home kubectl latest

C’est mon outil préféré pour gérer les versions des outils que j’utilise quotidiennement.

Sa syntaxe est la suivante :

Fenêtre de terminal
kubectl [commande] [TYPE] [NOM] [flags]
  • commande : Indique l’opération que vous désirez exécuter sur une ou plusieurs ressources, par exemple create, get, describe, delete.
  • TYPE : Indique le type de ressources que vous voulez manipuler
  • NOM : Indique le nom de la ressource (sensible à la casse)
  • flags : flags optionnels

La commande kubectl options permet d’afficher toutes les options globales disponibles pour kubectl. Ces options peuvent être utilisées avec n’importe quelle sous-commande (get, describe, logs…) pour ajuster leur comportement

Fenêtre de terminal
kubectl options

Cela affiche une liste complète des options globales utilisables avec kubectl.

OptionDescription
--namespace=<nom> ou -nExécuter la commande dans un namespace spécifique.
--context=<nom>Changer de contexte Kubernetes sans modifier la configuration globale.
--kubeconfig=<fichier>Spécifier un fichier de configuration personnalisé.
--output=<format> ou -oDéfinir le format de sortie (json, yaml, wide).
--v=<niveau>Activer le mode verbeux pour afficher plus de détails (--v=6 pour le debug avancé).
--helpAfficher l’aide détaillée de kubectl.

Après avoir installé kubectl, il est essentiel de le configurer correctement pour interagir avec vos clusters Kubernetes. Dans ce chapitre, je vais expliquer comment mettre en place l’autocomplétion, gérer les fichiers de configuration dans le répertoire .kube et utiliser les contextes.

L’autocomplétion permet de faciliter l’utilisation de kubectl en vous suggérant automatiquement des commandes et des arguments. Voici comment l’activer pour différents shell’s.

Pour activer l’autocomplétion dans Bash, exécutez les commandes suivantes :

Fenêtre de terminal
# Ajouter l'autocomplétion à votre profil Bash
echo "source <(kubectl completion bash)" >> ~/.bashrc

Pour activer l’autocomplétion dans Zsh, suivez ces étapes :

Fenêtre de terminal
# Ajouter l'autocomplétion à votre profil Zsh
echo "source <(kubectl completion zsh)" >> ~/.zshrc

Pour activer l’autocomplétion dans Fish, utilisez la commande suivante :

Fenêtre de terminal
# Ajouter l'autocomplétion à votre profil Fish
kubectl completion fish > ~/.config/fish/completions/kubectl.fish

Redémarrer votre shell et tapez kubectl suivi de tabulation. Vous ferez par exemple pour changer de namespace, on verra la création plus tard, il suffit de taper kubectl -n suivi de [tab] et la liste de tous les namespaces existant sur votre cluster s’affichera.

Le répertoire .kube situé dans votre répertoire personnel contient les fichiers de configuration utilisés par kubectl. Le fichier principal est config, qui stocke les informations nécessaires pour se connecter à un ou plusieurs clusters.

Le fichier de configuration config contient les clusters, les utilisateurs et les contextes configurés. Voici un exemple de fichier config typique :

apiVersion: v1
clusters:
- cluster:
server: https://my-cluster-api-server
certificate-authority: /path/to/ca.crt
name: my-cluster
contexts:
- context:
cluster: my-cluster
user: my-user
namespace: default
name: my-context
current-context: my-context
kind: Config
preferences: {}
users:
- name: my-user
user:
token: MY_ACCESS_TOKEN

Lorsque vous travaillez avec plusieurs clusters ou environnements, il est pratique de séparer les configurations dans plusieurs fichiers. kubectl permet d’utiliser plusieurs fichiers de configuration grâce à la variable d’environnement KUBECONFIG.

Fenêtre de terminal
# Sous Linux/macOS
export KUBECONFIG=~/.kube/config-cluster2
# Sous Windows
set KUBECONFIG=%USERPROFILE%\.kube\config-cluster2

Vous pouvez définir la variable KUBECONFIG pour utiliser plusieurs fichiers de configuration en les séparant par des deux-points (:) sous Linux/macOS ou par un point-virgule (;) sous Windows. Par exemple :

Fenêtre de terminal
# Sous Linux/macOS
export KUBECONFIG=~/.kube/config:~/.kube/config-cluster2
# Sous Windows
set KUBECONFIG=%USERPROFILE%\.kube\config;%USERPROFILE%\.kube\config-cluster2

Les contextes sont expliqués dans un guide séparé mais voici un résumé rapide de ce qu’ils sont. Les contextes permettent de définir des configurations différentes pour se connecter à des clusters Kubernetes. Vous pouvez définir un contexte par défaut, qui sera utilisé si aucun autre contexte n’est spécifié.

La commande kubectl api-resources permet d’afficher une liste des ressources disponibles dans l’API Kubernetes. Cela inclut les ressources de haut niveau comme les Pods, les Services et les Deployments, ainsi que les ressources de bas niveau comme les Endpoints, les Events et les Nodes.

Guide dédié.

La commande kubectl explain fournit des informations complètes sur les champs des ressources, y compris :

  • Description : Une description textuelle de ce que le champ représente.
  • Type : Le type de données du champ (par exemple, string, integer, array).
  • Champ requis ou optionnel : Indique si le champ est obligatoire ou optionnel.
  • Champs enfants : Les sous-champs que ce champ peut contenir.

Guide dédié.

Dans Kubernetes, plusieurs commandes permettent de créer et de gérer les ressources au sein du cluster. Ces commandes sont essentielles pour déployer et mettre à jour les objets Kubernetes de manière efficace.

Les commandes kubectl create et kubectl apply sont utilisées pour ajouter de nouvelles ressources à un cluster Kubernetes.

  • kubectl create permet de créer une ressource à partir d’un fichier YAML ou directement en ligne de commande.
  • kubectl apply applique un fichier de configuration YAML et met à jour la ressource si elle existe déjà.

Ces commandes sont expliquées en détail dans un guide dédié : Créer et appliquer des ressources.

La modification des ressources Kubernetes peut être réalisée avec kubectl edit et kubectl patch.

  • kubectl edit ouvre directement un éditeur de texte pour modifier la ressource en cours d’exécution.
  • kubectl patch permet d’appliquer des modifications partielles sur une ressource sans éditer manuellement le fichier de configuration.

Ces commandes sont documentées dans un guide détaillé : Modifier des ressources.

Lorsque des modifications doivent être appliquées sur une ressource existante en remplaçant complètement sa définition, kubectl replace est la commande appropriée. Elle supprime puis recrée la ressource avec la nouvelle configuration fournie.

Retrouvez les explications et cas d’utilisation dans le guide dédié : Modifier des ressources.

Récupération d’informations sur les ressources

Section intitulée « Récupération d’informations sur les ressources »

Récupérer des informations sur les ressources : kubectl get

Section intitulée « Récupérer des informations sur les ressources : kubectl get »

La commande kubectl get est l’une des commandes les plus couramment utilisées pour récupérer des informations sur les ressources Kubernetes. Elle permet d’afficher une liste des ressources, de filtrer les ressources par différents critères et de personnaliser la sortie pour afficher les informations souhaitées.

Tout est documenté dans un guide dédié.

Obtenir des informations détaillées sur les ressources : kubectl describe

Section intitulée « Obtenir des informations détaillées sur les ressources : kubectl describe »

La commande kubectl describe est un outil essentiel pour obtenir des informations détaillées sur les ressources Kubernetes. Elle fournit des informations complètes sur les ressources, y compris les événements, les états actuels et les propriétés spécifiques de chaque ressource.

Tout est documenté dans un guide dédié.

La commande kubectl logs est un outil essentiel pour surveiller et déboguer les applications exécutées dans un cluster Kubernetes. Elle permet d’afficher les journaux des conteneurs, offrant ainsi une visibilité sur le fonctionnement interne de vos applications. Cette commande est particulièrement utile pour diagnostiquer les problèmes et comprendre le comportement des applications.

Tout est documenté dans un guide dédié.

La commande kubectl top est un outil puissant pour surveiller les ressources utilisées par les composants du cluster Kubernetes. Elle fournit des informations en temps réel sur l’utilisation des ressources CPU et mémoire par les nœuds et les pods, ce qui est essentiel pour la gestion de la performance et la détection des goulets d’étranglement.

Tout est documenté dans un guide dédié.

Exécuter des commandes dans un Pod avec kubectl exec

Section intitulée « Exécuter des commandes dans un Pod avec kubectl exec »

La commande kubectl exec est un outil puissant pour interagir directement avec un conteneur exécuté dans un cluster Kubernetes. Elle permet d’exécuter des commandes à l’intérieur d’un conteneur, ce qui est particulièrement utile pour le débogage, l’inspection des fichiers et l’exécution de diagnostics en direct.

Tout est documenté dans un guide dédié.

La commande kubectl attach me permet de se connecter à un conteneur en cours d’exécution et d’afficher sa sortie standard (stdout et stderr) en direct. Contrairement à kubectl logs, cette commande permet aussi d’interagir avec l’application si elle accepte une entrée (stdin).

Fenêtre de terminal
kubectl attach -it mon-pod
  • -i : Active l’entrée (stdin) pour interagir avec le conteneur.
  • -t : Active le mode terminal interactif.

Attention : Si le conteneur ne supporte pas l’entrée interactive, kubectl attach ne fonctionnera pas. Dans ce cas, mieux vaut utiliser kubectl logs -f.

Parfois la commande kubectl exec ne suffit pas pour déboguer un conteneur. La commande kubectl debug est un outil avancé qui permet de déboguer des conteneurs en exécutant un conteneur de débogage à côté du conteneur cible. Cela permet d’inspecter l’état du conteneur, d’exécuter des commandes de diagnostic et de résoudre les problèmes en direct.

Tout est documenté dans un guide dédié.

Copier des fichiers vers/depuis un conteneur avec kubectl cp

Section intitulée « Copier des fichiers vers/depuis un conteneur avec kubectl cp »

La commande kubectl cp permet de copier des fichiers vers ou depuis un conteneur en cours d’exécution. Elle est utile pour transférer des fichiers entre votre machine locale et un conteneur Kubernetes, ce qui est essentiel pour le débogage, le déploiement d’applications et la gestion des données.

(Copier un fichier depuis un conteneur) :

Pour copier un fichier depuis un conteneur nommé nginx dans le namespace default :

Fenêtre de terminal
kubectl cp default/nginx:/var/log/nginx/error.log error.log

(Copier un fichier vers un conteneur) :

Pour copier un fichier local config.yaml vers un conteneur nommé app dans le namespace default :

Fenêtre de terminal
kubectl cp config.yaml default/app:/app/config.yaml

La commande kubectl delete permet de supprimer des ressources Kubernetes.

La commande kubectl annotate permet d’ajouter ou de modifier des annotations sur les ressources Kubernetes.

Guide dédié : Annotations Kubernetes.

La commande kubectl label permet d’ajouter, de modifier ou de supprimer des labels sur les ressources Kubernetes.

Guide dédié : Gestion des labels Kubernetes.

La commande kubectl expose permet de créer un service pour exposer une ressource Kubernetes.

Guide dédié : Exposition des applications.

La commande kubectl port-forward permet de rediriger un port local vers un pod ou un service dans le cluster.

Guide dédié : Redirection de ports.

La commande kubectl proxy permet d’établir un proxy entre l’API Kubernetes et l’environnement local.

Guide dédié : Proxy API Kubernetes.

La commande kubectl scale permet d’ajuster manuellement le nombre de réplicas d’une ressource.

Guide dédié : Mise à l’échelle des ressources.

La commande kubectl autoscale permet de configurer l’auto-scaling des pods en fonction de l’utilisation des ressources.

Guide dédié : Auto-scaling des ressources.

La commande kubectl rollout permet de gérer le cycle de vie des déploiements, y compris les mises à jour et les rollbacks.

Guide dédié : Gestion des déploiements.

La commande kubectl set permet de modifier dynamiquement les valeurs des configurations d’un déploiement.

Guide dédié : Modification des configurations.

La commande kubectl wait permet d’attendre qu’une ressource atteigne un état spécifique avant de poursuivre une action.

Guide dédié : Attente et validation des ressources.

La commande kubectl diff permet de comparer une ressource actuelle avec une configuration fournie avant application.

Guide dédié : Attente et validation des ressources.

Maîtriser la CLI kubectl est essentiel pour tout administrateur de clusters Kubernetes. En tant qu’outil principal pour interagir avec les clusters, kubectl offre une gamme complète de fonctionnalités qui permettent de gérer, déboguer et surveiller efficacement les ressources Kubernetes.

Je vous encourage vivement à continuer à explorer et à pratiquer avec kubectl, car cette compétence est essentielle pour tout professionnel travaillant avec Kubernetes. Les chapitres précédents de ce guide vous fourniront une base solide pour démarrer et approfondir votre expertise dans l’administration de clusters Kubernetes.