Как я могу создать новый модуль Kubernetes из другого существующего модуля?
У меня есть модуль Kubernetes, который загружает несколько типов файлов (скажем, X
, Y
а также Z
), и у меня есть несколько сценариев обработки (каждый находится в образе докера), которые интересуются одним или несколькими файлами (скажем, processor_X_and_Y
, processor_X_and_Z
а также processor_Z
).
Первый модуль всегда работает, и мне нужно создать модуль процессора после загрузки файла в соответствии с типом файла, например, если загрузчик загружает файл типа Z
, Мне нужно создать новый экземпляр processor_X_and_Z
и новый экземпляр processor_Z
.
Моя текущая идея состоит в том, чтобы использовать рабочий процесс Argo, создав простой рабочий процесс из 1 шага для каждого процессора, а затем запускать подходящие рабочие процессы, вызывая Argo REST API из модуля загрузчика. Таким образом, я достиг своей цели и автоматического масштабирования моей системы.
У меня вопрос: есть ли в Kubernetes другой более простой движок или сервис, который я могу использовать для создания нового продукта из другого модуля без использования этого движка рабочего процесса?
2 ответа
Как упоминалось в другом ответе, вы можете предоставить своему модулю доступ к Kubernetes API, а затем применить ресурс модуля через kubectl.
Если вы хотите запустить рабочий процесс Argo, вы можете использовать kubectl для применения ресурса рабочего процесса или вы можете использовать Argo CLI.
Но если вы все равно используете Argo, вам может быть проще использовать Argo Events для запуска рабочего процесса. Вам нужно будет выбрать источник события в зависимости от того, как / откуда вы загружаете исходные файлы. Если, например, файлы находятся на S3, вы можете использовать источник событий SNS.
Если вам просто нужно периодически проверять наличие новых файлов, вы можете использовать CronWorkflow для выполнения проверки и условно выполнить остальную часть рабочего процесса в зависимости от того, есть ли что-нибудь для загрузки.
Вам просто нужно предоставить своему модулю доступ к api-серверу, работающему на плоскости управления. Это позволит ему создавать / редактировать / удалять модули с помощью kubectl или любой другой библиотеки k8s. Вы можете использовать RBAC, чтобы ограничить его разрешения до минимума, необходимого для текущей задачи.