1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openeuler-rubik

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
config.md 15 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 25.04.2025 13:07 e4c0324

Конфигурация Rubik

Программа Rubik написана на языке Go и скомпилирована в статический исполняемый файл для минимизации зависимости от системы.

Команды

Rubik поддерживает только использование параметра -v для запроса информации о версии. Другие параметры не поддерживаются. Пример вывода информации о версии показан ниже, содержимое и формат этого вывода могут изменяться в зависимости от версии.

$ ./rubik -v
Версия:       2.0.0
Релиз:        NA
Версия Go:    go1.18.8
Git Commit:   bcaace8
Сборка:       OnClickListener 2023-03-30
ОС/Архитектура: linux/amd64

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

При запуске бинарного файла rubik, программа сначала анализирует конфигурационный файл, путь к которому фиксирован и задан как /var/lib/rubik/config.json.

  1. Для предотвращения путаницы с конфигурацией, поддержка указания других путей временно не поддерживается.
  2. Rubik поддерживает запуск в виде daemonset в кластере Kubernetes. Мы предоставляем YAML-скрипт (hack/rubik-daemonset.yaml) и определяем ConfigMap для хранения конфигурации.

Поэтому, при запуске rubik в виде daemonset, следует изменить соответствующие настройки в файле hack/rubik-daemonset.yaml.

Конфигурационный файл имеет формат JSON, ключи полей используются в стиле camelCase с маленькой буквы. Пример содержимого конфигурационного файла приведен ниже:

{
  "version": "2.0.0",
  "release": "NA",
  "goVersion": "go1.18.8",
  "gitCommit": "bcaace8",
  "buildDate": "2023-03-30",
  "osArch": "linux/amd64"
}
``````json
{
  "agent": {
    "logDriver": "stdio",
    "logDir": "/var/log/rubik",
    "logSize": 2048,
    "logLevel": "info",
    "cgroupRoot": "/sys/fs/cgroup",
    "informerType": "apiserver",
    "cgroupDriver": "cgroupfs",
    "enabledFeatures": [
      "preemption",
      "dynCache",
      "ioLimit",
      "ioCost",
      "quotaBurst",
      "quotaTurbo"
    ]
  },
  "preemption": {
    "resource": [
      "cpu",
      "memory"
    ]
  },
  "quotaTurbo": {
    "highWaterMark": 50,
    "syncInterval": 100
  },
  "dynCache": {
    "defaultLimitMode": "static",
    "adjustInterval": 1000,
    "perfDuration": 1000,
    "l3Percent": {
      "low": 20,
      "mid": 30,
      "high": 50
    },
    "memBandPercent": {
      "low": 10,
      "mid": 30,
      "high": 50
    }
  },
  "ioCost": [
    {
      "nodeName": "k8s-single",
      "config": [
        {
          "dev": "sdb",
          "enable": true,
          "model": "linear",
          "param": {
            "rbps": 10000000,
            "rseqiops": 10000000,
            "rrandiops": 10000000,
            "wbps": 10000000,
            "wseqiops": 10000000,
            "wrandiops": 10000000
          }
        }
      ]
    }
  ]
}

Конфигурация Rubik разделена на две категории: общие параметры и параметры функциональности.- Общие параметры идентифицируются ключевым словом agent и используются для хранения глобальной конфигурации.

  • Конфигурация функциональности разделена по типам сервисов и применяется к различным подфункциям. Конфигурация функциональности должна быть объявлена в поле enabledFeatures общего конфига для включения.

agentКонфигурация agent используется для записи общих параметров, необходимых для работы Rubik, таких как логи, точки монтирования cgroup, тип драйвера cgroup и т.д.

Параметр конфигурации[=значение по умолчанию] Тип Описание Допустимые значения
logDriver=stdio строка Тип драйвера логов, поддерживает стандартный вывод и файлы stdio, file
logDir=/var/log/rubik строка Путь к директории для хранения логов Доступная для чтения и записи директория
logSize=1024 целое число Размер логов, в МБ, применимо только при logDriver=file [10, 2^20]
logLevel=info строка Уровень вывода логов debug,info,warn,error
cgroupRoot=/sys/fs/cgroup строка Путь к точке монтирования cgroup системы Путь к точке монтирования cgroup системы
cgroupDriver=cgroupfs строка Тип драйвера cgroup cgroupfs,systemd
enabledFeatures=[] массив строк Список функций Rubik, которые нужно включить Поддерживаемые функции Rubik, см. описание функций
informerType=apiserver строка Тип informer apiserver,nri
  • apiserver (по умолчанию). Rubik использует механизм list-watch для получения данных о pod и контейнерах из kubernetes apiserver.
  • nri. Rubik получает данные из контейнерного движка через nri сокет, путь к которому фиксирован: /var/run/nri/nri.sock. Если Rubik запущен в контейнере, необходимо монтировать nri сокет в контейнер.

