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

Values, Secrets и Images

Внешний deployment должен переопределять только параметры окружения. Не копируйте весь chart values.yaml: chart defaults уже описывают обычное поведение. Минимальные override-файлы лежат в docs-external/values-minimal/.

Этот файл не является линейным install script. Используйте его разделы в той фазе установки, где они нужны:

  1. Сначала установите или проверьте PostgreSQL, Keycloak и остальные external dependencies по Установка внешних зависимостей. Для bundled charts этот документ отдельно показывает install-time Secrets, которые нужны самим dependency charts.
  2. Настройте Keycloak realm и OIDC clients по Keycloak, LDAP и OAuth.
  3. Только после этого выполняйте разделы с application Secrets для CM, IDE и AI: они требуют уже известных database endpoints/passwords и Keycloak client secrets. IDE/AI Secrets создаются до Engine bootstrap, потому что bootstrap записывает туда generated impersonator passwords.

1. Image pull Secret​

Image pull Secret нужен только для private registry. Если registry public, imagePullSecrets можно убрать из values.

Не создавайте пустой kubernetes.io/dockerconfigjson Secret как замену registry credentials, если values или Engine spec все еще ссылаются на imagePullSecrets. Такой Secret проходит type-check, но private registry все равно вернет ImagePullBackOff. Либо подтвердите, что конкретные Selena images/tags действительно доступны anonymous pull и уберите imagePullSecrets, либо создайте настоящий docker-registry Secret.

Secret создается отдельно в каждом namespace: Kubernetes Secret не работает между namespaces. В этих документах используется имя selena-registry.

Минимально создайте Secret в:

NamespaceКакие pods используют
{selena_namespace}CM, IDE, AI backend/frontend, MCP.
{engine_namespace}Selena Engine pods.
{operator_namespace}Selena operator, если operator image private.

Создайте Secret:

kubectl -n {selena_namespace} create secret docker-registry selena-registry \
--docker-server={registry_host} \
--docker-username={registry_username} \
--docker-password={registry_password} \
--docker-email={registry_email}

kubectl -n {engine_namespace} create secret docker-registry selena-registry \
--docker-server={registry_host} \
--docker-username={registry_username} \
--docker-password={registry_password} \
--docker-email={registry_email}

kubectl -n {operator_namespace} create secret docker-registry selena-registry \
--docker-server={registry_host} \
--docker-username={registry_username} \
--docker-password={registry_password} \
--docker-email={registry_email}

Если Secret уже существует, обновляйте его через --dry-run=client -o yaml | kubectl apply -f -:

kubectl -n {selena_namespace} create secret docker-registry selena-registry \
--docker-server={registry_host} \
--docker-username={registry_username} \
--docker-password={registry_password} \
--docker-email={registry_email} \
--dry-run=client -o yaml | kubectl apply -f -

Проверьте Secret type:

kubectl -n {selena_namespace} get secret selena-registry \
-o jsonpath='{.type}{"\n"}'

Ожидаемо: kubernetes.io/dockerconfigjson.

Пропишите Secret в values:

imagePullSecrets:
- name: selena-registry

Для Selena operator ключ вложен в selenaOperator:

selenaOperator:
imagePullSecrets:
- name: selena-registry

Для Engine cluster Secret указывается в JSON spec, который вы отправляете в CM API:

"imagePullSecrets": [
{ "name": "selena-registry" }
]

Подробности в Kubernetes documentation:

2. Install-time Secrets для bundled external charts​

Эти Secrets нужны только если вы ставите bundled external charts. Если PostgreSQL, Keycloak, LDAP/AD, MinIO, Lakekeeper или Vault предоставлены платформой заказчика, используйте их native secret-management процесс.

Это не application Secrets Selena. Это inputs для самих dependency charts, поэтому они создаются до helm upgrade --install соответствующей внешней зависимости. Если external dependency уже установлена platform team, этот раздел пропускается: возьмите выданные endpoint/credentials и переходите к application Secrets после настройки Keycloak.

PostgreSQL:

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}'

Keycloak:

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}'

OpenLDAP test/demo:

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}'

MinIO 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}'

config.env с export MINIO_ROOT_USER=... - это формат, который ожидает MinIO Tenant chart. Это не shell-переменные для выполнения команд.

Lakekeeper:

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}'

3. CM Secret​

