gpt4 book ai didi

kubernetes - 如何使用 Helm 从列表中迭代创建 pod?

转载 作者:行者123 更新时间:2023-12-02 11:58:25 27 4
gpt4 key购买 nike

我正在尝试从 helm 中的 yaml 循环创建多个 pod。如果我使用 --debug --dry-run 运行,输出符合我的预期,但当我实际部署到集群时,只有循环的最后一次迭代存在。

一些 yaml 给你:

{{ if .Values.componentTests }}
{{- range .Values.componentTests }}
apiVersion: v1
kind: Pod
metadata:
name: {{ . }}
labels:
app: {{ . }}
chart: {{ $.Chart.Name }}-{{ $.Chart.Version | replace "+" "_" }}
release: {{ $.Release.Name }}
heritage: {{ $.Release.Service }}
spec:
{{ toYaml $.Values.global.podSpec | indent 2 }}
restartPolicy: Never
containers:
- name: {{ . }}
ports:
- containerPort: 3000
image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/{{ . }}:latest
imagePullPolicy: Always
command: ["sleep"]
args: ["100d"]
resources:
requests:
memory: 2000Mi
cpu: 500m
{{- end }}
{{ end }}

当我运行 helm upgrade --install --set componentTests="{a,b,c}" --debug --dry-run

我得到以下输出:

# Source: <path-to-file>.yaml
apiVersion: v1
kind: Pod
metadata:
name: a
labels:
app: a
chart: integrationtests-0.0.1
release: funny-ferret
heritage: Tiller
spec:
restartPolicy: Never
containers:
- name: content-tests
ports:
- containerPort: 3000
image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/a:latest
imagePullPolicy: Always
command: ["sleep"]
args: ["100d"]
resources:
requests:
memory: 2000Mi
cpu: 500m
apiVersion: v1
kind: Pod
metadata:
name: b
labels:
app: b
chart: integrationtests-0.0.1
release: funny-ferret
heritage: Tiller
spec:
restartPolicy: Never
containers:
- name: b
ports:
- containerPort: 3000
image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/b:latest
imagePullPolicy: Always
command: ["sleep"]
args: ["100d"]
resources:
requests:
memory: 2000Mi
cpu: 500m
apiVersion: v1
kind: Pod
metadata:
name: c
labels:
app: users-tests
chart: integrationtests-0.0.1
release: funny-ferret
heritage: Tiller
spec:
restartPolicy: Never
containers:
- name: c
ports:
- containerPort: 3000
image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/c:latest
imagePullPolicy: Always
command: ["sleep"]
args: ["100d"]
resources:
requests:
memory: 2000Mi
cpu: 500m
---

(由于敏感/不相关,部分内容已被编辑/删除)

在我看来,它做了我想做的事,即为 a 创建一个 pod,为 b 创建一个 pod,为 c 创建一个 pod。

然而,当实际将它安装到集群中时,我总是只得到与列表中最后一个元素对应的 pod。 (在这种情况下, c )几乎就像他们互相覆盖一样,但鉴于他们有不同的名字,我认为他们不应该?即使使用 --debug 而不是 --dry-run 运行,输出告诉我应该有 3 个 pod,但是使用 kubectl get pods 我只能看到一个。

我如何使用 Helm 从列表中迭代创建 pod?

最佳答案

找到了!

显然,helm 使用 --- 作为 pods/services/whatHaveYou 规范之间的分隔符。

在单个图表中多次指定相同的字段是有效的,它将为任何给定字段使用最后指定的值。为避免覆盖值而是创建多个 pod,只需在循环末尾添加分隔符:

{{ if .Values.componentTests }}
{{- range .Values.componentTests }}
apiVersion: v1
kind: Pod
metadata:
name: {{ . }}
labels:
app: {{ . }}
chart: {{ $.Chart.Name }}-{{ $.Chart.Version | replace "+" "_" }}
release: {{ $.Release.Name }}
heritage: {{ $.Release.Service }}
spec:
{{ toYaml $.Values.global.podSpec | indent 2 }}
restartPolicy: Never
containers:
- name: {{ . }}
ports:
- containerPort: 3000
image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/{{ . }}:latest
imagePullPolicy: Always
command: ["sleep"]
args: ["100d"]
resources:
requests:
memory: 2000Mi
cpu: 500m
---
{{- end }}
{{ end }}

关于kubernetes - 如何使用 Helm 从列表中迭代创建 pod?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51024074/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com