Начать работу в кубе на ждущих модулях - PullRequest
0 голосов
/ 11 декабря 2018

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

1 Ответ

0 голосов
/ 12 декабря 2018

Я думаю, что получил это, чтобы работать до состояния, на котором я могу построить это решение.
Итак, что я делаю, так это запускаю 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: Простите мое форматирование.Я новичок здесь.

...