Установка Odin
Описание
Odin - сервис, осуществляющий качественный мониторинг работы YTsaurus-кластера. Подробнее можно почитать в разделе Мониторинг.
Предварительные требования
На данном этапе у вас должны быть:
- Helm 3.x
- запущенный кластер YTsaurus и адрес HTTP прокси (
http_proxy
); - специальный пользователь-робот
robot-odin
с выписанным для него токеном (см. раздел Управление токенами).
Настройка
При желании Odin может быть развернут для мониторинга сразу нескольких кластеров. В таком случае нужно выбрать один из кластеров как основной, где Odin будет хранить свое состояние, а на каждом кластере создать соответствующего пользователя.
Выдача прав
Назначьте минимально необходимые права (ACL) для пользователя-робота (команды предполагают, что пользователь - это robot-odin
):
yt set //sys/@acl/end '{action=allow; subjects=[robot-odin]; permissions=[read; write; create; remove; mount]}'
yt set //sys/accounts/sys/@acl/end '{action=allow; subjects=[robot-odin]; permissions=[use]}'
yt set //sys/tablet_cell_bundles/sys/@acl/end '[{subjects=[robot-odin];permissions=[use];action=allow}]'
Создание Kubernetes Secret с токенами
Создайте секрет с токенами для доступа Odin к YT.
kubectl create secret generic odin-secrets \
--from-literal=YT_TOKEN="<robot-odin-token>" \
-n <namespace>
values.yaml
Подготовка Минимальный пример конфигурации Odin для подключения к YTsaurus через HTTP‑прокси и публикации веб‑сервиса Одина на порту 9002:
config:
odin:
db:
proxy: "http://http-proxies.default.svc.cluster.local"
clusters:
- proxy: "http://http-proxies.default.svc.cluster.local"
cluster: minisaurus
tokenEnvVariable: "YT_TOKEN"
webservice:
service:
port: 9002
Пояснения к параметрам:
-
config.odin.db.proxy
— адрес HTTP‑прокси YTsaurus, где Odin будет хранить свое состояние. -
config.odin.clusters[]
— список YTsaurus‑кластеров, которые Odin мониторит. Для каждого:proxy
— адрес HTTP‑прокси внутри кластера Kubernetes (или внешний адрес, если вне кластера).cluster
— имя кластера YTsaurus.tokenEnvVariable
— имя переменной окружения в контейнере, откуда будет прочитан токен (см. секреты выше).
-
webservice.service.port
— порт веб-сервиса Odin.
Проверьте корректность DNS‑имён сервисов:
http-proxies.default.svc.cluster.local
— пример для сервисаhttp-proxies
в namespacedefault
. Уточните своё имя сервиса командойkubectl get svc -A | grep http-proxies
.
Установка Helm‑чарта
helm install odin oci://ghcr.io/ytsaurus/odin-chart \
--version 0.0.1 \
-f values.yaml \
-n <namespace>
Helm-chart сначала запустит init job, которая создаст на кластере необходимую таблице для хранения там состояния Odin. Затем поднимет два deployment - с самим Ddin и с web-сервисом для него.
Проверки после установки
- Статус ресурсов:
kubectl get pods,svc,deploy,cm,secret -n <namespace> | grep -i odin
- Логи пода:
kubectl logs deploy/odin-odin-chart -n <namespace> --tail=200
Настройка UI
В интерфейсе YTsaurus есть страница, на которой можно смотреть результаты выполнения проверок Odin. Чтобы она появилась, необходимо указать адрес веб-сервиса Odin в конфиге UI.
UI должен быть установлен как helm-chart (см. инструкцию по установке).
Адрес веб-сервиса нужно указать в values.yaml в поле .ui.settings.odinBaseUrl
. Пример адреса, когда odin установлен в неймспейсе default
и поднять на порту 9002 (это порт по-умолчанию): "http://odin-odin-chart-web.default.svc.cluster.local:9002"
.
Как включать и отключать проверки
Список проверок задаётся в секции config.checks
в values.yaml
.
Каждая проверка описывается структурой с полями:
- name: sort_result
displayName: Sort Result
enable: true
config: {...}
enable: true
— проверка будет добавлена в итоговую конфигурацию и выполняться Odin.enable: false
— проверка будет пропущена (не попадёт вchecks/config.json
).
В некоторых проверках встречается дополнительный флаг
config.enable
.
Он управляет логикой внутри самой проверки. Даже еслиenable: true
, ноconfig.enable: false
, то проверка попадёт в конфигурацию и будет видна в интерфейсе Odin, но запускаться она не будет.
Пример: отключение проверки
- name: suspicious_jobs
displayName: Suspicious Jobs
enable: false
config:
options:
critical_suspicious_job_inactivity_timeout: 420
В этом случае проверка Suspicious Jobs полностью исключается из конфигурации.
config.enable
Пример: частичное отключение через - name: operations_snapshots
displayName: Operations Snapshots
enable: true
config:
enable: false
options:
critical_time_without_snapshot_threshold: 3600
Здесь проверка попадёт в конфигурацию, но сам запуск будет отключен внутри Odin.
Обновление и удаление
Обновление конфигурации:
helm upgrade odin oci://ghcr.io/ytsaurus/odin-chart \
--version 0.0.1 \
-f values.yaml \
-n <namespace>
Удаление релиза:
helm uninstall odin -n <namespace>
Типичные ошибки и диагностика
- Неверный адрес
proxy
: ошибки соединения/авторизации в логах Odin. Проверьте DNS‑имя сервиса, namespace и доступность HTTP‑прокси YTsaurus. - Проблемы с токеном: 401/403 в логах Odin. Убедитесь, что переменная окружения ссылается на корректный ключ из секрета и ACL выданы пользователю
robot-odin
. - Недостаточные ACL: операции
create/remove/mount
завершаются ошибкой. Пересмотрите выдачу прав на//sys
и/или нужные директории/таблицы. - Конфликт порта сервиса: при экспонировании через Ingress/NodePort проверьте, что порт
9002
свободен и соответствующие ресурсы созданы.
Пример быстрой самопроверки токена вне Helm
curl -sS -H "Authorization: OAuth $YT_TOKEN" \
http://http-proxies.default.svc.cluster.local/api/v3/list?path=// | jq .
Примечания по безопасности
- Ограничивайте права пользователя
robot-odin
принципом наименьших привилегий; при необходимости создайте отдельные ACL на целевые пути. - Ротируйте токены по внутренним политикам и своевременно обновляйте секреты (через
kubectl apply -f
илиkubectl create secret ... --dry-run=client -o yaml | kubectl apply -f -
).