我不太确定如何标记这个问题,因为我会擅长上面的任何解决方案(容器的继承或为整个工作流程定义参数,而无需在每个步骤模板中显式设置它们)。
我目前正在使用 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}}"
我很想得到您的意见,即使它为我指明了正确的文档阅读方向,因为我还没有找到任何接近它的内容。
谢谢!
刚刚意识到我还没有更新,所以对于任何感兴趣的人来说,我最终做的是在容器模板内设置一个锚点:
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
您可以使用 Kustomize 或 Helm 等模板工具来减少重复。
您还可以将参数写入 JSON 文件,将其作为工件拉入每个 Pod,然后对这些值进行脚本循环并将它们分配给环境变量。但是为了值得额外的写入步骤和工件 yaml,您需要处理大量的环境变量。 如果您对大量步骤使用完全相同的输入,则可能值得考虑这些步骤是否足够相似以抽象为一个参数化模板。也许您可以循环遍历像
["mode1", "mode2", "mode3"...]
这样的数组,而不是连续写出步骤。
老实说,重复并不是最糟糕的事情。具有良好查找/替换功能的 IDE 应该足够简单,可以根据需要进行更改。