Подготовка спецификации YTsaurus

Пример минимальной спецификации можно найти по ссылке.

Пример спецификации
apiVersion: cluster.ytsaurus.tech/v1
kind: Ytsaurus
metadata:
  name: ytdemo
spec:
  coreImage: ghcr.io/ytsaurus/ytsaurus:stable-23.2.1-relwithdebinfo
  uiImage: ghcr.io/ytsaurus/ui:stable

  adminCredentials:
    name: ytadminsec

  discovery:
    instanceCount: 1

  primaryMasters:
    instanceCount: 3
    cellTag: 1
    volumeMounts:
      - name: master-data
        mountPath: /yt/master-data
    locations:
      - locationType: MasterChangelogs
        path: /yt/master-data/master-changelogs
      - locationType: MasterSnapshots
        path: /yt/master-data/master-snapshots

    volumeClaimTemplates:
      - metadata:
          name: master-data
        spec:
          accessModes: [ "ReadWriteOnce" ]
          resources:
            requests:
              storage: 20Gi

  httpProxies:
    - serviceType: NodePort
      instanceCount: 3

  rpcProxies:
    - serviceType: LoadBalancer
      instanceCount: 3

  dataNodes:
    - instanceCount: 3
      volumeMounts:
        - name: node-data
          mountPath: /yt/node-data

      locations:
        - locationType: ChunkStore
          path: /yt/node-data/chunk-store

      volumeClaimTemplates:
        - metadata:
            name: node-data
          spec:
            accessModes: [ "ReadWriteOnce" ]
            resources:
              requests:
                storage: 50Gi

  execNodes:
    - instanceCount: 3
      resources:
        limits:
          cpu: 3
          memory: 5Gi

      volumeMounts:
        - name: node-data
          mountPath: /yt/node-data

      volumes:
        - name: node-data
          emptyDir:
            sizeLimit: 40Gi

      locations:
        - locationType: ChunkCache
          path: /yt/node-data/chunk-cache
        - locationType: Slots
          path: /yt/node-data/slots

  tabletNodes:
    - instanceCount: 3

  queryTrackers:
    instanceCount: 1

  yqlAgents:
    instanceCount: 1

  schedulers:
    instanceCount: 1

  controllerAgents:
    instanceCount: 1

  ui:
    serviceType: NodePort
    instanceCount: 1

В таблице 1 приведены некоторые общие настройки Ytsaurus. Полное описание: YtsaurusSpec.

Таблица 1 — Базовые поля спецификации Ytsaurus

Поле Тип Описание
coreImage string Образ для основных серверных компонент, например, ghcr.io/ytsaurus/ytsaurus:stable-23.2.1-relwithdebinfo.
uiImage string Образ для UI, например, ghcr.io/ytsaurus/ui:stable.
imagePullSecrets array<LocalObjectReference> Секреты, необходимые для скачивания образов из private registry. Подробности можно узнать по ссылке.
configOverrides optional<LocalObjectReference> Конфигмапа для переопределения генерируемых статических конфигов. Нужно использовать только в редких случаях.
adminCredentials optional<LocalObjectReference> Секрет с логином/паролем для админского аккаунта.
isManaged bool Флаг, позволяющий отключить все действия оператора над данным кластером, чтобы совершить с кластерам ручные действия при необходимости.
enableFullUpdate bool Флаг, позволяющий запретить запуск полного обновления кластера.
useIpv6 bool Использовать IPv6 или IPv4
bootstrap BootstrapSpec Настройки для первичного поднятия кластера, например, параметры таблет-селл бандлов

Выбор набора компонент

Кластер можно поднимать с различными наборами компонент. Рассмотрим кратко, какие компоненты можно настроить в спецификации Ytsaurus.

Подробнее про компоненты можно прочитать в отдельном разделе.

Как минимум в кластере должны быть мастера и discovery-сервисы, они настраиваются в полях primaryMasters и discovery соответственно.

Для запуска операций необходимы планировщики и контроллер-агенты, которые настраиваются соответственно в полях schedulers и controllerAgents.

Для выполнения запросов к кластеру из cli и различных SDK необходимы прокси. Прокси бывают двух типов: HTTP и RPC. Прокси настраиваются соответственно в полях httpProxies и rpcProxies.

Для того чтобы иметь удобный UI для работы с кластером, необходимо настроить его в поле ui.

Для хранения данных используются dataNodes, а для запуска джобов операций — execNodes.

Если планируется задавать запросы к данным с помощью SQL-like языка запросов, необходимо добавить в спецификацию queryTrackers и yqlAgents.

Для использования CHYT необходимо запустить специальный контроллер. Контроллер конфигурируется в поле strawberry.

