Как регулировать ресурсы в поде в Kubernetes

«Как регулировать ресурсы в поде в Kubernetes» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример определения в Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  template:
    spec:
      containers:
      - name: app-container
        image: myapp:latest
        resources:
          requests:
            cpu: "100m"    # 0.1 ядра CPU
            memory: "256Mi" # 256 Мибибайт
          limits:
            cpu: "500m"    # 0.5 ядра CPU
            memory: "512Mi" # 512 Мибибайт

Практические последствия:

  • CPU: Если контейнер пытается использовать больше CPU, чем указано в limits, ядро Linux (cgroups) его "троттлит" (ограничивает).
  • Память: Превышение limits по памяти приводит к завершению контейнера с статусом OOMKilled (Out Of Memory).
  • Планирование (Scheduling): При выборе ноды для пода планировщик Kubernetes (kube-scheduler) учитывает requests. Под будет размещен только на ноде, где есть достаточно свободных ресурсов для удовлетворения всех requests его контейнеров.

Для автоматического масштабирования на основе потребления ресурсов используется HorizontalPodAutoscaler (HPA).