Оптимизация производительности Pod с помощью политик менеджера
Это руководство предоставляет администраторам Kubernetes кластера практическое, готовое к применению руководство по включению и проверке CPU ManagerPolicy, Memory ManagerPolicy и Topology ManagerPolicy. Согласовывая закрепление CPU, NUMA-аффинность и выравнивание топологии, вы можете обеспечить стабильную задержку и улучшенную производительность для критически важных нагрузок.
Содержание
Область применения и предварительные требованияБыстрый старт: пример конфигурации KubeletКак рассчитатьreservedMemoryПрименение конфигурацииПроверкаОсновные политики и поведениеТерминологияОбласть применения и предварительные требования
Роли и права
- Требуется доступ в окно обслуживания, административные права
kubectlи SSH-доступ к узлам.
Требования к нагрузке
- Для достижения выделенного CPU и NUMA-аффинности Pods должны работать в классе Guaranteed QoS: requests = limits и CPU указаны целыми ядрами (например, 2, 4).
Не рассматривается
- HugePages не рассматриваются. Если вам нужна поддержка HugePages, обратитесь в службу поддержки.
Быстрый старт: пример конфигурации Kubelet
Добавьте следующий фрагмент в /var/lib/kubelet/config.yaml, подстроив значения под вашу среду:
Примечания:
full-pcpus-only: "true"улучшает согласованность задержек.topologyManagerScope: podгарантирует, что контейнеры внутри одного Pod выравниваются по общей NUMA-топологии.reservedMemoryдолжен рассчитываться на основе конфигурации kubelet и порогов эвакуации (см. следующий раздел).
Как рассчитать reservedMemory
Формула:
Сумма reservedMemory по всем NUMA-узлам должна равняться R_total.
Шаги (для N NUMA-узлов):
-
Рассчитать
R_total(в Mi). -
Вычислить деление и остаток:
- base = floor(R_total / N)
- rem = R_total − base × N
-
Назначить значения:
- NUMA-узел 0 = base + rem
- Остальные NUMA-узлы = base
Пример (2 NUMA-узла):
- kubeReserved=512Mi, systemReserved=512Mi, evictionHard=100Mi → R_total = 1124Mi
- base = 562, rem = 0
Применение конфигурации
Для каждого узла:
-
Отключение и эвакуация
-
Остановка Kubelet и очистка состояния
-
Перезапуск Kubelet
-
Повторное включение узла
- Для DaemonSets и системных Pod перезапустите или удалите Pod явно.
-
Проверка восстановления
Проверка
Состояние CPU ManagerPolicy
Проверьте:
.policyName="static".defaultCpuSetсодержит невыделенные CPU.entriesпоказывают назначение контейнеров на CPU
Состояние Memory ManagerPolicy
Проверьте:
.policyName="Static"- Сумма зарезервированной памяти соответствует
R_total - Pods с Guaranteed назначены на NUMA-узлы согласно политике
single-numa-node
Основные политики и поведение
CPU ManagerPolicy
- Цель: выделять эксклюзивные физические CPU для Pods с Guaranteed QoS
- Конфигурация:
cpuManagerPolicy: static,full-pcpus-only: "true" - Поведение: применяется только к Pods с Guaranteed; Burstable/BestEffort не затрагиваются
Memory ManagerPolicy
- Цель: резервировать и выравнивать память на уровне NUMA-узлов
- Конфигурация:
memoryManagerPolicy: "Static",reservedMemory - Поведение: лучше всего работает совместно с Topology ManagerPolicy для выравнивания
Topology ManagerPolicy
- Цель: выравнивать CPU, память и устройства на одном NUMA-узле
- Конфигурация:
topologyManagerPolicy: single-numa-node,topologyManagerScope: pod - Режимы: best-effort, restricted, single-numa-node (строгий)
Терминология
- NUMA node: домен с неоднородным доступом к памяти (Non-Uniform Memory Access)
- CPU pinning: привязка контейнеров к выделенным CPU
- NUMA affinity: предпочтение памяти из того же NUMA-узла, что и CPU
- Topology alignment: совместное размещение CPU, памяти и устройств на одном NUMA-узле
- Guaranteed Pod: requests = limits; CPU указаны целыми ядрами