如何避免使用 Kubernetes Kustomize 删除非空命名空间

How to avoid not empty namespace deletion with Kubernetes Kustomize

我有一个由 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 更好地管理名称空间删除的方法,以便仅在名称空间为空时将其删除。

你可以有这样的目录结构:

kustomize -> ns -> namespace.yaml

kustomize -> app1 -> kustomization.yaml
kustomize -> app1 -> app1.yaml

kustomize -> app2 -> kustomization.yaml
kustomize -> app2 -> app2.yaml

你也可以在根部添加一个kustomization.yaml,这样你只需要这个就可以全部应用:

kubectl -k kustomize/

这将创建命名空间和两个应用程序。

如果您愿意,您仍然可以只删除一个应用程序:

kubectl delete -k kustomize/app1

并且由于您在该目录中没有 namespace.yaml,因此它不会删除命名空间。