Я запустил поды командой

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

Что-то пошло не так, и теперь я не могу удалить этот Pod.

Я пробовал использовать методы, описанные ниже, но 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

yman

Ответов: 20

Ответы (20)

Вам необходимо удалить развертывание, которое, в свою очередь, должно удалить модули и наборы реплик https://github.com/kubernetes/kubernetes/issues/24137

Чтобы перечислить все развертывания:

kubectl get deployments --all-namespaces

Затем для удаления развертывания:

kubectl delete -n NAMESPACE deployment DEPLOYMENT

Где NAMESPACE - это пространство имен, в котором оно находится, а DEPLOYMENT - это имя развертывания. Если NAMESPACE - по умолчанию, вообще оставьте опцию -n.

В некоторых случаях он также мог быть запущен из-за задания или демона. Проверьте следующее и запустите соответствующую команду удаления.

kubectl get jobs

kubectl get daemonsets.app --all-namespaces

kubectl get daemonsets.extensions --all-namespaces

После прохождения интерактивного руководства я получил кучу модулей, сервисов, развертываний:

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

Чтобы все вычистить, delete --all отлично работало:

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

В результате у меня остался (как мне кажется) пустой кластер Kubernetes:

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

Я также столкнулся с проблемой, я использовал команду ниже, чтобы удалить развертывание.

kubectl delete deployments DEPLOYMENT_NAME

, но контейнеры все еще воссоздались, поэтому я пересек, проверьте набор реплик, используя команду ниже

kubectl get rs

затем отредактируйте набор реплик с 1 на 0

kubectl edit rs REPICASET_NAME

Вместо того, чтобы пытаться выяснить, является ли это развертыванием, деамонсетом, набором состояний ... или чем-то еще (в моем случае это был контроллер репликации, который продолжал охватывать новые поды :) Чтобы определить, что продолжало охватывать изображение, я получил все ресурсы с помощью этой команды:

kubectl получить все

Конечно, вы также можете получить все ресурсы из всех пространств имен:

kubectl получить все --all-namespaces

или определите пространство имен, которое вы хотите проверить:

kubectl get all -n NAMESPACE_NAME

Как только я увидел, что за мою проблему отвечает контроллер репликации, я удалил его:

kubectl удалить контроллер репликации / ИМЯ КОНТРОЛЛЕРА

Это случилось со мной с некоторыми неработающими установками 'helm'. Возможно, вы немного запутались в развертывании. Если ни одно из предыдущих предложений не помогло, найдите набор демонов и удалите его.

например kubectl get daemonset - пространство имен

затем удалите daemonset

kubectl delete daemonset --namespace  --all --force

затем попробуйте удалить пакеты.

kubectl delete pod --namespace   --all --force

Проверить, нет ли капсул.

kubectl get pods --all-namespaces

В моем случае я развернул через файл YAML, например kubectl apply -f deployment.yaml, и решение, похоже, заключается в удалении через kubectl delete -f deployment.yaml

У меня возникла аналогичная проблема: после удаления развертывания (kubectl delete deploy ) поды оставались «запущенными» и автоматически воссоздались после удаления (kubectl delete po < имя>).

Оказалось, что связанный набор реплик не был удален автоматически по какой-то причине, и после его удаления (kubectl delete rs ) можно было удалить поды.

Вы можете сделать kubectl get replicasets проверить старое развертывание в зависимости от возраста или времени

Удалить старое развертывание по времени, если вы хотите удалить тот же текущий запущенный модуль приложения

kubectl delete replicasets 

, если у вашего модуля имя типа name-xxx-yyy, им может управлять replicasets.apps с именем name-xxx, вы должны сначала удалить этот набор реплик, прежде чем удалять капсула

kubectl удалить replicasets.apps name-xxx

Есть два основных способа удалить PODS

  1. kubectl scale --replicas = 0 развернуть name_of_deployment. Это установит количество реплик равным 0 и, следовательно, не будет перезапускать модули снова.
  2. Используйте helm, чтобы удалить диаграмму, которую вы внедрили в свой конвейер. Не удаляйте развертывание напрямую, вместо этого используйте helm для удаления диаграммы, которая удалит все созданные ею объекты.

Вместо удаления NS вы можете попробовать удалить replicaSet

kubectl get rs --all-namespaces

Затем удалите ReplicaSet

kubectl delete rs your_app_name

Очевидно, что-то возрождает стручок. Хотя во многих других ответах вы смотрите на все (наборы реплик, задания, развертывания, наборы с отслеживанием состояния, ...), чтобы найти, что может возродить модуль, вместо этого вы можете просто посмотреть на модуль, чтобы увидеть, что его породило. Например:

$ kubectl describe pod $mypod | grep 'Controlled By:'
Controlled By:  ReplicaSet/foobar