CM Secret содержит только секретные значения. Несекретные URLs и mappings лежат в CM values.

Не создавайте selena-cm-secrets до подготовки CM database и Keycloak clients: CM_DB_URL, CM_DB_USER, CM_DB_PASSWORD, CM_KEYCLOAK_LOGIN_CLIENT_SECRET и CM_KEYCLOAK_ADMIN_CLIENT_SECRET должны быть уже известны. Если используете bundled PostgreSQL, сначала создайте selena-postgres-auth, установите PostgreSQL chart, подтвердите service DNS и database credentials, затем создавайте CM Secret.

Сгенерируйте 32-byte encryption key:

openssl rand -base64 32

Скопируйте результат в {cm_encryption_key_base64}.

Создайте Secret:

kubectl -n {selena_namespace} create secret generic selena-cm-secrets \
--from-literal=CM_DB_URL='{cm_db_jdbc_url}' \
--from-literal=CM_DB_USER='{cm_db_user}' \
--from-literal=CM_DB_PASSWORD='{cm_db_password}' \
--from-literal=CM_KEYCLOAK_LOGIN_CLIENT_SECRET='{selena_engine_client_secret}' \
--from-literal=CM_KEYCLOAK_ADMIN_CLIENT_SECRET='{selena_cm_admin_client_secret}' \
--from-literal=CM_ENCRYPTION_KEY_BASE64='{cm_encryption_key_base64}' \
--from-literal=CM_ENCRYPTION_KEY_ID='main'
KeyОткуда взять
CM_DB_URLJDBC URL PostgreSQL database CM.
CM_DB_USER / CM_DB_PASSWORDCM database credentials.
CM_KEYCLOAK_LOGIN_CLIENT_SECRETSecret Keycloak client selena-engine.
CM_KEYCLOAK_ADMIN_CLIENT_SECRETSecret Keycloak client selena-cluster-manager-api.
CM_ENCRYPTION_KEY_BASE64Результат openssl rand -base64 32.
CM_ENCRYPTION_KEY_IDStable key id, например main.

4. IDE Secret​

Создайте Secret до Engine POST /engine/cluster:bootstrap-auth-rbac, даже если IDE chart будет установлен позже. Поле IDE_SELENA_IMPERSONATOR_PASSWORD сначала пустое: CM заполнит его во время Engine bootstrap.

kubectl -n {selena_namespace} create secret generic selena-ide-secrets \
--from-literal=FLASK_SECRET_KEY='{ide_flask_secret_key}' \
--from-literal=DATABASE_CONN='{ide_database_conn}' \
--from-literal=IDE_KEYCLOAK_CLIENT_SECRET='{selena_ide_client_secret}' \
--from-literal=IDE_TOKEN_ENCRYPTION_KEY='{ide_token_encryption_key}' \
--from-literal=IDE_SERVICE_CLIENT_SECRET='{selena_ide_service_client_secret}' \
--from-literal=IDE_SELENA_IMPERSONATOR_PASSWORD='' \
--from-literal=OPENAI_API_KEY='{optional_ide_openai_api_key}'

IDE_TOKEN_ENCRYPTION_KEY должен быть стабильным между pod restarts. Для генерации можно использовать openssl rand -base64 32.

5. AI Secret​

Создайте Secret до Engine POST /engine/cluster:bootstrap-auth-rbac, даже если AI chart будет установлен позже. Поле MCP_SELENA_IMPERSONATOR_PASSWORD сначала пустое: CM заполнит его во время Engine bootstrap.

kubectl -n {selena_namespace} create secret generic selena-ai-secrets \
--from-literal=AI_BACKEND_DATABASE_URL='{ai_backend_database_url}' \
--from-literal=AI_BACKEND_LLM_API_KEY='{llm_api_key}' \
--from-literal=AI_BACKEND_AUTH_CLIENT_SECRET='{selena_ai_client_secret}' \
--from-literal=AI_BACKEND_AUTH_TOKEN_ENCRYPTION_KEY='{ai_token_encryption_key}' \
--from-literal=MCP_SELENA_IMPERSONATOR_PASSWORD=''

AI_BACKEND_LLM_API_KEY должен быть реальным OpenAI/OpenRouter-compatible key. Placeholder даст зеленый Kubernetes rollout и даже health, но live chat вернет LLM authorization error.

