我正在学习如何设置我的3个AWS EKS集群——沙箱、暂存和生产。
我如何设置我的模板,以便根据图表安装在哪个集群派生出一些值?例如,在我的myapp/templates/deployment.yaml
中,我可能需要
apiVersion: apps/v1
kind: Deployment
metadata:
...
spec:
{{- if not .Values.autoscaling.enabled }}
replicas: {{ .Values.replicaCount }}
{{- end }}
我可能希望replicas
是1
,2
或4
取决于我是否在我的sandbox
,staging
或production
集群分别安装图表?例如,我想对我的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来编写额外的部署时定制。