Как лучше всего внедрить yaml-файл в шаг рабочего процесса Argo?

Резюме:

У нас есть приложение golang, которое отправляет рабочие процессы Argo в кластер kubernetes по запросу. Я хотел бы передать yaml-файл на один из этапов, и мне интересно, какие есть варианты для этого.

Среда:

  • Арго: v2.4.2
  • К8с: 1.13.12-гке.25

Дополнительные детали:

В конце концов, я хотел бы передать этот файл на тестовый этап, как показано в этом примере:

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-
spec:
  entrypoint: test
  templates:
  - name: test
    container:
      image: gcr.io/testproj/test:latest
      command: [bash]
      source: |
        python test.py --config_file_path=/path/to/config.yaml

Изображение, используемое на этом шаге, будет иметь скрипт python, который получает путь к этому файлу и затем обращается к нему.

Чтобы представить рабочие процессы Argo с помощью golang, мы используем следующие зависимости:

Спасибо.


person Ash    schedule 19.03.2020    source источник
comment
На каком этапе вы хотите передать yaml, можете ли вы поделиться шаблоном рабочего процесса?   -  person Crou    schedule 19.03.2020
comment
@Crou спасибо за комментарий. Я не могу поделиться кодом из-за политики моего работодателя, но я опубликую базовый пример, который может быть достаточно репрезентативным.   -  person Ash    schedule 20.03.2020


Ответы (1)


Вариант 1: передать файл в качестве параметра

Параметры рабочего процесса обычно представляют собой небольшие фрагменты текста или чисел. Но если ваш yaml-файл достаточно мал, вы можете закодировать его и передать в качестве параметра.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-
spec:
  entrypoint: test
  arguments:
    parameters:
    - name: yaml
      value: "string-encoded yaml"
  templates:
  - name: test
    container:
      image: gcr.io/testproj/test:latest
      command: [bash]
      source: |
        # In this case, the string-encoding should be BASH-compatible.
        python test.py --config_file_as_string="{{inputs.parameters.message}}"

Вариант 2: передать файл как артефакт

Argo поддерживает несколько типов артефактов. Возможно, самым простым для вашего варианта использования является необработанный параметр типа.

apiVersion: argoproj.io/v1alpha1
kind: Workflow
metadata:
  generateName: test-
spec:
  entrypoint: test
  templates:
  - name: test
    inputs:
      artifacts:
      - name: yaml
        path: /path/to/config.yaml
        raw:
          data: |
            this is
            the raw file
            contents
    container:
      image: gcr.io/testproj/test:latest
      command: [bash]
      source: |
        python test.py --config_file_path=/path/to/config.yaml

Помимо raw, Argo поддерживает артефакты "S3, Artifactory, HTTP, [и] Git" (среди прочего, я думаю).

Если, например, вы решили использовать S3, вы можете загрузить файл из своего приложения golang, а затем передать сегмент S3 и ключ в качестве параметров.

Клиент Голанга

Я не знаком с клиентом golang, но передача параметров определенно поддерживается, и я думаю, что передача необработанного параметра также должна поддерживаться.

person Michael Crenshaw    schedule 21.03.2020
comment
Спасибо за ваш ответ. Думаю, я выберу параметр. Содержимое файла, которое мы хотим передать, имеет относительно небольшой размер. - person Ash; 21.03.2020