【问题标题】:How to pass multiple docker images through values.yml to template.yml in Helm如何通过 values.yaml 将多个 docker 镜像传递给 Helm 中的 template.yaml
【发布时间】:2020-04-05 14:41:53
【问题描述】:

我正在尝试运行一个包含大约 40 个微服务的应用程序。如何将 40 个不同的 docker 图像从 values.yml 文件传递​​到 template.yml 文件。

模板文件

      name:{{ .values.name }}
spec:
   containers:
      - image: {{ .values.container.image }}

值文件

name:A
 container:
     image:A
name :B
  container :
       image:B

我还有 40 个这样的 docker 图像,如何将所有这些图像传递给模板。 并且这样传递会创建 40 个不同的 pod吗?因为我们需要 40 个不同的 pod。 非常感谢任何指导。

【问题讨论】:

标签: kubernetes kubernetes-helm


【解决方案1】:

只关注图像和模板,您可以通过以下方式创建一个生成 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

请查看其他资源:

【讨论】:

    猜你喜欢
    • 2020-01-27
    • 1970-01-01
    • 2017-11-14
    • 2022-12-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 2021-04-05
    • 1970-01-01
    相关资源
    最近更新 更多