我们在多个 AWS 区域部署微服务。因此,我希望能够在 Helm 图表
values.yaml
文件中执行此操作。
# Default region
aws_region: us-east-1
aws_ecrs:
us-east-1: 01234567890.dkr.ecr.us-east-1.amazonaws.com
eu-north-1: 01234567890.dkr.ecr.eu-nort-1.amazonaws.com
image:
name: microservice0
repository: {{ .Values.aws_ecrs.{{ .Values.aws_region }} }} # I know this is incorrect
所以现在当我安装图表时,我只想做
$ helm install microservice0 myChart/ --set aws_region=eu-north-1
并且适当的存储库将被分配给
.Values.image.repository
。我可以这样做吗?如果是这样,正确的语法是什么?
注意:映像存储库只是一个取决于 AWS 区域的值,我们还有更多其他值也取决于 AWS 区域。
将存储库名称作为普通 Helm 值传递。
# templates/deployment.yaml
image: {{ .Values.repository }}/my-image:{{ .Values.tag }}
为每个区域创建一个单独的文件。这不一定需要与 Helm 图表位于同一位置。提供区域值作为普通顶级值。您将拥有多个提供相同值的文件,这很好。
# eu-north-1.yaml
repository: 01234567890.dkr.ecr.eu-nort-1.amazonaws.com
然后,当您部署图表时,使用
helm install -f
选项来使用正确的每个区域值。这些值将覆盖图表 values.yaml
文件中的所有内容,但您未在此处专门设置的任何内容都将使用图表中的默认值。
helm install microservice0 myChart/ \
--set-string tag=20220201 \
-f eu-north-1.yaml
原则上您可以使用 Go 模板
index
函数按照您的描述进行查找; Variable value as yaml key in helm Chart中的顶级结构与您在问题中显示的内容类似。不过,在模板代码中实现起来比较复杂,这意味着您对每个区域必须变化的值和不能变化的值有不同的设置。