Add ns-remover.sh
This commit is contained in:
102
ns-remover.sh
Executable file
102
ns-remover.sh
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# NAMESPACE Remover версия 1.0 (15.03.2021)
|
||||||
|
# Автор: Барсуков В.В.
|
||||||
|
# Лицензия GPLv2 или выше.
|
||||||
|
#
|
||||||
|
# Описание:
|
||||||
|
# Средство удаления "застрявших" NAMESPACE (находящихся в стадии Terminating)
|
||||||
|
#
|
||||||
|
# Использование:
|
||||||
|
# ns-remover.sh
|
||||||
|
#
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Версия и дата
|
||||||
|
VERNUM="1.0"
|
||||||
|
VERDATE="15.03.2021"
|
||||||
|
# ------------------------------------------------------------------
|
||||||
|
# Меняем локаль на ru_RU.UTF-8
|
||||||
|
export LC_ALL=ru_RU.UTF-8
|
||||||
|
|
||||||
|
# Выводим шапку
|
||||||
|
echo
|
||||||
|
echo "+-------------------------------------------------------+"
|
||||||
|
echo "| Средство удаления NAMESPACE. Версия $VERNUM от $VERDATE |"
|
||||||
|
echo "| NAMESPACE Remover (NR) |"
|
||||||
|
echo "| (C) Барсуков В.В. |"
|
||||||
|
echo "+-------------------------------------------------------+"
|
||||||
|
echo "| Формат: ns-remover.sh NAMESPACE |"
|
||||||
|
echo "+-------------------------------------------------------+"
|
||||||
|
|
||||||
|
# Если число передаваемых параметров меньше 1
|
||||||
|
if [[ "$#" -lt "1" ]]; then
|
||||||
|
echo "NR: Ошибка. Нет обязательного аргумента."
|
||||||
|
echo "NR: Доступные для удаления окружения:"
|
||||||
|
kubectl get ns | grep "Terminating"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Получаем аргумент
|
||||||
|
NAMESPACE=$1
|
||||||
|
|
||||||
|
# Проверка наличия Namespace. Если в выходе "NotFound" - ругаемся и выходим
|
||||||
|
STATUS=$(kubectl get ns $NAMESPACE | grep "NotFound")
|
||||||
|
if ! [[ -z "$STATUS" ]]; then
|
||||||
|
echo "NR: Ошибка. Окружение $NAMESPACE не найдено."
|
||||||
|
echo "NR: Доступные для удаления окружения:"
|
||||||
|
kubectl get ns | grep "Terminating"
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверка статуса Namespace (удаляем только окружения в статусе Terminating)
|
||||||
|
STATUS=$(kubectl get ns $NAMESPACE | grep "Terminating")
|
||||||
|
if [[ -z "$STATUS" ]]; then
|
||||||
|
echo "NR: Ошибка. Окружение $NAMESPACE не подходит для удаления."
|
||||||
|
echo "NR: Доступные для удаления окружения:"
|
||||||
|
kubectl get ns | grep "Terminating"
|
||||||
|
exit 3
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Проверка наличия подов в статусе "Running" в удаляемом окружении
|
||||||
|
STATUS=$(kubectl get pods --namespace $NAMESPACE | grep "Running")
|
||||||
|
if ! [[ -z "$STATUS" ]]; then
|
||||||
|
echo "NR: Ошибка. Ещё остались запущенные поды в окружении $NAMESPACE:"
|
||||||
|
kubectl get pods --namespace $NAMESPACE | grep "Running"
|
||||||
|
exit 4
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Готовим tmp.json фйал
|
||||||
|
kubectl get ns $NAMESPACE -o json > tmp.json
|
||||||
|
awk 'NR==FNR{if (/spec/) hit=NR; next} {print} FNR==hit{exit}' tmp.json tmp.json > tmp2.json
|
||||||
|
echo ' "finalizers": []' >> tmp2.json
|
||||||
|
echo ' }' >> tmp2.json
|
||||||
|
echo '}' >> tmp2.json
|
||||||
|
|
||||||
|
cat tmp2.json
|
||||||
|
|
||||||
|
# Запускаем отдельный kubectl proxy
|
||||||
|
kubectl proxy &
|
||||||
|
|
||||||
|
# Небольшая пауза
|
||||||
|
sleep 3
|
||||||
|
|
||||||
|
# Удаляем окружение (вариант 2)
|
||||||
|
echo "GNR: Удаляем окружение $NAMESPACE:"
|
||||||
|
curl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp2.json http://127.0.0.1:8001/api/v1/namespaces/$NAMESPACE/finalize
|
||||||
|
|
||||||
|
# Удаляем окружение (вариант 1)
|
||||||
|
#kubectl patch namespace $NAMESPACE -p '{"metadata":{"finalizers":[]}}' --type='merge' -n $NAMESPACE
|
||||||
|
#kubectl delete namespace $NAMESPACE --grace-period=0 --force
|
||||||
|
|
||||||
|
# Проверяем удалено ли окружение
|
||||||
|
echo "NR: Проверяем удалено ли окружение $NAMESPACE:"
|
||||||
|
kubectl get ns $NAMESPACE
|
||||||
|
|
||||||
|
# Очищаем за собой
|
||||||
|
kill -9 $(ps aux | grep "kubectl proxy" | grep -v "grep" | awk '{print $2}')
|
||||||
|
rm tmp.json
|
||||||
|
rm tmp2.json
|
||||||
|
|
||||||
|
# Выход
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user