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

HiveMetastore

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

HiveMetastoreClassName

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

spec:
  hivemetastoreClassName: default

Instance

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

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

Поля:

  • memory.size — объем памяти для инстанса Hive Metastore.
  • cpu.cores — количество CPU-ядер.
  • cpu.coreFraction — множитель для CPU requests относительно CPU limits.

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

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

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

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

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

spec:
  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

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

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

Поддерживаются два режима управления параметрами подключения:

  • Secret — параметры подключения хранятся в Kubernetes Secret. Рекомендуемый режим.
  • Plain — параметры подключения указываются напрямую в ресурсе HiveMetastore.

Режим Secret для PostgreSQL

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

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

  • учетные данные базы данных хранятся в Kubernetes Secret;
  • поле secretName должно ссылаться на существующий Secret с параметрами подключения;
  • поля host, port, database, username и password не должны быть указаны в spec.

Пример 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

Режим Plain для PostgreSQL

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

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

  • host — адрес сервера PostgreSQL: Service, Ingress, FQDN или IP;
  • port — порт базы данных;
  • database — имя базы данных для таблиц Hive Metastore;
  • username — имя пользователя для подключения к базе данных;
  • password — пароль пользователя;
  • поле secretName не должно быть указано.

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

TLS для подключения к PostgreSQL

Для подключения к PostgreSQL можно настроить TLS в блоке externalConnections.database.postgres.tls.

database:
  type: Postgres
  postgres:
    mode: Secret
    secretName: pg-creds
    tls:
      mode: CustomCertificate
      insecureSkipVerify: false
      caCertSecretName: postgres-ca

Параметры TLS:

  • mode — режим управления TLS-настройками.
    • CertManager — используется cert-manager.
    • CustomCertificate — используется пользовательский CA-сертификат из Secret.
  • insecureSkipVerify — отключает проверку TLS-сертификата сервера.
    • Значение по умолчанию: true.
    • Для production-рекомендуется использовать false и указать CA-сертификат.
  • caCertSecretName — имя Secret с CA-сертификатом для проверки TLS-сертификата PostgreSQL.
  • certManager — настройки cert-manager.

Если указан caCertSecretName, блок certManager не должен быть указан.
Если указан certManager, поле caCertSecretName не должно быть указано.

TLS PostgreSQL с пользовательским CA-сертификатом

database:
  type: Postgres
  postgres:
    mode: Secret
    secretName: pg-creds
    tls:
      mode: CustomCertificate
      insecureSkipVerify: false
      caCertSecretName: postgres-ca

Пример Secret с CA-сертификатом:

apiVersion: v1
kind: Secret
metadata:
  name: postgres-ca
type: Opaque
stringData:
  ca.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----

TLS PostgreSQL с cert-manager

database:
  type: Postgres
  postgres:
    mode: Secret
    secretName: pg-creds
    tls:
      mode: CertManager
      insecureSkipVerify: false
      certManager:
        issuerName: postgres-issuer
        dnsNames:
          - postgresql.postgresql
        usages:
          - client auth

Параметры certManager:

  • issuerName — имя cert-manager Issuer;
  • dnsNames — список DNS-имен, которые будут добавлены в сертификат;
  • usages — список назначений сертификата.

Конфигурация объектного хранилища 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: Secret
      secretName: s3-creds

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

  • endpoint — адрес службы S3: Service, Ingress, FQDN или IP;
  • bucket — имя бакета для хранения данных;
  • region — регион S3-хранилища;
  • prefix — префикс пути внутри бакета;
  • usePathStyle — включает path-style адресацию бакета.
    • Значение по умолчанию: true.

Учетные данные S3

Поддерживаются два режима управления учетными данными S3:

  • Secret — учетные данные хранятся в Kubernetes Secret. Рекомендуемый режим.
  • Plain — учетные данные указываются напрямую в ресурсе HiveMetastore.

Режим Secret для S3

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

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

  • поле secretName должно ссылаться на существующий Secret;
  • поля accessKey и secretKey не должны быть указаны в spec.

Пример Secret:

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

Режим Plain для 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

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

  • accessKey — ключ доступа к S3;
  • secretKey — секретный ключ доступа к S3;
  • поле secretName не должно быть указано.

Предупреждение безопасности.
Режим Plain раскрывает ключи доступа в YAML-манифесте. Для production-рекомендуется использовать режим Secret.

TLS для подключения к S3

Для подключения к S3 можно настроить TLS в блоке externalConnections.objectStore.s3.tls.

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
    tls:
      mode: CustomCertificate
      insecureSkipVerify: false
      caCertSecretName: s3-ca

