Ошибка рабочего процесса Argo при использовании поля envFrom

#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.

  1. В рабочем процессе вы продублировали parameters ключ spec.templates[0].inputs .
  2. На рабочей табличке вы разместили имена 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, которая должна помочь вам найти/избежать этих проблем.