#kubernetes #argo-workflows
Вопрос:
Рабочий процесс:
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 я получаю следующую ошибку от Kubernetes при запуске модуля:
spec.containers[1].envFrom: Invalid value: "": must specify one of: `configMapRef` or `secretRef`
Использование envFrom
поддерживается и задокументировано в документации Argo: https://argoproj.github.io/argo-workflows/fields/. Почему Кубернетес жалуется здесь?
Комментарии:
1. я думаю, что могут возникнуть две проблемы: 1. отступ, 2. разбор значений, вы , вероятно, можете попробовать жестко закодировать имена configMapRef и secretRef, если это работает, то проблема в разборе, или попробуйте изменить отступ, если он определенно поддерживается, его значение в конце вызывает проблему.
2. @SaikatChakrabortty Спасибо. Я попытался жестко закодировать имена configMapRef и secretRef и получил ту же ошибку. Я также запустил оба YAML,
yamllint
чтобы проверить синтаксис.3.В вашем
WorkflowTemplate
объекте подenvFrom
:name
должно быть нижеconfigMapRef
илиsecretRef
, не на том же уровне.yamllint
не выдает никаких ошибок, потому что это все еще допустимый yaml, но это недопустимо для Kubernetes.
Ответ №1:
Как упоминалось в комментариях, с вашими декларациями есть пара проблем. Они являются допустимым YAML, но этот YAML не десериализуется в допустимые пользовательские ресурсы Argo.
- В рабочем процессе вы продублировали
parameters
ключspec.templates[0].inputs
. - На рабочей табличке вы разместили имена
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 поддерживают проверку на основе IDE, которая должна помочь вам найти/избежать этих проблем.