Установка внешних зависимостей
Этот документ готовит 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_PASSWORD | PostgreSQL из раздела 2 или customer-managed DB. |
| Keycloak public/internal URLs | Keycloak из раздела 4 или customer-managed Keycloak. |
| Keycloak client secrets | Настройка clients в документе 02. |
| Grafana client secret | Keycloak client grafana, если ставите bundled Grafana. |
| S3 endpoint/credentials/buckets | MinIO из раздела 6 или customer-managed S3. |
| Lakekeeper endpoint | Lakekeeper из раздела 7 или customer-managed catalog. |
После этого переходите к Values, Secrets и Images и создавайте application Secrets для CM, IDE и AI.