Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки

HiveMetastore

Именованный ресурс, который позволяет создавать конечную конфигурацию и служит источником истины для состояния определенного развернутого сервиса hivemetastore.

HiveMetastoreClassName

Имя класса, которое будет связано с определенным ресурсом.
Без созданного HiveMetastore невозможно развертывание сервиса.

spec:
  valkeyClassName: default

Instance

Раздел, описывающий ресурсы создаваемого сервиса.
Должен пройти проверку в соответствии с sizingPolicy соответствующего класса:

  instance:
    memory:
      size: "4Gi"
    cpu:
      cores: 2
      coreFraction: "25%"

Поддерживаемые версии Hive Metastore

Текущая поддерживаемая версия Hive Metastore - 4.2.0

Наши образы для запуска контейнеров Hive Metastore основаны на архитектуре distroless.

Внешние подключения

Hive Metastore может быть настроен для подключения к различным внешним сервисам, таким как базы данных и объектные хранилища, через конфигурацию externalConnections в YAML-спецификации.

Подключение к базе данных

Metastore поддерживает PostgreSQL в качестве внешнего сервера базы данных с двумя режимами управления учетными данными.

Секретный режим (Рекомендуется)

database:
  type: Postgres
  postgres:
    mode: Secret
    secretName: pg-creds

В этом режиме:

  • Учетные данные базы данных хранятся в Kubernetes Secret
  • Имя secretName должно ссылаться на существующий Secret, содержащий учетные данные базы данных
  • Это обеспечивает безопасное управление учетными данными и предотвращает утечку секретов

Режим простого текста

database:
  type: Postgres
  postgres:
    mode: Plain
    host: postgresql.postgresql
    port: 5432
    database: my-database
    password: plain-text-password
    username: my-user

В этом режиме:

  • host - указывает адрес сервера PostgreSQL
  • port - порт базы данных (по умолчанию 5432)
  • database - имя базы данных для таблиц metastore
  • username и password в текстовом формате

Предупреждение безопасности: Режим простого текста раскрывает конфиденциальные учетные данные в файле конфигурации. Используйте только при необходимости и обеспечьте надлежащее управление доступом.

Конфигурация объектного хранилища (совместимо с S3)

Hive Metastore может хранить данные внешних таблиц в совместимом с S3 хранилище объектов:

objectStore:
  type: S3
  s3:
    endpoint: minio.minio:9000
    bucket: data-lake
    region: ru-east-1
    prefix: directory
    usePathStyle: true
    credentials:
      mode: Plain 
      accessKey: access-key-here
      secretKey: secret-key-here

Параметры конфигурации:

  • endpoint - адрес службы S3
  • bucket - целевое имя корзины для хранения данных
  • region - указанный формат региона AWS
  • prefix - префикс пути каталога внутри корзины
  • usePathStyle - включает адресацию URL в стиле пути

Режимы учетных данных:

Два поддерживаемых метода аутентификации:

  • Простой текст - Прямой ввод ключ/значение
  • Secret - Ссылки на внешний ресурс Secret (рекомендуется)

Статус

Статус сервиса Managed Hive Metastore отражается в ресурсе Hive Metastore.
Структура Conditions ясно показывает текущий статус сервиса

Значимые типы:

  • LastValidConfigurationApplied - Агрегирующий тип, который показывает, была ли последняя действительная конфигурация успешно применена хотя бы один раз.
  • ConfigurationValid - показывает, прошла ли конфигурация все проверки ассоциированного HiveMetastoreClass.
  • ScaledToLastValidConfiguration - показывает, соответствует ли количество работающих реплик указанной конфигурации.
  • Available - показывает, работает ли требуемое количество реплик в соответствии со стратегией развертывания.
conditions:
    - lastTransitionTime: '2025-09-22T23:20:36Z'
      observedGeneration: 2
      status: 'True'
      type: Available
    - lastTransitionTime: '2025-09-22T14:38:04Z'
      observedGeneration: 2
      status: 'True'
      type: ConfigurationValid
    - lastTransitionTime: '2025-09-22T14:38:47Z'
      observedGeneration: 2
      status: 'True'
      type: LastValidConfigurationApplied
    - lastTransitionTime: '2025-09-22T23:20:36Z'
      observedGeneration: 2
      status: 'True'
      type: ScaledToLastValidConfiguration

