Получение предупреждения о ресурсах, подлежащих удалению в Kubernetes

#kubernetes #devops

#kubernetes #devops

Вопрос:

Вместо использования default пространства имен Kubernetes рекомендуется создавать отдельные пространства имен для каждого из ваших приложений или каждого логического компонента вашей инфраструктуры.

«Облачный DevOps с Kubernetes» от OReilly подчеркивает соответствующий потенциальный риск:

Вы можете использовать пространство имен как своего рода временный виртуальный кластер и удалить пространство имен, когда закончите с ним. Но будьте осторожны! Удаление пространства имен удаляет все ресурсы в нем. Вы действительно не хотите запускать эту команду в неправильном пространстве имен. (…) Поэтому не удаляйте пространства имен, если они действительно не являются временными, и вы уверены, что они не содержат каких-либо производственных ресурсов.

В документации Kubernetes по пространствам имен я прочитал аналогичное предупреждение:

Предупреждение: это удаляет все в пространстве имен!

Конечно, нам нужно быть осторожными, но страшно подумать, что ресурсы могут быть удалены так легко. Есть ли какой-либо способ получить предупреждение о том, какие ресурсы будут удалены с помощью: kubectl delete namespaces <ns-name> ?

Ответ №1:

При удалении пространства имен все ресурсы пространства имен в этом пространстве имен будут удалены. Нет прямого способа перечислить все ресурсы в пространстве имен ( kubectl get all перечисляется только выбранный набор ресурсов).

Однако вы можете перечислить все типы ресурсов с пространством имен с помощью:

 kubectl get api-resources --namespaced=true
  

Затем вы можете выполнить итерацию по этим типам ресурсов и проверить, есть ли у вас какие-либо их экземпляры в вашем пространстве kubectl get имен.

Например, в следующей команде перечислены все ресурсы в ns-name пространстве имен:

 for r in $(kubectl api-resources --namespaced=true --no-headers 2>/dev/null | cut -d ' ' -f 1); do 
  kubectl get "$r" -n ns-name --no-headers -o custom-columns=:.metadata.name | sed "s/^/$r /"
done
  

И это все ресурсы, которые будут удалены при удалении ns-name пространства имен.

Ответ №2:

Нет встроенного способа получения предупреждения. Вы можете проверить все ресурсы в пространстве имен, используя приведенную ниже команду. Когда пространство имен будет удалено, все ресурсы в этом пространстве имен будут удалены.

 kubectl get all -n namespacename
  

Также рекомендуется хранить kubernetes yamls в системе управления версиями, такой как git, чтобы вы могли применить их снова в случае удаления по ошибке.

Комментарии:

1. Get all буквально не показывает все ресурсы, только наиболее распространенные типы . Но этого достаточно для моих целей, спасибо 🙂