J'ai un cluster kubernetes sur Amazon EKS et de temps en temps, des pods apparaissent avec l'état Inconnu . J'ai lu que c'est parce que mes pods n'ont pas de limites de mémoire définies et après avoir changé qu'aucun nouveau pod avec cet état n'est apparu. Mais j'ai essayé de supprimer ceux existants en utilisant kubectl delete pod et cela n'a pas fonctionné. Comment dois-je les supprimer?
3 Réponses :
avez-vous directement déployé le pod? ou est-il déployé à partir d'un déploiement ou d'un statefulset? essayez de supprimer le déploiement ou le statefulset.
si rien ne fonctionne, supprimez l'espace de noms dans lequel se trouve le pod. Mais tous les objets sont supprimés de cet espace de noms
Il est déployé à partir du déploiement. Kubernetes sait que ces pods ne sont pas actifs, il a donc lancé une autre instance. Mais si je supprime le déploiement, tous seront partis et cela signifie que notre production devra cesser de fonctionner pendant un (court) temps.
avez-vous essayé kubectl delete pod NAME --grace-period = 0 --force ?
@KrishnaGangaraju non jusqu'à présent et cela a fonctionné! s'il vous plaît postez-le comme réponse et je l'accepterai. Merci!
Dans un cluster Kubernetes, on peut créer un pod à l'aide de Kubernetes Workload. Il existe des charges de travail des types suivants:
Si vous utilisez l'une des listes ci-dessus autre que Pod, alors le ownerReference du Pod ( .metadata.ownerRefference ) est défini pour ce Pod. Dites, si vous créez un déploiement nommé d1 , il crée d'abord un ReplicaSet nommé d1 - *** auquel cas le ownerRefference pour le ReplicaSet est le Deployment d1 . Ensuite, le ReplicaSet créera un certain nombre de Pod (s) (avec le préfixe d1 - *** - *** ). Ainsi, la propriété ownerRefference du pod sera le ReplicaSet d1-*** .
UPDATE:[
Si vous ne souhaitez pas supprimer votre déploiement d'origine ou une autre charge de travail en raison de la poursuite de la prod, vous être en mesure d'accomplir votre souhait en supprimant de force le pod:
$ kubectl delete pod <pod_name> --namespace <namespace> --grace-period 0 --force
Selon la référence de commande kubectl ,
-1 . Période de temps en secondes donnée à la ressource pour se terminer correctement. Ignoré si négatif. Réglez sur 1 pour un arrêt immédiat. Ne peut être défini sur 0 que si --force est vrai (forcer la suppression). false . Utilisé uniquement lorsque la période de grâce = 0. Si la valeur est true, supprimez immédiatement les ressources de l'API et contournez la suppression progressive. Notez que la suppression immédiate de certaines ressources peut entraîner une incohérence ou une perte de données et nécessite une confirmation. C'est le cas pour vous.
Je ne veux pas supprimer le déploiement car cela supprimerait également les pods de travail.
@KarolSamborski Donc les autres ont raison. Puisque vous utilisez le déploiement en production, la suppression du déploiement d'origine n'est pas une bonne chose. Dans ce cas, il vous suffit de forcer la suppression des pods. Mais l'essentiel est que vous deviez rendre la description de votre problème assez claire en fournissant suffisamment d'informations (ce que vous voulez, ce que vous avez fait, ce que vous avez comme ce genre de choses).
Vous pouvez forcer la suppression du pod comme ceci:
kubectl delete pod <pod_name> --grace-period=0 --force
parfois ne fonctionne pas et nécessite: patch pod -p '{"metadata": {"finalizers": null}}'
Avez-vous trouvé si cela pouvait concerner un certain Node? Vérifiez si vous pouvez voir s'il existe une corrélation avec des nœuds spécifiques "kubectl get pods -o wide | grep Unknown" Qu'est-ce qui vous donne la description outpud? kubectl décrire le pod?
Il semble qu'il soit lié à un nœud. kubectl describe me donne quelque chose d'intéressant: Statut: Terminaison (dure 1d) Période de grâce de résiliation: 30s Raison: NodeLost
Vérifiez la limite de mémoire de ce nœud. Et l'état de santé général de ce nœud.