Кроме того, есть ли способ в Kubernetes перехватывать / находить / смотреть все события одного и того же задания (т. Е. Развернутого в одном файле манифеста) за раз?
Короткий ответ - нет. В любом случае все события модуля проходят один за другим.
Мне в голову приходит одна возможность:
Поскольку модули, для которых требуется настраиваемый планировщик, не могут быть запланированы каким-либо другим планировщиком, ваш настраиваемый планировщик может собирать список модулей, относящихся к одному и тому же заданию, и планировать их один за другим, а затем переходить к списку, связанному со следующим заданием. Таким образом вы можете быть уверены, что ресурсы, предназначенные для использования модулями первого задания, не будут выделены для одного из модулей, связанных с другим заданием, до того, как все модули, связанные с первым заданием, будут запланированы для узлов.
В событии, которое получает планировщик, есть аннотации и метки. Я не проверял результаты list_namespaces_pod
или list_namespaces_event
, но я думаю, что аннотации и метки должны быть там. Можно настроить конфигурацию задания в аннотациях, например, количество модулей в задании или метки для каждого модуля в задании (например, labels:{job_ID:100,role:master,uid:xxx}, annotations:{[job_ID:none, master:none, worker1:none worker2:none]}
). Когда планировщик видит первый модуль с аннотациями для задания, которого у него еще нет, он создает новый список модулей для задания ([job_ID:100, master:xxx, worker1:none worker2:none]
). При появлении следующих событий планировщик заполняет этот список, используя метки модуля, и списки расписаний только полностью заполнены ([job_ID:100, master:uid1, worker1:uid2: worker2:uid3]
).