6. Grafana OAuth Secret​

Если Grafana ставится вместе с Selena:

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}'

7. Минимальные values​

Используйте файлы:

docs-external/values-minimal/selena-operator-values.yaml
docs-external/values-minimal/selena-cm-values.yaml
docs-external/values-minimal/selena-ide-values.yaml
docs-external/values-minimal/selena-ai-values.yaml

Для bundled external dependencies рядом лежат такие же короткие override-файлы:

docs-external/values-minimal/postgres-values.yaml
docs-external/values-minimal/keycloak-values.yaml
docs-external/values-minimal/openldap-values.yaml
docs-external/values-minimal/kube-prometheus-stack-values.yaml
docs-external/values-minimal/minio-operator-values.yaml
docs-external/values-minimal/minio-tenant-values.yaml
docs-external/values-minimal/lakekeeper-values.yaml
docs-external/values-minimal/vault-values.yaml

Скопируйте их в customer deployment repo и замените {...} placeholders.

8. Свойства Selena operator values​

В minimal values оставлены только image settings. RBAC, ServiceAccount, imagePullPolicy и metrics имеют product defaults в chart.

СвойствоЗначениеЗачем нужно
selenaOperator.image.repositoryhub.selena.sh/selena/operator или совместимый mirrorRepository Selena operator image.
selenaOperator.image.tag1.11.4 или совместимый tagВерсия operator. Должна быть согласована с Selena Engine CRD support matrix.
selenaOperator.imagePullSecrets[0].nameselena-registrySecret для private registry. Если registry public, уберите этот список.

9. Свойства Selena CM values​

В minimal values оставлены URL-ы стенда, images, secrets и business mappings. HA replicas, ports, RBAC, refresh schedule, lock timings, client IDs, audience, group claim и metrics имеют product defaults в CM/chart. В chart values.yaml обязательные стендовые Keycloak URL-ы перечислены с пустыми defaults и должны переопределяться в customer-specific values.

СвойствоЗначениеЗачем нужно
image.repository{registry}/selena-cmRepository CM image. Для air-gapped окружений укажите внутренний registry.
image.tag{selena_cm_tag}Версия CM image. Фиксируйте конкретный release tag.
imagePullSecrets[0].nameselena-registrySecret для private registry. Если registry public, уберите этот список.
config.env.CM_KEYCLOAK_TOKEN_URI{keycloak_internal_url}/realms/selena/protocol/openid-connect/tokenInternal token endpoint для password login и service calls.
config.env.CM_KEYCLOAK_LOGOUT_URI{keycloak_public_url}/realms/selena/protocol/openid-connect/logoutBrowser logout endpoint.
config.env.CM_KEYCLOAK_JWKS_URI{keycloak_internal_url}/realms/selena/protocol/openid-connect/certsJWKS для проверки JWT.
config.env.CM_KEYCLOAK_ISSUER_URI{keycloak_public_url}/realms/selenaДолжен точно совпадать с token claim iss.
config.env.CM_KEYCLOAK_ADMIN_TOKEN_URI{keycloak_internal_url}/realms/selena/protocol/openid-connect/tokenInternal token endpoint для service account CM Admin API client.
config.env.CM_KEYCLOAK_ADMIN_BASE_URI{keycloak_internal_url}/admin/realms/selenaInternal Keycloak Admin API base URL, откуда CM читает users/groups.
extraEnv[0].nameSPRING_APPLICATION_JSONПередает structured config без сложного env escaping.
config.env.CM_SELENA_EXTERNAL_GROUP_FALLBACK_STRATEGYFULL_PATHКак CM строит Selena external group для Keycloak groups без explicit mapping. FULL_PATH делает /cm/admins -> cm_admins; NONE включает strict allow-list только через mappings.
extraEnv[0].value.cm.identity.external-groups.mappingsKeycloak path -> external groupOptional override для generated external group names. Используйте, когда нужно сохранить legacy short names или избежать collision.
extraEnv[0].value.cm.security.group-role-mappingsKeycloak path -> CM roleКакие Keycloak groups дают доступ к CM API.
secrets.existingSecretselena-cm-secretsОткуда CM берет secret env vars.
secrets.envKeys.CM_DB_URLSecret keyJDBC URL CM PostgreSQL.
secrets.envKeys.CM_DB_USERSecret keyDB user CM PostgreSQL.
secrets.envKeys.CM_DB_PASSWORDSecret keyDB password CM PostgreSQL.
secrets.envKeys.CM_KEYCLOAK_LOGIN_CLIENT_SECRETSecret keySecret Keycloak client selena-engine.
secrets.envKeys.CM_KEYCLOAK_ADMIN_CLIENT_SECRETSecret keySecret Keycloak client selena-cluster-manager-api.
secrets.envKeys.CM_ENCRYPTION_KEY_BASE64Secret keyStable 32-byte base64 key для шифрования CM secrets в DB.
secrets.envKeys.CM_ENCRYPTION_KEY_IDSecret keyИдентификатор активного encryption key, например main.

