templates - Helm 图表嵌套循环
问题描述
尝试使用此模板为我的掌舵图生成部署
{{- range .Values.services }}
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp-{{ . }}
spec:
replicas: {{ .replicaCount }}
template:
metadata:
labels:
app: myapp-{{ . }}
chart: myapp-{{ $.Values.cluster }}-{{ $.Values.environment }}
spec:
containers:
- name: myapp-{{ . }}
image: {{ $.Values.containerRegistry }}/myapp-{{ . }}:latest
ports:
- containerPort: {{ .targetPort }}
env:
{{- with .environmentVariables }}
{{ indent 10 }}
{{- end }}
imagePullSecrets:
- name: myregistry
{{- end }}
我的 2 项服务。在 values.yaml 我得到了
environment: dev
cluster: sandbox
ingress:
enabled: true
containerRegistry: myapp.io
services:
- backend:
port: 80
targetPort: 8080
replicaCount: 1
environmentVariables:
- name: SOME_VAR
value: "hello"
- web:
port: 80
targetPort: 8080
replicaCount: 1
environmentVariables:
- name: SOME_VAR
value: "hello"
...但输出的格式不正确
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp-map[backend:map[replicaCount:1 targetPort:8080 environmentVariables:[map[name:SOME_VAR value:hello] port:80]]
代替
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp-web
(...)
和另一个配置
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp-backend
(...)
我可以使用哪些功能或一些不同的数据结构?没有引用(即 .environmentVariables 工作正常)
解决方案
我认为您应该重新考虑数据的结构方式,这样会更好:
services:
- name: backend
settings:
port: 80
targetPort: 8080
replicaCount: 1
environmentVariables:
- name: SOME_VAR
value: "hello"
- name: web
settings:
port: 80
targetPort: 8080
replicaCount: 1
environmentVariables:
- name: SOME_VAR
value: "hello"
你的部署看起来像这样:
{{- range .Values.services }}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: myapp-{{ .name }}
spec:
replicas: {{ .settings.replicaCount }}
template:
metadata:
labels:
app: myapp-{{ .name }}
spec:
containers:
- name: myapp-{{ .name }}
image: {{ $.Values.containerRegistry }}/myapp-{{ .name }}:latest
ports:
- containerPort: {{ .settings.targetPort }}
env:
{{- with .settings.environmentVariables }}
{{ toYaml . | trim | indent 6 }}
{{- end }}
imagePullSecrets:
- name: myregistry
{{- end }}
---
通过添加分隔符实际上会创建两个部署。
推荐阅读
- reactjs - 按下按钮时如何启动计时器?反应
- c++ - 使用 consteval 调用不断内联函数
- javascript - 用JS导入html模块
- multithreading - recvfrom 在线程中使用时没有给出正确的发件人地址
- laravel - 为什么在区域表定义中未创建 state_id 字段?
- bitbake - BitBake -- 变量扩展问题 & 读取 BitBake 源文件的最有效方法
- c# - 检查相同的对象
- node.js - 错误没有这样的文件或目录,打开 NodeJs Pkg
- python - 创建一个绘图循环
- python - 将图像大小调整为 28x28 以使我的 Tensorflow 模型正常工作