Перейти к основному содержимому
Версия: 2.0.x

Установка внешних зависимостей

Этот документ готовит external dependencies, от которых дальше зависят Selena components: PostgreSQL, Keycloak, OpenLDAP demo, monitoring/Grafana, MinIO и Lakekeeper.

На выходе из этого шага должны быть известны endpoints, users/passwords, Keycloak runtime URL, S3/Lakekeeper параметры и другие значения, которые дальше используются в application values и Secrets Selena.

Если зависимости предоставляет platform team, не ставьте bundled charts. Проверьте доступность endpoints, получите credentials через процесс заказчика и переходите к Keycloak, LDAP и OAuth для настройки realm/clients.

Для bundled Keycloak есть один сознательный переход между документами: сначала в этом документе ставится Keycloak runtime, затем в документе 02 создаются realm/clients, затем сюда можно вернуться для monitoring/Grafana, которым нужен уже созданный Keycloak client grafana.

Рабочая директория:

cd {selena_docs_repo}/deploy/k8s

1. Подготовьте values​

Скопируйте минимальные values в рабочие customer-specific файлы и замените placeholders. Не редактируйте chart defaults целиком.

cp docs-external/values-minimal/postgres-values.yaml {postgres_values}
cp docs-external/values-minimal/keycloak-values.yaml {keycloak_values}
cp docs-external/values-minimal/openldap-values.yaml {openldap_values}
cp docs-external/values-minimal/kube-prometheus-stack-values.yaml {monitoring_values}
cp docs-external/values-minimal/minio-operator-values.yaml {minio_operator_values}
cp docs-external/values-minimal/minio-tenant-values.yaml {minio_tenant_values}
cp docs-external/values-minimal/lakekeeper-values.yaml {lakekeeper_values}

Минимально заменяются:

Values fileОбязательные placeholders
{postgres_values}{storage_class}
{keycloak_values}{keycloak_public_url}, {postgres_service_host}
{openldap_values}{ldap_domain}, {storage_class}
{monitoring_values}{storage_class}, {grafana_public_url}, {keycloak_public_url}, {grafana_login_url_encoded}
{minio_tenant_values}{storage_class}
{lakekeeper_values}{postgres_service_host}

{postgres_service_host} для bundled PostgreSQL обычно:

selena-postgres.{postgres_namespace}.svc.cluster.local

Пароли и keys из команд ниже генерируются или выдаются secret-management процессом заказчика. В документации они намеренно остаются placeholders:

PlaceholderЧто это
{postgres_admin_password}Пароль PostgreSQL admin user.
{postgres_selena_user_password}Пароль PostgreSQL application user selena.
{postgres_replication_password}Пароль replication user, если chart его требует.
{postgres_metrics_password}Пароль metrics user, если chart его требует.
{keycloak_admin_username} / {keycloak_admin_password}Bootstrap admin Keycloak.
{grafana_admin_user} / {grafana_admin_password}Local emergency/admin credentials Grafana.
{minio_root_user} / {minio_root_password}Root credentials MinIO tenant.
{minio_access_key} / {minio_secret_key}S3 credentials Selena workloads.
{lakekeeper_secret_encryption_key}Stable encryption key для Lakekeeper secret backend.

2. PostgreSQL​

PostgreSQL должен быть готов раньше Keycloak, Lakekeeper, CM, IDE и AI: им всем нужны databases или credentials из этого шага.

Создайте install-time Secret для PostgreSQL chart:

kubectl -n {postgres_namespace} create secret generic selena-postgres-auth \
--from-literal=postgres-password='{postgres_admin_password}' \
--from-literal=password='{postgres_selena_user_password}' \
--from-literal=replication-password='{postgres_replication_password}' \
--from-literal=metrics-password='{postgres_metrics_password}'

Установите PostgreSQL:

helm lint charts/external/postgres/chart -f {postgres_values}

helm upgrade --install selena-postgres charts/external/postgres/chart \
-n {postgres_namespace} -f {postgres_values} --wait --timeout 20m

Проверьте:

