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%的内存,因此值将为410M。我正在寻找一种在头盔模板中是否支持算术运算的方法。有这个例子吗?
答案 0 :(得分:3)
在头盔模板中,这是通过pipelines完成的。其中一些是通过Go模板语言定义的,而另一些则是Sprig template library的一部分。
我没有找到一个有效且可以在Helm中工作的完整列表,但是我没有找到一个不如Sprig文档中所述工作的Sprig。
所以首先管道的语法必须是:
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
但是,数学函数仅适用于int64。但是512M不是整数。因此,您可以让用户将限制指定为字节数或链接更多管道以首先删除“ M”,然后进行计算:
{{ .Values.memlimit | mul 2 }}
由于可以用不同的单位指定内存,因此您可能需要一些正则表达式:
{{ .Values.memlimit | replace "M" "" |mul 2 }}M
但是正如前面所述,所有Sprig Math函数只能在int64上运行,因此mul 0.8将乘以零,mul 1,6将仅乘以1,依此类推。
因此,您可能必须等待Sprig函数也可以与float一起使用,以实现基于百分比的计算,或者使用Sprig提供的Math函数和int64类型找到一些巧妙的技巧。
也许像这个答案中所述:
C How to calculate a percentage(perthousands) without floating point precision