Начать работу в кубе на ждущих модулях
Я работаю над сценарием, в котором я хочу иметь возможность поддерживать некоторое количество 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: простите мое форматирование. Я здесь новичок.