【问题标题】:Fetching docker image and tag as key/value pairs from values.yaml in helm k8s从 helm k8s 中的 values.yaml 获取 docker 图像和标签作为键/值对
【发布时间】:2020-08-19 12:33:35
【问题描述】:

我有一个 docker 镜像列表,我想将其作为环境变量传递给 deployment.yaml

values.yaml

contributions_list:
  - image: flogo-aws
    tag: 36
  - image: flogo-awsec2
    tag: 37
  - image: flogo-awskinesis
    tag: 18
  - image: flogo-chargify
    tag: 19

deployment.yaml

apiVersion: batch/v1
kind: Job
metadata:
  name: container-image-extractor
  namespace: local-tibco-tci
  labels:
    app.cloud.tibco.com/name: container-image-extractor
spec:
  backoffLimit: 0
  template:
    metadata:
      labels:
        app.cloud.tibco.com/name: container-image-extractor
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: Never
      containers:
      - name: container-image-extractor
        image: reldocker.tibco.com/stratosphere/container-image-extractor
        imagePullPolicy: IfNotPresent
        env:
        - name: SOURCE_DOCKER_IMAGE
          value: "<docker_image>:<docker_tag>"    # docker image from which contents to be copied
 

我的问题如下。

  1. 这是将 docker 图像和标签数组作为参数传递给 deployment.yaml 的正确方法吗
  2. 如何从 values.yaml 中替换 deployment.yaml 中的 并且应该为每个 docker 映像和标签触发增量作业。

【问题讨论】:

  • 您希望得到的最终结果是什么?对于单独的作业,每个图像/标签对一个? (values.yaml 语法看起来不错。)
  • 我希望这个 k8s 作业能够运行在 values.yaml 中作为 env [并行/顺序执行] 传递的每一对 docker 图像和标签
  • 您是否正在寻找一个长期运行的部署,由 RabbitMQ 等队列系统支持,您可以增量地向其提供任务?如果您需要这些按顺序运行,则无法在单个 Helm 安装中使用普通作业。

标签: kubernetes yaml kubernetes-helm


【解决方案1】:

我就是这样做的,为列表中的每个图像创建一个作业

{{- range .Values.contributions_list }}
apiVersion: batch/v1
kind: Job
metadata:
  name: "container-image-extractor-{{ .image }}-{{ .tag }}"
  namespace: local-tibco-tci
  labels:
    app.cloud.tibco.com/name: container-image-extractor
spec:
  backoffLimit: 0
  template:
    metadata:
      labels:
        app.cloud.tibco.com/name: container-image-extractor
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: Never
      containers:
      - name: container-image-extractor
        image: reldocker.tibco.com/stratosphere/container-image-extractor
        imagePullPolicy: IfNotPresent
        env:
        - name: SOURCE_DOCKER_IMAGE
          value: "{{ .image }}:{{ .tag }}"    # docker image from which contents to be copied
{{ end }}

如果您使用此贡献列表之外的值(版本名称、环境等),请不要忘记更改范围,例如 {{ $.Values.myjob.limits.cpu | quote }}$. 很重要:)

编辑:如果您不在循环的每次迭代中更改名称,它将每次都覆盖配置。使用不同的名称,您将创建多个作业。

【讨论】:

  • 我可以使用 helm install NAME 可视化预期的模板。 ——空运行。但是当我安装它时,它只是选择最后一个作为最终模板,因此只为最后一个模板运行作业。
  • 啊...我知道啊啊你需要给你的工作一个不同的名字;)否则它会覆盖每个循环的工作。我更新了我的答案
  • 虽然空运行看起来不错。它仍在为最后一个图像创建作业,但在循环中,不会相互覆盖但没有给出预期的结果。
【解决方案2】:

您需要修复一个 deployment.yaml,如下所示:

{{- range $contribution := .Values.contributions_list }}
apiVersion: batch/v1
kind: Job
metadata:
  name: container-image-extractor
  namespace: local-tibco-tci
  labels:
    app.cloud.tibco.com/name: container-image-extractor
spec:
  backoffLimit: 0
  template:
    metadata:
      labels:
        app.cloud.tibco.com/name: container-image-extractor
    spec:
      nodeSelector:
        kubernetes.io/os: linux
      restartPolicy: Never
      containers:
      - name: container-image-extractor
        image: reldocker.tibco.com/stratosphere/container-image-extractor
        imagePullPolicy: IfNotPresent
        env:
        - name: SOURCE_DOCKER_IMAGE
          value: "{{ $contribution.image }}:{{ $contribution.tag }}"
{{- end }}

想了解helm模板语法可以看this document

【讨论】:

  • 我可以使用 helm install NAME 可视化预期的模板。 ——空运行。但是当我安装它时,它只是选择最后一个作为最终模板,因此只为最后一个 docker 图像作为环境变量运行。
猜你喜欢
  • 2022-08-23
  • 2020-07-08
  • 2020-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-18
  • 2021-06-17
相关资源
最近更新 更多