Loki Helm ingester zone-b 模板把 claim 当字符串,修正 with 作用域
Loki Helm chart 6.48.0 的 zone-b PVC 模板可能报 volumeAttributesClassName 的字符串字段错误;6.50.0 包含 with 作用域修正,应离线渲染并核对 PVC 内容。
Helm 渲染 Loki ingester 的 zone-b StatefulSet 时,报 can't evaluate field volumeAttributesClassName in type string,通常还带有模板行号。chart 6.48.0 在启用持久化的环境中出现过这个问题。错误发生在模板渲染阶段,此时还不能归因于 Kubernetes 不支持该 PVC 字段。
相关模板把 volumeAttributesClassName 的 with 写在 storageClass 的 with 内。进入后者后,. 已经是 storage class 字符串,继续通过它读取 .volumeAttributesClassName 就会失败。修正需要先结束 storageClass 的作用域,再从 claim 的配置对象读取另一个字段。
正式 chart 6.50.0 的实际发布包包含这项修改。升级时核对的是 chart 版本,而不只是 Loki 镜像版本。可以先在受控目录中离线渲染计划使用的版本:
helm template loki grafana/loki \
--version 6.50.0 \
--namespace loki \
-f reviewed-values.yaml > rendered.yaml
这里假设已经按组织流程配置了可信 chart 仓库。reviewed-values.yaml 应保留实际需要的持久化、zone 和 storage class 设置;不要为了让模板通过,把生产持久化关闭或删掉 PVC。选择后续版本时,同样要确认它包含修正并适合部署环境,6.50.0 只是已确认的包含版本。
暂时不能整体升级时,可在版本控制的 chart 副本中做局部修正。两个字段应是同一级作用域,下面只展示结构关系,具体缩进沿用原模板:
{{- with .storageClass }}
storageClassName: {{ . }}
{{- end }}
{{- with .volumeAttributesClassName }}
volumeAttributesClassName: {{ . }}
{{- end }}
这段不能脱离原来的 claim 循环直接粘贴到任意位置。关键是第一个 end 在第二个 with 之前,确保 . 回到 claim 对象。保留原模板对特殊 storage class 值、缩进和其他字段的处理,避免局部示意覆盖原有逻辑。
验收时看渲染结果中的 zone-b:相应 volumeClaimTemplates 是否存在,storageClassName 与预期一致,需要的 volumeAttributesClassName 是否位于正确层级;也比较其他 zone 的持久化配置没有意外变化。仅“Helm 不再报错”还不足以证明 PVC 内容正确。
最后,模板能够生成 YAML,并不能证明集群、CSI 驱动和存储配置支持该字段。应继续按现有流程做集群适配与发布检查。这个修复解决的是 Go 模板的 dot 作用域,和 PVC 已创建后的不可变字段错误、镜像架构或存储权限故障分别处理。


