Kubernetes:无法将 int64 转换为字符串。 Kubernetes 无法解释 helmchart values.yaml 文件中的整数值

Kubernetes: Cannot convert int64 to string. Kubernetes fails to interpret integer value in helmchart values.yaml file

我有一个 values.yaml 文件,我在其中提供了 spring_datasource_hikari_maximum_pool_size: "10"

deployment yaml中我已经使用这个值作为

 - name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
    value: {{ .Values.spring_datasource_hikari_maximum_pool_size }}

但是,当在 deployment.yaml 文件中使用时,它会失败并出现以下错误。


Deploy failed: The request is invalid: patch: Invalid value: "map[metadata:map[annotations:map[kubectl.kubernetes.io/last-applied-configuration:{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":
{
(helm values etc)
`{"name":"SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE","value":10}]` **(this is the incorrect value)** 
}
cannot convert int64 to string

deployment.yaml 文件中使用 values.yaml 文件中的整数值的正确格式是什么?

我也尝试了多种带有引号“”的组合,但似乎没有任何效果。

感谢任何帮助,提前致谢。

检查来自Helm Environment Variables with Booleans and Integers

的解决方案

We can use !!str to convert the output to a string, Alternatively we can also use a undefined !! and get the same behaviour giving later developers nice hints of what we intended !!booleanEnv or !!integerEnv will cast the values to string (or even just !!boolean)

- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
    value: !!integerEnv {{ .Values.spring_datasource_hikari_maximum_pool_size }}
- name: FAVORITE_DRINK
    value: !!stringEnv {{ .Values.favoriteDrink }}
- name: TAKES_SUGAR
    value: !!booleanEnv {{ .Values.takesSugar }}

YAML 值具有类型,标准规则是将像 10 这样的数字字符串视为数字。但是,在 Kubernetes YAML 格式中,环境变量的名称和值必须是字符串。

最简单的方法是使用 Helm (Sprig) quote 函数,它将参数用双引号引起来:

- name: SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE
  value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}
{{/*        ^^^^^                                                  */}}

quote 不是特别聪明;与 value: "{{ .Values...}}" 相同。有一个类似的 squote 会将值用单引号引起来。

如果您想要一个真正强大的解决方案,您可以使用 print to convert an arbitrary value to a string, then the lightly-documented toJson 函数将其转换为 JSON。按照设计,有效的 JSON 是有效的 YAML,并且“将字符串转换为 JSON” 将意味着将其双引号并根据需要转义它。

value: {{ .Values...pool_size | print | toJson }}

我能够通过在 deployment.yaml 文件

中的 value 本身使用 双引号 来解决这个问题
- name: SPRING_DATASOURCE_HIKARI_MAXIMUM-POOL-SIZE
  value: "{{ .Values.spring_datasource_hikari_maximum_pool_size }}"

因为这是一个生产实例我无法检查@David Maze 和 Vit 的解决方案。

编辑:

尝试使用 quote 选项,它也有效。

 - name: SPRING_DATASOURCE_HIKARI_MAXIMUMPOOLSIZE 
   value: {{ quote .Values.spring_datasource_hikari_maximum_pool_size }}