Начать работу в кубе на ждущих модулях

Я работаю над сценарием, в котором я хочу иметь возможность поддерживать некоторое количество X модулей в ожидании (и управляется kube), а затем по запросу пользователя (через некоторую внешнюю систему) запустить работу kube на одном из этих модулей ожидания. Итак, теперь число ожидающих модулей равно X-1, и kube запускает другой модуль, чтобы вернуть это число в X. Таким образом, я смогу сократить время, затрачиваемое на создание модуля, запуск контейнера и получение: начать фактическую обработку. Данные обработки могут быть отправлены в эти модули через какой-то тип сообщений (akka или rabbitmq). Я думаю, что ReplicationControllers - лучшее место для хранения неактивных модулей, но когда я создаю задание, как я могу указать, что хочу использовать один из модулей, которые находятся в ожидании и управляются ReplicationController.

1 ответ

Я думаю, что получил это, чтобы работать до состояния, на котором я могу построить это решение.
Так что я делаю, начиная с RC replicas: X (X - это количество пустых модулей, которое я хочу сохранить, обычно не очень большое). Стручки, которые он запускает, имеют собственную метку status: idle или что-то типа того. RC spec.selector имеет то же значение настраиваемой метки, чтобы соответствовать стручкам, которыми он управляет, поэтому spec.selector.status: idle, При создании этого RC, kube гарантирует, что он создает X модулей с их статусом = бездействующий. Примерно как ниже:
apiVersion: v1 kind: ReplicationController metadata: name: testrc spec: replicas: 3 selector: status: idle template: metadata: name: idlepod labels: status: idle spec: containers: ... С другой стороны, у меня есть работа yaml, которая имеет spec.manualSelector: true (и да, я учел, что набор меток должен быть уникальным). С включенным manualSelector теперь я могу определять селекторы для задания, как показано ниже.
apiVersion: batch/v1 kind: Job metadata: generateName: testjob- spec: manualSelector: true selector: matchLabels: status: active ...

Очевидно, что RC создает модули со статусом = бездействие, и задание ожидает использовать модули со статусом = активным из-за селектора.
Поэтому теперь, когда у меня есть запрос на запуск новой работы, я буду обновлять метку на одном из модулей, управляемых RC, чтобы его статус = активный. Селектор на RC произведет выход этого модуля из-под контроля и запустит другой из-за replicas: X установить на это. И выпущенный модуль больше не контролируется RC и теперь является сиротой. Наконец, когда я создаю задание, селектор в этом шаблоне задания будет соответствовать метке осиротевшего модуля, и этот модуль будет контролироваться новым заданием. Я отправлю сообщения этому модулю, которые начнут фактическую обработку и, наконец, доведут ее до завершения.

PS: простите мое форматирование. Я здесь новичок.

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