Sobes.tech
Middle
126
questionbank

Как ограничить ресурсы приложения в Kubernetes?

Ответ от нейросети

sobes.tech AI

Для ограничения ресурсов приложения в Kubernetes используются запросы (requests) и лимиты (limits) в спецификации пода (Pod) или контейнера.

Используются поля resources.requests и resources.limits в спецификации контейнера:

  • Requests: Минимальное количество ресурсов (CPU или Memory), которое планировщик Kubernetes гарантирует выделить контейнеру. Если запрос не может быть выполнен, под не будет запланирован на узле.

  • Limits: Максимальное количество ресурсов (CPU или Memory), которое контейнер может использовать. Если контейнер превышает лимит памяти, он будет завершен (OOMKill). Если контейнер превышает лимит CPU, его исполнение будет ограничено.

Пример спецификации контейнера с запросами и лимитами:

resources:
  requests:
    memory: "64Mi" # Запрос 64 мегабайт памяти
    cpu: "250m"    # Запрос 0.25 CPU (250 millicores)
  limits:
    memory: "128Mi" # Лимит 128 мегабайт памяти
    cpu: "500m"     # Лимит 0.5 CPU (500 millicores)
  • CPU units: Определяются в милликорах (m). 1000m = 1 CPU.
  • Memory units: Могут быть в байтах, килобайтах (K, Ki), мегабайтах (M, Mi), гигабайтах (G, Gi) и т.д. Рекомендуется использовать единицы с префиксом i (Ki, Mi, Gi), что означает powers of 2 (Кибибайты, Мебибайты), для согласованности.

Без указания requests и limits контейнер может использовать все доступные ресурсы на узле, что может привести к проблемам стабильности для других подов на этом узле. Установка requests и limits помогает планировщику Kubernetes эффективно распределять поды по узлам кластера и предотвращает ресурсозатратные поды от влияния на другие.

Также возможно использование ResourceQuotas на уровне пространства имен для ограничения общего потребления ресурсов всеми подами в данном namespace.

Пример ResourceQuota:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: pod-limit
spec:
  hard:
    cpu: "10"       # Общий лимит CPU для namespace - 10 CPU
    memory: 20Gi    # Общий лимит Memory для namespace - 20 Gi
    pods: "10"      # Максимальное количество подов в namespace