Descheduler#

Descheduler – инструмент, предназначенный для улучшения распределения pod в кластере Kubernetes. Анализирует текущее состояние размещения и при необходимости удаляет или заменяет («вытесняет») некоторые pod, чтобы Kube-scheduler мог переразместить их более оптимально.

Основные задачи и возможности
  • Оптимизация размещения pod:

    Помогает освободить перегруженные или неэффективно используемые узлы, «вытесняя» менее критичные pod.

  • Поддержка различных стратегий:

    Включает политики для:

    • удаления pod с перегруженных узлов;

    • балансировки между узлами по количеству pod;

    • освобождения узлов с низкой нагрузкой (для масштабирования);

    • удаления pod, нарушающих anti-affinity правила.

  • Работа в дополнение к Kube-scheduler:

    Не заменяет стандартный планировщик, а дополняет его, со временем исправляя неоптимальное распределение.

  • Гибкая настройка через конфигурацию:

    Позволяет включать/отключать стратегии, задавать фильтры по пространствам имен, меткам и другим параметрам.

  • Запуск по расписанию (через CronJob):

    Обычно разворачивается, как периодическая задача, так как работает асинхронно.

Примечание

Descheduler является инструментом по умолчанию компонента Pod-management и устанавливается с ним автоматически в режиме CronJob.

Конфигурация values#

Параметры Descheduler можно переопределить через редактирование нужных значений в spec.values. Общее описание конфигурации values для инструментов приведено в разделе «Конфигурации инструментов дополнительных компонентов».

kind – тип развертывания descheduler#

Параметр

Описание

Значение по умолчанию

kind

Тип ресурса Kubernetes для развертывания Descheduler. Возможные значения: CronJob (периодический запуск по расписанию) или Deployment (постоянное выполнение)​

CronJob

image – настройки образа контейнера#

Параметр

Описание

Значение по умолчанию

image.repository

Репозиторий образа Descheduler с использованием шаблонных переменных для формирования полного пути

{{ .Values.global.image.registry }}/{{ .Values.global.image.repository }}/{{ .Values.global.dappVersion }}/dapp-descheduler/descheduler

image.tag

Тег версии образа Descheduler

v0.28.0

image.pullPolicy

Политика загрузки образа. Возможные значения: Always, IfNotPresent, Never

IfNotPresent

imagePullSecrets – секреты для загрузки образов#

Параметр

Описание

Значение по умолчанию

imagePullSecrets

Список секретов для аутентификации в приватных реестрах контейнеров. Пример: – name: container-registry-secret

~ (не задано)

resources – настройки аппаратных ресурсов#

Параметр

Описание

Значение по умолчанию

resources.requests.cpu

Запрашиваемое количество CPU для контейнера

500m

resources.requests.memory

Запрашиваемый объем памяти для контейнера

256Mi

securityContext – контекст безопасности контейнера#

Параметр

Описание

Значение по умолчанию

securityContext.allowPrivilegeEscalation

Разрешить ли контейнеру повышать привилегии

false

securityContext.capabilities.drop

Список capabilities Linux, которые нужно удалить из контейнера

["ALL"]

securityContext.privileged

Запускать ли контейнер в привилегированном режиме

false

securityContext.readOnlyRootFilesystem

Использовать ли файловую систему только для чтения

true

securityContext.runAsNonRoot

Требовать запуск контейнера от имени непривилегированного пользователя

true

securityContext.runAsUser

ID пользователя, от имени которого запускается контейнер

1000

nameOverride – переопределение имени ресурса#

Параметр

Описание

Значение по умолчанию

nameOverride

Частичное переопределение имени чарта для генерации имен ресурсов

"" (пустая строка)

fullnameOverride – полное переопределение имени ресурса#

Параметр

Описание

Значение по умолчанию

fullnameOverride

Полное переопределение сгенерированного имени ресурсов

"" (пустая строка)

commonLabels – общие метки#

Параметр

Описание

Значение по умолчанию

commonLabels

Метки, которые будут применены ко всем создаваемым ресурсам

{} (пустой объект)

cronJobApiVersion – версия API CronJob#

Параметр

Описание

Значение по умолчанию

cronJobApiVersion

Версия API Kubernetes для ресурса CronJob

batch/v1

schedule – расписание запуска CronJob#

Параметр

Описание

Значение по умолчанию

schedule

Расписание запуска Descheduler в формате cron (применяется только при kind: CronJob)​

*/15 * * * * (каждые 15 минут)

suspend – приостановка CronJob#

Параметр

Описание

Значение по умолчанию

suspend

Приостановка выполнения CronJob

false

successfulJobsHistoryLimit – лимит истории успешных заданий#

Параметр

Описание

Значение по умолчанию

successfulJobsHistoryLimit

Количество успешно завершенных заданий для хранения в истории

