Kubernetes v1.36: новые Workload и PodGroup API для AI/ML и пакетных задач
Выход Kubernetes v1.36 знаменует собой важный этап в развитии планирования рабочих нагрузок, особенно для AI/ML и пакетных задач. Релиз вводит архитектурное разделение API: Workload теперь служит статическим шаблоном, а PodGroup управляет состоянием во время выполнения. Это не только упрощает логику

Выход Kubernetes v1.36 знаменует собой важный этап в развитии планирования рабочих нагрузок, особенно для AI/ML и пакетных задач. Релиз вводит архитектурное разделение API: Workload теперь служит статическим шаблоном, а PodGroup управляет состоянием во время выполнения. Это не только упрощает логику планировщика, но и открывает путь к более эффективной обработке групп подов. Если вы работаете с ресурсоемкими задачами в Kubernetes, эти изменения напрямую повлияют на производительность и гибкость ваших кластеров.
Новые Workload и PodGroup API: разделение обязанностей
В версии v1.35 группы подов и их состояние были встроены в ресурс Workload. Теперь эти концепции разделены: Workload API (scheduling.k8s.io/v1alpha2) выступает как статический шаблон, а PodGroup API описывает объект времени выполнения. Такое разделение повышает производительность и масштабируемость, поскольку PodGroup позволяет шардировать обновления статуса по репликам. Планировщик (kube-scheduler) теперь может напрямую читать PodGroup, который содержит всю необходимую информацию для принятия решений. Это особенно полезно для крупных кластеров, где тысячи подов требуют быстрой обработки.
Как новое разделение API улучшает производительность планировщика?
Ранее планировщик был вынужден анализировать весь Workload-объект, чтобы получить информацию о группе подов. Теперь PodGroup предоставляет компактное представление состояния выполнения, что сокращает накладные расходы на сериализацию и передачу данных. Кроме того, PodGroup может быть реплицирован, что позволяет распределять обновления статуса по нескольким экземплярам планировщика. В результате kube-scheduler быстрее принимает решения, особенно при работе с большими группами подов.
Новый цикл планирования PodGroup и атомарная обработка
В kube-scheduler появился новый цикл планирования PodGroup, который обеспечивает атомарную обработку рабочих нагрузок. Это значит, что все поды в группе рассматриваются как единое целое, что критически важно для gang-планирования (например, для распределенных тренировок моделей). Такой подход также закладывает основу для будущих улучшений. Атомарность гарантирует, что либо все поды группы будут запланированы, либо ни один, что предотвращает частичное выделение ресурсов и связанные с этим задержки.
Почему атомарное планирование важно для AI/ML задач?
При обучении больших моделей часто требуется одновременный запуск множества подов, работающих в тандеме. Если только часть из них получит ресурсы, обучение не начнется, а выделенные ресурсы будут простаивать. Новый цикл PodGroup решает эту проблему, обеспечивая синхронное размещение всех подов группы. Это особенно актуально для распределенных фреймворков вроде TensorFlow или PyTorch, где каждый под играет роль в общей вычислительной задаче.
Топологически-зависимое планирование и вытеснение с учетом рабочих нагрузок
Версия v1.36 вводит первые итерации топологически-зависимого планирования (topology-aware scheduling) и вытеснения с учетом рабочих нагрузок (workload-aware preemption). Это позволяет планировщику учитывать расположение ресурсов (например, узлы с GPU) и приоритеты рабочих нагрузок при вытеснении, что особенно важно для AI/ML задач, требующих специфического оборудования. Топологически-зависимое планирование стремится размещать поды на узлах, которые минимизируют задержки межсоединений (например, в пределах одной стойки).
Как работает вытеснение с учетом рабочих нагрузок?
Вытеснение с учетом рабочих нагрузок анализирует не только приоритет пода, но и его роль в группе. Например, если необходимо освободить ресурсы для высокоприоритетной группы, планировщик может вытеснить поды из менее приоритетной группы, а не отдельные поды. Это снижает фрагментацию ресурсов и повышает общую эффективность кластера. В будущих версиях ожидается более глубокая интеграция с топологией и политиками QoS.
Поддержка ResourceClaim для рабочих нагрузок
Новая версия добавляет поддержку ResourceClaim для рабочих нагрузок, что открывает доступ к Dynamic Resource Allocation (DRA) для PodGroup. DRA позволяет гибко выделять специализированные ресурсы (например, GPU, FPGA) непосредственно во время планирования, а не на этапе создания пода. Это упрощает управление ресурсами в кластерах с разнородным оборудованием. ResourceClaim теперь может быть привязан к PodGroup, что гарантирует, что все поды в группе получат одинаковый доступ к запрошенному оборудованию.
Что такое Dynamic Resource Allocation и как она интегрируется с PodGroup?
Dynamic Resource Allocation — это механизм, который позволяет резервировать специализированные ресурсы на этапе планирования, а не при создании пода. Ранее DRA работал только на уровне отдельных подов. С v1.36 ResourceClaim может быть связан с PodGroup, что обеспечивает согласованное выделение ресурсов для всей группы. Например, если ваша задача требует 8 GPU, планировщик зарезервирует их для всех подов группы до начала выполнения, избегая конфликтов.
Интеграция с контроллером Job
Чтобы продемонстрировать готовность к реальному использованию, v1.36 включает первую фазу интеграции контроллера Job с новыми API. Это означает, что пользователи смогут использовать преимущества Workload и PodGroup при работе с обычными задачами Kubernetes Job без дополнительных модификаций. Контроллер Job автоматически создает PodGroup для каждого Job, что упрощает миграцию существующих рабочих нагрузок.
Как начать использовать новые API с существующими Job?
Для активации интеграции достаточно установить соответствующий feature gate в kube-controller-manager. После этого каждый Job будет автоматически получать PodGroup, что позволит планировщику применять gang-планирование и другие оптимизации. Это особенно полезно для пакетных задач, где важна атомарность запуска. В будущих версиях ожидается поддержка других контроллеров, таких как CronJob и Deployment.
Кого затронут изменения и как
Разработчики и администраторы Kubernetes, работающие с AI/ML, пакетными задачами или любыми рабочими нагрузками, требующими группового планирования, получат более мощные и гибкие инструменты. Новые API позволяют точнее контролировать размещение подов, улучшить использование ресурсов и сократить время выполнения задач. Для пользователей традиционных микросервисов изменения менее заметны, но закладывают основу для будущих оптимизаций. Если вы используете Kubernetes для высокопроизводительных вычислений (HPC), эти обновления станут значительным шагом вперед.
Что дальше
Ожидается, что в следующих релизах функциональность будет расширена: улучшенная поддержка топологии, более интеллектуальное вытеснение и глубокая интеграция с другими контроллерами. Разработчики Kubernetes уже приглашают сообщество к тестированию новых API и обратной связи. Следите за выпусками v1.37 и v1.38, где планируется стабилизация Workload и PodGroup, а также внедрение дополнительных возможностей, таких как приоритизация на основе стоимости ресурсов.
Итог
Kubernetes v1.36 делает важный шаг к более интеллектуальному и контекстно-зависимому планированию рабочих нагрузок. Разделение Workload и PodGroup API, поддержка DRA и интеграция с Job — это не просто новые функции, а фундамент для будущих инноваций в управлении ресурсами. Следите за развитием этих API, если вы работаете с ресурсоемкими задачами в Kubernetes. Начните тестирование уже сегодня, чтобы подготовить свои кластеры к грядущим улучшениям.