在下面的场景中,我在../base/中定义了容器。
在这个/dev/目录中,我想启动命名空间dev中的所有部署和statefulsets。
问题是我还想在local-path-storage命名空间中运行local-path-storage CSI。kustomize将覆盖它并在“dev”命名空间中创建它。
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: dev
bases:
- ../base
resources:
- local-path-storage.yaml
我怎样才能撤销只覆盖local-path-storage.yaml的命名空间?
4条答案
按热度按时间x7yiwoj41#
Kustomize中还没有这个功能。有一个open issue解决了这个问题,但是在写这篇文章的时候还没有开放的PR。
这里最快的解决方案是删除
dev/kustomize.yaml
中的namespace
设置,并手动设置dev
中所有资源的名称空间。另一个选择,无耻地从我前面引用的问题复制,是创建一个变压器来解决这个问题:
o8x7eapl2#
遗憾的是,这是不可能的,自定义中的命名空间覆盖假定所有资源都应属于同一命名空间。
您的备选方案是:
kubectl apply -f .
部署不需要自定义的资源我通常为每组资源创建一个定制,这些资源一起部署在一个名称空间中,以使定制简单且独立于任何其他资源。
yyyllmsg3#
我也面临着同样的问题。
我解决这个问题的方法是把它分成多个步骤。
我会有第一步,第二步的文件夹。
现在我可以将部署中不应该有命名空间覆盖的部分移到第二步,反之亦然。根据您的部署需要。我正在从一个heml模板中处理复杂的转换,模板中输出了200多个文件。
我只是将部署分解为不同的步骤,并在每个步骤中使用kustomize来管理部署中需要隔离的部分。
这确实增加了一些工作量,但它仍然提供了我所需要的隔离,直到kustomize找到一个好的方法来处理名称空间覆盖的复杂性。这采用@Diego-mendes的答案,并将不同的部分封装到各自的文件夹中。
vwhgwdsa4#
可以通过添加一个namespaceTransformer来定制4.5.6。您需要将字段
unsetOnly
设置为true
。以下是一个示例:
这会将所有未设置名称空间的资源的名称空间设置为dev。
链接到命名空间Transformer规范:https://kubectl.docs.kubernetes.io/references/kustomize/builtins/#namespacetransformer