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

如何让Helm Chart兼容Mi与Gi内存单位并完成单位转换

实现Helm中内存单位的自动转换与后缀去除

直接用Helm模板的条件判断和内置函数就能搞定,给你两种可行的写法:

写法一:简单条件判断(适合只处理Mi/Gi的场景)

- name: RAM
  value: "{{- $memory := .Values.resources.requests.memory -}}
          {{- if contains \"Gi\" $memory -}}
            {{- mul (int (trimSuffix \"Gi\" $memory)) 1000 -}}
          {{- else if contains \"Mi\" $memory -}}
            {{- trimSuffix \"Mi\" $memory -}}
          {{- else -}}
            {{- $memory -}} # 可选:处理不带单位或其他单位的情况
          {{- end -}}"

逻辑说明:

  • 先把配置的内存值存到$memory变量里,方便复用
  • 判断如果是Gi单位:先去掉Gi后缀转成整数,再乘以1000得到等价Mi数值
  • 如果是Mi单位:直接去掉后缀保留数字
  • 最后一个else分支可选,用来处理用户输入不带单位、或者其他单位(比如Ki)的情况,直接返回原数值

写法二:正则匹配(更严谨,过滤非法格式)

如果想确保只处理数字+Mi/Gi的合法格式,可以用正则提取数值和单位:

- name: RAM
  value: "{{- $memory := .Values.resources.requests.memory -}}
          {{- $matches := regexMatch \"^(\\d+)(Mi|Gi)$\" $memory -}}
          {{- if $matches -}}
            {{- $num := index $matches 1 | int -}}
            {{- $unit := index $matches 2 -}}
            {{- if eq $unit \"Gi\" -}}
              {{- mul $num 1000 -}}
            {{- else -}}
              {{- $num -}}
            {{- end -}}
          {{- else -}}
            {{- $memory -}} # 非法格式返回原内容
          {{- end -}}"

逻辑说明:

  • 用正则^(\\d+)(Mi|Gi)$匹配纯数字+Mi/Gi的格式,提取出数字部分和单位部分
  • 拿到数字和单位后,判断单位是Gi就乘以1000,否则直接返回数字
  • 不匹配正则的内容会直接返回原数值,避免非法格式导致模板报错

注意:Helm模板里的双引号需要用\"转义,确保YAML语法合法;用{{- ... -}}是为了去除模板渲染时的多余空格,保证输出的数值干净。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 07:20:47