组件检查项错误修复

更新时间: 2024-01-12 10:04:47

组件检查项常见错误说明及其修复方法。

错误及其修复方法

错误消息示例:

[镜像检查结果] chart中使用的 docker.io/library/nginx 镜像, 未包含在component.yaml中
[helm lint结果][INFO] Chart.yaml: icon is recommended
[helm template结果] Error: cannot load values.yaml
[非预期错误] 无法从镜像仓库中获取镜像 docker.io/library/nginx 的信息, 请确认当前账户是否有权限访问镜像仓库, 若未进行镜像同步, 建议在 zlink push 时添加 --sync 选项进行镜像同步, <错误信息>

如果同时有多个验证项未通过,请按照如下顺序逐一修复

  1. helm template 检查

  2. helm lint 检查

  3. 镜像完整性检查

  4. 平台兼容性检查

  5. prometheus rule检查

下面是可能的错误,及其修复方法(可以搜索报错关键字,快速找到错误)

[helm template结果] <错误信息>

描述:对组件执行helm template时,产生的错误. 使用polaris工具扫描helm template结果发现的风险

修复方法:

polaris audit --audit-path {helm template结果保存的文件} --format=pretty

错误示例:

  • 不符合go template语法:parse error at (tmp/templates/deployment.yaml:11): unexpected {{end}}

  • 不符合yaml语法YAML:parse error on t/templates/deployment.yaml: error converting YAML to JSON: yaml: line 13: mapping values are not allowed in this context

  • polaris检测结果不通过,可以根据官方文档查看具体原因

https://polaris.docs.fairwinds.com/checks/security/

https://polaris.docs.fairwinds.com/checks/efficiency/

https://polaris.docs.fairwinds.com/checks/reliability/

[helm lint结果] <错误信息>

描述:对组件执行helm lint后,helm报告的chart问题

修复方法:在本地执行helm lint,依据lint报告的错误,作出对应的修复,参考附录,重新上传组件

提示:helm lint会产生3种级别的错误,分别是

  • INFO:可以忽略

  • WARNING:违反惯例或建议的问题,建议修复

  • ERROR:可能导致部署失败,一定要修复

[非预期错误]helm lint <chart> 失败, 建议在本地进行helm lint以检查lint错误, <错误信息>

描述:对组件执行helm lint时,产生的错误

修复方法:在本地执行helm template 和 helm lint,若出现错误,请按照错误信息进行修复后,重新上传组件

[镜像检查结果]在镜像仓库 <镜像仓库> 中未找到tag为 <tag> 的镜像, 请重新上传镜像, 若未进行镜像同步, 建议在 zlink push 时添加 --sync 选项进行镜像同步

描述:镜像仓库中找不到component.yaml中指定的某镜像

修复方法:

  • 确保镜像仓库存在该镜像

  • 若账号有权限拉取该镜像,但在组件检查却提示因为权限原因无法拉取镜像,则可能是账号授权问题。请访问授权页,确保有AliyunServiceRoleForApplicationDeliveryPlatform的授权

  • 如果在zlink push 时通过使用 --sync 选项进行了镜像同步,则同样使用 --sync 选项重新上传组件即可

[镜像检查结果]chart中使用的 <image> 镜像, 未包含在component.yaml中

描述:检测到未被zlink管理的镜像

提示:请通过工单联系我们,上报异常case

修复方法:

  1. 手动编辑chart/component.yaml

  2. 在spec.images下,添加一个子项,示例如下

- registry: docker.io
  repository: library/nginx
  tag: latest
  managedImage: registry.cn-shanghai.aliyuncs.com/adp/library-nginx:latest

managedImage可以填写如下二者之一

  • 源镜像的 registry/repository:tag

  • 将源镜像推送到当前账号下的容器镜像仓库,填写其镜像地址

[镜像检查结果]镜像 <image> 不支持component.yaml中指定的 <os>/<architecture> 架构, 请构建并上传对应系统/架构的镜像

描述:镜像不支持component.yaml中指定的架构

修复方法:

  • 方法一:删除组件对该平台的支持

    • 编辑chart/component.yaml

    • 在spec.platforms中找到对应的platform子项,例如linux/arm64

    • 删除该子项,重新上传组件

platforms:
- architecture: arm64
  os: linux

[prometheus rule检查结果] <PrometheusRule> 中的 <expr> 表达式有误, 错误原因:<错误信息>

描述:组件PrometheusRule中的表达式不符合语法

修复方法:根据PrometheusRule名称和表达式定位组件中具体错误的规则,并修改为合法的格式,具体语法规则参考Prometheus文档MetricsQL文档

[非预期错误]无法从镜像仓库中获取镜像 <image> 的信息, 请确认当前账户是否有权限访问镜像仓库, 若未进行镜像同步, 建议在 zlink push 时添加 --sync 选项进行镜像同步, <错误信息>

描述:无法连接到镜像仓库,一般是凭证或者网络问题

修复方法:

  • 如果未进行镜像同步

    • 建议进行同步操作(参考该文档),重新进行组件验证

    • 如不进行镜像同步,adp平台仅可以访问公开的或当前账号下的阿里云镜像仓库,无法对私有镜像仓库进行检查

  • 已进行了镜像同步

    • 检查镜像是否在当前账号的容器镜像服务

    • 检查容器镜像服务是否可以正常访问

[非预期错误]镜像<image>地址格式有误, 地址需要全小写且符合registry/repository[:tag]格式, <错误信息>

描述:无法将image解析为一个合法的容器镜像地址

修复方法:镜像地址需要符合如下正则表达式,检查镜像地址,修改地址使其符合标准

"^(?P<repository>[\w.\-_]+((?::\d+|)(?=/[a-z0-9._-]+/[a-z0-9._-]+))|)(?:/|)(?P<image>[a-z0-9.\-_]+(?:/[a-z0-9.\-_]+|))(:(?P<tag>[\w.\-_]{1,127})|)$"

错误示例:

  • 出现大写字母:docker.io/Library/nginx:latest

附录

常见helm lint问题修复

  • [INFO] Chart.yaml: icon is recommended

    • 提示:可选的修复项,不影响部署

    • 修复:在Chart.yaml 中配置icon,需要是SVG或PNG格式图片的URL

  • icon: <url>
  • [ERROR] chart metadata is missing these dependencies:

阿里云首页 云原生应用交付平台 相关技术圈