使用 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 文档支持并记录了使用 envFrom
:https://argoproj.github.io/argo-workflows/fields/。为什么 Kubernetes 在这里抱怨?
如评论中所述,您的清单存在一些问题。它们是有效的 YAML,但 YAML 不会反序列化为有效的 Argo 自定义资源。
- 在工作流程中,您在
spec.templates[0].inputs
中复制了 parameters
键。
- 在 WorkflowTemplate 中,您已将
configMapRef
和 secretRef
名称放置在与键相同的级别。 configMapRef
和 secretRef
是对象,所以 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 这些问题。
工作流程:
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 文档支持并记录了使用 envFrom
:https://argoproj.github.io/argo-workflows/fields/。为什么 Kubernetes 在这里抱怨?
如评论中所述,您的清单存在一些问题。它们是有效的 YAML,但 YAML 不会反序列化为有效的 Argo 自定义资源。
- 在工作流程中,您在
spec.templates[0].inputs
中复制了parameters
键。 - 在 WorkflowTemplate 中,您已将
configMapRef
和secretRef
名称放置在与键相同的级别。configMapRef
和secretRef
是对象,所以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 这些问题。