kubectl -n {postgres_namespace} get pods,svc,pvc -l app.kubernetes.io/instance=selena-postgres
kubectl -n {postgres_namespace} rollout status statefulset/selena-postgres --timeout=10m

После этого известны значения для downstream components:

PlaceholderЗначение
{postgres_service_host}selena-postgres.{postgres_namespace}.svc.cluster.local или host customer-managed PostgreSQL.
{cm_db_jdbc_url}jdbc:postgresql://{postgres_service_host}:5432/selena_cm
{cm_db_user}Обычно selena, если используется bundled profile.
{cm_db_password}{postgres_selena_user_password} или пароль, выданный platform team.
{ide_database_conn}postgresql://selena:{postgres_selena_user_password}@{postgres_service_host}:5432/selena_ide
{ai_backend_database_url}postgresql+asyncpg://selena:{postgres_selena_user_password}@{postgres_service_host}:5432/selena_ai

3. Demo LDAP, если нужен​

OpenLDAP chart нужен только для demo/test federation. Для production обычно используется customer LDAP/AD, подключенный к Keycloak.

Создайте install-time Secret:

kubectl -n {openldap_namespace} create secret generic selena-openldap-auth \
--from-literal=LDAP_ADMIN_USERNAME='{ldap_admin_username}' \
--from-literal=LDAP_ADMIN_PASSWORD='{ldap_admin_password}' \
--from-literal=LDAP_CONFIG_ADMIN_PASSWORD='{ldap_config_admin_password}'

Установите demo LDAP:

helm lint charts/external/openldap/chart -f {openldap_values}

helm upgrade --install selena-openldap charts/external/openldap/chart \
-n {openldap_namespace} -f {openldap_values} --wait --timeout 10m

Проверьте:

kubectl -n {openldap_namespace} get pods,svc,pvc

4. Keycloak​

Keycloak ставится после PostgreSQL, потому что хранит state в PostgreSQL. После установки Keycloak еще нужно вручную настроить realm, groups, clients и token claims по Keycloak, LDAP и OAuth.

Создайте install-time Secrets:

kubectl -n {keycloak_namespace} create secret generic selena-keycloak-admin \
--from-literal=admin-user='{keycloak_admin_username}' \
--from-literal=admin-password='{keycloak_admin_password}'

kubectl -n {keycloak_namespace} create secret generic selena-keycloak-db \
--from-literal=password='{postgres_selena_user_password}'

Установите Keycloak:

helm lint charts/external/keycloak/chart -f {keycloak_values}

helm upgrade --install selena-keycloak charts/external/keycloak/chart \
-n {keycloak_namespace} -f {keycloak_values} --wait --timeout 15m

Проверьте:

kubectl -n {keycloak_namespace} get pods,svc
kubectl -n {keycloak_namespace} rollout status statefulset/selena-keycloak --timeout=10m
curl -fsS {keycloak_public_url}/realms/master/.well-known/openid-configuration | jq -r .issuer

Эта команда проверяет только Keycloak runtime в master realm. Рабочий Selena issuer появится после создания realm selena и проверяется в документе 02 как {keycloak_public_url}/realms/selena.

Дальше выполните Keycloak, LDAP и OAuth. На этом шаге появятся Keycloak client secrets для:

selena-engine
selena-cluster-manager-api
selena-ide
selena-ide-service
selena-ai
grafana

Client selena-ai-service создавайте только если ваш deployment profile явно использует AI service-to-service calls в CM. В текущем minimal AI chart для него нет application Secret.

5. Monitoring и Grafana​

Если monitoring/Grafana предоставляет platform team, пропустите этот раздел.

Если используете bundled monitoring с Grafana OAuth, сначала создайте client grafana в Keycloak по документу 02. Без client secret chart не сможет создать корректный Grafana OAuth config.

Создайте install-time Secrets для Grafana:

kubectl -n {monitoring_namespace} create secret generic selena-grafana-admin \
--from-literal=admin-user='{grafana_admin_user}' \
--from-literal=admin-password='{grafana_admin_password}'

kubectl -n {monitoring_namespace} create secret generic selena-grafana-keycloak-client \
--from-literal=client-secret='{grafana_client_secret}'

