В rubik каждая функция запускается в виде сервиса в фоновом режиме. Rubik запускает соответствующие сервисы по требованию на основе конфигурации пользователя (config.json). Ниже приведены описания различных сервисов.
Rubik поддерживает настройку приоритетов бизнес-приложений, что позволяет гарантировать вытеснение ресурсов для онлайн-приложений относительно оффлайн-приложений в случае совместной установки. В настоящее время поддерживается только вытеснение ресурсов CPU и памяти. Для использования этой функции пользователи должны вручную указывать тип бизнес-приложения, добавляя аннотацию volcano.sh/preemptable
в файл YAML бизнес-приложения (pod). Пример конфигурации приоритетов бизнес-приложений приведен ниже:
annotations:
volcano.sh/preemptable: true
В rubik все функции идентифицируются по этой аннотации как признаки онлайн/оффлайн бизнес-приложений. true означает, что бизнес-приложение является оффлайн-приложением. false означает, что бизнес-приложение является онлайн-приложением.
Для обеспечения вытеснения ресурсов CPU для онлайн-приложений относительно оффлайн-приложений в случае совместной установки.
cpu.qos_level
в подсистеме CPU. Рекомендуется использовать версию ядра openEuler-22.03+.### Абсолютное вытеснение памяти
Для обеспечения вытеснения оффлайн-приложений при исчерпании памяти (OOM).memory.qos_level
в подсистеме памяти. Рекомендуется использовать версию ядра openEuler-22.03+.echo 1 > /proc/sys/vm/memcg_qos_enable
Rubik поддерживает ограничение на использование памяти и последнего уровня кэша (LLC) для бизнес-приложений (pod). Это позволяет ограничивать использование памяти и LLC для оффлайн-приложений, тем самым снижая их влияние на онлайн-приложения.Эта функция зависит от поддержки физического оборудования функций Intel RDT (x86) и mapm (arm). Она разделяет бизнес-приложения в кластере на 5 контрольных групп (соответственно rubik_max
, rubik_high
, rubik_middle
, rubik_low
, rubik_dynamic
). Каждая контрольная группа ограничивает использование бизнес-приложениями памяти и LLC в соответствии с конфигурацией. После запуска rubik, он записывает уровень воды в соответствующие схемы контрольных групп. Уровни воды для контрольных групп rubik_high
, rubik_middle
, rubik_low
являются глобальными и могут быть настроены в dynCache
. Контрольная группа rubik_max
имеет по умолчанию максимальное значение, а начальный уровень воды для контрольной группы rubik_dynamic
совпадает с уровнем воды для контрольной группы rubik_low
. Rubik поддерживает два способа конфигурации ограничений на память и контрольных групп LLC для бизнес-__Pods:
defaultLimitMode
в глобальных параметрах rubik, и rubik автоматически настроит контрольные группы для бизнес-__Pods (то есть_Pods с абсолютной функцией предemption, помеченных аннотацией volcano. sh/preemptable
).
static
pod будет добавлен в контрольную группу rubik_max
.dynamic
pod будет добавлен в контрольную группу rubik_dynamic
.volcano.sh/cache-limit
(мы не рекомендуем это делать), как в следующем примере конфигурации, где pod будет добавлен в контрольную группу rubik_low
:annotations:
volcano.sh/cache-limit: "low"
Контрольная группа rubik_dynamic:
Когда контрольная группа для_Pods установлена как rubik_dynamic
, rubik динамически корректирует уровень воды для контрольной группы rubik_dynamic
на основе метрик cache miss
и llc miss
текущих_Pods на узле, что позволяет динамически управлять_Pods в контрольной группе rubik_dynamic
.
rdt=l3cat,mba
.mpam=acpi
./sys/fs/resctrl
, и этот каталог не должен быть отмонтирован во время выполнения.SYS_ADMIN
для правильного установления файлов в каталоге /sys/fs/resctrl
.- Rubik и хост используют общий пространственный идентификатор процессов (pid namespace), чтобы получить PID процессов контейнеров бизнеса на хосте.dynCache
применяется только к оффлайн бизнесу и не действует для онлайн бизнеса.dynCache
не будет применяться к этому контейнеру.dynCache
, изменение уровня ограничения для этого контейнера не поддерживается.adjustInterval
и perfDuration
в конфигурационном файле Rubik и от количества активных бизнес-контейнеров на узле. Интервал между каждым изменением (если результаты мониторинга указывают на необходимость изменения) находится в диапазоне [adjustInterval + perfDuration, adjustInterval + perfDuration * количество контейнеров]
. Пользователи могут настроить эти параметры в соответствии со своими требованиями к чувствительности.## Ограничения на ввод-вывод (ioLimit)
Ограничение использования ресурсов ввода-вывода (I/O) для pod с помощью функции blkio, предоставляемой cgroup.
Пользователи должны вручную настроить аннотацию volcano. sh/blkio-limit
для бизнес-пода. Формат аннотации следующий:volcano. sh/blkio-limit: '{"device_read_bps":[{"device":"/dev/sda1","value":"10485760"}, {"device":"/dev/sda","value":"20971520"}],
"device_write_bps":[{"device":"/dev/sda1","value":"20971520"}],
"device_read_iops":[{"device":"/dev/sda1","value":"200"}],
"device_write_iops":[{"device":"/dev/sda1","value":"300"}]}'
Конфигурационные параметры:
Настройка | Описание |
---|---|
device_read_bps | Устанавливает верхний предел для количества байтов, считываемых устройством при выполнении операции "чтение". Конфигурация представляет собой список, который позволяет настроить несколько устройств. Устройство указывает блочное устройство, для которого требуется установить ограничение, а значение задает верхний предел, измеренный в байтах. |
device_read_iops | Устанавливает верхний предел для количества операций чтения, выполняемых устройством. Конфигурация представляет собой список, который позволяет настроить несколько устройств. Устройство указывает блочное устройство, для которого требуется установить ограничение. |
device_write_bps | Устанавливает верхний предел для количества байтов, записываемых устройством при выполнении операции "запись". Конфигурация представляет собой список, который позволяет настроить несколько устройств. Устройство указывает блочное устройство, для которого требуется установить ограничение, а значение задает верхний предел, измеренный в байтах. |
device_write_iops | Устанавливает верхний предел для количества операций записи, выполняемых устройством. Конфигурация представляет собой список, который позволяет настроить несколько устройств. Устройство указывает блочное устройство, для которого требуется установить ограничение. |
device_write_iops | Устанавливает верхний предел для количества операций записи, выполняемых устройством. Конфигурация представляет собой список, который позволяет настроить несколько устройств. Устройство указывает блочное устройство, для которого требуется установить ограничение. |
- Правила конфигурации ключа:value для настроек конфигурации и ключа:value для cgroup совпадают:
- При записи значения будет преобразовано в кратное размеру страницы среды:
- Настройки будут применяться только для устройств с младшим номером равным 0:
- Для отмены ограничения скорости можно установить значение равным 0 |## Поддержка эластичного ограничения скорости Для решения проблемы снижения качества обслуживания (QoS) из-за ограничения скорости CPU для бизнес-приложений, контейнеры Rubik предоставляют функцию эластичного ограничения скорости, которая позволяет контейнерам использовать дополнительные ресурсы CPU, обеспечивая стабильную работу бизнес-приложений. Эластичное ограничение скорости включает в себя конфигурацию на уровне ядра и на уровне пользователя. Обе конфигурации не могут использоваться одновременно.
Конфигурация на уровне пользователя реализуется с помощью возможности CFS bandwidth control
, предоставляемой ядром Linux. Она обеспечивает безопасное и стабильное состояние загрузки системы и не влияет на работу других бизнес-приложений, позволяя бизнес-контейнерам адаптивно корректировать ограничения CPU с помощью механизма двух уровней загрузки, что помогает снизить напряжённость ресурсов CPU и повысить производительность бизнес-приложений.Конфигурация на уровне ядра реализуется с помощью возможности CPU burst
, предоставляемой ядром Linux. Она позволяет контейнерам временно превышать ограничения использования CPU. Конфигурация на уровне ядра требует ручного изменения пользователем значения burst для каждого pod, и Rubik не выполняет автоматическую корректировку.
Пользователь вручную указывает аннотацию "volcano.sh/quota-turbo=true"
для бизнес-_Pods, которым требуется адаптивное изменение лимита CPU (только для_Pods с указанным лимитом CPU, то есть параметр CPULimit в yaml-файле).
Пользовательский режим стратегии управления квотами CPU регулярно корректирует квоты CPU белого списка контейнеров в зависимости от текущей загрузки CPU всего сервера и состояния выполнения контейнеров. При запуске и остановке Rubik происходит автоматическая проверка и восстановление квот всех контейнеров. (В данном разделе квота CPU контейнера определяется параметром cpu.cfs_quota_us
).Стратегии корректировки включают:
metadata:
annotations:
volcano. sh/quota-burst-time : "2000"
Ядро режим решения реализуется через интерфейс ядра cpu. cfs_burst_us. Поддержка конфигурации ядра режима требует наличия файла cpu. cfs_burst_us в подкаталоге cpu подсистемы cgroup. Значения ограничиваются следующими условиями:
- Если значение cpu. cfs_quota_us не равно -1, должно выполняться условие cfs_burst_us + cfs_quota_us <= 2^44-1 и cfs_burst_us <= cfs_quota_us.
- Если значение cpu. cfs_quota_us равно -1, функция CPU burst не активна, значение cfs_burst_us по умолчанию равно 0, и другие значения не поддерживаются.
cpu. cfs_period_us
и cpu. cfs_quota_us
. Поэтому пользовательские ограничения следующие:
cpu. cfs_quota_us
и cpu. cfs_period_us
), чтобы избежать неизвестных ошибок. - Запрещено использовать продукты, аналогичные по функциональности (включая, но не ограничиваясь, Kubernetes VPA и HPA, Tencent EVPA, Alibaba CPU Burst, функции cpu-share и bind-core, предоставляемые cgroup), поскольку это может привести к невозможности использования пользовательских функций.cpu.cfs_burst_us
в директории cgroup контейнера.Для решения проблемы снижения качества обслуживания (QoS) онлайн-услуг из-за высокой загрузки ввода-вывода (IO) от фоновых задач, контейнеры Rubik предоставляют функцию управления весом ввода-вывода на основе cgroup v1 iocost. Параметры и конфигурация iocost совпадают с cgroup v2, подробности см. в описании функций iocost в ядре
cgroup1_writeback
### Инструкции по конфигурации
В конфигурационном файле Rubik добавьте следующие параметры:"nodeConfig": [
{
"nodeName": "slaver01", // имя узла k8s
"iocostEnable": true, // включено ли
"iocostConfig": [
{
"dev": "sda", // для какого устройства
"enable": false, // включено ли для этого устройства
"model": "linear", // выбранная модель iocost
"param": {
"rbps": 174610612, // максимальная скорость чтения (bps) при линейной модели
"rseqiops": 41788, // максимальное количество последовательных операций чтения (iops)
"rrandiops": 371, // максимальное количество случайных операций чтения (iops)
"wbps": 178587889, // максимальная скорость записи (bps)
"wseqiops": 42792, // максимальное количество последовательных операций записи (iops)
"wrandiops": 379 // максимальное количество случайных операций записи (iops)
}
}
]
}
]
```### Ограничения
- Контейнер rubik монтирует директорию /dev хост-системы и использует её для чтения параметров жесткого диска.
- Функциональность iocost ядра может быть настроена только для физических блочных устройств, логические тома настроить нельзя.### Другое
Параметры модели iocost linear можно вычислить с помощью скрипта [iocost_coef_gen.py](https://github.com/torvalds/linux/blob/master/tools/cgroup/iocost_coef_gen.py).
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )