Helm2如何实现类似Helm3的semverCompare版本比较功能?
Helm2 实现K8s版本兼容RBAC API版本的方案
Helm2 确实没有内置的 semverCompare 函数,要实现K8s版本判断来兼容RBAC的apiVersion,你可以通过手动拆分版本号并做数值比较的方式实现,具体方案如下:
核心思路
K8s的版本字符串(.Capabilities.KubeVersion.GitVersion)通常格式为 vX.Y.Z(例如v1.21.5、v1.22.3),我们可以提取主版本(X)和次版本(Y)的数值,直接判断是否满足>=1.22的条件。
模板代码示例
{{- $kubeVersion := trimPrefix "v" .Capabilities.KubeVersion.GitVersion -}} {{- $versionParts := splitList "." $kubeVersion -}} {{- $major := index $versionParts 0 | int -}} {{- $minor := index $versionParts 1 | int -}} {{- if and (ge $major 1) (ge $minor 22) }} apiVersion: rbac.authorization.k8s.io/v1 {{- else }} apiVersion: rbac.authorization.k8s.io/v1beta1 {{- end }} kind: Role metadata: name: example-role rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list"]
关键步骤说明
trimPrefix "v":移除版本字符串开头的v前缀,将v1.21.5转换为1.21.5格式splitList ".":按.拆分版本字符串,得到包含主、次、补丁版本的列表(如["1", "21", "5"])index+int:提取列表中的主版本和次版本,转换为整数类型以便数值比较and (ge $major 1) (ge $minor 22):判断版本是否为1.22及以上,满足则使用v1版本的RBAC API,否则使用v1beta1
特殊情况适配
如果遇到带后缀的版本号(如v1.22.0-rc1),splitList "."拆分后次版本依然是22,不影响判断逻辑——我们只需要关注主版本和次版本的核心数值即可。
内容的提问来源于stack exchange,提问作者moluzhui
相关产品推荐
相关产品推荐

