argo env 参数和继承

问题描述 投票:0回答:2

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

我目前正在使用 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}}"

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

谢谢!

kubernetes argoproj
2个回答
3
投票

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

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

0
投票

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

您还可以将参数写入 JSON 文件,将其作为工件拉入每个 Pod,然后对这些值进行脚本循环并将它们分配给环境变量。但是为了值得额外的写入步骤和工件 yaml,您需要处理大量的环境变量。 如果您对大量步骤使用完全相同的输入,则可能值得考虑这些步骤是否足够相似以抽象为一个参数化模板。也许您可以循环遍历像

["mode1", "mode2", "mode3"...]

这样的数组,而不是连续写出步骤。

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

© www.soinside.com 2019 - 2024. All rights reserved.