Подтвердить что ты не робот

Бобы застряли в состоянии завершения

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

Мой кластер Kubernetes состоит из одного узла плоскости управления и трех рабочих узлов, установленных на виртуальных машинах Ubuntu.

В чем может быть причина этой проблемы?

NAME        READY     STATUS        RESTARTS   AGE
pod-186o2   1/1       Terminating   0          2h
pod-4b6qc   1/1       Terminating   0          2h
pod-8xl86   1/1       Terminating   0          1h
pod-d6htc   1/1       Terminating   0          1h
pod-vlzov   1/1       Terminating   0          1h
4b9b3361

Ответ 1

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

kubectl delete pod <PODNAME> --grace-period=0 --force --namespace <NAMESPACE>

Ответ 2

Принудительное удаление контейнера:

kubectl delete pod --grace-period=0 --force --namespace <NAMESPACE> <PODNAME>

Флаг --force является обязательным.

Ответ 3

Удалить блок финализаторов из ресурса (модуль, развертывание, ds и т.д.) Yaml:

"finalizers": [
  "foregroundDeletion"
]

Ответ 4

Практический ответ - вы всегда можете удалить завершающий блок, запустив:

kubectl delete pod NAME --grace-period=0

Исторический ответ. В версии 1.1 возникла проблема, когда иногда контейнеры перегружались в состоянии завершения, если их узлы нечисто удалены из кластера.

Ответ 5

Я нашел эту команду более простой:

for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done

Он удалит все модули в состоянии завершения в пространстве имен по умолчанию.

Ответ 6

В моем случае опция --force не работала. Я все еще мог видеть стручок! Он застрял в режиме завершения/неизвестности. Итак, после запуска

kubectl delete pods <pod> -n redis --grace-period=0 --force

Я побежал

kubectl patch pod <pod> -p '{"metadata":{"finalizers":null}}'

Ответ 7

Если --grace-period=0 не работает, вы можете сделать:

kubectl delete pods <pod> --grace-period=0 --force

Ответ 8

Я недавно наткнулся на это, когда удалял пространство имен rook ceph - оно застряло в состоянии Terminating.

Единственное, что помогло, - это удалить финализатор kubernetes, напрямую вызвав api k8s с curl, как предложено здесь.

  • kubectl get namespace rook-ceph -o json > tmp.json
  • удалить финализатор kubernetes в tmp.json (оставить пустой массив "finalizers": [])
  • запустите kubectl proxy в другом терминале для целей аутентификации и выполните следующий запрос curl на возвращаемый порт
  • curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
  • пространство имен ушло

Подробный демонтаж ладьи ceph здесь.

Ответ 9

Я наткнулся на это недавно, чтобы освободить ресурс в моем кластере. Вот команда, чтобы удалить их всех.

kubectl get pods --all-namespaces | grep Terminating | while read line; do 
pod_name=$(echo $line | awk '{print $2}' ) name_space=$(echo $line | awk 
'{print $1}' ); kubectl delete pods $pod_name -n $name_space --grace-period=0 --force; 
done

надеюсь, это поможет кому-то, кто читает это

Ответ 10

Первоначальный вопрос "Что может быть причиной этой проблемы?" и ответ обсуждается по адресу https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues/65569 и см. https://www.bountysource.com/issues/33241128-неспособно к REMOVE-а-остановленный контейнер-устройство или-ресурсы заняты

Это вызвано утечкой монтируемой док-станции в другое пространство имен.

Вы можете войти на хост хоста для расследования.

minikube ssh
docker container ps | grep <id>
docker container stop <id>