10. Свойства Selena IDE values​

В minimal values оставлены только public/internal URL-ы, Engine FE host, images и secrets. Replicas, ports, auth backend, client IDs, service-to-service CM URL, Querybook defaults и metrics имеют product defaults в chart. В chart values.yaml обязательные стендовые URL-ы и Engine FE host перечислены с пустыми defaults и должны переопределяться в customer-specific values.

СвойствоЗначениеЗачем нужно
image.repository{registry}/selena-ideRepository IDE image.
image.tag{selena_ide_tag}Версия IDE image.
imagePullSecrets[0].nameselena-registrySecret для private registry. Если registry public, уберите этот список.
config.env.PUBLIC_URL{ide_public_url}Должен совпадать с Keycloak redirect URI.
config.env.IDE_KEYCLOAK_ISSUER_URL{keycloak_public_url}/realms/selenaIssuer, который IDE ожидает в tokens.
config.env.IDE_KEYCLOAK_AUTHORIZATION_URL{keycloak_public_url}/realms/selena/protocol/openid-connect/authBrowser authorization endpoint.
config.env.IDE_KEYCLOAK_TOKEN_URL{keycloak_internal_url}/realms/selena/protocol/openid-connect/tokenInternal token endpoint для IDE.
config.env.IDE_KEYCLOAK_JWKS_URL{keycloak_internal_url}/realms/selena/protocol/openid-connect/certsJWKS endpoint для проверки tokens.
config.env.IDE_KEYCLOAK_LOGOUT_URL{keycloak_public_url}/realms/selena/protocol/openid-connect/logoutKeycloak logout endpoint для browser logout.
config.env.IDE_SERVICE_TOKEN_URL{keycloak_internal_url}/realms/selena/protocol/openid-connect/tokenToken endpoint для service client selena-ide-service.
config.env.IDE_SELENA_HOSTselena-prod-fe-service.{engine_namespace}.svc.cluster.localInternal FE service DNS для SQL execution через IDE. Должен совпадать с Engine spec.name.
config.env.AI_AGENT_URL{ai_public_url}Browser-reachable URL, который IDE открывает во встроенном AI iframe. Это не обязательно отдельный host; можно использовать path под IDE domain.
secrets.existingSecretselena-ide-secretsIDE secrets, включая password, который заполнит Engine bootstrap.
secrets.envKeys.FLASK_SECRET_KEYSecret keyFlask/session signing key IDE.
secrets.envKeys.DATABASE_CONNSecret keyPostgreSQL connection string IDE.
secrets.envKeys.IDE_KEYCLOAK_CLIENT_SECRETSecret keySecret Keycloak browser client selena-ide.
secrets.envKeys.IDE_TOKEN_ENCRYPTION_KEYSecret keyStable key для шифрования IDE tokens/sessions.
secrets.envKeys.IDE_SELENA_IMPERSONATOR_PASSWORDSecret keyPassword ide_impersonator_all; CM заполняет после Engine bootstrap.
secrets.envKeys.IDE_SERVICE_CLIENT_SECRETSecret keySecret service client selena-ide-service.
secrets.envKeys.OPENAI_API_KEYSecret keyOptional key для встроенного IDE assistant. Если не используется, оставьте customer-approved dummy или уберите env по политике chart.

11. Свойства Selena AI values​

В minimal values оставлены LLM provider, browser-facing URLs, Keycloak URLs, Engine FE host, images и secrets. Replicas, ports, service types, sticky MCP affinity, token claims, client IDs, audience, metrics и default backend/MCP ports имеют product defaults в chart. В chart values.yaml обязательные стендовые URL-ы тоже перечислены, но оставлены пустыми: их надо задать в customer-specific values, потому что public issuer/browser URL и internal service URL отличаются для каждого Kubernetes стенда.