Параметры TLS:

  • mode — режим управления TLS-настройками.
    • CertManager — используется cert-manager.
    • CustomCertificate — используется пользовательский CA-сертификат из Secret.
  • insecureSkipVerify — отключает проверку TLS-сертификата S3-сервера.
    • Значение по умолчанию: true.
    • Для production-рекомендуется использовать false и указать CA-сертификат.
  • caCertSecretName — имя Secret с CA-сертификатом для проверки TLS-сертификата S3.
  • certManager — настройки cert-manager.

Если указан caCertSecretName, блок certManager не должен быть указан.
Если указан certManager, поле caCertSecretName не должно быть указано.

TLS S3 с пользовательским CA-сертификатом

objectStore:
  type: S3
  s3:
    endpoint: minio.minio:9000
    bucket: data-lake
    credentials:
      mode: Secret
      secretName: s3-creds
    tls:
      mode: CustomCertificate
      insecureSkipVerify: false
      caCertSecretName: s3-ca

Пример Secret с CA-сертификатом:

apiVersion: v1
kind: Secret
metadata:
  name: s3-ca
type: Opaque
stringData:
  ca.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----

TLS S3 с cert-manager

objectStore:
  type: S3
  s3:
    endpoint: minio.minio:9000
    bucket: data-lake
    credentials:
      mode: Secret
      secretName: s3-creds
    tls:
      mode: CertManager
      insecureSkipVerify: false
      certManager:
        issuerName: s3-issuer
        dnsNames:
          - minio.minio
        usages:
          - client auth

Параметры certManager:

  • issuerName — имя cert-manager Issuer;
  • dnsNames — список DNS-имен, которые будут добавлены в сертификат;
  • usages — список назначений сертификата.

Серверный TLS Hive Metastore

Hive Metastore поддерживает настройку серверного TLS через блок spec.tls.

Серверный TLS определяет, каким образом будут управляться TLS-сертификаты самого сервиса Hive Metastore.

Поддерживаются два режима:

  • CertManager — сертификат выпускается и управляется cert-manager.
  • CustomCertificate — используется пользовательский TLS-сертификат из Kubernetes Secret.

Если блок tls не указан, используется режим по умолчанию CertManager.

Серверный TLS через cert-manager

В режиме CertManager необходимо указать блок certManager.

Должно быть задано ровно одно из полей:

  • clusterIssuerName;
  • issuerName.

Пример с ClusterIssuer:

spec:
  tls:
    mode: CertManager
    certManager:
      clusterIssuerName: letsencrypt-prod

Пример с namespaced Issuer:

spec:
  tls:
    mode: CertManager
    certManager:
      issuerName: hivemetastore-issuer

Параметры:

  • clusterIssuerName — имя cert-manager ClusterIssuer;
  • issuerName — имя cert-manager Issuer в namespace сервиса.

Поля clusterIssuerName и issuerName не могут быть заданы одновременно.

Серверный TLS с пользовательским сертификатом

В режиме CustomCertificate необходимо указать блок customCertificate.

spec:
  tls:
    mode: CustomCertificate
    customCertificate:
      serverTLSSecret: hivemetastore-server-tls
      serverCASecret: hivemetastore-server-ca

Параметры:

  • serverTLSSecret — имя Secret типа kubernetes.io/tls с ключами tls.crt и tls.key;
  • serverCASecret — имя Secret с ключом ca.crt.

Сертификат из serverTLSSecret должен содержать SAN с DNS-именами сервиса Hive Metastore.
Иначе клиенты с полной TLS-проверкой будут отклонять соединение.

Пример TLS Secret:

apiVersion: v1
kind: Secret
metadata:
  name: hivemetastore-server-tls
type: kubernetes.io/tls
data:
  tls.crt: BASE64_ENCODED_CERT
  tls.key: BASE64_ENCODED_KEY

Пример Secret с CA-сертификатом:

apiVersion: v1
kind: Secret
metadata:
  name: hivemetastore-server-ca
type: Opaque
stringData:
  ca.crt: |
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----

Статус

Статус сервиса Managed Hive Metastore отражается в ресурсе HiveMetastore.

Основные блоки статуса:

  • conditions — текущее состояние сервиса и этапов применения конфигурации;
  • certificate — информация о TLS-сертификатах, используемых сервисом и внешними подключениями.

Пример статуса:

status:
  certificate:
    client:
      Postgres:
        ttl: '3624'
      S3:
        ttl: '3624'
    server:
      ttl: '89'
  conditions:
    - lastTransitionTime: '2026-06-02T11:58:49Z'
      message: 'Service available: 1/1 replicas ready'
      observedGeneration: 1
      reason: ServiceAvailable
      status: 'True'
      type: Available

