如何在 Helm 中使用 Argo 工作流程模板?

Sud*_*kar 7 kubernetes-helm argoproj argo-workflows

是否可以使用 Helm 来部署 Argo 工作流程?当我执行以下操作时,我收到如下错误helm install

错误:升级失败:(workflows/templates/my_dag.yaml:47)处解析错误:函数“workflow”未定义

yaml 本身具有 Argo 和 Helm 插值{{..}}。我明白为什么会失败。有没有解决的办法?

我已经看过这个,但它看起来不像我想做的事情,因为它改变了语法。

Mic*_*haw 13

有可能的。我所在的团队定期部署 Helm 模板化的 WorkflowTemplates。

有两种方法可以解决 Helm/Argo 模板标签冲突问题。(如您所知,问题在于 Helm 的 Go 模板语言和 Argo 的模板语言都用来{{}}表示模板化区域。)

选项1:

第一种方法是仔细嵌套标签。例如,如果我想用作{{steps.hello-world.result}}Argo 模板,我可以将其写为{{`{{steps.hello-world.result}}`}}. 外部{{告诉 Helm 开始解释模板化代码。反引号告诉 Helm 按字面意思解释反引号分隔的内容。最后,内部{{作为工作流的纯文本部分安装在集群中,并最终被 Argo 解释为模板。

下面是经过修改的参数-参数示例的修改版本,以便使用 Helm 进行部署。

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: arguments-parameters-
spec:
  entrypoint: whalesay
  arguments:
    parameters:
    - name: message
      value: hello world
  templates:
  - name: whalesay
    inputs:
      parameters:
      - name: message
    container:
      image: docker/whalesay:latest
      command: [cowsay]
      args: ["{{`{{inputs.parameters.message}}`}}"]
Run Code Online (Sandbox Code Playgroud)

选项2:

您链接的博客文章中描述了第二种解决方法。这种方法确实改变了语法。第一种方法使用了一种看起来很有趣的语法,但从技术上讲它仍然只是 Helm 和 Argo 的默认语法。

如果{{`{{yikes}}`}}解决方法无法解决您的错误消息,请发布整个工作流程(或经过编辑/简化的版本),我很乐意查看。

有关的:

以上适用于 Argo-in-Helm (Jinja2-in-Go) 模板。如果您需要 somethingelse-in-Argo (somethingelse-in-Jinja2) 模板,其中 Somethingelse 也使用{{,请查看此答案:How to escape "{{" and "}}" in argoworkflow