Сценарии применения
По умолчанию, 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 будет автоматически изменён на узле в пуле узлов.
- Войдите в консоль CCE и щелкните название кластера, чтобы перейти в консоль кластера.
- Выберите Узлы в навигационной панели и щелкните Пулы узлов вкладку справа. Найдите целевой пул узлов и выберите Больше > Управлять.
- На Управление конфигурациями странице, измените cpu-manager-policy значение на static в kubelet области.
- Нажмите OK.
Разрешение pod'ов использовать ресурсы CPU исключительно
Предварительные требования:
- Включите static политику на узле. Для деталей смотрите Включение управления CPU для пула узлов по умолчанию.
- Как запросы, так и ограничения должны быть настроены в pod'ах, и их значения должны быть одинаковыми целыми числами.
Вы можете использовать планирование с учётом привязки к узлам для планирования настроенных pod'ов на узлы, где static политика включена. Таким образом, pod'ы могут эксклюзивно использовать ресурсы CPU.
Пример YAML:
kind: DeploymentapiVersion: apps/v1metadata:name: testspec:replicas: 1selector:matchLabels:app: testtemplate:metadata:labels:app: testspec:containers:- name: container-1image: nginx:alpineresources:requests:cpu: 2 # The value must be an integer and must be the same as that in limits.memory: 2048Milimits:cpu: 2 # The value must be an integer and must be the same as that in requests.memory: 2048MiimagePullSecrets:- 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.
- Сценарии применения
- Примечания и ограничения
- Включение управления CPU для пула узлов по умолчанию
- Включение управления CPU для пользовательского пула узлов
- Разрешение Pods использовать ресурсы CPU исключительно
- Проверка