1

我不太确定如何标记这个问题,因为我会很好地使用上述任何解决方案(容器的继承或为整个工作流程定义参数,而无需在每个步骤模板中明确设置它们)。

我目前正在使用 argo yaml,我想定义将输入一次的某些值(也是可选的),并将由 yaml 中的每个 pod 使用。

我确信有比我现在发现的更好的方法来做到这一点,但我在文档中找不到任何东西。目前我看到的方式是将该参数定义为工作流参数,然后对于定义的每个容器 - 将其定义为输入参数/env 参数。

我的问题是 - 没有办法在顶层定义那些“env”变量吗?的工作流程?这样每个 pod 都会在没有我明确告知的情况下使用它们?

或者 - 甚至可以创建一个定义了这些参数的容器,以便我定义的每个其他容器都继承自该容器,并且我不必为我添加的每个参数编写这些参数作为输入/环境?

我不想将这三个值添加到我定义的每个容器中。它使 yaml 变得非常大并且难以阅读和维护。

    container:
      env:
      - name: env_config
        value: "{{workflow.parameters.env_config}}"
      - name: flow_config
        value: "{{workflow.parameters.flow_config}}"
      - name: flow_type_config
        value: "{{workflow.parameters.flow_type_config}}"

很想得到您的意见,即使它指向我要阅读的正确文档的方向,因为我还没有找到任何接近它的东西。

谢谢!

4

2 回答 2

1

您可以使用 Kustomize 或 Helm 等模板工具来减少重复。

您还可以将参数写入 JSON 文件,将其作为工件拉入每个 Pod,然后对值进行脚本循环并将它们分配给环境变量。但是为了值得额外的写入步骤和工件 yaml,您需要处理很多环境变量。

如果您对大量步骤使用完全相同的输入,则可能值得考虑这些步骤是否足够相似以抽象出一个参数化模板。也许您可以像这样循环遍历数组,["mode1", "mode2", "mode3"...]而不是按顺序编写步骤。

老实说,重复并不是最糟糕的事情。具有良好查找/替换功能的 IDE 应该足够简单,以便根据需要进行更改。

于 2021-04-19T16:05:53.410 回答
0

刚刚意识到我还没有更新,所以对于任何感兴趣的人,我最终做的是在容器模板中设置一个锚:

templates:
#this template is here to define what env parameters each container has using an anchor.
  - name: env-template
    container:
      env: &env_parameters
      - name: env_config
        value: "{{workflow.parameters.env_config}}"
      - name: flow_config
        value: "{{workflow.parameters.flow_config}}"
      - name: run_config
        value: "{{workflow.parameters.run_config}}"

而不是在每个容器中使用该锚。

    container:
      image: image
      imagePullPolicy: Always
      env: *env_parameters
于 2022-03-05T16:59:27.347 回答