По умолчанию kubelet использует CFS квоты для применения ограничений CPU pod. Когда узел запускает множество pod с привязкой к CPU, рабочая нагрузка может перемещаться между разными ядрами CPU в зависимости от того, ограничен ли pod и какие ядра CPU доступны во время планирования. Большинство рабочих нагрузок не чувствительны к этой миграции и работают нормально без какого-либо вмешательства. Некоторые приложения чувствительны к CPU. Они чувствительны к:
Если ваши рабочие нагрузки чувствительны к любому из этих пунктов, вы можете использовать Kubernetes Политики управления CPU для выделения выделенных ядер CPU (через привязку CPU) этим рабочим нагрузкам. Это сократит задержку планирования и улучшит производительность приложений. Менеджер CPU предпочтительно выделяет ресурсы на сокете и полных физических ядрах, чтобы избежать помех.
Политика управления CPU задается с помощью kubelet --cpu-manager-policy. По умолчанию Kubernetes поддерживает следующие политики:
Политика управления CPU не применяется к узлам ECS (PM) в кластерах CCE Turbo.
При создании кластера вы можете включить управление CPU в Расширенных настройках области. Эта настройка применяется ко всему кластеру, а кластерные политики управления CPU не могут быть изменены после создания кластера.Если управление CPU не включено при создании кластера, узлы в DefaultPool
Вы можете задать политику управления CPU для пользовательского пула узлов. После настройки параметр kubelet --cpu-manager-policy будет автоматически изменён на узлах в пуле узлов.
Пул узлов по умолчанию (DefaultPool) следует кластерным политикам управления CPU, и его политики управления CPU не могут быть изменены.
Требования:
Вы можете использовать планирование с привязкой к узлам для назначения настроенных 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# Значение должно быть целым числом и должно совпадать с тем, что находится в limitslimits.memory: 2048Milimits:cpu: 2# Значение должно быть целым числом и должно совпадать с тем, что находится в requestsrequests.memory: 2048MiimagePullSecrets:- 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}