СвойствоЗначениеЗачем нужно
imagePullSecrets[0].nameselena-registrySecret для private registry. Если registry public, уберите этот список.
components.backend.image.repository{registry}/selena-ai-backendRepository AI backend image.
components.backend.image.tag{selena_ai_backend_tag}Версия AI backend image.
components.backend.env.AI_BACKEND_LLM_BASE_URL{llm_base_url}Provider endpoint, например OpenAI или OpenRouter compatible URL.
components.backend.env.AI_BACKEND_LLM_MODEL{llm_model}Модель для AI Agent.
components.backend.env.AI_BACKEND_AUTH_ISSUER_URL{keycloak_public_url}/realms/selenaIssuer, который AI backend ожидает в tokens.
components.backend.env.AI_BACKEND_AUTH_AUTHORIZATION_URL{keycloak_public_url}/realms/selena/protocol/openid-connect/authBrowser authorization endpoint для AI auth flow.
components.backend.env.AI_BACKEND_AUTH_TOKEN_URL{keycloak_internal_url}/realms/selena/protocol/openid-connect/tokenInternal token endpoint.
components.backend.env.AI_BACKEND_AUTH_JWKS_URL{keycloak_internal_url}/realms/selena/protocol/openid-connect/certsJWKS endpoint для token validation.
components.backend.env.AI_BACKEND_AUTH_LOGOUT_URL{keycloak_public_url}/realms/selena/protocol/openid-connect/logoutLogout endpoint Keycloak.
components.backend.env.AI_BACKEND_AUTH_REDIRECT_URI{ai_public_url}/api/v1/auth/callbackRedirect URI, который должен быть указан в Keycloak client. {ai_public_url} должен быть доступен browser-у, даже если AI открывается только внутри IDE iframe.
components.backend.env.AI_BACKEND_AUTH_POST_LOGIN_REDIRECT_URI{ai_public_url}/Куда вернуть browser после successful login.
components.backend.env.AI_BACKEND_AUTH_POST_LOGOUT_REDIRECT_URI{ai_public_url}/Куда вернуть browser после logout.
components.backend.env.AI_BACKEND_AUTH_FRONTEND_URL{ai_public_url}Browser-reachable AI iframe URL для links/cookies.
components.backend.env.AI_BACKEND_CORS_ORIGINS{ide_public_url}Browser origin IDE, которому разрешены AI backend calls.
components.backend.secrets.existingSecretselena-ai-secretsSecret backend env vars.
components.backend.secrets.envKeys.AI_BACKEND_DATABASE_URLSecret keyPostgreSQL URL AI backend sessions/storage.
components.backend.secrets.envKeys.AI_BACKEND_LLM_API_KEYSecret keyLLM provider API key.
components.backend.secrets.envKeys.AI_BACKEND_AUTH_CLIENT_SECRETSecret keySecret Keycloak client selena-ai.
components.backend.secrets.envKeys.AI_BACKEND_AUTH_TOKEN_ENCRYPTION_KEYSecret keyStable key для шифрования AI tokens/sessions.
components.frontend.image.repository{registry}/selena-ai-frontendRepository AI frontend image.
components.frontend.image.tag{selena_ai_frontend_tag}Версия AI frontend image.
components.mcp.image.repository{registry}/selena-mcpRepository MCP image.
components.mcp.image.tag{selena_mcp_tag}Версия MCP image.
components.mcp.env.MCP_SELENA_HOSTselena-prod-fe-service.{engine_namespace}.svc.cluster.localInternal FE service DNS. Должен совпадать с Engine spec.name.
components.mcp.env.MCP_KEYCLOAK_JWKS_URL{keycloak_internal_url}/realms/selena/protocol/openid-connect/certsJWKS endpoint для проверки tokens, которые приходят в MCP.
components.mcp.env.MCP_KEYCLOAK_ISSUER{keycloak_public_url}/realms/selenaExpected issuer.
components.mcp.secrets.existingSecretselena-ai-secretsSecret MCP env vars.
components.mcp.secrets.envKeys.MCP_SELENA_IMPERSONATOR_PASSWORDSecret keyPassword ai_impersonator_all; CM заполняет после Engine bootstrap.

