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