1

failedJobsHistoryLimit – лимит истории неудачных заданий#

Параметр

Описание

Значение по умолчанию

failedJobsHistoryLimit

Количество неудачно завершенных заданий для хранения в истории

1

concurrencyPolicy – политика одновременного выполнения заданий#

Параметр

Описание

Значение по умолчанию

concurrencyPolicy

Политика одновременного выполнения заданий CronJob. Возможные значения: Allow, Forbid, Replace

Forbid

deschedulingInterval – интервал анализа размещения pod для Deployment#

Параметр

Описание

Значение по умолчанию

deschedulingInterval

Интервал между запусками Descheduler (требуется при kind: Deployment)

5m

replicas – количество реплик#

Параметр

Описание

Значение по умолчанию

replicas

Количество реплик для Deployment. При использовании более 1 реплики необходимо настроить leaderElection

1

leaderElection – настройки выбора лидера#

Параметр

Описание

Значение по умолчанию

leaderElection

Настройки механизма выбора лидера (требуется при kind: Deployment и replicas > 1). leaderElection нельзя активировать, если включен режим DryRun

{} (пустой объект)

command – команда запуска#

Параметр

Описание

Значение по умолчанию

command

Команда для запуска Descheduler в контейнере

["/bin/descheduler"]

cmdOptions – опции командной строки#

Параметр

Описание

Значение по умолчанию

cmdOptions.v

Уровень детализации логирования (verbosity level). Возможные значения: 0ERROR, 1WARNING, 2INFO, 3DEBUG, 4 и выше – TRACE

3

deschedulerPolicyAPIVersion – версия API политики#

Параметр

Описание

Значение по умолчанию

deschedulerPolicyAPIVersion

Версия API-политики Descheduler. Рекомендуется использовать последнюю версию API, поддерживаемую версией Descheduler

descheduler/v1alpha1

deschedulerPolicy.strategies.RemoveDuplicates – удаление дублирующихся pod#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.RemoveDuplicates.enabled

Включить стратегию удаления дублирующихся pod одного узла для обеспечения высокой доступности

true

deschedulerPolicy.strategies.RemovePodsHavingTooManyRestarts – удаление pod с частыми перезапусками#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.RemovePodsHavingTooManyRestarts.enabled

Включить стратегию удаления pod, имеющих слишком много перезапусков

true

deschedulerPolicy.strategies.RemovePodsHavingTooManyRestarts.params.podsHavingTooManyRestarts.podRestartThreshold

Пороговое значение количества перезапусков pod, после которого он будет «вытеснен»

100

deschedulerPolicy.strategies.RemovePodsHavingTooManyRestarts.params.podsHavingTooManyRestarts.includingInitContainers

Учет перезапусков init-контейнеров при подсчете

true

deschedulerPolicy.strategies.RemovePodsViolatingNodeTaints – удаление pod, нарушающих taints узлов#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.RemovePodsViolatingNodeTaints.enabled

Включить стратегию удаления pod, которые нарушают NoSchedule taints на узлах

true

deschedulerPolicy.strategies.RemovePodsViolatingNodeAffinity – удаление pod, нарушающих NodeAffinity#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.RemovePodsViolatingNodeAffinity.enabled

Включить стратегию удаления pod, нарушающих правила NodeAffinity

true

deschedulerPolicy.strategies.RemovePodsViolatingNodeAffinity.params.nodeAffinityType

Типы NodeAffinity для проверки. Возможные значения: requiredDuringSchedulingIgnoredDuringExecution, preferredDuringSchedulingIgnoredDuringExecution

["requiredDuringSchedulingIgnoredDuringExecution"]

deschedulerPolicy.strategies.RemovePodsViolatingInterPodAntiAffinity – удаление pod, нарушающих InterPod AntiAffinity#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.RemovePodsViolatingInterPodAntiAffinity.enabled

Включить стратегию удаления pod, нарушающих правила InterPod AntiAffinity

true

deschedulerPolicy.strategies.RemovePodsViolatingTopologySpreadConstraint – удаление pod, нарушающих TopologySpreadConstraint#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.RemovePodsViolatingTopologySpreadConstraint.enabled

Включить стратегию удаления pod, нарушающих ограничения топологического распределения

true

deschedulerPolicy.strategies.RemovePodsViolatingTopologySpreadConstraint.params.includeSoftConstraints

Включать ли в проверку мягкие ограничения (soft constraints)

false

deschedulerPolicy.strategies.LowNodeUtilization – балансировка при низком уровне утилизации узлов#

Параметр

Описание

Значение по умолчанию

deschedulerPolicy.strategies.LowNodeUtilization.enabled

Включить стратегию поиска недоиспользуемых узлов и «вытеснении» pod с других узлов для их перепланирования на недоиспользуемые узлы