Перед выбором {llm_model} проверьте compatibility конкретного {selena_ai_backend_tag} с provider API. Старые AI backend builds используют legacy OpenAI parameter max_tokens; модели, которым нужен max_completion_tokens (например часть gpt-5/o-series), требуют backend build с обновленным provider adapter. Если такой build еще не выбран, используйте модель, совместимую с max_tokens, например gpt-4o-mini или approved provider-specific аналог.

12. Свойства external chart values​

Эти charts являются удобным bundled вариантом. Если у заказчика уже есть production PostgreSQL, Keycloak, LDAP/AD, S3-compatible storage, monitoring или Vault, используйте customer-managed сервис и не ставьте соответствующий chart.

Минимальные external values оставляют только то, что реально нужно задать для работающего bundled стенда. Chart defaults не копируются в файл.

PostgreSQL​

СвойствоЗначениеЗачем нужно
fullnameOverrideselena-postgresСтабильное имя Service/StatefulSet для команд и downstream URLs.
auth.usernameselenaApplication DB user, которому init script выдает доступ к Selena databases.
auth.existingSecretselena-postgres-authПароли берутся из Secret, а не из values.
primary.persistence.storageClass{storage_class}StorageClass для PostgreSQL PVC.
primary.persistence.size64GiРазмер bundled PostgreSQL volume.
primary.initdb.scriptscreate Selena databasesСоздает keycloak, lakekeeper, selena_cm, selena_ide, selena_ai и выдает grants user selena.

Keycloak​

СвойствоЗначениеЗачем нужно
fullnameOverrideselena-keycloakСтабильное имя Keycloak resources.
args --hostname{keycloak_public_url}Public URL, который попадет в issuer, redirect и logout flows.
http.relativePath/Realm URLs имеют вид {keycloak_public_url}/realms/selena, без legacy /auth.
proxy.mode / proxy.http.enabledxforwarded / trueKeycloak корректно работает за Ingress/LB, а внутри кластера слушает HTTP.
service.httpsPortnullНе создает лишний HTTPS service port в minimal profile.
extraEnv.KC_BOOTSTRAP_ADMIN_*Secret selena-keycloak-adminBootstrap admin берется из Secret.
database.*PostgreSQL connectionKeycloak использует PostgreSQL, а не dev-file/dev-mem storage.

Если меняете Keycloak hostname после первичной установки, меняйте именно args[] с --hostname=..., а не container command. command должен оставаться entrypoint chart/image; подмена command на start приведет к ошибке container runtime executable file not found.

OpenLDAP​

OpenLDAP приведен в качестве примера для test/demo стенда. В production обычно используйте существующий LDAP/AD заказчика и подключайте его к Keycloak federation.

СвойствоЗначениеЗачем нужно
fullnameOverrideselena-openldapСтабильное имя LDAP Service.
global.ldapDomain{ldap_domain}LDAP domain для demo directory.
global.existingSecretselena-openldap-authAdmin/config passwords берутся из Secret.
replicaCount1Минимальный demo LDAP.
replication.enabledfalseУпрощает test/demo установку.
service.enableSslLdapPortfalseLDAPS не публикуется в demo profile.
env.LDAP_ENABLE_TLSnoDemo LDAP работает только внутри cluster; production LDAP/AD должен иметь свой TLS.
persistence.storageClass / size{storage_class}, 16GiPVC для demo directory.
ltb-passwd.enabled / phpldapadmin.enabledfalseНе ставим лишние LDAP UI/tools.

kube-prometheus-stack и Grafana​

