web-dev-qa-db-fra.com

Le pod Kubernetes est recréé lorsqu'il est supprimé

J'ai commencé les pods avec commande

# kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1

Quelque chose a mal tourné et je ne peux plus supprimer ce pod

# kubectl delete pods  busybox-na3tm
pod "busybox-na3tm" deleted
# kubectl get pods
NAME                                     READY     STATUS              RESTARTS   AGE
busybox-vlzh3                            0/1       ContainerCreating   0          14s

# kubectl delete pod busybox-vlzh3 --grace-period=0


# kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted


# kubectl get pods --all-namespaces
NAMESPACE   NAME            READY     STATUS              RESTARTS   AGE
default     busybox-c9rnx   0/1       RunContainerError   0          23s
40
yman

Vous devez supprimer le déploiement, qui doit à son tour supprimer les modules et les jeux de réplicas https://github.com/kubernetes/kubernetes/issues/24137

Pour lister tous les déploiements:

kubectl get deployments --all-namespaces

Ensuite, pour supprimer le déploiement:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

Où NAMESPACE est l'espace de noms dans lequel il se trouve et DEPLOYMENT est la name du déploiement.

100
nomad

si votre pod a un nom comme name-xxx-yyy, il peut être contrôlé par un replicasets.apps nommé name-xxx, vous devez d'abord supprimer ce réplicaset avant de supprimer le pod

kubectl delete replicasets.apps name-xxx

7
Hieu Vo

Dans certains cas, les modules ne disparaîtront toujours pas, même lors de la suppression du déploiement. Dans ce cas, pour forcer leur suppression, vous pouvez exécuter la commande ci-dessous.

kubectl delete pods podname --grace-period=0 --force

2
emirhosseini

Cela fournira des informations sur tous les pods, déploiements, services et tâches de l'espace de noms.

kubectl get pods,services, deployments, jobs

les pods peuvent être créés par deployments ou jobs

kubectl delete job [job_name]
kubectl delete deployment [deployment_name]

Si vous supprimez le déploiement ou le travail, vous pouvez arrêter le redémarrage des pods.

2
Rohith

J'ai également fait face au problème, j'ai utilisé la commande ci-dessous pour supprimer le déploiement.

kubectl delete deployments DEPLOYMENT_NAME

mais toujours les pods étaient en train de recréer, donc j'ai croisé vérifier le jeu de répliques en utilisant la commande

kubectl get rs

puis éditez le réplicas de 1 à 0

kubectl edit rs REPICASET_NAME
1
user2688181

Lorsque le pod recrée automatiquement, même après la suppression manuelle du pod, ces pods ont été créés à l'aide du déploiement. Lorsque vous créez un déploiement, il crée automatiquement ReplicaSet et des pods. Selon le nombre de répliques de votre pod que vous avez mentionné dans le script de déploiement, le nombre de pods créés sera initialement. Lorsque vous essayez de supprimer manuellement un pod, il le crée automatiquement à nouveau. 

Oui, vous devez parfois supprimer les pods avec force. Mais dans ce cas, la commande force ne fonctionne pas. 

1
babs84

Attention aux sets stateful aussi 

kubectl get sts --all-namespaces

supprimer tous les ensembles avec état dans un espace de noms 

kubectl --namespace <yournamespace> delete sts --all

les supprimer un à un

kubectl --namespace ag1 delete sts mssql1 
kubectl --namespace ag1 delete sts mssql2
kubectl --namespace ag1 delete sts mssql3
1
M A

Vous pouvez faire kubectl get replicasets vérifier l'ancien déploiement en fonction de l'âge ou de l'heure

Supprimez l'ancien déploiement en fonction du temps si vous souhaitez supprimer le même pod d'application en cours d'exécution

kubectl delete replicasets <Name of replicaset>
1
Harsh Manvar

La cause principale de la question posée était l'attribut spécification de déploiement/travail/réplicasets strategy->type, qui définit ce qui devrait se produire lorsque le pod sera détruit (implicitement ou explicitement). Dans mon cas, c'était Recreate.

Selon @ (nom) réponse , la suppression du déploiement/job/réplicasets est la solution simple pour éviter d'expérimenter des combinaisons redoutables avant de modifier le cluster en tant qu'utilisateur novice.

Essayez les commandes suivantes pour comprendre les actions de la scène avant de vous lancer dans le débogage:

kubectl get all -A -o name
kubectl get events -A | grep <pod-name>
0
S.K. Venkat

Au lieu de supprimer NS, vous pouvez essayer de supprimer replicaSet.

kubectl get rs --all-namespaces

Puis supprimez le réplicaSet 

kubectl delete rs your_app_name
0
Vadim Sluzky

Au lieu d’essayer de déterminer s’il s’agit d’un déploiement, d’un désamon, d’un état ou d’un état… ou quoi (dans mon cas, c’était un contrôleur de réplication qui couvrait de nouveaux pods), l'image j'ai toutes les ressources avec cette commande:

kubectl get all

Bien sûr, vous pouvez également obtenir toutes les ressources de tous les espaces de noms:

kubectl get all --all-namespaces

ou définissez l'espace de noms que vous souhaitez inspecter:

kubectl get all -n NAMESPACE_NAME

Une fois que j'ai vu que le contrôleur de réplication était responsable de mes problèmes, je l'ai supprimé:

kubectl delete replicationcontroller/CONTROLLER_NAME

0
Dawid Gorczyca

Après avoir suivi un tutoriel interactif je me suis retrouvé avec un tas de pods, services, déploiements:

me@pooh ~ > kubectl get pods,services
NAME                                       READY   STATUS    RESTARTS   AGE
pod/kubernetes-bootcamp-5c69669756-lzft5   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-n947m   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-s2jhl   1/1     Running   0          43s
pod/kubernetes-bootcamp-5c69669756-v8vd4   1/1     Running   0          43s

NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   37s
me@pooh ~ > kubectl get deployments --all-namespaces
NAMESPACE     NAME                  DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
default       kubernetes-bootcamp   4         4         4            4           1h
docker        compose               1         1         1            1           1d
docker        compose-api           1         1         1            1           1d
kube-system   kube-dns              1         1         1            1           1d

Pour tout nettoyer, delete --all a bien fonctionné:

me@pooh ~ > kubectl delete pods,services,deployments --all
pod "kubernetes-bootcamp-5c69669756-lzft5" deleted
pod "kubernetes-bootcamp-5c69669756-n947m" deleted
pod "kubernetes-bootcamp-5c69669756-s2jhl" deleted
pod "kubernetes-bootcamp-5c69669756-v8vd4" deleted
service "kubernetes" deleted
deployment.extensions "kubernetes-bootcamp" deleted

Cela m'a laissé (ce que je pense être) un cluster vide de Kubernetes:

me@pooh ~ > kubectl get pods,services,deployments
NAME                 TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
service/kubernetes   ClusterIP   10.96.0.1    <none>        443/TCP   8m
0
Jens

Si un travail continue de s'exécuter, vous devez le rechercher et le supprimer:

kubectl get job --all-namespaces | grep <name>

et

kubectl delete job <job-name>

0
kurkop