Как принудительно удалить кубинец?
У меня есть следующие контейнеры:
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
Как очистить эти стручки?
Ответы
Ответ 1
У вас есть эти альтернативы:
kubectl delete pod xxx --now
Или
SSH в узле застрял стручок был запланирован на Running docker ps | grep {pod name}
docker ps | grep {pod name}
чтобы получить идентификатор контейнера Docker. Запуск docker rm -f {container id}
Или
kubectl delete pod NAME --grace-period=0 --force
Ответ 2
Для очистки модулей вам необходимо удалить их пространство имен развертываний.
Сначала обнаружите, что развертывания существовали:
$ 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
Ответ 3
Чтобы удалить все модули в завершающем состоянии с помощью одной команды:
for p in $(kubectl get pods | grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force;done
Ответ 4
kubectl get pod --all-namespaces | awk '{if ($4 != "Running") system ("kubectl -n " $1 " delete pods " $2 " --grace-period=0 " " --force ")}'
Вы можете использовать эту команду