#kubernetes #kustomize
Вопрос:
У меня есть проект Kubernetes, которым управляет Kustomized (Кубернетес). Этот проект развертывает два развертывания в одном пространстве имен.
В принципе, у меня есть следующая структура каталогов:
kustomize -> app1 -> kustomization.yaml
kustomize -> app1 -> namespace.yaml
kustomize -> app1 -> app1.yaml
kustomize -> app2 -> kustomization.yaml
kustomize -> app2 -> namespace.yaml
kustomize -> app2 -> app2.yaml
Файлы namespace.yaml
создают в обоих случаях одно и то же пространство имен, так что первое развернутое приложение создает пространство имен, а второе повторно использует его. Очевидно, что проблема возникает, когда я пытаюсь удалить только одно из этих приложений:
kubectl delete -k kustomize/app1
удалите оба приложения, потому что пространство имен удалено, и app2 тоже. Простое решение этой проблемы-выйти namespace.yaml
за пределы папок и просто назвать его автономным. Однако этот подход требует, чтобы пользователь не забывал запускать:
kubectl apply -f namespace.yaml
до того, как:
kubectl apply -k kustomize/app1
kubectl apply -k kustomize/app2
Я знаю, что другое возможное решение-через скрипт. Мой вопрос в том, что существует способ лучше управлять удалением пространства имен с помощью Kustomize, чтобы оно удалялось только в том случае, если оно пустое.
Комментарии:
1. Вы пытались перейти
namespace.yaml
в отдельный каталог и просто сослаться на это пространство имен вkustomization.yaml
?2. Я не думаю, что это что-то изменит. Когда я запускаю
kubectl delete -k kustomize/app1
его, он анализирует кустомизацию. yaml, и если он ссылается на namespace.yml, он просто вызывает его удаление, которое автоматически удаляет app2. Я думаю, что если Kustomize не поддерживает эту функцию, я могу что-нибудь сделать. Та же проблема существует и в Kubernetes (без Kustomize). Я надеялся, что Kustomized решил эту проблему, но я думаю, что с этой точки зрения не было достигнуто никакого прогресса.3. Я не имел в виду, что вы должны ссылаться
namespace.yaml
, но на пространство имен, которое оно создает, например,namespace: my-namespace
см. Некоторые примеры на kubernetes.io/docs/tasks/manage-kubernetes-objects/…4. Это то, что я делаю прямо сейчас, и я описываю это в сообщении. Теперь моя кустомизация. yaml ссылается только на пространство
namespace: mynamespace
имен, то есть за пределами двух папок вышеkustomize/app1
, иkustomize/app2
у меня есть пространствоnamespace.yml
имен, и я запускаюkubectl apply -f namespace.yml
его перед развертыванием иkubectl delete -f namespace.yml
в конце. Но мне не нравятся эти дополнительные команды.
Ответ №1:
У вас может быть такая структура каталогов:
kustomize -> ns -> namespace.yaml
kustomize -> app1 -> kustomization.yaml
kustomize -> app1 -> app1.yaml
kustomize -> app2 -> kustomization.yaml
kustomize -> app2 -> app2.yaml
Также вы можете добавить a kustomization.yaml
в корне, так что вам нужно только это, чтобы применить все:
kubectl -k kustomize/
Это создаст пространство имен и оба приложения.
И вы все равно можете удалить только одно приложение, если хотите:
kubectl delete -k kustomize/app1
И поскольку у вас нет namespace.yaml
в этом каталоге, он не удаляет пространство имен.
Комментарии:
1. Спасибо. Это звучит разумно. Я попробую это сделать.