You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在独立的Helm Chart-II中引用Chart-I的应用版本?

问题描述

已在K8S集群中安装了一个Helm Chart(Chart-I),执行helm list可查看其信息:

root:~# helm list
NAME       NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
chart1     default         1               2023-07-12 10:02:53.002761513 +0000 UTC deployed        chart1-8.5.5    8.5.5

现在需要在独立的Chart-II中基于Chart-I的APP_VERSION实现条件逻辑,示例模板代码如下:

{{- if .chart1.AppVersion "> 8.0" -}}
    Do something
{{- else }}
    Do something else
{{- end }}

请问在两个Chart相互独立的情况下,能否实现上述功能?

回答

默认情况下,独立的Helm Chart之间不会自动共享部署状态,所以直接在Chart-II的模板中使用.chart1.AppVersion这种方式无法实现,因为Chart-II的模板上下文里没有Chart-I的相关数据。不过可以通过以下两种方式实现需求:

方式1:手动传递参数

安装Chart-II时,手动将Chart-I的AppVersion作为参数传入:

helm install chart2 ./chart2 --set chart1AppVersion=8.5.5

或者在Chart-II的values.yaml中预先配置:

chart1AppVersion: "8.5.5"

之后在Chart-II的模板中使用语义化版本比较函数semverCompare实现条件逻辑:

{{- if semverCompare "> 8.0" .Values.chart1AppVersion -}}
    Do something
{{- else -}}
    Do something else
{{- end -}}

方式2:使用Helm lookup函数查询集群资源

Helm 3.1及以上版本支持lookup函数,可以直接在模板中查询K8S集群中的Helm Release资源(对应API组helm.sh/v1的Release类型),从而获取Chart-I的AppVersion。示例代码如下:

{{- # 查询default命名空间下的chart1 Release -}}
{{- $chart1Release := lookup "helm.sh/v1" "Release" "default" "chart1" -}}
{{- if $chart1Release -}}
  {{- $appVersion := $chart1Release.Spec.Chart.AppVersion -}}
  {{- if semverCompare "> 8.0" $appVersion -}}
      Do something
  {{- else -}}
      Do something else
  {{- end -}}
{{- else -}}
  # 处理Chart-I未部署的场景,比如输出提示或执行默认逻辑
  Chart-I is not deployed in default namespace
{{- end -}}

注意:使用lookup函数需要确保安装Chart-II的ServiceAccount具备查询helm.sh/v1/Release资源的权限。

内容的提问来源于stack exchange,提问作者Sathish Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 14:52:22