Advanced
Тема интерфейса

Политика 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 политика позволяет контейнерам в гарантированные pods с целочисленными запросами CPU для использования выделенных ресурсов CPU на узлах через привязку ядер CPU.

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

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

Включение управления CPU для пула узлов по умолчанию

При создании кластера вы можете включить управление CPU в Расширенные настройки.

  • Если эта функция включена, то static Используется политика Kubernetes, при которой используется привязка ядер CPU.
  • Если эта функция отключена, то none Используется политика Kubernetes, при которой привязка ядер CPU не используется.

Включение управления CPU для пользовательского пула узлов

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

  1. Войдите в консоль CCE и щелкните название кластера, чтобы перейти в консоль кластера.
  2. Выберите Узлы в навигационной панели и щелкните Пулы узлов вкладку справа. Найдите целевой пул узлов и выберите Больше > Управлять.
  3. На Управление конфигурациями странице, измените 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 # The value must be an integer and must be the same as that in limits.
memory: 2048Mi
limits:
cpu: 2 # The value must be an integer and must be the same as that in requests.
memory: 2048Mi
imagePullSecrets:
- name: default-secret

Проверка

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

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

cat /var/lib/kubelet/cpu_manager_state

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

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