Kustomize指定base清单文件报错,寻求技术帮助
我来帮你搞定这个问题!这个错误是因为你用的Kustomize 3.2.0版本不允许在resources字段里直接引用单个YAML文件,它要求resources指向包含kustomization.yaml的目录,同时还有路径安全限制(资源文件必须在当前kustomization目录的层级内或下方)。
问题根源
你的k8s/kustomize/overlays/test/kustomization.yaml里直接列出了base目录下的单个文件,比如../../base/deployment.yaml,但旧版Kustomize要求resources指向的是一个包含自己的kustomization.yaml的目录,而不是单独的文件。
解决方案
分两步调整:
1. 给base目录添加自己的kustomization.yaml
在k8s/kustomize/base/下创建一个kustomization.yaml文件,内容如下:
resources: - deployment.yaml - service.yaml - configmap.yaml - secret.yaml
这样base目录就变成了一个Kustomize可以识别的可复用资源集合。
2. 修改test环境的kustomization.yaml
把原来的resources字段改成指向base目录,而不是单个文件,修改后的内容:
commonLabels: variant: test app: test-app resources: - ../../base - namespace.yaml namespace: app-test patchesStrategicMerge: - secret.yaml - configmap.yaml
3. 验证构建命令
现在执行正确的构建命令(注意你之前的命令里路径写成了overlay/test,实际目录是overlays/test,别打错了):
kustomize build k8s/kustomize/overlays/test
额外说明
这个限制在较新的Kustomize版本(比如4.x及以上)已经放宽,可以直接引用单个文件,但你用的3.2.0是比较旧的版本,所以得遵循旧规则。通过给base目录添加kustomization文件,既符合旧版要求,也更符合Kustomize的最佳实践——把base作为一个统一的基础资源集合,overlay只负责维护差异化配置。
内容的提问来源于stack exchange,提问作者Shivakumar Sajjan