Для работы динамических таблиц (которые необходимы в том числе для системных таблиц некоторых компонент, например, для query tracker-а), необходимо поднять tabletNodes.

Докер-образ

На первом шаге необходимо выбрать основной docker-образ для серверных компонент.

Большинство серверных компонент релизятся из отдельной (релизной) ветки. На данный момент последняя стабильная ветка — stable/23.2. Настоятельно рекомендуется использовать образ, собранный из стабильной релизной ветки.

Докер-образ, собранный из релизной ветки, имеет вид ghcr.io/ytsaurus/ytsaurus:stable-23.2.N или ghcr.io/ytsaurus/ytsaurus:stable-23.2.N-relwithdebinfo. Отличия указанных образов в том, что во втором образе все бинарные файлы собраны с debug-символами.

В случае падения серверных компонент в stderr компоненты будет напечатан stacktrace, а также на k8s-ноде будет отложен coredump (если это настроено в вашем k8s-кластере). Такие меры позволят понять, что именно произошло с компонентой. По этой причине рекомендуется использовать образы relwithdebinfo, несмотря на то что они занимают больше места. Без debug-символов команда YTsaurus скорее всего не сможет помочь вам в случае проблем.

В приведённом образе есть всё необходимое для практически всех компонент. Для компонент, не входящих в основной docker-образ, выкладываются отдельные образы. В Таблице 2 приведены рекомендуемые образы для всех компонент.

Образ каждой компоненты берется в первую очередь из поля image компоненты. Если образ не указан, то берется coreImage с верхнего уровня спецификации.

Таблица 2 — Образы компонент

Поле Docker-репозиторий Рекомендуемый тег стабильного релиза
discovery ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
primaryMasters ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
httpProxies ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
rpcProxies ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
dataNodes ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
execNodes ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
tabletNodes ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
schedulers ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
controllerAgents ghcr.io/ytsaurus/ytsaurus stable-23.2.1-relwithdebinfo
queryTrackers ghcr.io/ytsaurus/query-tracker 0.0.8-relwithdebinfo
yqlAgents ghcr.io/ytsaurus/query-tracker 0.0.8
strawberry ghcr.io/ytsaurus/strawberry 0.0.12
ui ghcr.io/ytsaurus/ui stable

Помимо указанных образов выкладывается общий образ для всех серверных компонент сразу (кроме ui). Такой образ достаточно указать один раз в coreImage, не указывая ничего в поле image компонент явно.

Логирование

Корректная настройка логирования очень важна для диагностики проблем и при обращениях в поддержку. Рекомендации по настройке логирования собраны на отдельной странице.

Локации

Рекомендации по разметке дисков и конфигурации локаций собраны на отдельной странице.

Среда исполнения операций

Exec Nodes могут запускать джобы в изолированных контейнерах для обработки опции операции docker_image. Требуемые настройки заключены в секциях jobResources и jobEnvironment в ExecNodeSpec. Пример настройки кластера.

Настройка таблет-селл бандлов

Оператор автоматически создает несколько таблет-селл бандловsys и default.

Для таблет-селл бандлов можно настроить медиумы, где будут храниться журналы и снепшоты. По умолчанию журналы и снепшоты хранятся в медиуме default.

Рекомендуется настраивать бандлы так, чтобы журналы и снепшоты хранились на SSD, иначе бандлы могут прийти в нерабочее состояние.

Для уже созданных бандлов можно установить атрибуты @options/snapshot_primary_medium и @options/changelog_primary_medium:

yt set //sys/tablet_cell_bundles/<bundle-name>/@options/snapshot_primary_medium '<medium-name>'
yt set //sys/tablet_cell_bundles/<bundle-name>/@options/changelog_primary_medium '<medium-name>'

При инициализации кластера оператор может настроить медиумы для бандлов автоматически. Для настройки бандла укажите названия медиумов в секции bootstrap на верхнем уровне спецификации. В той же секции можно указать количество таблет-селлов в бандле. После инициализации кластера количество таблет-селлов можно изменить, установив атрибут //sys/tablet_cell_bundles/<bundle-name>/@tablet_cell_count.

Пример bootstrap секции:

bootstrap:
    tabletCellBundles:
        sys:
            snapshotMedium: ssd_medium
            changelogMedium: ssd_medium
            tabletCellCount: 3
        default:
            snapshotMedium: ssd_medium
            changelogMedium: ssd_medium
            tabletCellCount: 5

После разворачивания кластера оператор не будет обрабатывать изменения в поле bootstrap. Дальнейшую настройку необходимо выполнять вручную с помощью указанных атрибутов.