如果条件检查,Kubernetes头盔图表

Gna*_*ana 4 go go-templates kubernetes kubernetes-helm

我试图添加如果伟大而不是Helm图表中的条件.这是投掷错误.

我在values.yaml中定义了值,并在deployment.yaml中使用该值作为条件.

values.yaml

replicaCount: 2
Run Code Online (Sandbox Code Playgroud)

deployment.yaml

rollingUpdate:
  maxSurge: 1
  {{ if gt .Values.replicaCount 2}}
  maxUnavailable: 0
  {{ else }}
  maxUnavailable: 1
  {{ end }}
Run Code Online (Sandbox Code Playgroud)

我正在使用helm dry run选项来检查结果.得到错误

Error: render error in "hello-world/templates/deployment.yaml": template: hello-world/templates/deployment.yaml:16:12: executing "hello-world/templates/deployment.yaml" at <gt .Values.replicaCo...>: error calling gt: incompatible types for comparison
Run Code Online (Sandbox Code Playgroud)

怎么解决这个问题?

hyp*_*low 7

请尝试使用浮点数代替:

deployment.yaml

rollingUpdate:
  maxSurge: 1
  {{ if gt .Values.replicaCount 2.0}}
  maxUnavailable: 0
  {{ else }}
  maxUnavailable: 1
  {{ end }}
Run Code Online (Sandbox Code Playgroud)

Helm(以及底层的Golang模板和Yaml)有时会很奇怪.


另请注意,有时您需要在yaml配置中对类型进行类型转换(例如端口号).

例:

...
ports:
- containerPort: !!int {{ .Values.containers.app.port }}
...
Run Code Online (Sandbox Code Playgroud)

有关Yaml类型转换的更多信息:https://github.com/yaml/YAML2/wiki/Type-casting

  • 您还可以尝试不通过 yaml 而是通过 Go 模板进行类型转换:`containerPort: {{ .Values.replicaCount | 整数 }}` (2认同)