Настройка локаций
Для работы кластера YTsaurus его компонентам требуется рабочее место на дисках — для хранения персистентных, временных и отладочных данных. Пути до каталогов в файловой системе, предназначенных для работы YTsaurus, задаются в статических конфигах компонент, генерируемых k8s-оператором. В спецификации YTsaurus для указания данных путей используется секция Locations. Типы локаций соответствуют компонентам. Для выделения томов под локации используются стандартные понятия Kubernetes: volumeMounts
, volumes
(для выделения неперсистентных вольюмов) и volumeClaimTemplates
(для выделения персистентных вольюмов).
Типы локаций
MasterChangelogs, MasterSnapshots
Используются для хранения данных мастеров, т.е. всех метаданных кластера. Для любых инсталляций (кроме совсем небольших) локации этих типов необходимо размещать на персистентных вольюмах. Необходимый объём вольюмов зависит от количества метаданных и нагрузки на кластер. Переполнение локаций приведёт к недоступности кластера, рекомендуется выделять место с запасом и мониторить свободное место. Типичный размер для продакшн инсталляций — сотни гигабайт.
Для того чтобы обеспечить производительность в продакшн-инсталляциях, рекомендуется размещать MasterChangelogs
на отдельных и быстрых (например NVME) томах — латентность записи журналов непосредственно влияет на латентность мутирующих запросов к мастеру.
У каждого инстанса мастера может быть (и должна быть) ровно одна локация типа MasterChangelogs
и одна локация типа MasterSnapshots
.
ChunkCache, ImageCache, Slots
Используются exec-нодами в процессе запуска джобов, содержащих пользовательский код (Map, Reduce, Vanilla, в том числе CHYT и SPYT). ChunkCache
локации нужны для менеджмента и кеширования бинарных артефактов, например, исполняемых файлов или вспомогательных словарей. ImageCeche
локации нужны для кэширования образов контейнеров в зависимости от настройки среды исполнения операций. Slots
локации нужны для выделения временного рабочего пространства (sandbox, scratch space) при запуске пользовательских процессов. У одной exec-ноды должна быть как минимум одна ChunkCache
локация и как минимум одна Slots
локация. При выделении нескольких ChunkCache
или Slots
локаций у одной ноды, exec-нода будет стараться балансировать нагрузку по ним.
Без угрозы для надёжности данных, для ChunkCache
, ImageCache
и Slots
локаций можно использовать неперсистентные тома. Типичные размеры локаций — 10-50 GB для ChunkCache
, 5-200 GB для Slots
и ImageCache
.
ChunkStore
Используются data-нодами для хранения чанков. Для любых инсталляций (кроме совсем небольших) локации указанных типов необходимо размещать на персистентных вольюмах. Объём данных локаций определяет суммарную ёмкость кластера. При построении multi-tiered storage (содержащего диски разного типа, например HDD и SSD) требуется указывать параметр medium
в описании локации. По умолчанию локация будет отнесена к медиуму с именем default
.
Минимальный размер локации для тестов — 10 GB, минимальный размер локации для рабочей инсталляции — 100 GB. У каждой data-ноды должна быть как минимум одна ChunkStore
локация.
Logs
Используются всеми компонентами для хранения логов. Указывается опционально, если не задано — логи пишутся в /var/log
внутри контейнера. Без угрозы для надёжности данных можно использовать неперсистентные тома, но такой выбор может усложнить отладку в случае переезда или пересоздания подов. Типичные размеры локаций для продакшн инсталляций от 50-200 GB.
У каждого инстанса может быть не более одной локации типа Logs
.
Примеры спецификаций
Пример настройки томов и локаций для мастеров
primaryMasters:
# Other master parameters.
volumeClaimTemplates:
# Persistent volume for master changelogs, uses dynamic volume provisioner in YC, non-replicated SSD storage class.
- metadata:
name: master-changelogs
spec:
storageClassName: yc-network-ssd-nonreplicated
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 200Gi
# Persistent volume for master snapshots, uses dynamic volume provisioner in YC, HDD storage class.
- metadata:
name: master-snapshots
spec:
storageClassName: yc-network-hdd
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 200Gi
volumes:
# Non-persistent volume for debug logs.
- name: master-logs
emptyDir:
sizeLimit: 100Gi
volumeMounts:
- name: master-changelogs
mountPath: /yt/master-changelogs
- name: master-snapshots
mountPath: /yt/master-snapshots
- name: master-logs
mountPath: /yt/master-logs
locations:
- locationType: MasterChangelogs
path: /yt/master-changelogs
- locationType: MasterSnapshots
path: /yt/master-snapshots
- locationType: Logs
path: /yt/master-logs
Пример настройки томов и локаций для data-нод
dataNodes:
volumeClaimTemplates:
# Persistent volume for chunk stores on HDD.
- metadata:
name: chunk-store-hdd
spec:
storageClassName: yc-network-hdd
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 300Gi
# Persistent volume for chunk stores on SSD.
- metadata:
name: chunk-store-ssd
spec:
storageClassName: yc-network-ssd
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 300Gi
# Persistent volume for debug logs.
- metadata:
name: node-logs
spec:
storageClassName: yc-network-hdd
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 300Gi
volumeMounts:
- name: chunk-store-hdd
mountPath: /yt/node-chunk-store-hdd
- name: chunk-store-ssd
mountPath: /yt/node-chunk-store-ssd
- name: node-logs
mountPath: /yt/node-logs
locations:
- locationType: ChunkStore
path: /yt/node-chunk-store-hdd
medium: default
- locationType: ChunkStore
path: /yt/node-chunk-store-ssd
medium: ssd_blobs
- locationType: Logs
path: /yt/node-logs
Настройка томов для кластеров k8s без Dynamic Volume Provisioning
Для разметки дисков и создания персистентных томов на кластерах без динамической провизии вольюмов можно использовать два подхода:
- использование вольюмов типа hostPath;
- ручное создание персистентных томов с указанием claimRef.
Использование hostPath вольюмов
Пример конфигурации для гомогенного набора хостов с дисками, смонтированными в директории /yt/chunk-store-hdd-1
, /yt/chunk-store-hdd-2
и /yt/chunk-store-ssd-1
.
dataNodes:
volumes:
- name: chunk-store-hdd-1
hostPath:
path: /yt/chunk-store-hdd-1
- name: chunk-store-hdd-2
hostPath:
path: /yt/chunk-store-hdd-2
- name: chunk-store-ssd-1
hostPath:
path: /yt/chunk-store-ssd-1
volumeMounts:
- name: chunk-store-hdd-1
mountPath: /yt/node-chunk-store-hdd-1
- name: chunk-store-hdd-2
mountPath: /yt/node-chunk-store-hdd-2
- name: chunk-store-ssd-1
mountPath: /yt/node-chunk-store-ssd-1
locations:
- locationType: ChunkStore
# Location path can be a nested path of a volume mount.
path: /yt/node-chunk-store-hdd-1/chunk_store
medium: default
- locationType: ChunkStore
path: /yt/node-chunk-store-hdd-2/chunk_store
medium: default
- locationType: ChunkStore
path: /yt/node-chunk-store-ssd-1/chunk_store
medium: ssd_blobs
# Place logs onto the first hdd disk, along with chunk store. Different locations may possibly share the same volume.
- locationType: Logs
path: /yt/node-chunk-store-hdd-1/logs