Kubectl de A à Z
Mise à jour :
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 :
# Téléchargez la dernière version de kubectlcurl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
# Rendez le fichier exécutablechmod +x kubectl
# Déplacez le binaire dans votre PATHsudo mv kubectl /usr/local/bin/
# Vérifiez l'installationkubectl version --client
Installation sur macOS
Si vous utilisez macOS, vous pouvez installer kubectl via Homebrew :
# Installez kubectl avec Homebrewbrew install kubectl
# Vérifiez l'installationkubectl version --clientClient Version: v1.30.1Kustomize 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 :
# Installez kubectl avec Chocolateychoco install kubernetes-cli
# Vérifiez l'installationkubectl 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.
asdf plugin add kubectlasdf install kubectl latestasdf 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 :
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
kubectl options
Cela affiche une liste complète des options globales utilisables avec kubectl
.
Options globales utiles
Option | Description |
---|---|
--namespace=<nom> ou -n | Exé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 -o | Dé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é). |
--help | Afficher 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 :
# Ajouter l'autocomplétion à votre profil Bashecho "source <(kubectl completion bash)" >> ~/.bashrc
Zsh
Pour activer l’autocomplétion dans Zsh, suivez ces étapes :
# Ajouter l'autocomplétion à votre profil Zshecho "source <(kubectl completion zsh)" >> ~/.zshrc
Fish
Pour activer l’autocomplétion dans Fish, utilisez la commande suivante :
# Ajouter l'autocomplétion à votre profil Fishkubectl 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: v1clusters:- cluster: server: https://my-cluster-api-server certificate-authority: /path/to/ca.crt name: my-clustercontexts:- context: cluster: my-cluster user: my-user namespace: default name: my-contextcurrent-context: my-contextkind: Configpreferences: {}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
.
# Sous Linux/macOSexport KUBECONFIG=~/.kube/config-cluster2
# Sous Windowsset 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 :
# Sous Linux/macOSexport KUBECONFIG=~/.kube/config:~/.kube/config-cluster2
# Sous Windowsset 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.
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.
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
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
:
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
:
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.