在 Argo CronWorkflow 上使用 Kustomize 图像转换

69次阅读
没有评论

问题描述

正在开发一个使用 Argo Workflows 的 ETL 流水线,并且为了处理与环境相关的配置,正在使用 Kustomize。用户遇到了在 Argo CronWorkflow 上使用 Kustomize 进行图像转换的问题。

以下是用户提供的 Argo CronWorkflow 配置示例:

apiVersion: argoproj.io/v1alpha1
kind: CronWorkflow
metadata:
  name: cronworkflow
spec:
  concurrencyPolicy: Forbid
  failedJobsHistoryLimit: 3
  successfulJobsHistoryLimit: 3
  startingDeadlineSeconds: 300
  workflowSpec:
    entrypoint: start
    templates:
    - name: start
      container:
        name: my-start-task
        image: app-image
        command:
          - /bin/sh
          - -xec
          - |
            ./entrypoint.sh
        env:
          - name: AWS_ACCESS_KEY_ID
            valueFrom:
              secretKeyRef:
                name: aws-creds
                key: access-key

用户提到使用 patchesStrategicMerge 时,Kustomize 似乎无法正常工作,因为它只能处理标准的 Kubernetes 种类。对于第三方种类,它将简单地覆盖整个树结构而不是尝试合并。用户不得不在定义 Argo CronWorkflow 的 YAML 文件上使用 patchesJson6902。然而,现在 images 转换器似乎不再起作用。用户想知道是否有什么方便的方法来修复 patchesStrategicMerge 的行为,以及是否有关于 Argo Workflows 的 Kustomize “类型定义” 可在何处找到。

解决方案

请注意以下操作可能涉及版本差异,请在执行前备份。

方案

Kustomize 提供了一种 “提示” 图像标签位置的方式。可以通过创建一个名为 kustomconfig.yaml 的文件来实现这一点,然后将以下内容添加到你的 kustomization.yaml 中。

  1. 创建一个名为 kustomconfig.yaml 的文件,内容如下:
images:
- path: spec/templates[]/container/image
  kind: WorkflowTemplate
- path: spec/templates[]/script/image
  kind: WorkflowTemplate
  1. 在你的 kustomization.yaml 中添加以下内容:
configurations:
- kustomconfig.yaml

这样,你就完成了设置。images 转换器将会捕获这些字段。

这种方法会使得 Kustomize 能够正确处理 Argo CronWorkflow 的图像转换。

结论

使用 Kustomize 对 Argo CronWorkflow 进行图像转换的问题可以通过创建 kustomconfig.yaml 文件并在 kustomization.yaml 中指定配置来解决。这样,Kustomize 就能够正确地处理 Argo CronWorkflow 中的图像转换。如果 Argo 团队能够提供更多关于 Kustomize 转换器配置的支持,将有助于简化用户在处理 Argo Workflows 时的配置工作。

正文完