Как удалить все диски в развертывании в Kubernetes?

# #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
 

Примечание:

  1. раскомментируйте команду kubectl delete , чтобы действительно удалить пвх. Его прокомментировали, чтобы защитить пользователей от случайного удаления.
  2. 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 в пространстве имен, моя цель-удалить все в развертывании .