Comment résoudre les problèmes liés aux pods et aux espaces de noms bloqués dans les clusters Amazon EKS ?
Je n'arrive pas à supprimer mes pods ou espaces de noms dans mon cluster Amazon Elastic Kubernetes Service (Amazon EKS). Les pods ou les espaces de noms sont bloqués à l’état En cours de résiliation.
Brève description
Une fois que vous avez supprimé un pod ou un espace de noms dans Amazon EKS, la ressource passe à l’état En cours de résiliation. Si ce processus ne se termine pas, vous devez résoudre le problème manuellement.
Les pods peuvent rencontrer des problèmes de résiliation pour l'une des raisons suivantes :
- Les finalisateurs empêchent la suppression
- Les pods ne répondent pas aux signaux de terminaison
- Les hooks PreStop échouent ou le service terminationGracePeriodSeconds s'étend trop longtemps
- Les interruptions du réseau bloquent les composants master et les communications du plan de contrôle
- L'utilisation élevée des ressources affecte les composants master
Les espaces de noms peuvent rencontrer des problèmes de résiliation pour l'une des raisons suivantes :
- Kubernetes ne peut pas supprimer des ressources spécifiques
- Les serveurs d'API signalent un état False
- Les finalisateurs empêchent la suppression
Résolution
Utilisez les sections suivantes pour résoudre les problèmes liés au pod ou à l'espace de noms bloqué.
Résoudre les problèmes liés aux pods bloqués
Effectuez les tâches suivantes pour résoudre les problèmes liés aux pods bloqués.
Vérifier l'état du pod
Procédez comme suit :
-
Pour vérifier les journaux Kubelet sur le nœud concerné, exécutez la commande suivante :
kubectl get pods -A --field-selector=status.phase==Terminating -o wide -
Consultez la colonne NODE dans la sortie pour identifier les nœuds concernés. Si tous les pods bloqués se trouvent sur le même nœud, exécutez la commande journalctl suivante pour vérifier les journaux de kubelet sur le nœud concerné :
journalctl -u kubelet -
Redémarrez le kubelet.
Vérifier les finalisateurs de pod
Pour vérifier la présence de finalisateurs, exécutez la commande suivante :
kubectl get pod POD_NAME -n NAMESPACE -o yaml
Remarque : remplacez POD_NAME par le nom de votre pod. Remplacez NAMESPACE par le nom de l'espace de noms dans lequel se trouve votre pod.
Si des finalisateurs sont présents, exécutez l'une des commandes suivantes :
Pour une suppression simple, utilisez la commande suivante :
kubectl patch pod POD_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}'
Ou, si votre environnement nécessite des opérations de correctif JSON ou si vous préférez une syntaxe plus détaillée, utilisez la commande suivante :
kubectl patch pod POD_NAME -n NAMESPACE --type=json -p '[{"op": "remove", "path": "/metadata/finalizers" }]'
Remarque : remplacez POD_NAME par le nom de votre pod. Remplacez NAMESPACE par le nom de l'espace de noms dans lequel se trouve votre pod.
Forcer la suppression du pod
Important : il est recommandé d'utiliser cette option uniquement si les autres méthodes ne permettent pas d'éviter la perte ou la corruption des données.
Exécutez la commande suivante pour forcer la suppression du pod :
kubectl delete pod POD_NAME -n NAMESPACE --grace-period=0 --force
Remarque : remplacez POD_NAME par le nom de votre pod et NAMESPACE par l'espace de noms dans lequel se trouve votre pod.
Résoudre les problèmes liés aux espaces de noms bloqués
Effectuez les tâches suivantes pour résoudre les problèmes liés aux espaces de noms bloqués.
Vérifier l'état de l'espace de noms
Lorsqu'un espace de noms est bloqué à l’état En cours de résiliation, il peut contenir des ressources que Kubernetes ne peut pas supprimer. Ou bien, un service d'API peut présenter l’état False.
Exécutez les commandes suivantes pour vérifier l’état de votre espace de noms :
kubectl describe namespace NAMESPACE
Remarque : remplacez NAMESPACE par le nom de votre espace de noms bloqué.
Trouver et supprimer les ressources restantes
Si les ressources restent dans l'espace de noms, le message d'erreur suivant s'affiche :
« NamespaceContentRemaining: Some resources are remaining: serviceaccounts has 2 resource instances »
Pour répertorier les ressources restantes, exécutez la commande suivante :
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n NAMESPACE
Remarque : remplacez NAMESPACE par le nom de votre espace de noms.
Exécutez ensuite la commande suivante pour supprimer les ressources identifiées :
kubectl delete RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE
Remarque : remplacez RESOURCE_TYPE par le type de ressource, RESOURCE_NAME par le nom de la ressource et remplacez NAMESPACE par votre espace de noms.
Supprimer les finalisateurs d'espaces de noms
Si les finalisateurs sont toujours attachés, le message d'erreur suivant s'affiche :
« NamespaceFinalizersRemaining: Some content in the namespace has finalizers remaining: kubernetes.io/persistent-volume-provisioner in 1 resource instance »
Pour supprimer les finalisateurs d'espaces de noms, vous pouvez exécuter une commande patch, utiliser un fichier JSON ou forcer la suppression de l'espace de noms.
Pour supprimer les finalisateurs avec une opération de correctif, exécutez la commande suivante :
kubectl patch namespace NAMESPACE --type=json -p '[{"op": "remove", "path": "/metadata/finalizers" }]'
Remarque : remplacez NAMESPACE par le nom de votre espace de noms bloqué.
Pour utiliser un fichier JSON, procédez comme suit :
- Exécutez la commande suivante pour créer le fichier de configuration de l'espace de noms :
Remarque : remplacez TERMINATING_NAMESPACE par le nom de votre espace de noms bloqué.kubectl get namespace TERMINATING_NAMESPACE -o json > tempfile.json - Supprimez le tableau de finalisateurs de la section des spécifications du fichier JSON.
- Exécutez la commande suivante pour appliquer les modifications :
Remarque : remplacez TERMINATING_NAMESPACE par le nom de votre espace de noms bloqué.kubectl replace --raw "/api/v1/namespaces/TERMINATING_NAMESPACE/finalize" -f ./tempfile.json - Vérifiez que l'espace de noms a été supprimé. Exécutez la commande suivante :
kubectl get namespaces
Pour forcer la suppression de l'espace de noms, exécutez la commande suivante :
kubectl delete namespace NAMESPACE --grace-period=0 --force
Remarque : remplacez NAMESPACE par le nom de votre espace de noms bloqué. Il est recommandé d'utiliser cette option uniquement si les autres méthodes ne permettent pas d'éviter la perte ou la corruption des données.
Nettoyer les ressources personnalisées
Si les ressources restent dans l'espace de noms, exécutez la commande suivante :
kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n NAMESPACE
Remarque : remplacez NAMESPACE par le nom de votre espace de noms.
Si vous identifiez des ressources personnalisées, exécutez la commande suivante pour les supprimer :
kubectl delete RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE
Remarque : remplacez RESOURCE_TYPE par le type de ressource, RESOURCE_NAME par le nom de la ressource et remplacez NAMESPACE par votre espace de noms.
Exécutez la commande suivante pour supprimer les finalisateurs de ressources personnalisées :
kubectl patch RESOURCE_TYPE RESOURCE_NAME -n NAMESPACE -p '{"metadata":{"finalizers":null}}' --type=merge
Remarque : remplacez RESOURCE_TYPE par le type de ressource. Remplacez RESOURCE_NAME par le nom de la ressource. Remplacez NAMESPACE par votre espace de noms.
Puis, exécutez la commande suivante pour supprimer CustomResourceDefinitions :
kubectl delete crd CRD_NAME
Remarque : remplacez CRD_NAME par le nom de votre CustomResourceDefinition. Supprimez uniquement les CustomResourceDefinitions dont vous n'avez plus besoin.
- Sujets
- Containers
- Langue
- Français

Contenus pertinents
AWS OFFICIELA mis à jour il y a 7 mois
AWS OFFICIELA mis à jour il y a un an