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
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 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é, en cours d’écriture, 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é.
Obtenir la liste des ressources kubernetes : kubectl api-resources
La commande kubectl api-resources
est un outil essentiel pour obtenir des
informations sur les types de ressources disponibles dans l’API Kubernetes. Elle
permet de lister toutes les ressources accessibles via l’API, ainsi que leurs
groupes, versions et si elles sont nommées ou non. Cette commande est
particulièrement utile pour découvrir de nouvelles ressources ou pour comprendre
l’organisation de l’API Kubernetes.
Syntaxe de base
La syntaxe de base de la commande kubectl api-resources
est la suivante :
kubectl api-resources [flags]
- flags (optionnel) : Options supplémentaires pour filtrer ou formater la sortie.
Affichage des ressources
Lister toutes les ressources
Pour lister toutes les ressources disponibles dans l’API Kubernetes :
kubectl api-resources
Cette commande affiche une liste complète de toutes les ressources, avec des
colonnes pour le nom de la ressource, son type court, son groupe, sa version, et
si elle est de type nommée (NAMESPACED
).
Filtrer les ressources par groupe
Pour filtrer les ressources appartenant à un groupe spécifique, utilisez
l’option --api-group
:
kubectl api-resources --api-group=apps
Cette commande affiche toutes les ressources du groupe apps
.
Informations fournies par api-resources
La commande kubectl api-resources
fournit une liste structurée des ressources,
incluant :
- Name : Le nom complet de la ressource.
- ShortNames : Les abréviations ou noms courts utilisés pour référencer la ressource.
- APIGroups : Le groupe d’API auquel la ressource appartient.
- Namespaced : Indique si la ressource est liée à un namespace (
true
oufalse
). - Kind : Le type ou la classe de la ressource.
Exemples pratiques
Lister les ressources dans un groupe spécifique
Pour lister toutes les ressources dans le groupe batch
:
kubectl api-resources --api-group=batch
Cette commande affiche des ressources telles que jobs
et cronjobs
appartenant au groupe batch
.
Lister les ressources non nommées
Pour lister uniquement les ressources qui ne sont pas liées à un namespace :
kubectl api-resources --namespaced=false
Lister les ressources avec des noms courts
Pour afficher toutes les ressources avec leurs noms courts :
kubectl api-resources --sort-by=shortnames
Cette commande trie les ressources par leurs noms courts, facilitant la recherche des abréviations utilisées pour certaines ressources.
Utilisation de la commande kubectl explain
La commande kubectl explain
est un outil précieux pour comprendre la structure
et les propriétés des ressources Kubernetes. Elle permet d’afficher des
informations détaillées sur les champs des ressources Kubernetes, aidant ainsi à
mieux comprendre comment configurer et utiliser ces ressources.
Syntaxe de base
La syntaxe de base de la commande kubectl explain
est la suivante :
kubectl explain [RESOURCE_TYPE] [FIELD_PATH] [flags]
- RESOURCE_TYPE : Le type de ressource que vous souhaitez expliquer (par exemple, pods, services, deployments).
- FIELD_PATH (optionnel) : Le chemin vers le champ spécifique de la ressource que vous souhaitez expliquer.
- flags (optionnel) : Options supplémentaires pour spécifier des détails supplémentaires.
Affichage des ressources
Expliquer une ressource de haut niveau
Pour obtenir une explication de haut niveau d’une ressource telle qu’un Pod :
kubectl explain pod
Cette commande affiche une description générale de la ressource Pod, incluant ses champs principaux et leur signification.
Expliquer un champ spécifique
Pour obtenir des informations détaillées sur un champ spécifique d’une
ressource, utilisez le chemin du champ. Par exemple, pour expliquer le champ
spec
d’un Pod :
kubectl explain pod.spec
Expliquer un champ de niveau inférieur
Vous pouvez également obtenir des informations sur des champs plus spécifiques
en fournissant un chemin plus détaillé. Par exemple, pour expliquer le champ
containers
sous spec
d’un Pod :
kubectl explain pod.spec.containers
Informations fournies par 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.
Exemples pratiques
Comprendre la structure des Pods
Pour comprendre la structure globale d’un Pod, exécutez :
kubectl explain pod
Cette commande vous donne une vue d’ensemble des champs disponibles dans un Pod,
tels que metadata
, spec
et status
.
Explorer les conteneurs dans un Pod
Pour explorer en détail le champ containers
d’un Pod, utilisez cette commande
:
kubectl explain pod.spec.containers
Cette commande vous montre tous les sous-champs de containers
, comme image
,
ports
et resources
.
Détails des ports d’un conteneur
Pour obtenir des informations spécifiques sur le champ ports
d’un conteneur :
kubectl explain pod.spec.containers.ports
Utilisation avancée
Expliquer les ressources personnalisées
Vous pouvez également utiliser kubectl explain
pour des ressources
personnalisées définies par des CRD (Custom Resource Definitions). Par exemple,
pour expliquer une ressource personnalisée nommée MyResource
:
kubectl explain MyResource
Utilisation avec des sélecteurs
Bien que la commande explain
ne soit pas directement combinée avec des
sélecteurs, elle peut être utilisée en conjonction avec des ressources
sélectionnées pour mieux comprendre leur structure et configuration.
Utilisation de la commande kubectl get
La commande kubectl get
est l’une des commandes les plus fréquemment utilisées
pour interagir avec Kubernetes. Elle permet de récupérer et d’afficher des
informations sur les ressources d’un cluster Kubernetes. Que vous soyez en train
de gérer des Pods, des Services, des Déploiements ou d’autres objets Kubernetes,
kubectl get
vous offre une vue d’ensemble de l’état de ces ressources.
Syntaxe de base
La syntaxe de base de la commande kubectl get
est la suivante :
kubectl get [RESOURCE_TYPE] [NAME] [flags]
- RESOURCE_TYPE : Le type de ressource que vous souhaitez afficher (par exemple, pods, services, deployments).
- NAME (optionnel) : Le nom spécifique de la ressource. Si omis, toutes les ressources du type spécifié seront listées.
- flags (optionnel) : Options supplémentaires pour filtrer ou formater la sortie.
Affichage des ressources
Afficher tous les Pods
Pour afficher tous les Pods dans le namespace par défaut, utilisez :
kubectl get pods
Pour afficher les Pods dans un namespace spécifique :
kubectl get pods -n my-namespace
Afficher un Pod spécifique
Pour afficher un Pod spécifique nommé nginx-pod
:
kubectl get pod nginx-pod
Afficher d’autres types de ressources
De la même manière, vous pouvez afficher d’autres types de ressources :
-
Tous les Services :
Terminal window kubectl get services -
Tous les Déploiements :
Terminal window kubectl get deployments
Options de formatage
La commande kubectl get
offre plusieurs options pour formater la sortie, ce
qui peut être très utile pour obtenir des informations spécifiques dans un
format facile à lire ou à traiter par des scripts.
Option -o wide
Pour obtenir une sortie plus détaillée, vous pouvez utiliser l’option -o wide
:
kubectl get pods -o wide
Cette option ajoute des colonnes supplémentaires à la sortie, telles que l’adresse IP du Pod et le Node sur lequel il s’exécute.
Option -o yaml
ou -o json
Pour afficher les ressources au format YAML ou JSON, utilisez respectivement les
options -o yaml
ou -o json
:
kubectl get pod nginx-pod -o yaml
kubectl get pod nginx-pod -o json
Option --selector
(ou -l
)
Pour filtrer les ressources en fonction de labels, utilisez l’option
--selector
ou -l
:
kubectl get pods -l app=nginx
Utilisation avancée
Afficher les ressources dans tous les namespaces
Pour afficher les ressources dans tous les namespaces, utilisez l’option
--all-namespaces
:
kubectl get pods --all-namespaces
Surveiller les ressources en temps réel
Pour surveiller les ressources en temps réel, utilisez l’option -w
(watch) :
kubectl get pods -w
Utilisation de la commande kubectl describe
La commande kubectl describe
est un outil puissant pour obtenir des
informations détaillées sur les ressources Kubernetes. Contrairement à kubectl get
, qui fournit une vue d’ensemble des ressources, kubectl describe
offre
une description approfondie, incluant les événements récents, les configurations
et les états actuels des ressources. Cela peut être extrêmement utile pour le
dépannage et la compréhension des comportements des ressources dans votre
cluster.
Syntaxe de base
La syntaxe de base de la commande kubectl describe
est la suivante :
kubectl describe [RESOURCE_TYPE] [NAME] [flags]
- RESOURCE_TYPE : Le type de ressource que vous souhaitez décrire (par exemple, pods, services, deployments).
- NAME (optionnel) : Le nom spécifique de la ressource. Si omis, toutes les ressources du type spécifié seront décrites.
- flags (optionnel) : Options supplémentaires pour spécifier le namespace ou d’autres paramètres.
Affichage des descriptions
Décrire un Pod spécifique
Pour obtenir une description détaillée d’un Pod spécifique nommé nginx-pod
:
kubectl describe pod nginx-pod
Cette commande affiche des informations complètes sur le Pod, y compris ses événements, ses conteneurs, ses volumes, ses conditions et bien plus encore.
Décrire un Pod dans un namespace spécifique
Pour décrire un Pod dans un namespace particulier, utilisez l’option -n
pour
spécifier le namespace :
kubectl describe pod nginx-pod -n my-namespace
Décrire d’autres types de ressources
De la même manière, vous pouvez décrire d’autres types de ressources :
-
Décrire un Service :
Terminal window kubectl describe service my-service -
Décrire un Déploiement :
Terminal window kubectl describe deployment my-deployment
Informations fournies par describe
La commande kubectl describe
fournit une vue détaillée des ressources. Voici
les types d’informations que vous pouvez obtenir :
- Métadonnées : Informations sur le nom, le namespace, les labels, les annotations, etc.
- Spécifications : Détails sur la configuration de la ressource, tels que les images des conteneurs, les ports exposés, les stratégies de mise à jour, etc.
- Statut : État actuel de la ressource, y compris les conditions, les événements récents, les états des conteneurs, etc.
- Événements : Liste des événements récents qui ont affecté la ressource, ce qui est esssentiel pour le dépannage.
Exemples pratiques
Décrire un Pod et analyser ses événements
Pour décrire un Pod nommé web-app-pod
et analyser les événements récents :
kubectl describe pod web-app-pod
Cette commande affiche des informations telles que :
- Les conteneurs du Pod, leurs images et leurs ports.
- Les volumes montés dans le Pod.
- Les conditions actuelles du Pod (par exemple, prêt, en cours de démarrage).
- Les événements récents, tels que les échecs de démarrage des conteneurs, les redémarrages, etc.
Décrire un Service et vérifier ses configurations
Pour décrire un Service nommé my-service
:
kubectl describe service my-service
Vous obtiendrez des informations sur :
- Les ports exposés par le Service et leurs protocoles.
- Les sélecteurs utilisés pour associer les Pods au Service.
- Les adresses IP assignées au Service (ClusterIP, ExternalIPs, etc.).
Décrire un Déploiement et examiner ses stratégies
Pour décrire un Déploiement nommé nginx-deployment
:
kubectl describe deployment nginx-deployment
Cette commande fournit des détails sur :
- Le nombre de réplicas souhaitées et disponibles.
- La stratégie de mise à jour (par exemple, RollingUpdate).
- Les conditions du déploiement, telles que
Available
etProgressing
. - Les événements récents liés aux mises à jour et aux déploiements.
Utilisation avancée
Utilisation avec des sélecteurs
Pour décrire des ressources en utilisant des sélecteurs, vous pouvez combiner la
commande get
avec describe
. Par exemple, pour décrire tous les Pods avec le
label app=nginx
:
kubectl describe pod -l app=nginx
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.
Syntaxe de base
La syntaxe de base de la commande kubectl logs
est la suivante :
kubectl logs [POD_NAME] [-c CONTAINER_NAME] [flags]
- POD_NAME : Le nom du Pod dont vous souhaitez afficher les journaux.
- -c CONTAINER_NAME (optionnel) : Le nom du conteneur spécifique dans le Pod (si le Pod en contient plusieurs).
- flags (optionnel) : Options supplémentaires pour filtrer ou formater la sortie.
Affichage des journaux
Afficher les journaux d’un Pod
Pour afficher les journaux d’un Pod nommé nginx-pod
:
kubectl logs nginx-pod
Afficher les journaux d’un conteneur spécifique
Si le Pod contient plusieurs conteneurs, spécifiez le conteneur avec l’option
-c
:
kubectl logs nginx-pod -c nginx-container
Options de filtrage et de formatage
La commande kubectl logs
offre plusieurs options pour filtrer et formater la
sortie des journaux, ce qui peut être très utile pour trouver des informations
spécifiques ou pour une meilleure lisibilité.
Afficher les journaux en temps réel
Pour afficher les journaux en temps réel (similaire à la commande tail -f
en
Unix) :
kubectl logs -f nginx-pod
Afficher les journaux des Pods précédents
Si un Pod a été redémarré, vous pouvez afficher les journaux de l’instance
précédente avec l’option --previous
:
kubectl logs nginx-pod --previous
Limiter le nombre de lignes de journaux
Pour limiter le nombre de lignes affichées à partir des journaux (par exemple, les 10 dernières lignes) :
kubectl logs nginx-pod --tail=10
Afficher les journaux depuis une période spécifique
Pour afficher les journaux générés au cours des 5 dernières minutes, utilisez
l’option --since
:
kubectl logs nginx-pod --since=5m
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é.
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é.
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.
Pré-requis
Pour que kubectl top
fonctionne correctement, le cluster Kubernetes doit avoir
installé et configuré le Metrics Server. Le Metrics Server collecte les
métriques d’utilisation des ressources de chaque nœud et pod dans le cluster.
Installer Metrics Server
Si Metrics Server n’est pas encore installé, vous pouvez l’installer en suivant ces étapes :
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
Après l’installation, vous pouvez vérifier que Metrics Server fonctionne correctement :
kubectl get apiservices | grep -i metrics
Syntaxe de base
La syntaxe de base de la commande kubectl top
est la suivante :
kubectl top [resource] [name] [flags]
- resource : Le type de ressource que vous souhaitez surveiller (par exemple, nodes, pods).
- name (optionnel) : Le nom spécifique de la ressource. Si omis, toutes les ressources du type spécifié seront listées.
- flags (optionnel) : Options supplémentaires pour filtrer ou formater la sortie.
Affichage des ressources
Afficher l’utilisation des ressources par les nœuds
Pour afficher l’utilisation des ressources CPU et mémoire par tous les nœuds du cluster :
kubectl top nodes
Cette commande liste tous les nœuds et affiche l’utilisation actuelle du CPU et de la mémoire pour chacun d’eux.
Afficher l’utilisation des ressources par un nœud spécifique
Pour afficher les détails de l’utilisation des ressources d’un nœud spécifique
nommé node-1
:
kubectl top node node-1
Afficher l’utilisation des ressources par les pods
Pour afficher l’utilisation des ressources CPU et mémoire par tous les pods dans le namespace par défaut :
kubectl top pods
Pour afficher les pods dans un namespace spécifique, utilisez l’option -n
:
kubectl top pods -n my-namespace
Afficher l’utilisation des ressources par un pod spécifique
Pour afficher les détails de l’utilisation des ressources d’un pod spécifique
nommé nginx-pod
:
kubectl top pod nginx-pod
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.