Как лучше всего внедрить 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, мы используем следующие зависимости:

Спасибо.

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: передать файл как артефакт

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

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, но передача параметров определенно поддерживается, и я думаю, что передача необработанного параметра также должна поддерживаться.

Другие вопросы по тегам