如何在OpenShift/Kubernetes中实现Kustomize空运行且避免报错?
解决Kustomize Overlay空运行不报错的方案
要实现执行oc apply -k overlays/serverB时不报错且无实际部署操作,同时不用在脚本里加判断逻辑,有两种简单可行的方法:
方案一:引用已存在的Namespace
利用Kubernetes中Namespace存在时apply只会校验不修改的特性,在serverB的kustomize配置中添加一个已存在的Namespace定义,同时排除base资源:
修改overlays/serverB/kustomize.yml:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization # 禁用base资源的引用,避免部署base里的内容 bases: [] # 添加集群中已存在的Namespace(比如default) resources: - |- apiVersion: v1 kind: Namespace metadata: name: default
执行命令后,只会输出namespace/default unchanged,无任何实际部署操作,也不会触发"no objects passed to apply"错误。
方案二:添加无业务影响的空ConfigMap
如果不想依赖已存在的Namespace,可以创建一个空的ConfigMap作为占位资源:
- 在
overlays/serverB目录下创建dummy.yml:
apiVersion: v1 kind: ConfigMap metadata: name: serverB-dummy # 可选:添加注释标记为无用资源,方便后续识别 annotations: kustomize.dummy: "true" data: {}
- 修改
overlays/serverB/kustomize.yml:
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: [] resources: - dummy.yml
执行命令后会创建这个空ConfigMap,虽然是一个K8s资源,但完全无业务影响,同时避免了报错。如果后续不需要,直接删除这个ConfigMap即可。
核心要点:必须确保bases: [],这样不会加载base目录下的任何资源,彻底跳过核心服务的部署。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

