【发布时间】:2021-08-05 16:09:36
【问题描述】:
我有一个由 Kustomized (Kubernetes) 管理的 Kubernetes 项目。该项目在同一个命名空间中部署了两个部署。
基本上,我有以下目录结构:
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 更好地管理命名空间删除的方法,以便仅当它为空时才将其删除。
【问题讨论】:
-
您是否尝试将
namespace.yaml移动到单独的目录并仅引用kustomization.yaml中的该命名空间? -
我认为这不会改变任何事情。当我运行
kubectl delete -k kustomize/app1时,它会分析 kustomization.yaml,如果它引用了 namespace.yml,它只会调用它的删除来自动删除 app2。我认为如果 Kustomize 不支持此功能,我可以做任何事情。 Kubernetes(没有 Kustomize)也存在同样的问题。我希望 Kustomized 解决了这个问题,但我认为从这个角度来看没有取得任何进展。 -
我并不是说你应该引用
namespace.yaml,而是它创建的命名空间,例如与namespace: my-namespace在kubernetes.io/docs/tasks/manage-kubernetes-objects/… 上查看一些示例 -
这就是我现在正在做的事情,我在消息中进行了描述。现在我的 kustomization.yaml 仅引用命名空间
namespace: mynamespace然后在kustomize/app1和kustomize/app2上面的两个文件夹之外,我有一个命名空间namespace.yml并在部署之前运行kubectl apply -f namespace.yml并在最后运行kubectl delete -f namespace.yml。但我不喜欢这个额外的命令。
标签: kubernetes kustomize