使用 envFrom 字段时出现 Argo 工作流错误

Argo Workflow error when using envFrom field

工作流程:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: my-workflow-
spec:
  entrypoint: main
  arguments:
    parameters:
      - name: configmap
        value: my-configmap
      - name: secret
        value: my-secret
  templates:
    - name: main
      steps:
        - - name: main
            templateRef:
              name: my-template
              template: main
            arguments:
              parameters:
                - name: configmap
                  value: "{{workflow.parameters.configmap}}"
                - name: secret
                  value: "{{workflow.parameters.secret}}"

模板:

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: my-template
spec:
  entrypoint: main
  templates:
    - name: main
      inputs:
        parameters:
          - name: configmap
        parameters:
          - name: secret
      container:
        image: my-image:1.2.3
        envFrom:
          - configMapRef:
            name: "{{inputs.parameters.configmap}}"
          - secretRef:
            name: "{{inputs.parameters.secret}}"

通过 Argo 部署时 UI 我在启动 pod 时收到来自 Kubernetes 的以下错误:

spec.containers[1].envFrom: Invalid value: \"\": must specify one of: `configMapRef` or `secretRef`

Argo 文档支持并记录了使用 envFromhttps://argoproj.github.io/argo-workflows/fields/。为什么 Kubernetes 在这里抱怨?

如评论中所述,您的清单存在一些问题。它们是有效的 YAML,但 YAML 不会反序列化为有效的 Argo 自定义资源。

  1. 在工作流程中,您在 spec.templates[0].inputs 中复制了 parameters 键。
  2. 在 WorkflowTemplate 中,您已将 configMapRefsecretRef 名称放置在与键相同的级别。 configMapRefsecretRef 是对象,所以 name 键应该嵌套在每个对象下面。

这些是更正后的清单:

apiVersion: argoproj.io/v1alpha1
kind: WorkflowTemplate
metadata:
  name: my-template
spec:
  entrypoint: main
  templates:
    - name: main
      inputs:
        parameters:
          - name: configmap
          - name: secret
      container:
        image: my-image:1.2.3
        envFrom:
          - configMapRef:
              name: "{{inputs.parameters.configmap}}"
          - secretRef:
              name: "{{inputs.parameters.secret}}"

---

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: my-workflow-
spec:
  entrypoint: main
  arguments:
    parameters:
      - name: configmap
        value: my-configmap
      - name: secret
        value: my-secret
  templates:
    - name: main
      steps:
        - - name: main
            templateRef:
              name: my-template
              template: main
            arguments:
              parameters:
                - name: configmap
                  value: "{{workflow.parameters.configmap}}"
                - name: secret
                  value: "{{workflow.parameters.secret}}"

Argo Workflows 支持 IDE-based validation 这应该可以帮助您 find/avoid 这些问题。