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

如何在Helm模板中程序化获取指定插件的API版本?

在Helm模板中获取插件API版本的简便方法

方法1:利用Helm内置的capabilities对象

Helm提供了capabilities全局对象,可直接访问集群的API资源与版本信息。你可以遍历所有可用API版本,筛选出目标资源对应的版本:

{{- range $version := .Capabilities.APIVersions.Versions }}
{{- if hasPrefix "cert-manager.io/" $version }}
{{- /* 输出第一个匹配的API版本,可根据需求调整逻辑 */}}
{{- $version }}
{{- end }}
{{- end }}

如果仅需确认特定版本是否存在(而非获取完整字符串),可直接使用判断逻辑:

{{- if .Capabilities.APIVersions.Has "cert-manager.io/v1" }}
apiVersion: cert-manager.io/v1
{{- else if .Capabilities.APIVersions.Has "cert-manager.io/v1beta1" }}
apiVersion: cert-manager.io/v1beta1
{{- end }}

方法2:通过Chart依赖或预定义变量

若你是在依赖cert-manager的自定义Chart中,或直接安装cert-manager官方Chart:

  • 官方cert-manager Chart会暴露API版本相关的模板变量,可直接引用(比如.Values.certManager.apiVersion,具体变量名参考对应Chart的values.yaml)。
  • 若你的Chart通过Chart.yaml声明了对cert-manager的依赖,可通过.Dependencies对象访问其配置中的版本信息。

方法3:提前通过kubectl获取并传入参数

这是最直接的方式,先在本地执行命令获取版本,再通过--set或values文件传递给Helm:

# 获取certificates资源的API版本
CERT_API_VERSION=$(kubectl api-resources -o wide | grep certificates | awk '{print $3}')

# 安装Chart时传入参数
helm install my-chart ./my-chart --set certManager.apiVersion=$CERT_API_VERSION

在模板中直接引用该变量即可:

apiVersion: {{ .Values.certManager.apiVersion }}
kind: Certificate

关于lookup函数的说明

你提到用lookup函数难度超出预期,核心原因是lookup需要提前知道目标资源的group/version才能查询,但我们的需求正是获取这个版本。如果一定要用lookup,可以枚举常见版本进行试探:

{{- $apiVersions := list "cert-manager.io/v1" "cert-manager.io/v1beta1" }}
{{- range $version := $apiVersions }}
{{- $resource := lookup $version "" "certificates" "" }}
{{- if $resource }}
{{- $version }}
{{- break }}
{{- end }}
{{- end }}

这种方式需要预设可能的版本,通用性稍差,但能在集群已部署cert-manager的场景下工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:52:27