# #python #python-3.x #kubernetes #google-kubernetes-engine
Вопрос:
Я хочу удалить все постоянные утверждения тома, прикрепленные к настраиваемому развертыванию. Сначала я удаляю само развертывание, которое удаляет все модули, но диски не удаляются.
Я знаю команду для удаления pvcs, но она включает в себя извлечение всех из них с помощью команды[1], а затем ручное копирование-вставку[2] тех, которые принадлежат набору развертывания.
Если я хочу сделать это программно, какой API клиента Python Kubernetes или команду cli я использую?
Я использую GKE.
Я попытался прочитать документацию клиента Python, но не смог понять, как выполнить эту задачу.
[1] kubectl --namespace=<my_namespace> --context=<my_cluster> get pvc
[2] kubectl --namespace=<my_namespace> --context=<cluster_name> delete pvc data-avirals-july19-1-devel-0 data-avirals-july19-1-devel-1
Ответ №1:
Возможно, существует более короткий способ, однако этот способ будет фильтровать все данные, связанные с именем развертывания MY_DEPLOYMENT_NAME
. Другие pvc
(не связанные с тем же развертыванием) не будут затронуты.
for volume in $(kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}');
do
kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"n"}' ;
# kubectl delete pvc "$(kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"n"}')"
done
Примечание:
- раскомментируйте команду
kubectl delete
, чтобы действительно удалить пвх. Его прокомментировали, чтобы защитить пользователей от случайного удаления. bash
требуется, чтобы этот цикл работал.
Пояснение:
Следующая команда перечислит тома, используемые развертыванием, называемым MY_DEPLOYMENT_NAME
kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}'
Теперь мы пройдемся по этим томам, чтобы найти, что claim
используется этими томами. Это сделано в моем claimRef
разделе проверки. Это делается с помощью:
kubectl get pv $volume -o jsonpath='{.spec.claimRef.name}{"n"}'
Комментарии:
1. Я думаю
nginx
, что должен быть отстранен от вашей команды, учитывая, что вы уже упомянулиMY_DEPLOYMENT_NAME
. Кроме того, я не получаю от этого никакого результата.2. извините, я забыл удалить
nginx
. теперь это исправлено.3. что
kubectl get deployments MY_DEPLOYMENT_NAME -o jsonpath='{.spec.template.spec.volumes[*].name}'
возвращается ? если это возвращает пустой, тоfor loop
ничего не будет делать …..также это означает, что для депонирования не настроен том.
Ответ №2:
Вы можете удалить все пвх сразу с помощью следующей команды:
kubectl --namespace=<my_namespace> delete pvc --all
После этого PVS следует удалить, но это может занять некоторое время. Кроме того, будьте очень осторожны с этой командой и убедитесь, что вы удаляете то, что намереваетесь.
Комментарии:
1. Нет, это не сработает, потому что это удалит все PVCS в пространстве имен, моя цель-удалить все в развертывании .