【问题标题】:Kubernetes: Cannot convert int64 to string. Kubernetes fails to interpret integer value in helmchart values.yaml fileKubernetes:无法将 int64 转换为字符串。 Kubernetes 无法解释 helmchart values.yaml 文件中的整数值
【发布时间】:2021-09-01 21:52:15
【问题描述】:

我有一个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 file 中使用时,它会失败并出现以下错误。


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 file 中使用来自values.yaml file 的整数值的正确格式是什么?

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

任何帮助表示赞赏,在此先感谢。

【问题讨论】:

  • 只是双引号你的价值。处理数值(环境变量、参数、资源分配)=> yaml 到 json 的转换会将它们转换为整数,而不是字符串..

标签: kubernetes kubernetes-helm kubectl amazon-eks spinnaker


【解决方案1】:

查看Helm Environment Variables with Booleans and Integers的解决方案

我们可以使用!!str 将输出转换为字符串,或者我们 也可以使用未定义的!! 并在以后获得相同的行为 开发人员很好地暗示了我们的意图 !!booleanEnv!!integerEnv 将值转换为字符串(甚至只是!!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 }}

【讨论】:

    【解决方案2】:

    我能够通过在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 }}
    

    【讨论】:

      【解决方案3】:

      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 将任意值转换为字符串,然后使用简单记录的 toJson 函数将其转换为 JSON。按照设计,有效的 JSON 是有效的 YAML,“将字符串转换为 JSON”意味着双引号,否则会根据需要转义。

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

      【讨论】:

      • 感谢您的快速回复。我可以在 deployment.yaml 文件中使用引号 (""),例如 value: "{{ .Values.spring_datasource_hikari_maximum_pool_size }}" 虽然我认为这不会起作用,因为我认为它会在引号内使用文字值.然而,它就像一个魅力,再次感谢@David Maze
      猜你喜欢
      • 1970-01-01
      • 2012-10-22
      • 2018-01-23
      • 2014-02-04
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多