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
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.
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
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
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.
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
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.
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
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>
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>
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
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
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
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>