Это говорит вам, что именно создало под. Затем вы можете пойти и удалить это.

Когда модуль воссоздается автоматически даже после удаления модуля вручную, то эти модули были созданы с помощью развертывания. Когда вы создаете развертывание, оно автоматически создает ReplicaSet и Pods. В зависимости от того, сколько реплик вашего модуля вы указали в сценарии развертывания, он изначально создаст это количество модулей. Когда вы пытаетесь удалить какой-либо модуль вручную, он автоматически создает этот модуль снова.

Да, иногда нужно удалить стручки принудительно. Но в этом случае команда force не работает.

Это предоставит информацию обо всех модулях, развертываниях, услугах и вакансиях. в пространстве имен.

kubectl get pods,services,deployments,jobs
Поды

могут быть созданы с помощью развертываний или заданий

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

Если вы удалите развертывание или задание, перезапуск модулей может быть остановлен.

В развертываниях с наборами с отслеживанием состояния (или службами, заданиями и т. Д.) Вы можете использовать эту команду:

Эта команда завершает все, что выполняется в указанном

kubectl -n  delete replicasets,deployments,jobs,service,pods,statefulsets --all

И силовой

kubectl -n  delete replicasets,deployments,jobs,service,pods,statefulsets --all --cascade=true --grace-period=0 --force

Если у вас есть задание, которое продолжает выполняться, вам нужно найти задание и удалить его:

kubectl get job --all-namespaces | grep <имя>

и

kubectl удалить задание <имя-задания>

Основной причиной заданного вопроса был атрибут спецификации deployment / job / replicasets strategy-> type, который определяет, что должно произойти, когда модуль будет уничтожен (неявно или явно). В моем случае это было Recreate.

Согласно @ nomad ответ, удаление Deployment / job / replicasets - это простое исправление, позволяющее избежать экспериментов со смертоносными комбинациями перед тем, как испортить кластер в качестве начинающего пользователя.

Попробуйте следующие команды, чтобы понять, что происходит за кулисами, прежде чем переходить к отладке:

kubectl получить все -A -o имя
kubectl получить события -A | grep <имя_пода>

Look out for stateful sets as well

kubectl get sts --all-namespaces

для удаления всех наборов с отслеживанием состояния в пространстве имен

kubectl --namespace  delete sts --all

, чтобы удалить их по одному

kubectl --namespace ag1 delete sts mssql1 
kubectl --namespace ag1 delete sts mssql2
kubectl --namespace ag1 delete sts mssql3

In some cases the pods will still not go away even when deleting the deployment. In that case to force delete them you can run the below command.

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

Многие ответы здесь говорят об удалении определенного объекта k8s, но вы можете удалить сразу несколько объектов, а не один за другим:

kubectl delete deployments, jobs, services, pods --all -n

В моем случае я использую кластер OpenShift с OLM - Operator Lifecycle Manager. OLM - это тот, кто контролирует развертывание, поэтому, когда я удалил развертывание, этого было недостаточно, чтобы остановить перезапуск модулей.

Только когда я удалил OLM и его подписку , развертывание, службы и модули исчезли.

Сначала перечислите все объекты k8s в вашем пространстве имен:

$ kubectl get all -n openshift-submariner

NAME                                       READY   STATUS    RESTARTS   AGE
pod/submariner-operator-847f545595-jwv27   1/1     Running   0          8d  
NAME                                  TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)    AGE
service/submariner-operator-metrics   ClusterIP   101.34.190.249           8383/TCP   8d
NAME                                  READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/submariner-operator   1/1     1            1           8d
NAME                                             DESIRED   CURRENT   READY   AGE
replicaset.apps/submariner-operator-847f545595   1         1         1       8d

OLM не указан с получить все, поэтому я ищу именно его:

$ kubectl get olm -n openshift-submariner

NAME                                                      AGE
operatorgroup.operators.coreos.com/openshift-submariner   8d
NAME                                                             DISPLAY      VERSION
clusterserviceversion.operators.coreos.com/submariner-operator   Submariner   0.0.1 

Теперь удалите все объекты, включая OLM, подписки, развертывания, наборы реплик и т. Д .:

$ kubectl delete olm,svc,rs,rc,subs,deploy,jobs,pods --all -n openshift-submariner

operatorgroup.operators.coreos.com "openshift-submariner" deleted
clusterserviceversion.operators.coreos.com "submariner-operator" deleted
deployment.extensions "submariner-operator" deleted
subscription.operators.coreos.com "submariner" deleted
service "submariner-operator-metrics" deleted
replicaset.extensions "submariner-operator-847f545595" deleted
pod "submariner-operator-847f545595-jwv27" deleted

List objects again - all gone:

$ kubectl get all -n openshift-submariner
No resources found.

$ kubectl get olm -n openshift-submariner
No resources found.

2022 WebDevInsider