只关注图像和模板,您可以通过以下方式创建一个生成 X 数量的 pod 的 helm 模板:
- 创建
Chart.yaml 文件
- 使用存储所有图像名称的变量创建
values.yaml 文件
- 使用
{{ range }} 指令创建模板
- 测试
下面是文件和目录的结构:
❯ tree helm-dir
helm-dir
├── Chart.yaml
├── templates
│ └── pod.yaml
└── values.yaml
1 directory, 3 files
创建Chart.yaml 文件
下面是Chart.yaml 文件:
apiVersion: v2
name: helm-templates
description: A Helm chart for spawning pods from images
version: 0.1.0
使用存储所有图像名称的变量创建一个values.yaml 文件
下面是简单的values.yaml 文件,具有不同的图像名称,将与模板一起使用:
different_images:
- ubuntu
- nginx
创建一个带有{{ range }} 指令的模板
此模板存储在templates 目录中,名称为pod.yaml
YAML 下的定义将是所有 pod 的模板:
{{- range .Values.different_images }}
apiVersion: v1
kind: Pod
metadata:
name: {{ . }}
labels:
app: {{ . }}
spec:
restartPolicy: Never
containers:
- name: {{ . }}
image: {{ . }}
imagePullPolicy: Always
command:
- sleep
- infinity
---
{{- end }}
{{- range .Values.different_images }} 将遍历different_images 变量并将{{ . }} 替换为图像名称。
测试
从helm-dir 目录运行以下命令,检查是否正确创建了 helm YAML pod 定义:
$ helm install NAME . --dry-run --debug
您应该得到一个包含多个 pod 定义的输出,如下所示:
# Source: helm-templates/templates/pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: ubuntu
labels:
app: ubuntu
spec:
restartPolicy: Never
containers:
- name: ubuntu
ports:
- containerPort: 3000
image: ubuntu
imagePullPolicy: Always
command:
- sleep
- infinity
resources:
requests:
memory: 500Mi
cpu: 500m
您现在可以运行:
$ helm install NAME .
并使用 $ kubectl get pods 检查 pod 是否正确生成:
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 8s
ubuntu 1/1 Running 0 8s
请查看其他资源: