Helm函数根据变量设置值?



我正在学习如何设置我的3个AWS EKS集群——沙箱、暂存和生产。

我如何设置我的模板,以便根据图表安装在哪个集群派生出一些值?例如,在我的myapp/templates/deployment.yaml中,我可能需要

apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}

我可能希望replicas1,24取决于我是否在我的sandbox,stagingproduction集群分别安装图表?例如,我想对我的pod的cpu和内存请求和限制做同样的技巧。

我想在我的values.yaml文件中有这样的东西

environments:
- sandbox
- staging
- production
perClusterValues:
replicas:
- 1
- 2
- 4
cpu:
requests:
- 256m
- 512m
- 1024m
limits:
- 512m
- 1024m
- 2048m
memory:
requests:
- 1024Mi
- 1024Mi
- 2048Mi
limits:
- 2048Mi
- 2048Mi
- 3072Mi

如果我在sandbox环境中安装了一个helm chart,我希望能够执行

$ helm install myapp myapp --set environment=sandbox
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
{{- if not .Values.autoscaling.enabled }}
# In pseudo-code, in my YAML files
# Get the index value from .Values.environments list
# based on pass-in environment parameter
{{ $myIndex = indexOf .Values.environments .Value.environment }}
replicas: {{ .Values.perClusterValues.replicas $myIndex }}
{{- end }}

我希望你能理解我的逻辑,但是正确的语法是什么?或者这是一个好方法吗?

您可以使用helm install -f选项来传入一个额外的YAML值文件,并且它优先于图表自己的values.yaml文件。因此,使用您已经拥有的模板结构,您可以提供替代值文件

# sandbox.yaml
autoscaling:
enabled: false
replicaCount: 1
# production.yaml
autoscaling:
enabled: true
replicaCount: 5

然后当你要部署图表时,用

运行它
helm install myapp . -f production.yaml

(您也可以helm install --set replicaCount=3来覆盖特定的值,但--set的语法是挑剔和不寻常的;在每个环境中使用单独的YAML文件可能更容易。一些工具可能能够利用JSON文件也是有效的YAML来编写额外的部署时定制。

相关内容

  • 没有找到相关文章

最新更新