Passer au contenu

Pourquoi ne puis-je pas supprimer les ressources de mon cluster Amazon EKS ?

Lecture de 9 minute(s)
0

Je n'arrive pas à supprimer une ressource de mon cluster Amazon Elastic Kubernetes Service (Amazon EKS).

Résolution

Remarque : Si des erreurs surviennent lorsque vous exécutez des commandes de l'interface de la ligne de commande AWS (AWS CLI), consultez la section Résoudre des erreurs liées à l’AWS CLI. Vérifiez également que vous utilisez bien la version la plus récente de l’AWS CLI.

Effectuez les actions de dépannage suivantes en fonction de la ressource Amazon EKS bloquée à l’état En cours de résiliation. Les finalisateurs alertent les contrôleurs pour qu'ils suppriment des ressources et empêchent toute suppression accidentelle. Si votre ressource est bloquée à l’état En cours de résiliation, vous devez en supprimer les finalisateurs avant de la supprimer. Pour plus d'informations sur les finalisateurs, consultez la page Finalisateurs sur le site Web de Kubernetes.

Résoudre les problèmes liés à la suppression des espaces de noms

Pour vérifier si certaines ressources de l'espace de noms sont bloquées à l'état En cours de résiliation, exécutez la commande suivante :

kubectl get all -n namespace-name | grep Terminating

Remarque : Remplacez namespace-name par l'espace de noms.

Pour supprimer manuellement la ressource, exécutez la commande suivante :

kubectl delete resource resource-name -n namespace-name

Remarque : Remplacez resource par le type de ressource, resource-name par le nom de la ressource et namespace-name par l'espace de noms.

Pour vérifier la présence d'erreurs dans le finalisateur ou le service d'API, exécutez la commande suivante :

kubectl get ns namespace-name -o json

Remarque : Remplacez namespace-name par l'espace de noms.

Si vous recevez des erreurs dans la sortie de commande, consultez la section Comment résoudre les problèmes liés aux espaces de noms à l’état résilié dans mon cluster Amazon EKS ?

Résoudre les problèmes de suppression d’entrée

Supprimez les équilibreurs de charge ou les groupes cibles associés à la ressource d'entrée.

Pour supprimer les finalisateurs d'une ressource d'entrée, exécutez la commande suivante :

kubectl patch ingress ingress-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge

Remarque : Remplacez ingress-name par le nom d'entrée et namespace-name par l'espace de noms.

Puis, exécutez la commande suivante pour supprimer la ressource d'entrée :

kubectl delete ingress ingress-name -n namespace-name

Remarque : Remplacez ingress-name par le nom d'entrée et namespace-name par l'espace de noms.

Résoudre les problèmes de suppression de service

Pour supprimer les finalisateurs de la ressource de service, exécutez la commande suivante :

kubectl patch svc service-name -n namespace-name -p '{"metadata":{"finalizers":[]}}' --type=merge

Remarque : Remplacez service-name par le nom de votre service et namespace-name par l'espace de noms.

Utilisez la console Amazon EC2 pour désactiver la protection contre la suppression sur l'équilibreur de charge associé au service. Vous pouvez également utiliser l'annotation service.beta.kubernetes.io/aws-load-balancer-attributes pour désactiver la protection contre la suppression. Pour plus d'informations, consultez la page Attributs de ressource sur le site Web de Kubernetes.

Puis, exécutez la commande suivante pour supprimer le service :

kubectl delete svc service-name -n namespace-name

Remarque : Remplacez service-name par le nom de votre service et namespace-name par l'espace de noms.

Résoudre les problèmes de suppression de PV et de PVC

Si vous ne parvenez pas à supprimer le PersistentVolume (PV) ou le PersistentVolumeClaim (PVC), recherchez les problèmes suivants :

  • Vérifier si vous avez supprimé le PV avant de retirer le PVC lié
  • Vérifier si vous avez retiré le PVC alors qu'un pod était encore exécuté et attaché à ce dernier

Vous avez supprimé le PV

Pour résoudre ce problème, supprimez le PVC lié au PV.

Pour identifier le PVC associé au PV bloqué à l'état En cours de résiliation, exécutez la commande suivante pour décrire le PV :

