kubernetes - 使用 envFrom 字段时出现 Argo Workflow 错误
问题描述
工作流程:
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 在这里抱怨?
解决方案
如评论中所述,您的清单存在一些问题。它们是有效的 YAML,但 YAML 不会反序列化为有效的 Argo 自定义资源。
- 在工作流中,您复制了中的
parameters
密钥spec.templates[0].inputs
。 - 在 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 的验证,可以帮助您发现/避免这些问题。
推荐阅读
- c# - 使用 EWS 的自动发现无法正常工作,具体取决于正在运行的机器
- reactjs - ReactJs TypeError:映射时无法读取null的属性(读取'localeCompare')
- amazon-web-services - 如何配置 IAM 角色为新的 EC2 实例启用 SSM?
- react-native - 反应原生的滚动视图不滚动
- python - python中的JSON遍历和编辑
- c# - Rigidbody2D:如何防止 Y 轴被 0 覆盖?
- firebase - 正确使用异步/等待对 Firestore 数据库进行唯一用户名检查
- android - 当应用程序处于后台时,Firebase 通知不会出现(Android)
- python - 将 numpy 乘以数据帧,其中 numpy 中的索引号与数据帧值匹配
- ruby-on-rails - rails helper - 有条件地产生块或回退