yaml中的模板文件

问题描述 投票:2回答:1

Values.yaml

cpulimit: 200m
memlimit: 512M

configmap.yaml

mem_pool_size = {{ ((.Values.memlimit)) mul 0.8 }} --> not working
mem_pool_size = {{  .Values.memlimit mul 0.8 }} --> not working
mem_pool_size = {{ .Values.memlimit * 0.8 }} --> not working
mem_pool_size = {{ .Values.memlimit }} * 0.8 --> not working
mem_pool_size = {{ .Values.memlimit }} mul 0.8 --> not working

尝试了很多方法,但我得到了确切的解决方案。如果用户提供memlimit的值为512M我应该只分配80%ram所以值将是410M。我找到了一种方法,是否在helm模板中支持算术运算。这有什么例子吗?

kubernetes kubernetes-helm
1个回答
3
投票

在头盔模板中,这是通过pipelines完成的。其中一些是通过Go模板语言定义的,另一些则是Sprig template library的一部分。

我没有找到一个有效且在Helm中工作的完整列表,但是我没有发现Sprig没有按照Sprig文档中的说明工作。

首先,管道的语法必须是:

{{  .Values.memlimit | mul 2 }}

但是,Math Functions仅适用于int64。但512M不是一个int。因此,您可以让用户将限制指定为字节或链接更多管道,首先删除“M”,然后进行计算:

{{ .Values.memlimit | replace "M" "" |mul 2  }}M

由于可以使用不同的单位指定内存,因此您可能需要一些正则表达式:

{{ .Values.memlimit |regexFind "[1-9]+" |mul 2 }}{{ .Values.memlimit | regexFind "[a-zA-Z]+"  }}

但是如同声明的那样,所有Sprig数学函数仅适用于int64,因此mul 0.8将乘以零,mul 1,6只乘以1,依此类推。

因此,您可能需要等待Sprig函数同时使用浮点数来实现基于百分比的计算,或者您可以通过Sprig和int64类型提供一些巧妙的技巧。

也许在这个答案中解释的东西:

C How to calculate a percentage(perthousands) without floating point precision

© www.soinside.com 2019 - 2024. All rights reserved.