kubectl get pv pv-name

Remarque : Remplacez pv-name par le nom du PV. La commande affiche le nom et l'espace de noms du PVC au format NAMESPACE/PVC_NAME.

Exemple de sortie :

default/ebs-claim

Pour supprimer le PVC, exécutez la commande suivante :

kubectl delete pvc -n namespace-name pvc-name

Remarque : Remplacez namespace-name par l'espace de noms du PVC et pvc-name par le nom du PVC.

Si vous ne parvenez toujours pas à supprimer le PV, exécutez la commande suivante pour supprimer ses finalisateurs :

kubectl patch pv -p '{"metadata":{"finalizers":null}}' pv-name

Remarque : Remplacez pv-name par le nom du PV.

Vous avez retiré le PVC

Pour résoudre ce problème, supprimez le pod qui est attaché au PVC.

Pour identifier les pods associés au PVC, exécutez la commande suivante pour décrire le PVC :

kubectl describe pvc -n namespace-name pvc-name

Remarque : Remplacez namespace-name par l'espace de noms du PVC et pvc-name par le nom du PVC. Dans la sortie, cochez l'attribut Utilisé par.

Exemple de sortie :

Name:          ebs-claim
Namespace:     default
StorageClass:  ebs-sc
Status:        Bound
Volume:        pvc-3402cc47-c4d7-42c3-8965-f9e1e08f8b95
Labels:        <none>
Annotations:   pv.kubernetes.io/bind-completed: yes
               pv.kubernetes.io/bound-by-controller: yes
               volume.beta.kubernetes.io/storage-provisioner: ebs.csi.aws.com
               volume.kubernetes.io/selected-node: ip-192-168-33-43.ec2.internal
               volume.kubernetes.io/storage-provisioner: ebs.csi.aws.com
Finalizers:    [kubernetes.io/pvc-protection]
Capacity:      4Gi
Access Modes:  RWO
VolumeMode:    Filesystem
Used By:       ebs-app-59c74d8d45-z65kj
Events:        <none>

Dans l'exemple précédent, le pod ebs-app-59c74d8d45-z65kj utilise le PVC.

Pour supprimer le pod, exécutez la commande suivante :

kubectl delete pod -n namespace-name pod-name

Remarque : Remplacez namespace-name par l'espace de noms du PVC et pod-name par le nom du pod.

Si vous ne parvenez toujours pas à supprimer le PVC, exécutez la commande suivante pour supprimer ses finalisateurs :

kubectl patch pvc -p '{"metadata":{"finalizers":null}}' -n namespace-name pvc-name

Remarque : Remplacez namespace-name par l'espace de noms du PVC et pvc-name par le nom du PVC.

Résoudre les problèmes de suppression de pod

Si vous ne parvenez pas à supprimer le pod, recherchez les problèmes suivants :

  • Vérifiez si le pod ne répond pas aux signaux de terminaison
  • Vérifiez si le pod est associé à un finalisateur qui n'est pas terminé

Le pod ne répond pas aux signaux de terminaison

Important : La résolution suivante supprime immédiatement le pod sans vérifier que vous avez arrêté le pod en cours d'exécution. Assurez-vous que le pod n’est pas en cours d’exécution. Sinon, le pod risque de s’exécuter indéfiniment sur le cluster.

Les pods sont généralement supprimés après la période de grâce par défaut de 30 secondes. Si votre pod n'est pas supprimé au bout de 30 secondes, exécutez la commande suivante pour forcer la suppression du pod :

kubectl delete pod --force --grace-period=0 -n namespace-name pod-name

Remarque : Remplacez namespace-name par l'espace de noms du pod et pod-name par le nom du pod. Vous devez définir l'indicateur --grace-period sur 0 pour supprimer immédiatement le pod.

Le pod est associé à un finalisateur qui n'est pas terminé

Pour vérifier si le pod inclut des finalisateurs, exécutez la commande suivante :

kubectl get pod -o yaml -n namespace-name pod-name

Remarque : Remplacez namespace-name par l'espace de noms du pod et pod-name par le nom du pod. Dans la sortie, vérifiez metadata.finalizers pour identifier les finalisateurs.

