2

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

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

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

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

4

1 回答 1

6

有可能的。我一直在一个定期部署 Helm 模板化工作流模板的团队中。

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

选项1:

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

这是修改后的arguments-parameters 示例的修改版本,以使用 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}}`}}"]

选项 2:

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

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

有关的:

以上是 Argo-in-Helm (Jinja2-in-Go) 模板。如果您需要 somethingelse-in-Argo (somethingelse-in-Jinja2) 模板,其中 somethingelse 也使用{{,请查看此答案:如何在 argo 工作流程中转义“{{”和“}}”

于 2020-11-12T13:54:07.263 回答