开发者社区 问答 正文

有大佬用过Kustomize不? 我apply patch的时候报错


+ kubectl apply -k . 
error: rawResources failed to read Resources: 

Load from path ../../base failed: '../../base' must

be a file 

我的目录结构是这样

image.png

kubectl apply -k . 是在test文件夹下运行的

test文件夹下kustomization.yaml内容如下

bases:
- ../../base
patchesStrategicMerge:
- healthcheck_patch.yaml
- memorylimit_patch.yaml
- envvar_patch.yaml

在base下运行kubectl apply -k . 没问题 可以创建发布 服务和配置项

Error: no matches for OriginalId apps_v1_Deployment|~X|vango-server-heiye-deployment; no matches for CurrentId apps_v1_Deployment|~X|vango-server-heiye-deployment; failed to find unique target for patch apps_v1_Deployment|vango-server-heiye-deployment error: no objects passed to apply 我的deployment里的name是给的vango-server-heiye-deployment呀 为啥说找不到match呢 他这里是要match啥呀

sh "cd ${APP_NAME}/deploy/overlays/${ENV} && kustomize build . | kubectl apply -f - --namespace=${params.K8S_NAMESPACE} --kubeconfig=${K8S_CONFIG_PATH} " 是不是kubectl apply -f -后面不能跟namespace和kubeconfig参数 所以他找不到我的namespace里的deployment呢

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
初商 2019-08-22 19:42:25 2513 分享 版权
阿里云 AI 助理回答

从你的描述来看,你遇到了两个问题。首先,我们来解决kubectl apply -k .test目录下执行时遇到的问题。

问题1: Load from path ../../base failed

错误信息提示'../../base' must be a file,这表明kustomize期望bases字段指定的路径是一个文件(通常是kustomization.yaml),而不是一个目录。然而,按照你的描述,../../base应该是一个包含kustomization.yaml的目录,用于定义基础资源。

解决方案: 在test目录下的kustomization.yaml中,你应该使用bases:字段引用具体的kustomization.yaml文件,而不是目录。如果base目录下确实有一个kustomization.yaml,正确的写法应该是直接指定这个文件的相对路径:

bases:
- ../../base/kustomization.yaml

这样修改后,kustomize就能正确加载base目录下的配置了。

问题2: Error: no matches for OriginalId...

这个错误通常意味着kustomize在尝试应用补丁(patches)时,找不到与之匹配的目标资源。错误信息中的no matches for OriginalId apps_v1_Deployment|~X|vango-server-heiye-deployment说明它在寻找名为vango-server-heiye-deployment的Deployment资源,但是没有找到匹配项。

可能的原因及解决方案:

  1. 资源名称不匹配: 确认在基础资源(可能是base目录下的配置)中,vango-server-heiye-deployment的Deployment确实存在,并且名称完全一致(包括大小写)。有时候,即使看起来相同,也可能因为某些原因(如YAML格式问题或隐藏字符)导致不匹配。

  2. 资源版本问题: 确保你的kustomization.yaml中对资源的引用(特别是API版本,如apps/v1)与实际资源的API版本相匹配。

  3. 资源作用域问题: 如果你在不同的命名空间中操作,确保补丁和目标资源处于同一命名空间,或者在引用时指定了正确的命名空间。

  4. 依赖顺序问题: 确保所有依赖的资源(如Services, ConfigMaps等)已经正确应用或存在于集群中,因为这些也可能是补丁应用成功所必需的。

  5. 重新构建kustomize资源: 有时,清理并重新构建kustomize生成的资源可以解决问题。你可以尝试删除test目录下除了kustomization.yaml之外的任何生成文件(如果有),然后重新运行kubectl kustomize .或直接kubectl apply -k .

综上所述,检查并调整上述方面后,你应该能够解决遇到的问题。如果问题依旧,建议查看base目录下的具体配置,以及是否有其他环境变量或外部因素影响了资源的识别。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答