Как я могу создать новый модуль Kubernetes из другого существующего модуля?

У меня есть модуль Kubernetes, который загружает несколько типов файлов (скажем, X, Y и Z), и у меня есть несколько сценариев обработки (каждый находится в образе докера), которые интересуются одним или несколькими файлами (скажем, processor_X_and_Y, processor_X_and_Z и processor_Z).

Первый модуль всегда работает, и мне нужно создать модуль процессора после загрузки файла в соответствии с типом файла, например, если загрузчик загружает файл типа Z, мне нужно создать новый экземпляр processor_X_and_Z и новый экземпляр из processor_Z.

Моя текущая идея состоит в том, чтобы использовать рабочий процесс Argo, создав простой рабочий процесс из одного шага для каждого процессора, а затем запустив подходящие рабочие процессы, вызвав Argo REST API из модуля загрузчика. Таким образом я достиг своей цели и автоматического масштабирования моей системы.

У меня вопрос: есть ли в Kubernetes другой более простой движок или сервис, который я могу использовать для создания нового продукта из другого модуля без использования этого движка рабочего процесса?


person Hussein Awala    schedule 26.05.2020    source источник
comment
Почему вы не используете Kubernetes API для создания своих модулей? Похоже, вы используете инструмент CI / CD для управления административными рабочими нагрузками. Не уверен, что это подходящий инструмент для работы.   -  person nodox    schedule 26.05.2020
comment
В @nodox Argo есть инструмент CI / CD, но есть и другие функции, которые могут иметь значение.   -  person Michael Crenshaw    schedule 27.05.2020
comment
Более масштабируемым подходом может быть размещение отдельных заданий в системе очередей, такой как RabbitMQ, и использование работниками заданий из очереди. Вам не нужно иметь дело со спецификой Kubernetes или RBAC, чтобы протестировать этот подход в среде разработки, и вы не рискуете переполнить свой кластер, когда вы внезапно получите 10 000 рабочих мест одновременно.   -  person David Maze    schedule 27.05.2020


Ответы (2)


Вам просто нужно предоставить своему модулю доступ к api-серверу, работающему на плоскости управления. Это позволит ему создавать / редактировать / удалять модули с помощью kubectl или любой другой библиотеки k8s. Вы можете использовать RBAC, чтобы ограничить его разрешения до минимума, необходимого для текущей задачи.

person Funkatic    schedule 26.05.2020

Как упоминалось в другом ответе, вы можете предоставить своему модулю доступ к Kubernetes API, а затем применить ресурс модуля через kubectl.

Если вы хотите запустить рабочий процесс Argo, вы можете использовать kubectl для применения ресурса рабочего процесса или использовать Argo CLI.

Но если вы все равно используете Argo, вам может быть проще использовать Argo Events для начать рабочий процесс. Вам нужно будет выбрать источник событий в зависимости от того, как / откуда вы скачиваем исходные файлы. Если, например, файлы находятся на S3, вы можете использовать источник событий SNS.

Если вам просто нужно периодически проверять наличие новых файлов, вы можете использовать CronWorkflow, чтобы выполнить проверку и условно выполнить остальную часть рабочего процесса в зависимости от того, есть ли что-нибудь для загрузки.

person Michael Crenshaw    schedule 26.05.2020