Contactez-nous

Commandes indispensables : `get`, `describe`, `logs`, `apply`, `delete`, `exec`

Découvrez les commandes kubectl essentielles (get, describe, logs, apply, delete, exec) pour lister, inspecter, gérer et dépanner vos ressources Kubernetes au quotidien.

Les piliers de l'interaction avec Kubernetes via kubectl

Pour interagir efficacement avec un cluster Kubernetes, une poignée de commandes `kubectl` se révèle absolument fondamentale. Ce sont les outils que vous utiliserez constamment pour observer, modifier et dépanner vos applications et l'infrastructure sous-jacente. Maîtriser `get`, `describe`, `logs`, `apply`, `delete` et `exec` constitue la base solide sur laquelle construire votre expertise Kubernetes.

Ces commandes couvrent le spectre essentiel des opérations quotidiennes : lister les objets présents dans le cluster (`get`), obtenir des informations détaillées et des événements sur un objet spécifique (`describe`), consulter les sorties de vos applications conteneurisées (`logs`), appliquer des configurations déclaratives (`apply`), supprimer des ressources (`delete`) et exécuter des commandes à l'intérieur même des conteneurs (`exec`).

Comprendre la syntaxe, les options courantes et les cas d'usage de chacune de ces commandes vous permettra de naviguer avec aisance dans votre cluster, de diagnostiquer rapidement les problèmes et de gérer le cycle de vie de vos déploiements de manière contrôlée et reproductible. Explorons chacune d'elles plus en détail.

Lister les ressources avec `kubectl get`

La commande `kubectl get` est votre porte d'entrée pour visualiser les ressources déployées dans votre cluster. Elle permet d'obtenir une liste synthétique des objets d'un type donné, éventuellement filtrée par nom ou par namespace.

Sa syntaxe de base est simple :

kubectl get  [nom-de-la-ressource] [-n ]
Par exemple, pour lister tous les Pods dans le namespace actuel :
kubectl get pods
Pour lister les Services dans un namespace spécifique nommé `production` :
kubectl get services -n production
Ou pour obtenir des informations sur un Déploiement précis nommé `mon-app-deployment` :
kubectl get deployment mon-app-deployment

Plusieurs options enrichissent `kubectl get`. L'option `-o` (output) permet de formater la sortie. `-o wide` affiche des informations supplémentaires (comme l'IP du Pod et le Noeud sur lequel il tourne). `-o yaml` ou `-o json` affiche la définition complète de la ressource dans le format choisi, ce qui est très utile pour comprendre sa configuration ou la sauvegarder. L'option `-l` (label selector) permet de filtrer les ressources en fonction de leurs labels :

kubectl get pods -l app=nginx
Enfin, `-A` ou `--all-namespaces` liste les ressources dans tous les namespaces.

Inspecter en profondeur avec `kubectl describe`

Lorsque `kubectl get` ne fournit pas assez d'informations, `kubectl describe` prend le relais. Cette commande offre une vue détaillée d'une ressource spécifique, incluant sa configuration, son état actuel, les événements récents qui lui sont associés, et d'autres informations contextuelles cruciales pour le diagnostic.

La syntaxe ressemble à celle de `get` pour une ressource unique :

kubectl describe   [-n ]
Par exemple, pour examiner un Pod nommé `webapp-pod-xyz` :
kubectl describe pod webapp-pod-xyz

La sortie de `describe` est particulièrement riche. Pour un Pod, elle inclut : les labels, les annotations, le statut (Pending, Running, Succeeded, Failed, Unknown), l'IP, les conteneurs (image, ports, état, redémarrages, probes de santé), les volumes montés, et surtout, la section `Events`. Cette section liste les événements récents liés au Pod (planification, démarrage du conteneur, échec d'une probe, etc.), souvent la clé pour comprendre pourquoi un Pod ne démarre pas ou se comporte mal. Utiliser `describe` sur un Noeud (`node`), un Service (`svc`), un Déploiement (`deployment`) ou un ReplicaSet (`rs`) fournit également des informations spécifiques et très utiles pour chacun de ces types.

Consulter les logs applicatifs avec `kubectl logs`

Comprendre ce qui se passe à l'intérieur de vos conteneurs est essentiel. La commande `kubectl logs` permet d'accéder à la sortie standard (stdout) et à la sortie d'erreur standard (stderr) d'un conteneur au sein d'un Pod.

La syntaxe de base est :

