Ответ
Да, запуск Pod будет возможен, если в кластере достаточно ресурсов для удовлетворения значений, указанных в requests. Kubernetes при планировании (scheduling) учитывает только requests.
Механика работы requests и limits:
requests(запросы): Это гарантированные ресурсы, которые планировщик (kube-scheduler) резервирует для Pod. Pod будет запланирован на узел (Node) только если на этом узле есть достаточно свободных ресурсов для удовлетворения всехrequestsконтейнера.limits(лимиты): Это максимальные ресурсы, которые контейнер может использовать. Они не учитываются при планировании. Kubelet на узле обеспечивает соблюдение этих лимитов во время выполнения.
Пример:
spec:
containers:
- name: app
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Что произойдет:
- Планирование: Scheduler ищет узел, на котором свободно как минимум 256Mi памяти и 250m CPU. Если такой узел есть, Pod будет запланирован на него.
- Выполнение: Pod запускается. Он гарантированно получит 250m CPU и 256Mi памяти.
- Потребление сверх
requests: Контейнер может использовать до 500m CPU и 512Mi памяти, если эти ресурсы свободны на узле. Если он превысит лимит по CPU, он будет throttled (ограничен). Если превысит лимит по памяти, контейнер может быть завершен (OOMKilled).
Вывод: Нехватка ресурсов для удовлетворения limits не помешает запуску Pod. Проблема возникнет только если в момент планирования не найдется узла, удовлетворяющего requests — тогда Pod останется в статусе Pending.