Облачная платформаВсе платформы

CPU Политика

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

Сценарии применения

По умолчанию kubelet использует CFS квоты для применения ограничений CPU pod. Когда узел запускает множество pod с привязкой к CPU, рабочая нагрузка может перемещаться между разными ядрами CPU в зависимости от того, ограничен ли pod и какие ядра CPU доступны во время планирования. Большинство рабочих нагрузок не чувствительны к этой миграции и работают нормально без какого-либо вмешательства. Некоторые приложения чувствительны к CPU. Они чувствительны к:

  • Регулирование CPU
  • Переключение контекста
  • Пропуски кэша процессора
  • Доступ к памяти через разные сокеты
  • Гипертреды, ожидаемые к запуску на одной физической плате CPU

Если ваши рабочие нагрузки чувствительны к любому из этих пунктов, вы можете использовать Kubernetes Политики управления CPU для выделения выделенных ядер CPU (через привязку CPU) этим рабочим нагрузкам. Это сократит задержку планирования и улучшит производительность приложений. Менеджер CPU предпочтительно выделяет ресурсы на сокете и полных физических ядрах, чтобы избежать помех.

Политика управления CPU задается с помощью kubelet --cpu-manager-policy. По умолчанию Kubernetes поддерживает следующие политики:

  • none: политика по умолчанию. none политика явно включает существующую схему аффинности CPU по умолчанию, не предоставляя дополнительной аффинности сверх того, что делает планировщик ОС автоматически.
  • static: Политика static политика позволяет контейнерам в гарантированных pod с целочисленными запросами CPU для использования выделенных ресурсов CPU на узлах через привязку CPU.

Примечания и ограничения

Политика управления CPU не применяется к узлам ECS (PM) в кластерах CCE Turbo.

Настройка кластерного уровня политики управления CPU (узлы в DefaultPoolDefaultPool поддерживаются)

При создании кластера вы можете включить управление CPU в Расширенных настройках области. Эта настройка применяется ко всему кластеру, а кластерные политики управления CPU не могут быть изменены после создания кластера.Если управление CPU не включено при создании кластера, узлы в DefaultPool

  • не будут поддерживать изменения политики управления CPU. Чтобы применить политики управления CPU, необходимо создать пользовательский пул узлов и настроить желаемые параметры для его узлов.Если эта функция включена, static
  • политика Kubernetes используется, где применяется привязка CPU.Если эта функция отключена, none

Настройка политики управления CPU на уровне пула узлов

Вы можете задать политику управления CPU для пользовательского пула узлов. После настройки параметр kubelet --cpu-manager-policy будет автоматически изменён на узлах в пуле узлов.

Note

Пул узлов по умолчанию (DefaultPool) следует кластерным политикам управления CPU, и его политики управления CPU не могут быть изменены.

  1. Войдите в CCE console и щелкните название кластера, чтобы открыть консоль кластера.
  2. Выберите Узлы в навигационной панели и щелкните Пулы узлов вкладка справа. Найдите целевой пул узлов и выберите Больше > Управление.
  3. На странице Управление конфигурациями странице, задайте CPU Management Policy (cpu-manager-policy) на static в kubelet области.

  4. Нажмите OK.

Разрешение pod'ам эксклюзивно использовать ресурсы CPU

Требования:

Вы можете использовать планирование с привязкой к узлам для назначения настроенных pod на узлы, где static политика включена. Таким образом, pod могут эксклюзивно использовать ресурсы CPU.

Пример YAML:

kind: Deployment
apiVersion: apps/v1
metadata:
name: test
spec:
replicas: 1
selector:
matchLabels:
app: test
template:
metadata:
labels:
app: test
spec:
containers:
- name: container-1
image: nginx:alpine
resources:
requests:
cpu: 2# Значение должно быть целым числом и должно совпадать с тем, что находится в limitslimits.
memory: 2048Mi
limits:
cpu: 2# Значение должно быть целым числом и должно совпадать с тем, что находится в requestsrequests.
memory: 2048Mi
imagePullSecrets:
- name: default-secret

Проверка

Возьмите узел с 8 vCPU и 16 ГиБ памяти в качестве примера. Разверните рабочую нагрузку, у которой запрос и лимит CPU оба 2 на узле заранее.

Войдите в узел, где запущена нагрузка, и проверьте /var/lib/kubelet/cpu_manager_state вывод.

cat /var/lib/kubelet/cpu_manager_state

Вывод команды:

{"policyName":"staticstatic","defaultCpuSet":"0-1,4-7","entries":{"de14506d-0408-411f-bbb9-822866b58ae2":{"container-1":"2-32-3"}},"checksum":3744493798}
  • Если policyName является static, политика была сконфигурирована.
  • Значение 2-3 указывает набор CPU, которые могут использоваться контейнерами в pod.