【发布时间】:2021-05-13 11:23:48
【问题描述】:
工作流程:
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`
支持使用envFrom,并记录在 Argo 文档中:https://argoproj.github.io/argo-workflows/fields/。为什么 Kubernetes 在这里抱怨?
【问题讨论】:
-
我认为可能存在两个问题,1. 缩进,2. 解析值,您可以尝试硬编码 configMapRef 和 secretRef 的名称,如果可行,则问题出在解析上,否则尝试更改缩进,envFrom 绝对支持,它最后的值导致问题。
-
@SaikatChakrabortty 谢谢。我尝试对 configMapRef 和 secretRef 名称进行硬编码,但我得到了同样的错误。我还通过
yamllint运行了 YAML 来验证语法。 -
在您的
WorkflowTemplate对象中,envFrom下:name应在configMapRef或secretRef下,而不是同一级别。yamllint不会抛出任何错误,因为这仍然是有效的 yaml,但这对 Kubernetes 无效。