Ресурсы: requests и limits

Без указания ресурсов один прожорливый под способен положить весь узел — requests и limits задают рамки.

requests — сколько ресурсов поду гарантированно нужно (влияет на выбор узла); limits — потолок, выше которого поду подняться нельзя.

Каждый контейнер можно охарактеризовать двумя числами по CPU и памяти. requests — это бронь: scheduler разместит под только на узел, где столько свободно. limits — это ограничение: контейнер не получит больше, даже если захочет.

Как задают ресурсы

spec:
  containers:
    - name: app
      image: my-app:1.0
      resources:
        requests:
          cpu: "250m"      # 0.25 ядра
          memory: "128Mi"
        limits:
          cpu: "500m"      # не больше 0.5 ядра
          memory: "256Mi"

Единицы измерения

  • CPU: 1 = одно ядро. 500m = «500 милли-ядер» = половина ядра. 250m = четверть.
  • Память: Mi — мебибайты (1024²), Gi — гибибайты. 128Mi, 1Gi и т. п.

Что бывает при превышении limit

CPU и память ведут себя по-разному при достижении потолка:

  • CPU просто придушивается (throttling): контейнер работает медленнее, но живёт.
  • Память жёстче: превысил memory limit — контейнер убивают со статусом OOMKilled (Out Of Memory).
kubectl get pod app
kubectl describe pod app  # в Events будет OOMKilled, если память кончилась

Вывод:

NAME   READY   STATUS      RESTARTS   AGE
app    0/1     OOMKilled   2          1m

Зачем это всё

requests дают честное планирование: scheduler знает, сколько узлу занять, и не перегружает его. limits защищают соседей: один сервис с утечкой памяти не съест весь узел. Правильно подобранные значения — основа стабильного кластера.

requestslimits
Смыслгарантированный минимуммаксимальный потолок
Влияет навыбор узла scheduler-омограничение во время работы
Память сверх лимитаOOMKilled

Итог

  • requests — бронь ресурсов для планирования, limits — потолок при работе.
  • CPU задают в милли-ядрах (500m), память — в Mi/Gi.
  • Превышение memory limit ведёт к OOMKilled, CPU лишь придушивается.
Проверьте себя
1. На что влияют requests?
AНа максимальное потребление контейнера
BНа выбор узла планировщиком — это гарантированная бронь ресурсов
CНа число реплик
DНа маршрутизацию трафика
2. Что значит CPU 500m?
A500 ядер
BПоловина ядра (500 милли-ядер)
C500 мегабайт
D500 миллисекунд
3. Что произойдёт, если контейнер превысит memory limit?
AОн будет придушен, но продолжит работу
BОн будет убит со статусом OOMKilled
CЕму добавят память автоматически
DНичего не произойдёт
Поддержать проект