Установите Prometheus Operator CRD и monitoring chart:

kubectl create --save-config=false \
-f charts/external/kube-prometheus-stack/chart/charts/crds/crds/ \
|| kubectl apply --server-side --force-conflicts \
-f charts/external/kube-prometheus-stack/chart/charts/crds/crds/

helm lint charts/external/kube-prometheus-stack/chart -f {monitoring_values}

helm upgrade --install selena-monitoring charts/external/kube-prometheus-stack/chart \
-n {monitoring_namespace} -f {monitoring_values} --wait --timeout 20m

Не используйте обычный kubectl apply для этих CRD: большие Prometheus Operator CRD могут превысить Kubernetes annotation limit из-за kubectl.kubernetes.io/last-applied-configuration.

Проверьте:

kubectl get crd servicemonitors.monitoring.coreos.com podmonitors.monitoring.coreos.com
kubectl -n {monitoring_namespace} get pods,svc,pvc

6. MinIO, если нужен bundled S3​

Если S3-compatible object storage предоставляет platform team, пропустите этот раздел и используйте выданный endpoint, access key, secret key и bucket names.

Установите MinIO Operator:

helm lint charts/external/minio/operator/chart -f {minio_operator_values}

helm upgrade --install minio-operator charts/external/minio/operator/chart \
-n {minio_operator_namespace} -f {minio_operator_values} --wait --timeout 10m

Создайте install-time Secrets для tenant-а:

kubectl -n {minio_namespace} create secret generic selena-minio-env-configuration \
--from-literal=config.env='export MINIO_ROOT_USER="{minio_root_user}"
export MINIO_ROOT_PASSWORD="{minio_root_password}"'

kubectl -n {minio_namespace} create secret generic selena-minio-user \
--from-literal=CONSOLE_ACCESS_KEY='{minio_access_key}' \
--from-literal=CONSOLE_SECRET_KEY='{minio_secret_key}'

Установите tenant:

helm lint charts/external/minio/tenant/chart -f {minio_tenant_values}

helm upgrade --install selena-minio charts/external/minio/tenant/chart \
-n {minio_namespace} -f {minio_tenant_values} --wait --timeout 15m

Проверьте:

kubectl -n {minio_namespace} get pods,svc,pvc

7. Lakekeeper, если нужен Iceberg REST catalog​

Lakekeeper ставится после PostgreSQL. Если Iceberg REST catalog предоставляет platform team, пропустите этот раздел и используйте выданный endpoint.

Создайте install-time Secrets:

kubectl -n {lakekeeper_namespace} create secret generic selena-lakekeeper-db \
--from-literal=postgresql-user='selena' \
--from-literal=postgresql-password='{postgres_selena_user_password}'

kubectl -n {lakekeeper_namespace} create secret generic selena-lakekeeper-postgres-encryption \
--from-literal=encryptionKey='{lakekeeper_secret_encryption_key}'

Установите Lakekeeper:

helm lint charts/external/lakekeeper/chart -f {lakekeeper_values}

helm upgrade --install selena-lakekeeper charts/external/lakekeeper/chart \
-n {lakekeeper_namespace} -f {lakekeeper_values} --wait --timeout 15m

Проверьте:

kubectl -n {lakekeeper_namespace} get pods,svc

8. Что должно быть готово дальше​

Перед созданием application Secrets и установкой Selena platform должны быть известны:

ЗначениеОткуда берется
CM_DB_URL, CM_DB_USER, CM_DB_PASSWORDPostgreSQL из раздела 2 или customer-managed DB.
Keycloak public/internal URLsKeycloak из раздела 4 или customer-managed Keycloak.
Keycloak client secretsНастройка clients в документе 02.
Grafana client secretKeycloak client grafana, если ставите bundled Grafana.
S3 endpoint/credentials/bucketsMinIO из раздела 6 или customer-managed S3.
Lakekeeper endpointLakekeeper из раздела 7 или customer-managed catalog.

После этого переходите к Values, Secrets и Images и создавайте application Secrets для CM, IDE и AI.