TGViewer
Библиотека девопса | DevOps, SRE, Sysadmin Библиотека девопса | DevOps, SRE, Sysadmin @devopsslib · 10.4K subscribers
Post #4800 1.13K
👨‍💻 Kubernetes v1.36: ресурсы подов в приостановленных Job теперь можно менять

В Kubernetes v1.36 фича MutablePodResourcesForSuspendedJobs перешла в бету и включена по умолчанию. Теперь можно менять CPU, память, GPU и другие ресурсы контейнеров прямо в шаблоне пода у приостановленного Job, без пересоздания.

Какую проблему это решает

Batch-задачи и ML-обучение часто запускаются через очереди — Kueue и подобные контроллеры. Очередь может решить, что Job нужно запустить с другим количеством GPU или памяти, исходя из текущей загрузки кластера. Раньше так не получалось: ресурсы в шаблоне пода были неизменяемы после создания Job. Единственный выход — удалить джобу и создать заново, теряя историю, статусы и метаданные.

Теперь это работает нативно: приостановил Job, поменял ресурсы, возобновил.

Как это работает

Фича снимает ограничение на изменение полей ресурсов в pod template, но только пока Job находится в состоянии suspend: true и у него нет активных подов (status.active == 0). Все остальные правила валидации остаются в силе: лимиты не могут быть меньше реквестов, extended resources указываются целыми числами.

Пример Job с изменёнными ресурсами перед запуском:
apiVersion: batch/v1
kind: Job
metadata:
name: training-job-example-abcd123
spec:
suspend: true
template:
spec:
containers:
- name: trainer
image: example-registry.example.com/training:2026-04-23T150405.678
resources:
requests:
cpu: "4"
memory: "16Gi"
example-hardware-vendor.com/gpu: "2"
limits:
cpu: "4"
memory: "16Gi"
example-hardware-vendor.com/gpu: "2"
restartPolicy: Never


Очередь меняет блок resources, затем снимает spec.suspend: false, и новые поды стартуют уже с обновлёнными ресурсами.

Что важно учесть

Если Job уже запускался и был приостановлен, нужно дождаться завершения всех активных подов. API-сервер отклонит изменения, пока status.active > 0.

Если у Job могут быть упавшие поды, стоит выставить podReplacementPolicy: Failed. Это гарантирует, что замещающие поды создадутся только после полного завершения предыдущих и не будет конкуренции за ресурсы.

Dynamic Resource Allocation (DRA) не затронут. resourceClaimTemplates остаются неизменяемыми. Если воркload использует DRA, claim templates нужно пересоздавать отдельно.

Как включить

В v1.36 фича работает без дополнительной конфигурации. На v1.35 нужно явно включить feature gate на kube-apiserver:
--feature-gates=MutablePodResourcesForSuspendedJobs=true


➡️ Блог разработчиков

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека devops'a

#арсенал_инженера
  • 🔥 2
More from @devopsslib
  1. Sep 18, 2026От исходного кода до процессора: разберись, как работает программа 💻 Стартует практически…
  2. Sep 15, 2026😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как трати…
  3. Sep 15, 2026👩‍💻 Bash-скрипт для мониторинга сервисов Полноценный мониторинг вроде Zabbix или Prometh…
  4. Sep 13, 2026🌸 Вселенная намекает: пора уже начать этот курс С 14 сентября цены в Proglib Academy выра…
  5. Sep 13, 2026🤪 Если бы можно было задать один вопрос про AI в разработке — что бы вы спросили? Как выб…
  6. Sep 10, 2026Планы на 3 октября — прийти на RWB Infra x Security Meetup Мы направим прожекторы на инфра…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →