组件检查项错误修复
组件检查项常见错误说明及其修复方法。
错误及其修复方法
错误消息示例:
[镜像检查结果] 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 选项进行镜像同步, <错误信息>
如果同时有多个验证项未通过,请按照如下顺序逐一修复
helm template 检查
helm lint 检查
镜像完整性检查
平台兼容性检查
prometheus rule检查
下面是可能的错误,及其修复方法(可以搜索报错关键字,快速找到错误)
[helm template结果] <错误信息>
描述:对组件执行helm template时,产生的错误. 使用polaris工具扫描helm template结果发现的风险
修复方法:
在本地对组件执行helm template,根据错误信息,修复chart中的错误,重新使用zlink上传组件.
下载polaris工具(https://polaris.docs.fairwinds.com/infrastructure-as-code/), 对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
修复方法:
手动编辑chart/component.yaml
在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
方法二:增加image对该平台的支持
参考docker 多平台镜像构建官方文档,构建并上传对应platform的镜像
重新上传组件
[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:
修复:子chart需要在Chart.yaml里面写上dependency,参考helm官方文档