Конфигурация для монтирования сокета представлена ниже:

spec:
  # ...
  containers:
    # ...
    volumeMounts:
    - name: nrisock
      mountPath: /var/run/nri/nri.sock
      readOnly: true
  volumes:
    # ...
  - name: nrisock
    hostPath:
      path: /var/run/nri/nri.sock

предemption

preemption поле используется для идентификации конфигурации абсолютного предemption (примечание: возможно, следует использовать термин "предemption" как технический термин без перевода, если он используется в оригинальном контексте). В настоящее время, предemption характеристика поддерживает абсолютное предemption для ЦП и памяти, пользователи могут настроить это поле по своему усмотрению, используя отдельно или в комбинации абсолютное предemption для ресурсов.

Настройка ключа[=по умолчанию] Тип Описание Допустимые значения
resource=[] строка массива Тип ресурса, указывающий на то, какой ресурс должен быть доступен cpu, memory

dynCachedynCache поле используется для идентификации конфигурации поддержки ограничений на пропускную способность памяти и ограничений на последний уровень кэша (LLC) для Pod. Поле l3Percent используется для идентификации контрольной линии уровня воды для последнего уровня кэша (LLC), а поле memBandPercent используется для идентификации контрольной линии уровня воды для пропускной способности памяти (MB).| Настройка ключа[=по умолчанию] | Тип | Описание | Допустимые значения |

| --------------------------------------- | ------ | ---------------------- | ---------------------------- | | defaultLimitMode=static | строка | режим управления dynCache | static, dynamic | | adjustInterval=1000 | int | интервал динамического управления dynCache, в миллисекундах | [10, 10000] | | perfDuration=1000 | int | продолжительность выполнения perf для dynCache, в миллисекундах | [10, 10000] | | l3Percent | map | уровни управления dynCache для последнего уровня кэша (LLC) в процентах | | | .low=20 | int | контрольная линия уровня воды для низкого уровня кэша (LLC) | [10, 100] | | .mid=30 | int | контрольная линия уровня воды для среднего уровня кэша (LLC) | [10, 100] | | .high=50 | int | контрольная линия уровня воды для высокого уровня кэша (LLC) | [10, 100] | | memBandPercent | map | уровни управления dynCache для пропускной способности памяти (MB) в процентах | | | .low=10 | int | контрольная линия уровня воды для низкого уровня пропускной способности памяти (MB) | [10, 100] | | .mid=30 | int | контрольная линия уровня воды для среднего уровня пропускной способности памяти (MB) | [10, 100] | | .high=50 | int | контрольная линия уровня воды для высокого уровня пропускной способности памяти (MB) | [10, 100] |### quotaTurboquotaTurbo поле используется для идентификации конфигураций, поддерживающих технологию эластичного ограничения квот (user-space).

Настройка ключа [=Значение по умолчанию] Тип Описание Допустимые значения
highWaterMark=60 int Значение верхней границы для загрузки ЦПУ [0, alarm water mark)
alarmWaterMark=80 int Значение предупреждающей границы для загрузки ЦПУ (high water mark, 100]
syncInterval=100 int Интервал для триггирования обновления квот контейнеров (единица измерения: миллисекунды) [100, 10000]

ioCost

ioCost поле используется для идентификации поддержки iocost для управления весом ввода-вывода. Тип поля — массив, каждый элемент массива состоит из имени узла nodeName и массива параметров устройства config.

Настройка Тип Описание Допустимые значения
nodeName string Имя узла Имя узла в Kubernetes
config array Конфигурация одного устройства /

Конфигурация одного блочного устройства config параметры:

Настройка[=по умолчанию] Тип Описание Допустимые значения
dev string Имя блочного устройства, поддерживаются только физические устройства /
model string Имя модели iocost linear
param / Параметры устройства, зависят от модели /
Настройка[=по умолчанию] Тип Описание Допустимые значения
--------------- ---- ---- ------
rbps int64 Максимальная пропускная способность чтения блочного устройства (0, 2^63)
rseqiops int64 Максимальное количество последовательных операций чтения блочного устройства (0, 2^63)
rrandiops int64 Максимальное количество случайных операций чтения блочного устройства (0, 2^63)
wbps int64 Максимальная пропускная способность записи блочного устройства (0, 2^63)
wseqiops int64 Максимальное количество последовательных операций записи блочного устройства (0, 2^63)
wrandiops int64 Максимальное количество случайных операций записи блочного устройства (0, 2^63)

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/openeuler-rubik.git
git@api.gitlife.ru:oschina-mirror/openeuler-rubik.git
oschina-mirror
openeuler-rubik
openeuler-rubik
master