Ресурсы: 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 ядер
B500 мегабайт
CПоловина ядра (500 милли-ядер)
D500 миллисекунд
3. Что произойдёт, если контейнер превысит memory limit?
AОн будет придушен, но продолжит работу
BЕму добавят память автоматически
CНичего не произойдёт
DОн будет убит со статусом OOMKilled