true

deschedulerPolicy.strategies.LowNodeUtilization.params.nodeResourceUtilizationThresholds.thresholds.cpu

Пороговое значение использования CPU в процентах, ниже которого узел считается недоиспользуемым

20

deschedulerPolicy.strategies.LowNodeUtilization.params.nodeResourceUtilizationThresholds.thresholds.memory

Пороговое значение использования памяти в процентах, ниже которого узел считается недоиспользуемым

20

deschedulerPolicy.strategies.LowNodeUtilization.params.nodeResourceUtilizationThresholds.thresholds.pods

Пороговое значение количества pod в процентах, ниже которого узел считается недоиспользуемым

20

deschedulerPolicy.strategies.LowNodeUtilization.params.nodeResourceUtilizationThresholds.targetThresholds.cpu

Целевое пороговое значение CPU в процентах для узлов, с которых будут «вытесняеться» pod

50

deschedulerPolicy.strategies.LowNodeUtilization.params.nodeResourceUtilizationThresholds.targetThresholds.memory

Целевое пороговое значение памяти в процентах для узлов, с которых будут «вытесняеться» pod

50

deschedulerPolicy.strategies.LowNodeUtilization.params.nodeResourceUtilizationThresholds.targetThresholds.pods

Целевое пороговое значение количества pod в процентах для узлов, с которых будут «вытесняеться» pod

50

priorityClassName – класс приоритета pod#

Параметр

Описание

Значение по умолчанию

priorityClassName

Класс приоритета для pod Descheduler, определяющий их важность при планировании

system-cluster-critical

nodeSelector – селектор узлов#

Параметр

Описание

Значение по умолчанию

nodeSelector

Селектор узлов для планирования pod Descheduler на конкретные узлы

{} (пустой объект)

affinity – правила affinity#

Параметр

Описание

Значение по умолчанию

affinity

Настройки affinity для управления размещением pod Descheduler

{} (пустой объект)

tolerations – настройки tolerations для taint#

Параметр

Описание

Значение по умолчанию

tolerations

Список tolerations для планирования pod на узлы с соответствующими taint

[] (пустой массив)

rbac – настройки RBAC#

Параметр

Описание

Значение по умолчанию

rbac.create

Создание ресурсов RBAC (Role, ClusterRole, RoleBinding, ClusterRoleBinding)

true

serviceAccount – настройки ServiceAccount#

Параметр

Описание

Значение по умолчанию

serviceAccount.create

Создавать ли ServiceAccount для Descheduler

true

serviceAccount.name

Имя ServiceAccount. Если не задано и create=true, имя генерируется автоматически

~ (не задано)

serviceAccount.annotations

Аннотации для ServiceAccount

{} (пустой объект)

podAnnotations – аннотации pod#

Параметр

Описание

Значение по умолчанию

podAnnotations

Аннотации, которые будут добавлены к pod Descheduler

{} (пустой объект)

podLabels – метки pod#

Параметр

Описание

Значение по умолчанию

podLabels

Метки, которые будут добавлены к pod Descheduler

{} (пустой объект)

livenessProbe – проверка работоспособности pod#

Параметр

Описание

Значение по умолчанию

livenessProbe.failureThreshold

Количество неудачных проверок до перезапуска контейнера

3

livenessProbe.httpGet.path

URL-путь для HTTP-проверки работоспособности pod

/healthz

livenessProbe.httpGet.port

Порт для HTTP-проверки работоспособности pod

10258

livenessProbe.httpGet.scheme

Схема протокола для проверки pod (HTTP или HTTPS)

HTTPS

livenessProbe.initialDelaySeconds

Задержка перед первой проверкой после запуска контейнера (в секундах)

3

livenessProbe.periodSeconds

Периодичность выполнения проверки работоспособности (в секундах)

10

service – настройки Service#

Параметр

Описание

Значение по умолчанию

service.enabled

Создавать ли Service для Descheduler

false

serviceMonitor – настройки ServiceMonitor для Prometheus#

Параметр

Описание

Значение по умолчанию

serviceMonitor.enabled

Создавать ли ServiceMonitor для сбора метрик Prometheus

false

serviceMonitor.additionalLabels

Дополнительные метки для ресурса ServiceMonitor

{} (пустой объект)

serviceMonitor.interval

Интервал сбора метрик. Если не задан, используется глобальный интервал Prometheus

"" (пустая строка)

serviceMonitor.insecureSkipVerify

Пропускать ли проверку TLS-сертификата при сборе метрик

true

serviceMonitor.serverName

Имя сервера для проверки TLS-сертификата

null

serviceMonitor.metricRelabelings

Правила переименования метрик после их сбора

[] (пустой массив)

serviceMonitor.relabelings

Правила переименования меток перед сбором метрик

[] (пустой массив)