Exemple de sortie :

apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2024-09-16T19:32:01Z"
  finalizers:
  - kubernetes
  labels:
    app: nginx
    pod-template-hash: 7c79c4bf97
  namespace: default
spec:
  containers:
  - image: nginx:latest
    imagePullPolicy: Always
    name: nginx
    ports:
    - containerPort: 80
      protocol: TCP

Pour supprimer les finalisateurs, exécutez la commande suivante :

kubectl patch pod -p '{"metadata":{"finalizers":null}}' -n namespace-name pod-name

Remarque : Remplacez namespace-name par l'espace de noms du pod et pod-name par le nom du pod.

Résoudre les problèmes de suppression de cluster

En règle générale, les problèmes de suppression du cluster se produisent parce que des groupes de nœuds gérés sont attachés au cluster. Pour résoudre ce problème, supprimez les groupes de nœuds gérés. Pour plus d'informations, consultez la section Pourquoi ne puis-je pas supprimer mon cluster Amazon EKS ?

Si un scraper géré est associé à un cluster, vous pouvez également rencontrer des problèmes de suppression. Dans ce scénario, vous ne pouvez pas supprimer le réseau privé virtuel (VPC) ou l'interface réseau Elastic utilisés par le scraper.

Pour identifier l'ID du scraper, exécutez la commande list-scrapers suivante de l'AWS CLI :

aws amp list-scrapers

Puis, exécutez la commande delete-scraper pour supprimer le scraper :

aws amp delete-scraper --scraper-id scraper-example

Remarque : Remplacez scraper-example par l'ID du scraper.

Résoudre les problèmes de suppression de groupes de nœuds gérés par Amazon EKS

Si vous ne parvenez pas à supprimer le groupe de nœuds gérés, vérifiez l’existence des problèmes suivants :

  • Vérifiez si la ressource comprend un objet dépendant
  • Vérifiez si le processus Résilier du groupe Auto Scaling Amazon EC2 est suspendu
  • Vérifier si votre groupe de nœuds présente des erreurs d’état
  • Vérifier si les pods sont bloqués dans les nœuds

La ressource comprend un objet dépendant

Le problème de dépendance se produit lorsqu'une ressource créée par le groupe de nœuds géré est associée à une autre ressource du compte AWS. Généralement, la ressource est un groupe de sécurité. Pour résoudre ce problème, identifiez les objets associés au groupe de sécurité. Puis, dissociez le groupe de sécurité de la ressource. Si vous rencontrez des problèmes, consultez la section Pourquoi ne puis-je pas supprimer un groupe de sécurité associé à mon Amazon VPC ?

Le processus de résiliation du groupe Auto Scaling EC2 est suspendu

Pour résoudre ce problème, redémarrez le processus de résiliation.

Votre groupe de nœuds présente des erreurs d’état

Pour plus d'informations sur les types d'erreurs d'état qui peuvent survenir dans votre groupe de nœuds gérés, consultez la section Problème.

Pour résoudre les problèmes de santé, consultez la section Comment résoudre les erreurs de groupe de nœuds gérés dans un cluster Amazon EKS ?

Les pods sont bloqués dans les nœuds

Lorsque vous supprimez le groupe de nœuds gérés, le message d'erreur suivant peut s'afficher :

« 1 pods are unevictable from node ip-192-168-29-140.ec2.internal » (1 pods ne peuvent pas être évincés du nœud ip-192-168-29-140.ec2.internal)

Ce problème peut se produire si un pod du cluster est bloqué à l'état En cours de résiliation. Pour résoudre ce problème, obtenez un accès via kubectl au cluster, puis exécutez la commande suivante :

kubectl get pod -A

L’erreur Impossible d’évincer les pods peut se produire parce que vous avez mal configuré le PodDisruptionBudget ou le nombre de perturbations disponibles est insuffisant pour permettre l'éviction du pod. Pour résoudre ce problème, consultez la section Comment résoudre les problèmes de mise à jour des groupes de nœuds gérés pour Amazon EKS ?

AWS OFFICIELA mis à jour il y a un an