Стадия жизненного цикла модуля: Preview
У модуля есть требования для установки
HiveMetastore
Именованный ресурс, который позволяет создавать конечную конфигурацию и служит источником истины для состояния определенного развернутого сервиса Hive Metastore.
HiveMetastoreClassName
Имя класса, которое будет связано с определенным ресурсом.
Без созданного HiveMetastoreClass невозможно развертывание сервиса.
spec:
hivemetastoreClassName: defaultInstance
Раздел, описывающий ресурсы создаваемого сервиса.
Должен пройти проверку в соответствии с 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-managerIssuer;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-managerIssuer;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-managerClusterIssuer;issuerName— имя cert-managerIssuerв 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: AvailableConditions
Структура 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
- Создайте namespace
hivemetastore.
kubectl create namespace hivemetastore- Создайте 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- Создайте Secret с учетными данными S3.
apiVersion: v1
kind: Secret
metadata:
name: s3-creds
namespace: hivemetastore
type: Opaque
stringData:
accessKey: access-key-here
secretKey: secret-key-here- Создайте ресурс
HiveMetastore.
kubectl apply -f managed-services_v1alpha1_hivemetastore_with_secret_mode.yaml -n hivemetastoreapiVersion: 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%"- Дождитесь создания экземпляра и установки всех условий в значение
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%"