Contactez-nous

Nettoyage des ressources (`kubectl delete`)

Apprenez à supprimer proprement les Déploiements, Services et Pods créés lors des exercices Kubernetes en utilisant la commande `kubectl delete`, via les manifestes ou par nom.

Pourquoi nettoyer les ressources Kubernetes ?

Après avoir terminé nos exercices de déploiement, mise à jour et mise à l'échelle, il est essentiel de savoir comment supprimer les ressources que nous avons créées dans notre cluster Kubernetes. Cette étape, souvent appelée "nettoyage", est cruciale pour plusieurs raisons.

Premièrement, même dans un cluster local comme Minikube ou Kind, les ressources (Pods, Services, Déploiements) consomment des ressources système (CPU, mémoire, réseau). Laisser des applications inutilisées tourner peut ralentir votre machine hôte et potentiellement interférer avec d'autres expériences ou travaux.

Deuxièmement, dans des environnements partagés ou de production, le nettoyage est indispensable pour la gestion des coûts, la sécurité et l'organisation. Adopter de bonnes habitudes de nettoyage dès le début, même en local, vous prépare aux exigences des environnements réels. Cela évite l'accumulation de ressources "orphelines" ou oubliées.

La commande `kubectl delete` : l'outil de suppression

Kubernetes fournit la commande `kubectl delete` pour supprimer des objets du cluster. Cette commande est très polyvalente et permet de cibler les ressources à supprimer de différentes manières, de façon similaire à `kubectl get` ou `kubectl apply`.

Nous allons explorer les méthodes les plus courantes pour supprimer le Déploiement (`nginx-deployment`) et le Service (`nginx-service`) que nous avons utilisés tout au long de ces exercices. Rappelez-vous qu'en supprimant un Déploiement, Kubernetes s'occupe automatiquement de supprimer le ReplicaSet sous-jacent et tous les Pods gérés par ce Déploiement.

Méthode 1 : Suppression déclarative via les manifestes YAML

L'approche la plus cohérente avec la gestion déclarative est d'utiliser les mêmes fichiers manifestes YAML que ceux utilisés pour la création et la mise à jour, mais avec la commande `delete`.

Placez-vous dans le répertoire où vous avez sauvegardé vos fichiers `nginx-deployment.yaml` et `nginx-service.yaml`. Exécutez les commandes suivantes :

kubectl delete -f nginx-service.yaml
kubectl delete -f nginx-deployment.yaml

L'option `-f` indique à `kubectl` de lire la définition de l'objet dans le fichier et de demander sa suppression au cluster. La sortie confirmera la suppression de chaque ressource :

service "nginx-service" deleted
deployment.apps "nginx-deployment" deleted

L'avantage de cette méthode est sa précision : vous supprimez exactement ce qui est défini dans vos fichiers de configuration, ce qui est particulièrement utile pour des applications complexes composées de nombreux objets. L'ordre de suppression (service puis déploiement, ou l'inverse) n'a généralement pas d'importance ici.

Méthode 2 : Suppression impérative par type et nom

Si vous n'avez pas les fichiers manifestes à portée de main ou si vous préférez une approche plus directe, vous pouvez supprimer les ressources en spécifiant leur type et leur nom.

La syntaxe est : `kubectl delete `. Vous pouvez spécifier plusieurs ressources sur la même ligne.

# Vous pouvez utiliser les noms complets ou les alias (svc, deploy)
kubectl delete service nginx-service
kubectl delete deployment nginx-deployment

Ou en une seule commande :

kubectl delete service/nginx-service deployment/nginx-deployment

La sortie sera identique à la méthode précédente, confirmant la suppression des objets spécifiés.

service "nginx-service" deleted
deployment.apps "nginx-deployment" deleted

Cette méthode est rapide et efficace pour supprimer des ressources spécifiques dont vous connaissez les noms.

Méthode 3 (Alternative) : Suppression par label

Une méthode plus avancée, mais très puissante, consiste à utiliser des labels pour supprimer plusieurs ressources de différents types en une seule commande. Comme nous avons appliqué le label `app=nginx` à la fois à notre Déploiement et à nos Pods (via le template), et potentiellement au Service, nous pourrions l'utiliser.

Attention : Cette méthode est moins précise et peut supprimer plus de ressources que prévu si le label est utilisé ailleurs. Utilisez-la avec prudence.

kubectl delete deployment,service -l app=nginx

Cette commande demande la suppression de tous les Déploiements ET de tous les Services qui portent le label `app=nginx`. Elle supprimera également implicitement les Pods gérés par le déploiement.

La sortie indiquera les ressources supprimées correspondantes.

Vérification finale du nettoyage

Après avoir exécuté l'une des commandes de suppression, il est bon de vérifier que les ressources ont bien disparu du cluster. Vous pouvez utiliser `kubectl get` en ciblant les types de ressources que vous venez de supprimer.

kubectl get deployment nginx-deployment
kubectl get service nginx-service
kubectl get pods -l app=nginx

Pour chacune de ces commandes, la réponse attendue devrait indiquer que la ressource n'a pas été trouvée :

Error from server (NotFound): deployments.apps "nginx-deployment" not found
Error from server (NotFound): services "nginx-service" not found
No resources found in default namespace.

Si vous obtenez ces messages, cela signifie que le nettoyage a été effectué avec succès et que les ressources associées à notre exercice Nginx ont été correctement supprimées de votre cluster Kubernetes.

Maîtriser `kubectl delete` est aussi important que de savoir créer et gérer des ressources. Cela garantit un environnement de travail propre et des pratiques de gestion rigoureuses.