Conditions

Структура conditions показывает текущее состояние сервиса.

Значимые типы условий:

  • Available — показывает, работает ли требуемое количество реплик в соответствии со стратегией развертывания.
  • ConfigurationValid — показывает, прошла ли конфигурация все проверки ассоциированного HiveMetastoreClass.
  • LastValidConfigurationApplied — показывает, была ли последняя действительная конфигурация успешно применена хотя бы один раз.
  • ScaledToLastValidConfiguration — показывает, соответствует ли количество работающих реплик последней валидной конфигурации.

Поля condition:

  • type — тип условия.
  • status — состояние условия. Возможные значения: True, False, Unknown.
  • reason — краткая машинно-читаемая причина текущего состояния.
  • message — человекочитаемое описание текущего состояния.
  • lastTransitionTime — время последнего изменения состояния condition.
  • observedGeneration — поколение ресурса, для которого было рассчитано состояние.

Пример успешного состояния:

conditions:
  - lastTransitionTime: '2026-06-02T11:58:49Z'
    message: 'Service available: 1/1 replicas ready'
    observedGeneration: 1
    reason: ServiceAvailable
    status: 'True'
    type: Available

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

Пример:

conditions:
  - 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

Статус сертификатов

Блок status.certificate содержит информацию о TLS-сертификатах, используемых Hive Metastore.

status:
  certificate:
    client:
      Postgres:
        ttl: '3624'
      S3:
        ttl: '3624'
    server:
      ttl: '89'

Структура блока:

  • certificate.server — информация о серверном TLS-сертификате Hive Metastore.
  • certificate.client — информация о клиентских TLS-сертификатах для внешних подключений.
  • certificate.client.Postgres — сертификат, используемый для подключения к PostgreSQL.
  • certificate.client.S3 — сертификат, используемый для подключения к S3.
  • ttl — оставшийся срок действия сертификата. Значение возвращается оператором как строка.
  • failed — признак ошибки при выпуске, обновлении или проверке сертификата. Поле может отсутствовать, если ошибка не зафиксирована.

Пример статуса сертификатов без ошибок:

certificate:
  client:
    Postgres:
      ttl: '3624'
    S3:
      ttl: '3624'
  server:
    ttl: '89'

Пример статуса сертификата с ошибкой:

certificate:
  client:
    Postgres:
      failed: true
      ttl: '0'
  server:
    failed: false
    ttl: '89'

Если значение failed равно true, необходимо проверить:

  • существование указанных Secret;
  • корректность ключей в Secret, например ca.crt, tls.crt, tls.key;
  • настройки certManager или customCertificate;
  • условия в status.conditions, особенно поля reason и message.

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

Базовое использование в режиме Secret

  1. Создайте namespace hivemetastore.
kubectl create namespace hivemetastore
  1. Создайте Secret с параметрами подключения к PostgreSQL.
apiVersion: v1
kind: Secret
metadata:
  name: pg-creds
  namespace: hivemetastore
type: Opaque
stringData:
  host: postgresql.postgresql
  port: "5432"
  database: my-database
  username: my-user
  password: plain-text-password
  1. Создайте Secret с учетными данными S3.
apiVersion: v1
kind: Secret
metadata:
  name: s3-creds
  namespace: hivemetastore
type: Opaque
stringData:
  accessKey: access-key-here
  secretKey: secret-key-here
  1. Создайте ресурс 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: Secret
          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

В режиме 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
        username: my-user
        password: plain-text-password
    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%"

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

Режим 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

Использование серверного TLS через cert-manager

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: HiveMetastore
metadata:
  name: hivemetastore-sample
spec:
  hivemetastoreClassName: default
  tls:
    mode: CertManager
    certManager:
      clusterIssuerName: letsencrypt-prod
  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%"

Использование серверного TLS с пользовательским сертификатом

apiVersion: managed-services.deckhouse.io/v1alpha1
kind: HiveMetastore
metadata:
  name: hivemetastore-sample
spec:
  hivemetastoreClassName: default
  tls:
    mode: CustomCertificate
    customCertificate:
      serverTLSSecret: hivemetastore-server-tls
      serverCASecret: hivemetastore-server-ca
  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%"

Использование TLS для внешних подключений

Пример конфигурации с TLS для PostgreSQL и S3:

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
        tls:
          mode: CustomCertificate
          insecureSkipVerify: false
          caCertSecretName: postgres-ca
    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
        tls:
          mode: CustomCertificate
          insecureSkipVerify: false
          caCertSecretName: s3-ca
  instance:
    memory:
      size: "4Gi"
    cpu:
      cores: 2
      coreFraction: "25%"