Статус False указывает на проблему на одном этапе или другом, или на неполную синхронизацию состояния.
Для такого состояния будут указаны reason и message с объяснением.

---
    - lastTransitionTime: '2025-09-23T14:53:33Z'
      message: Syncing
      observedGeneration: 1
      reason: Syncing
      status: 'False'
      type: LastValidConfigurationApplied
    - lastTransitionTime: '2025-09-23T14:54:58Z'
      message: Not all the instances are running still waiting for 1 to become ready
      observedGeneration: 1
      reason: ScalingInProgress
      status: 'False'
      type: ScaledToLastValidConfiguration
---

Примеры использования

Базовое использование (Secret Mode)

  1. Создайте пространство имен под названием hivemetastore.
  2. Создайте ресурс Hivemetastore
kubectl apply -f managed-services_v1alpha1_hivemetastore_with_secret_mode.yaml -n hivemetastore
apiVersion: managed-services.deckhouse.io/v1alpha1
kind: HiveMetastore
metadata:
  name: hivemetastore-sample
spec:
  hivemetastoreClassName: default
  externalConnections:
    database:
      type: Postgres
      postgres:
        mode: Secret
        secretName: pg-creds
    objectStore:
      type: S3
      s3:
        endpoint: minio.minio:9000
        bucket: data-lake
        region: ru-east-1
        prefix: directory
        usePathStyle: true
        credentials:
          mode: Plain 
          secretName: s3-creds
  instance:
    memory:
      size: "4Gi"
    cpu:
      cores: 2
      coreFraction: "25%"
  1. Дождитесь создания экземпляра и установки всех условий в значение True:
  kubectl get hivemetastore hivemetastore-sample -n hivemetastore -o wide -w

Режимы Plain и Secret

HiveMetastore поддерживает два режима обработки конфиденциальной информации, такой как учетные данные базы данных и ключи доступа к объектному хранилищу:

Режим Plain

В режиме Plain конфиденциальные данные указываются непосредственно в конфигурации:

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: HiveMetastore
metadata:
  name: hivemetastore-sample
spec:
  hivemetastoreClassName: default
  externalConnections:
    database:
      type: Postgres
      postgres:
        mode: Plain
        host: postgresql.postgresql
        port: 5432
        database: my-database
        password: plain-text-password
        username: my-user
    objectStore:
      type: S3
      s3:
        endpoint: minio.minio:9000
        bucket: data-lake
        region: ru-east-1
        prefix: directory
        usePathStyle: true
        credentials:
          mode: Plain
          accessKey: access-key-here
          secretKey: secret-key-here
  instance:
    memory:
      size: "4Gi"
    cpu:
      cores: 2
      coreFraction: "25%"

Этот режим удобен для разработки и тестирования, но его следует использовать осторожно в продакшене из-за соображений безопасности.

Режим Secret

В режиме Secret конфиденциальная информация хранится в Kubernetes Secret:

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: HiveMetastore
metadata:
  name: hivemetastore-sample
spec:
  hivemetastoreClassName: default
  externalConnections:
    database:
      type: Postgres
      postgres:
        mode: Secret
        secretName: pg-creds
    objectStore:
      type: S3
      s3:
        endpoint: minio.minio:9000
        bucket: data-lake
        region: ru-east-1
        prefix: directory
        usePathStyle: true
        credentials:
          mode: Secret
          secretName: s3-creds
  instance:
    memory:
      size: "4Gi"
    cpu:
      cores: 2
      coreFraction: "25%"

Перед применением этой конфигурации необходимо создать соответствующие Secret:

Для учетных данных базы данных:

apiVersion: v1
kind: Secret
metadata:
  name: pg-creds
type: Opaque
stringData:
  host: postgresql.postgresql
  port: "5432"
  database: my-database
  username: my-user
  password: plain-text-password

Для учетных данных объектного хранилища:

apiVersion: v1
kind: Secret
metadata:
  name: s3-creds
type: Opaque
stringData:
  accessKey: access-key-here
  secretKey: secret-key-here