Установка микросервисов
Описание
Для YTsaurus есть набор дополнительных микросервисов, которые расширяют функциональность веб-интерфейса и предоставляют полезную информацию для администраторов и пользователей кластера.
На данный момент поддерживаются следующие компоненты:
- Resource Usage: Позволяет отслеживать и анализировать потребление дискового пространства по аккаунтам. Код микросервиса, код препроцессинга.
- Bulk ACL Checker: Предоставляет оптимизированный способ проверки прав доступа (ACL) для пользователя по множеству путей. Снижает нагрузку на мастер. Код микросервиса, код препроцессинга.
- Id To Path Updater: Вспомогательный фоновый процесс, который парсит access-логи мастера и создает в динамической таблице сопоставление
Node ID→Path. Является зависимостью для других микросервисов. Код препроцессинга.
Архитектура
Микросервисы YTsaurus обычно состоят из двух частей:
- Preprocessing (
CronJob): Фоновый процесс, запускаемый по расписанию. Он собирает и обрабатывает данные (например, из логов или снапшотов мастера) и сохраняет их в подготовленном виде в таблицы. - API (
Deployment): Постоянно работающий веб-сервис, который предоставляет удобный доступ к данным, подготовленным на этапе Preprocessing.
Предварительные требования
Перед установкой убедитесь, что выполнены следующие условия:
- Установлен Helm 3.x.
- Версия YTsaurus Kubernetes оператора не меньше 0.28.0.
- Включена загрузка снапшотов и access-логов мастера в Кипарис.
Настройка обоих процессов требует перезагрузки мастера с даунтаймом, поэтому с целью его минимизации рекомендуется производить применение настроек одновременно.
Для включения этих функций добавьте соответствующие настройки сайдкаров и логирования в spec.primaryMasters:
spec:
primaryMasters:
hydraPersistenceUploader:
image: ghcr.io/ytsaurus/sidecars:0.0.1
timbertruck:
image: ghcr.io/ytsaurus/sidecars:0.0.1
structuredLoggers:
- name: access
minLogLevel: info
category: Access
format: json
rotationPolicy:
maxTotalSizeToKeep: 5_000_000_000
rotationPeriodMilliseconds: 900000
locations:
- locationType: Logs
path: /yt/master-logs
volumeMounts:
- name: master-logs
mountPath: /yt/master-logs
volumeClaimTemplates:
- metadata:
name: master-logs
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
- Установлен Cron Helm-чарт, в котором включена задача
process_master_snapshot. Эта задача должна отработать хотя бы один раз и создать необходимые ноды и таблицы, а именно://sys/admin/snapshots/snapshot_exportsи//sys/admin/snapshots/user_exports.
Проверим статус задачи process_master_snapshot:
kubectl -n <namespace> get cronjobs ytsaurus-cron-cron-chart-process-master-snapshot -o jsonpath='{.status}'
Ожидаем увидеть lastSuccessfulTime, соответствующий lastScheduleTime:
{
"lastScheduleTime": "2025-12-01T10:00:00Z",
"lastSuccessfulTime": "2025-12-01T10:05:09Z"
}
Проверим наличие необходимых нод и таблиц:
yt list //sys/admin/snapshots/snapshot_exports
yt list //sys/admin/snapshots/user_exports
Должны будем увидеть хотя бы один снапшот с именем вида 000000068.snapshot_3163fafb_unified_export и 000000068.snapshot_3163fafb_user_export соответственно.
Подготовка и установка
Шаг 1: Подготовка пользователей и выдача прав (ACL)
Для каждого микросервиса требуется свой пользователь-робот:
robot-msvc-resource-usage- для Resource Usagerobot-msvc-acl-checker- для Bulk ACL Checkerrobot-msvc-id-to-path- для Node ID Dict
Создайте пользователей согласно инструкции:
yt create user --attr "{name=robot-msvc-resource-usage}"
yt create user --attr "{name=robot-msvc-acl-checker}"
yt create user --attr "{name=robot-msvc-id-to-path}"
Создайте рабочие ноды для микросервисов в //sys/admin/yt-microservices:
yt create map_node //sys/admin/yt-microservices/resource_usage --recursive
yt create map_node //sys/admin/yt-microservices/bulk_acl_checker
yt create map_node //sys/admin/yt-microservices/node_id_dict
Примечание
Для нод микросервисов рекомендуется завести отдельный аккаунт и выдать ACL use на него для соответствующих роботов. В этом примере для простоты мы будем работать с аккаунтом sys.
Выдайте права доступа для каждого пользователя.
- Для Resource Usage:
Выдайте права на чтение снапшотов, доступ к нодам микросервиса и использование аккаунта.
yt set //sys/admin/snapshots/snapshot_exports/@acl/end '{action=allow; subjects=[robot-msvc-resource-usage]; permissions=[read]}'
yt set //sys/admin/yt-microservices/node_id_dict/@acl/end '{action=allow; subjects=[robot-msvc-resource-usage]; permissions=[read]}'
yt set //sys/admin/yt-microservices/resource_usage/@acl/end '{action=allow; subjects=[robot-msvc-resource-usage]; permissions=[read; write; create; remove; mount]}'
yt set //sys/accounts/sys/@acl/end '{action=allow; subjects=[robot-msvc-resource-usage]; permissions=[use]}'
- Для Bulk ACL Checker:
Выдайте права на чтение снапшотов, доступ к нодам микросервиса и использование аккаунта.
yt set //sys/admin/snapshots/user_exports/@acl/end '{action=allow; subjects=[robot-msvc-acl-checker]; permissions=[read]}'
yt set //sys/admin/yt-microservices/bulk_acl_checker/@acl/end '{action=allow; subjects=[robot-msvc-acl-checker]; permissions=[read; write; create; remove; mount]}'
yt set //sys/accounts/sys/@acl/end '{action=allow; subjects=[robot-msvc-acl-checker]; permissions=[use]}'
- Для Id To Path Updater:
Включите bulk_insert для пользователя и для всего кластера (если он еще не включен).
yt set //sys/users/robot-msvc-id-to-path/@enable_bulk_insert %true
yt set //sys/@config/tablet_manager/enable_bulk_insert %true
Выдайте права на чтение и маркировку логов, запись в ноду микросервиса и использование аккаунта.
yt set //sys/admin/logs/export/master-access/@acl/end '{action=allow; subjects=[robot-msvc-id-to-path]; permissions=[read; write]}'
yt set //sys/admin/yt-microservices/node_id_dict/@acl/end '{action=allow; subjects=[robot-msvc-id-to-path]; permissions=[read; write; create; remove; mount]}'
yt set //sys/accounts/sys/@acl/end '{action=allow; subjects=[robot-msvc-id-to-path]; permissions=[use]}'
Шаг 2: Подготовка Kubernetes Secret с токенами
По умолчанию используется один общий секрет с названием ytsaurus-msvc. Каждый микросервис и его препроцессинг использует токен из своей переменной окружения.
- Для Resource Usage —
YT_RESOURCE_USAGE_TOKEN; - Для Bulk ACL Checker —
YT_BULK_ACL_CHECKER_TOKEN; - Для ID To Path Updater —
YT_ID_TO_PATH_TOKEN.
Пример создания секрета. Команда сама выпустит необходимые токены и подставит их в секрет:
kubectl create secret generic ytsaurus-msvc \
--from-literal=YT_RESOURCE_USAGE_TOKEN="$(yt issue-token robot-msvc-resource-usage)" \
--from-literal=YT_BULK_ACL_CHECKER_TOKEN="$(yt issue-token robot-msvc-acl-checker)" \
--from-literal=YT_ID_TO_PATH_TOKEN="$(yt issue-token robot-msvc-id-to-path)" \
-n <namespace>
При необходимости можно создать отдельные секреты, указав их в .microservices.<name>.secretRefs.
Шаг 3: Подготовка values.yaml
- Укажите прокси и имя кластера:
cluster:
proxy: "http-proxies.default.svc.cluster.local" # Внутренний адрес HTTP-прокси для namespace `default`
name: "<cluster-name>" # Имя вашего кластера (см. в `//sys/@cluster_connection/cluster_name`)
-
Настройте Resource Usage:
Необходимо указать
allowedHostSuffixesилиallowedHostsвашего UI вmicroservices.resourceUsage.api.config.cors. Подробнее будет описано ниже. Остальные параметры работают "из коробки". Подробнее в разделе с детальной конфигурацией. -
Пример минимального
values.yaml:cluster: proxy: "http-proxies.default.svc.cluster.local" name: "<cluster-name>" microservices: resourceUsage: api: config: cors: allowedHostSuffixes: - "<your-ui-domain-suffix>"
Полный список параметров доступен в values.yaml в репозитории чарта. Детальное описание представлено ниже в разделе Детальная конфигурация.
Шаг 4: Установка Helm-чарта
helm install ytsaurus-msvc oci://ghcr.io/ytsaurus/ytmsvc-chart \
--version 0.0.1 \
-f values.yaml \
-n <namespace>
Посмотреть список созданных чартом pods и cronjobs:
kubectl get pod -l app.kubernetes.io/name=ytmsvc-chart -n <namespace>
kubectl get cronjobs -l app.kubernetes.io/name=ytmsvc-chart -n <namespace>
Вручную запустить cron-задачу можно встроенными средствами kubectl:
kubectl create job --from=cronjob/<cron-job-name> <your-job-name> -n <namespace>
Посмотреть логи процессинга и микросервиса:
kubectl logs ytsaurus-msvc-resource-usage-preprocessing-29390072-nrhj6 -n <namespace>
kubectl logs deployment/ytsaurus-msvc-ytmsvc-chart-resource-usage-api -n <namespace>
Шаг 5: Настройка сетевого доступа и включение в UI
Resource Usage API используется веб-интерфейсом YTsaurus напрямую из браузера пользователя. Выберите способ доступа в зависимости от вашего окружения.
Production
Рекомендуемый способ для production. Микросервис будет доступен на том же домене, что и UI, по пути /resource-usage/.
- Настройте
apiPrefixвvalues.yaml:
microservices:
resourceUsage:
api:
config:
apiPrefix: "/resource-usage/"
- Примените изменения:
helm upgrade ytsaurus-msvc oci://ghcr.io/ytsaurus/ytmsvc-chart \
--version 0.0.1 \
-f values.yaml \
-n <namespace>
- Модифицируйте Ingress:
Необходимо модифицировать нынешний манифест UI Ingress так, чтобы он перенаправлял запросы /resource-usage на сервис:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ui-ingress
namespace: <namespace>
spec:
rules:
- host: <your-ui-domain> # Укажите здесь ваш домен UI
http:
paths:
- backend:
service:
name: ytsaurus-msvc-ytmsvc-chart-resource-usage-service
port:
name: http
path: /resource-usage
pathType: Prefix
- backend:
service:
name: ytsaurus-ui
port:
name: http
path: /
pathType: Prefix
Примените манифест:
kubectl apply -f ui-ingress.yaml
- Укажите URL в конфигурации UI:
yt set //sys/@ui_config/resource_usage_base_url '"https://<your-ui-domain>/resource-usage/"'
Testing
Этот способ подходит для быстрой проверки работоспособности.
- Настройте CORS в
values.yaml:
Так как UI (например, http://localhost:8080) будет обращаться к http://localhost:3000, браузер заблокирует запрос без явного разрешения CORS. Разрешите обращения от UI:
microservices:
resourceUsage:
api:
config:
apiPrefix: "/"
cors:
allowedHosts:
- "localhost:8080"
- Примените изменения:
helm upgrade ytsaurus-msvc oci://ghcr.io/ytsaurus/ytmsvc-chart \
--version 0.0.1 \
-f values.yaml \
-n <namespace>
- Запустите проброс портов:
kubectl port-forward service/ytsaurus-msvc-ytmsvc-chart-resource-usage-service 3000:80 -n <namespace>
- Укажите локальный адрес в конфигурации UI:
yt set //sys/@ui_config/resource_usage_base_url '"http://localhost:3000/"'
Проверка результата
- Откройте веб-интерфейс YTsaurus
- Перейдите в раздел
Accountsи выберите любой аккаунт - Сверху откройте вкладку
Detailed usage
Примечание
Для появления вкладки Detailed usage может потребоваться время (не более нескольких минут) и обновление страницы.
Если вкладка не появилась или что-то пошло не так, проверьте:
- Правильность
resource_usage_base_url(должен включать протокол и завершаться/) - Логи микросервиса:
kubectl logs deployment/ytsaurus-msvc-ytmsvc-chart-resource-usage-api -n <namespace> - Работу Ingress, если он используется:
kubectl get ingress -n <namespace>
Детальная конфигурация
Resource Usage API
Конфигурация API-сервиса Resource Usage:
microservices:
resourceUsage:
api:
config:
# Адрес и порт для основного HTTP-сервера API
httpAddr: "[::]:80"
# Таймаут для обработчиков HTTP-запросов
httpHandlerTimeout: 120s
# Адрес и порт для сбора метрик
debugHttpAddr: "[::]:81"
# Префикс обработчиков HTTP-сервера
apiPrefix: "/"
cors:
# Списки хостов/суффиксов для CORS-запросов (необходимы для интеграции с UI)
allowedHosts: []
allowedHostSuffixes: []
# Имя cookie для авторизации (должно совпадать с настройкой UI)
authCookieName: YTCypressCookie
# Путь для хранения обработанных снапшотов
snapshotRoot: //sys/admin/yt-microservices/resource_usage
# Список полей для исключения из ответов API
excludedFields: []
Resource Usage: очистка старых снапшотов
Конфигурация автоматической очистки старых снапшотов.
microservices:
resourceUsage:
removeExcessive:
# Включить очистку старых снапшотов
enabled: true
config:
# Коэффициент частоты прореживания: чем больше, тем меньше старых снапшотов останется
denominator: 1.4
# Коэффициент увеличения временного интервала при углублении в прошлое
stepSizeIncrease: 2.86
# Период, в течение которого свежие снапшоты не удаляются
ignoreWindowSize:
days: 3
# Размер первого временного окна для прореживания
firstStepWindowSize:
weeks: 1
# Минимальный интервал между снапшотами в первом окне
firstStepAllowedFrequency:
hours: 6
Id To Path Updater
Конфигурация микросервиса Id To Path Updater:
microservices:
idToPathUpdater:
config:
# Путь к access-логам мастера
inputTablesSource: //sys/admin/logs/export/master-access
# Динамическая таблица для соответствия cluster → node_id → path (создается автоматически)
outputTable: //sys/admin/yt-microservices/node_id_dict/data
# Нода для временных файлов
tmpPath: //tmp/microservices/id_to_path_updater