Как принудительно удалить поды кубернетов?

У меня есть следующие стручки:

NAME                                                 READY     STATUS        RESTARTS   AGE
xxx-myactivities-79f49cdfb4-nwg22                      1/1       Terminating   0          10h
xxx-mysearch-55864b5c59-6bnwl                          1/1       Terminating   0          1d
xxx-mysearch-55864b5c59-rpn48                          1/1       Terminating   0          13h
xxx-mysearch-6ff9bbb7cb-9qgbb                          1/1       Terminating   0          3d

Я запускаю следующий код для принудительного удаления этих модулей:

#
# Clean up dying pods
#
pods=$( kubectl get pods | grep -v Running | tail -n +2 | awk -F " " '{print $1}' )
for pod in $pods;
do
    kubectl delete pod $pod --force
done

Вот результат:

pod "xxx-myactivities-79f49cdfb4-nwg22" deleted
pod "xxx-mysearch-55864b5c59-6bnwl" deleted
pod "xxx-mysearch-55864b5c59-rpn48" deleted
pod "xxx-mysearch-6ff9bbb7cb-9qgbb" deleted

После уборки эти стручки все еще остаются.

NAME                                                 READY     STATUS        RESTARTS   AGE
xxx-myactivities-79f49cdfb4-nwg22                      1/1       Terminating   0          10h
xxx-mysearch-55864b5c59-6bnwl                          1/1       Terminating   0          1d
xxx-mysearch-55864b5c59-rpn48                          1/1       Terminating   0          13h
xxx-mysearch-6ff9bbb7cb-9qgbb                          1/1       Terminating   0          3d

Как мне очистить эти капсулы?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
52
0
79 784
7

Ответы 7

У вас есть следующие альтернативы:

kubectl delete pod xxx --now 

Или же

SSH в узел, на котором был запланирован застрявший модуль Запуск docker ps | grep {pod name} для получения идентификатора контейнера Docker Запуск docker rm -f {container id}

Или же

kubectl delete pod NAME --grace-period=0 --force

Думаю, хватило --grace-period=0, без --force.

Jesse Glick 30.10.2018 16:12

Этот --grace-period=0 без --force просто висит на неопределенное время, но комбинация обоих работала ?

weberc2 02.03.2019 02:14

он просто удаляет поды, но если они были развернуты как «deploymens», кубернеты восстановят их. ответ ниже (от @Chetabahana) решает проблему

bfday 07.01.2020 22:49

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

jbg 02.02.2020 14:28

To clean the pods you need to delete their deployments namespace.

Сначала обнаружите, что развертывания существовали:

$ kubectl get deployments --all-namespaces
NAME                               READY     STATUS        RESTARTS   AGE
chetabahana-web-584b95d576-62ccj   1/1       Running       0          20m
tutorial-web-56fbccc56b-wbwjq      1/1       Running       0          1m

Удалите развертывание <NAME>-xxxx следующим образом:

$ kubectl delete deployment <NAME>

Например, чтобы удалить tutorial-web-56fbccc56b-wbwjq, выполните:

$ kubectl delete deployment tutorial

Тогда все соответствующие поды tutorial-xxxx завершатся сами собой.

NAME                               READY     STATUS        RESTARTS   AGE
chetabahana-web-584b95d576-62ccj   1/1       Running       0          20m
tutorial-web-56fbccc56b-wbwjq      0/1       Terminating   0          1m

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

mruanova 12.11.2019 20:33

Все мои развертывания и наборы реплик уже были удалены, но все еще были модули, застрявшие в состоянии завершения. Мне помог только ответ Джеймса Нотта.

Radek Liska 26.08.2020 08:17

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

RichVel 23.05.2021 15:44

Чтобы удалить все поды в состоянии завершения с помощью одной команды, выполните:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done
kubectl get pod --all-namespaces | awk '{if ($4 != "Running") system ("kubectl -n " $1 " delete pods " $2  " --grace-period=0 " " --force ")}'

вы можете использовать эту команду

Для принудительного удаления стручка используйте это.

kubectl delete pod <Pod_Name> -n <namespace_name> --grace-period=0 --force

ИЛИ ЖЕ

kubectl delete pod <Pod_Name> -n <namespace_name> --wait=false

Для справки перейдите по ссылке ниже. https://kubernetes.io/docs/tasks/run-application/force-delete-stateful-set-pod/

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

helm delete Your_Deployment_Name -n The_Namespace

Я не уверен, что это имеет значение для вопроса, поскольку OP не упоминал Helm, и это решение ничего не удаляет.

austin_ce 11.11.2020 23:02

Я использую это:

kubectl get pods | grep part-of-the-pods-name|awk '{split($0,a," "); print a[1]}'|xargs -I {} kubectl delete pods {} --grace-period=0

При необходимости можно добавить дополнительный grep.

Другие вопросы по теме