Как избежать удаления не пустого пространства имен с помощью Kubernetes Kustomize

#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. Спасибо. Это звучит разумно. Я попробую это сделать.