如何在Helm中将多个docker镜像通过values.yml传递到template.yml

vik*_* mp 5 kubernetes kubernetes-helm

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

模板文件

      name:{{ .values.name }}
spec:
   containers:
      - image: {{ .values.container.image }}
Run Code Online (Sandbox Code Playgroud)

值文件

name:A
 container:
     image:A
name :B
  container :
       image:B
Run Code Online (Sandbox Code Playgroud)

我还有 40 个这样的 docker 镜像,如何将所有这些镜像传递到模板。这样传递会创建40 个不同的pod 吗?因为我们需要 40 个不同的 pod。任何指导都将受到高度赞赏。

Daw*_*ruk 7

仅关注图像和模板,您可以创建一个 helm 模板,该模板将通过以下方式生成 X 数量的 pod:

\n\n
    \n
  • 创建Chart.yaml文件
  • \n
  • values.yaml使用存储所有图像名称的变量创建文件
  • \n
  • {{ range }}使用指令创建模板
  • \n
  • 测试
  • \n
\n\n

下面是文件和目录的结构:

\n\n
\xe2\x9d\xaf tree helm-dir\nhelm-dir\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Chart.yaml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 templates\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pod.yaml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 values.yaml\n\n1 directory, 3 files\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

创建Chart.yaml文件

\n\n

以下是Chart.yaml文件:

\n\n
apiVersion: v2\nname: helm-templates\ndescription: A Helm chart for spawning pods from images\nversion: 0.1.0\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

values.yaml使用存储所有图像名称的变量创建一个文件

\n\n

下面是values.yaml具有不同图像名称的简单文件,将与模板一起使用:

\n\n
different_images: \n  - ubuntu \n  - nginx\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

{{ range }}创建一个带有指令的模板

\n\n

该模板存储在templates名为的目录中pod.yaml

\n\n

以下YAML定义将是所有 Pod 的模板:

\n\n
{{- range .Values.different_images }}\napiVersion: v1\nkind: Pod\nmetadata:\n  name: {{ . }} \n  labels:\n    app: {{ . }} \nspec:\n  restartPolicy: Never\n  containers:\n  - name: {{ . }} \n    image: {{ . }} \n    imagePullPolicy: Always\n    command: \n    - sleep \n    - infinity\n---\n{{- end }} \n
Run Code Online (Sandbox Code Playgroud)\n\n

{{- range .Values.different_images }}将迭代变量并用图像名称different_images替换。{{ . }}

\n\n
\n\n

测试

\n\n

从目录运行以下命令helm-dir来检查YAMLpod 的 helm 定义是否已正确创建:

\n\n

$ helm install NAME . --dry-run --debug

\n\n

您应该获得具有多个 pod 定义的输出,类似于以下内容:

\n\n
# Source: helm-templates/templates/pod.yaml\napiVersion: v1\nkind: Pod\nmetadata:\n  name: ubuntu\n  labels:\n    app: ubuntu\nspec:\n  restartPolicy: Never\n  containers:\n  - name: ubuntu\n    ports:\n      - containerPort: 3000\n    image: ubuntu\n    imagePullPolicy: Always\n    command: \n    - sleep \n    - infinity\n    resources:\n      requests:\n        memory: 500Mi\n        cpu: 500m \n
Run Code Online (Sandbox Code Playgroud)\n\n

您现在可以运行:\n$ helm install NAME .

\n\n

并检查 pod 是否正确生成$ kubectl get pods

\n\n
NAME     READY   STATUS    RESTARTS   AGE\nnginx    1/1     Running   0          8s\nubuntu   1/1     Running   0          8s\n
Run Code Online (Sandbox Code Playgroud)\n\n

请查看其他资源:

\n\n\n


归档时间:

查看次数:

9557 次

最近记录:

5 年,11 月 前