СвойствоЗначениеЗачем нужно
fullnameOverrideselena-monitoringСтабильные names monitoring resources.
crds.enabledtrueУстанавливает Prometheus Operator CRD до Selena charts с ServiceMonitor.
prometheus.prometheusSpec.*SelectorNilUsesHelmValuesfalsePrometheus видит ServiceMonitor/PodMonitor/Rules из Selena namespaces.
prometheus.prometheusSpec.*NamespaceSelector{}Разрешает discovery во всех namespaces.
prometheus.prometheusSpec.retention15dСколько хранить metrics history.
prometheus.prometheusSpec.storageSpec{storage_class}, 64GiPersistent storage Prometheus.
alertmanager.alertmanagerSpec.storage{storage_class}, 8GiPersistent storage Alertmanager.
grafana.admin.existingSecretselena-grafana-adminGrafana admin credentials берутся из Secret.
grafana.envValueFrom.GF_AUTH_GENERIC_OAUTH_CLIENT_SECRETselena-grafana-keycloak-clientGrafana OAuth client secret берется из Secret.
grafana.persistence{storage_class}, 16GiСохраняет Grafana state между restart-ами.
grafana.grafana.ini.server.root_url{grafana_public_url}/Public URL Grafana, совпадающий с Keycloak redirects/logout.
grafana.grafana.ini.auth.generic_oauth.*Keycloak endpointsВключает login через Keycloak client grafana.
grafana.grafana.ini.auth.generic_oauth.role_attribute_pathgrafana_admin / grafana_viewerGrafana role берется из Keycloak realm roles.
grafana.grafana.ini.auth.generic_oauth.role_attribute_stricttrueПользователь без Grafana role не входит в Grafana.
grafana.grafana.ini.auth.generic_oauth.signout_redirect_urlKeycloak logout URL with client_id=grafanaLogout завершает Keycloak session и не падает на id_token_hint.
selenaDashboards.itemsSelena dashboardsChart создает dashboard ConfigMaps для Grafana sidecar.

$__env{GF_AUTH_GENERIC_OAUTH_CLIENT_SECRET} в Grafana config - это синтаксис Grafana, не shell variable. Его не заменяйте на plaintext secret.

MinIO​

СвойствоЗначениеЗачем нужно
minio-operator-values.yamlcomment-onlyMinIO Operator работает на upstream defaults. Overrides нужны только для private registry/mirror.
tenant.nameselena-minioИмя MinIO Tenant.
tenant.configSecret.existingSecrettrueRoot credentials берутся из заранее созданного Secret.
tenant.pools[0].servers / volumesPerServer1 / 1Минимальный single-server tenant.
tenant.pools[0].size64GiРазмер MinIO PVC.
tenant.pools[0].storageClassName{storage_class}StorageClass MinIO PVC.
tenant.bucketsselena, warehouseBuckets, которые нужны lakehouse сценариям.
tenant.usersselena-minio-userSecret с access key/secret key для application user.

Lakekeeper​

СвойствоЗначениеЗачем нужно
fullnameOverrideselena-lakekeeperСтабильное имя Lakekeeper Service.
postgresql.enabledfalseEmbedded DB выключена, используется общий PostgreSQL.
externalDatabase.*PostgreSQL connection + SecretsLakekeeper database credentials не лежат в values.
secretBackend.typePostgresLakekeeper secrets хранит в PostgreSQL.
secretBackend.postgres.encryptionKeySecretselena-lakekeeper-postgres-encryptionStable encryption key хранится в Secret.

Vault​

Bundled Vault values - optional bootstrap/example. Для production чаще используется customer-managed Vault или External Secrets.

СвойствоЗначениеЗачем нужно
fullnameOverrideselena-vaultСтабильное имя Vault resources.
injector.enabledfalseMinimal profile не включает Vault Agent Injector.
server.dataStorage.storageClass{storage_class}StorageClass Vault PVC.
server.dataStorage.size20GiРазмер Vault PVC.
ui.enabledtrueСоздает Service для Vault UI/API.

13. Проверка values до установки​

Команды ниже проверяют customer-specific values files, которые вы получили копированием из docs-external/values-minimal/ и заменой placeholders. Не устанавливайте chart-ы напрямую с values-minimal: это шаблоны, а не готовый deployment profile.

helm lint charts/internal/selena-operator/chart \
-f {selena_operator_values}

helm lint charts/internal/selena-cm/chart \
-f {selena_cm_values}

helm lint charts/internal/selena-ide/chart \
-f {selena_ide_values}

helm lint charts/internal/selena-ai/chart \
-f {selena_ai_values}

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

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

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

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

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

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

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

helm lint charts/external/vault/chart \
-f {vault_values}

Render-проверка:

helm template selena-cm charts/internal/selena-cm/chart \
-n {selena_namespace} \
-f {selena_cm_values} \
>/tmp/selena-cm-rendered.yaml

rg -n "password|secret|token|client-secret" /tmp/selena-cm-rendered.yaml

В rendered manifests не должно быть plaintext secret values. Допустимы только имена Secrets и env var names.