【问题标题】:Helm template float arithmeticHelm 模板浮点运算
【发布时间】:2020-08-28 10:53:11
【问题描述】:
$ helm version
version.BuildInfo{Version:"v3.3.0", GitCommit:"8a4aeec08d67a7b84472007529e8097ec3742105", GitTreeState:"dirty", GoVersion:"go1.14.6"}

所以我有我的模板:

  minAvailable: {{ mul .Values.autoscaling.minReplicas 0.75 }}

values.yaml:

autoscaling:
  minReplicas: 3

我本来期望2.25 的渲染输出,但我得到了 0(3 * 0 因为0.75 被击倒...)

我尝试过类似的东西

  minAvailable: {{ mul (float .Values.autoscaling.minReplicas) 0.75 }}

最终我将floor 的值返回到一个int...

  minAvailable: {{ floor ( mul .Values.autoscaling.minReplicas 0.75 ) }}

但我就是不明白为什么我似乎不能做简单的浮点运算


我尝试过的其他事情

  minAvailable: {{ float64 .Values.autoscaling.minReplicas }} 
  minAvailable: {{ float64 .Values.autoscaling.minReplicas | toString }} 

什么都不会产生浮点数....

我什至尝试在 values.yaml 中这样做

autoscaling:
  minReplicas: 3.0

【问题讨论】:

    标签: kubernetes kubernetes-helm go-templates


    【解决方案1】:

    这些算术函数不是核心 Go text/template 语言的一部分。它们来自 Helm 包含的名为 Sprig 的有用扩展包。特别是,其Math Functions 的文档位于页面顶部

    除非另有说明,否则所有数学函数都对 int64 值进行运算。

    您可以计算整数x * 3 / 4,而不是尝试计算浮点x * 0.75。将其分解为(x * 3) / 4,您可以将其作为相当精确的整数运算:

    minAvailable: {{ div (mul .Values.autoscaling.minReplicas 3) 4 }}
    

    【讨论】:

    • 很好的答案,谢谢!!我仍然使用 pdb 百分比,因为当 hpa 扩大时,pdb 适用于最小数量,这意味着当应用程序如火如荼时启动 10 个 pod,那么您可以破坏 75% 以上的那些跨度>
    【解决方案2】:

    Helm 及其模板支持默认的 Go text/template 函数和 Sprig 扩展提供的函数。由于 Sprig 版本 3.2 它还支持 Float Math Functions,例如 addfsubfmulfdivf 等。在您的情况下,您只需要:

      minAvailable: {{ mulf .Values.autoscaling.minReplicas 0.75 }}
    

    【讨论】:

      【解决方案3】:

      Pod 中断预算实际上采用百分比...

      可以的

        minAvailable: "66%" # 2/3
      

        minAvailable: "75%" # 3/4
      

      来自文档:

      如果您有 7 个 Pod,并且您将 minAvailable 设置为“50%”,那么这意味着 3 个 Pod 还是 4 个 Pod 必须可用并不是很明显。 Kubernetes 向上取整到最接近的整数,因此在这种情况下,必须有 4 个 Pod 可用。

      所以基本上,3 中的66%1.98,所以将向上取整为2

      【讨论】:

        猜你喜欢
        • 2012-03-19
        • 2019-07-29
        • 2016-08-23
        • 1970-01-01
        • 2014-01-24
        • 2011-02-24
        • 2020-09-17
        • 2021-02-20
        相关资源
        最近更新 更多