Aller au contenu

Kubectl de A à Z

Mise à jour :

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.

Installation de kubectl

Installation sur Linux

Pour installer kubectl sur Linux, suivez ces étapes :

Terminal window
# 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

Installation sur macOS

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

Terminal window
# 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.

Installation sur Windows

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

Terminal window
# Installez kubectl avec Chocolatey
choco install kubernetes-cli
# Vérifiez l'installation
kubectl version --client

Installation avec asdf

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.

Terminal window
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.

Syntaxe de kubectl

Sa syntaxe est la suivante :

Terminal window
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

kubectl options : Afficher les options globales

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

Terminal window
kubectl options

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

Options globales utiles

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.

Configuration 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.

Mise en place de l’autocomplétion

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.

Bash

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

Terminal window
# Ajouter l'autocomplétion à votre profil Bash
echo "source <(kubectl completion bash)" >> ~/.bashrc

Zsh

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

Terminal window
# Ajouter l'autocomplétion à votre profil Zsh
echo "source <(kubectl completion zsh)" >> ~/.zshrc

Fish

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

Terminal window
# 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.

Les fichiers de configuration

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

Utilisation de la variable KUBECONFIG

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.

Terminal window
# 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 :

Terminal window
# Sous Linux/macOS
export KUBECONFIG=~/.kube/config:~/.kube/config-cluster2
# Sous Windows
set KUBECONFIG=%USERPROFILE%\.kube\config;%USERPROFILE%\.kube\config-cluster2

Les contextes

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é.

Exploration des ressources Kubernetes

kubectl api-resources

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é.

kubectl explain

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é.

Création et gestion des ressources Kubernetes

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.

kubectl create et kubectl apply

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.

kubectl edit et kubectl patch

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.

kubectl replace

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

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

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é.

Surveiller vos applications avec kubectl logs

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é.

Surveiller vos ressources avec top

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é.

Manipulation des pods et conteneurs

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é.

Se connecter à un conteneur avec kubectl attach

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).

Utilisation de base

Terminal window
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.

Debugguer vos ressources avec kubectl debug

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

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.

Exemples pratiques

(Copier un fichier depuis un conteneur) :

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

Terminal window
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 :

Terminal window
kubectl cp config.yaml default/app:/app/config.yaml

Gestion avancée des ressources

kubectl delete

La commande kubectl delete permet de supprimer des ressources Kubernetes.

kubectl annotate

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

Guide dédié : Annotations Kubernetes.

kubectl label

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.

Exposition et accès aux applications

kubectl expose

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

Guide dédié : Exposition des applications.

kubectl port-forward

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.

kubectl proxy

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

Guide dédié : Proxy API Kubernetes.

Mise à l’échelle et gestion des déploiements

kubectl scale

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

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

kubectl autoscale

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.

kubectl rollout

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.

kubectl set

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

Guide dédié : Modification des configurations.

Attente et validation des ressources

kubectl wait

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.

kubectl diff

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

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

Conclusion

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.