kubectl logs  [-c ] [-n ]
Si le Pod ne contient qu'un seul conteneur, vous pouvez omettre l'option `-c`. Si le Pod a plusieurs conteneurs, vous devez spécifier celui dont vous voulez voir les logs :
kubectl logs mon-pod-multiconteneur -c mon-conteneur-app

Plusieurs options sont très pratiques. L'option `-f` (follow) permet de streamer les logs en temps réel, comme la commande `tail -f` sous Linux. C'est idéal pour observer le comportement d'une application pendant son exécution :

kubectl logs -f mon-pod-backend
L'option `--previous` est utile lorsqu'un conteneur a redémarré (par exemple, après un crash). Elle permet de consulter les logs de l'instance précédente du conteneur, ce qui aide souvent à diagnostiquer la cause du redémarrage :
kubectl logs mon-pod-qui-crash --previous
Vous pouvez aussi limiter le nombre de lignes affichées avec `--tail=N`.

Gérer le cycle de vie avec `apply` et `delete`

Kubernetes favorise une approche déclarative : vous décrivez l'état désiré de votre système dans des fichiers manifestes (généralement YAML), et Kubernetes se charge de faire converger l'état actuel vers cet état désiré. La commande `kubectl apply` est au coeur de cette approche.

Elle prend en entrée un ou plusieurs fichiers manifestes et applique les configurations qu'ils contiennent au cluster :

kubectl apply -f mon-deployment.yaml
Si les ressources décrites dans le fichier n'existent pas, elles sont créées. Si elles existent déjà, `kubectl apply` calcule les différences et applique uniquement les changements nécessaires. C'est la méthode recommandée pour créer et mettre à jour vos applications.

A l'inverse, `kubectl delete` permet de supprimer des ressources. Elle peut être utilisée de manière impérative (en spécifiant le type et le nom) ou de manière déclarative (en utilisant le même fichier manifeste que pour `apply`) :

# Impératif
kubectl delete deployment mon-app-deployment

# Déclaratif (recommandé)
kubectl delete -f mon-deployment.yaml
Utiliser `-f` avec `delete` assure que vous supprimez bien les ressources définies dans ce fichier spécifique, réduisant les risques d'erreur.

Interagir avec les conteneurs via `kubectl exec`

Parfois, il est nécessaire d'exécuter une commande directement à l'intérieur d'un conteneur en cours d'exécution, que ce soit pour du débogage, de l'inspection ou une tâche de maintenance ponctuelle. C'est le rôle de `kubectl exec`.

Pour exécuter une commande unique dans un conteneur :

kubectl exec  [-c ] [-n ] --  [arguments...]
Notez le `--` qui sépare les options `kubectl` de la commande à exécuter dans le conteneur. Par exemple, pour lister les fichiers dans `/app` à l'intérieur du conteneur `web` du pod `mon-pod-frontend` :
kubectl exec mon-pod-frontend -c web -- ls /app

Pour obtenir un shell interactif à l'intérieur du conteneur, utilisez les options `-i` (stdin) et `-t` (tty) :

kubectl exec -it  [-c ] [-n ] -- /bin/sh
(ou `/bin/bash` si disponible dans l'image). Cela ouvre une session shell dans le conteneur, vous permettant d'exécuter plusieurs commandes. C'est un outil puissant pour le dépannage avancé, mais il doit être utilisé avec précaution, car les modifications effectuées directement dans un conteneur sont éphémères et ne respectent pas l'approche déclarative.

Synthèse des commandes opérationnelles clés

Les commandes `get`, `describe`, `logs`, `apply`, `delete`, et `exec` forment l'arsenal de base de tout utilisateur de `kubectl`. Elles vous permettent respectivement de : lister les ressources, inspecter les détails et événements, consulter les journaux applicatifs, appliquer des configurations, supprimer des objets, et interagir directement avec les conteneurs.

La maîtrise de ces commandes est une étape indispensable pour opérer efficacement sur Kubernetes. En les combinant judicieusement, vous serez capable de comprendre l'état de votre cluster, de déployer et mettre à jour vos applications de manière fiable, et de diagnostiquer et résoudre la majorité des problèmes courants que vous rencontrerez.

N'hésitez pas à expérimenter avec ces commandes sur votre cluster local (Minikube, Kind) pour vous familiariser avec leur syntaxe, leurs options et leur sortie. Consultez également l'aide intégrée (`kubectl --help`) pour découvrir toutes les possibilités offertes par chacune d'elles.