#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
буквально не показывает все ресурсы, только наиболее распространенные типы . Но этого достаточно для моих целей, спасибо 🙂