Установка платформы LakeHouse
Общая структура Workspace в KubeSphere
В результате установки создается три отдельных Workspace:
KubeSphere
├── Workspace "vault" (инфраструктура)
│ ├── Project "vault" (неймспейс Kubernetes)
│ └── DevOps Project "vault"
│ └── Continuous Deployment "vault"
│
├── Workspace "mwsdata" (платформа)
│ ├── Project "mwsdata" (неймспейс Kubernetes)
│ └── DevOps Project "mwsdata"
│ └── Continuous Deployment "mwsdata"
│
└── Workspace "newtenant" (тенант)
├── Project "newtenant" (неймспейс Kubernetes)
└── DevOps Project "newtenant"
└── Continuous Deployment "newtenant"
Компоненты платформы
Платформа (mwsdata) - базовые сервисы:
- Keycloak - аутентификация и авторизация
- Vault - управление секретами
- Onboarding Manager - автоматизация создания тенантов
- Iceberg REST - каталог таблиц
- Secret Generator - генерация паролей
Тенант (newtenant) - пользовательские сервисы:
- JupyterHub - интерактивная разработка
- Spark History Server - мониторинг Spark
- StarRocks - аналитическая СУБД
- CloudBeaver - веб-интерфейс БД
- Airflow - оркестрация процессов
Предварительные требования
Kubernetes кластер
- Kubernetes версии 1.24+
- KubeSphere с компонентом DevOps
- Ingress Controller (nginx)
- Достаточные ресурсы: минимум 8 CPU, 16GB RAM
Внешние сервисы
- GitLab -
https://git.company.local - LDAP/Active Directory - корпоративный каталог
- S3-хранилище (Ozone) -
http://s3balancer.company.local:9878 - Allure - для отчетов тестирования
Необходимые доступы
- GitLab Access Token с правами
read_repository - LDAP учетные данные с правами на чтение дерева
- S3 keys (access_key и secret_key) для бакетов
- Доменные имена для сервисов платформы
Подготовка инфраструктуры
Соглашения по именованию
Имена должны быть:
- Только строчные буквы (a-z)
- Максимум 20 символов
- Без разделителей (
-,_,.) - Без специальных символов
Примеры корректных имен:
- Платформа:
mwsdata,lakehouse,dataplatform - Тенант:
dataarch,newtenant,teamanalytics
Группы LDAP для каждого тенанта:
{platform_name}_{tenant_name}_devops # Администраторы
{platform_name}_{tenant_name}_member # Обычные пользователи
{platform_name}_{tenant_name}_consumer # Потребители данных
Пример для платформы mwsdata и тенанта newtenant:
mwsdata_newtenant_devops
mwsdata_newtenant_member
mwsdata_newtenant_consumer
Подготовка LDAP групп
Перед установкой необходимо создать группы в LDAP. Обратитесь к администраторам LDAP для создания групп по указанному шаблону.
Установка Vault
Подготовка GitOps репозитория
# Клонируем репозиторий
git clone https://git.company.local/mwsdata/gitops.git
cd gitops
# Создаем ветку от тега vault-lakehouse
git checkout -b vault-lakehouse vault-lakehouse
Настройка конфигурации Vault
Файл: dev/apps/values.yaml
spec:
source:
GitRepoURL: https://git.company.local/mwsdata/gitops
ChartRepoURL: https://registry.company.local/chartrepo/mwsdata
targetRevision: "vault-lakehouse" # Имя вашей ветки
destination:
server: https://kubernetes.default.svc
namespace: "vault" # Проект для развертывания
Файл: dev/values/vault-values.yaml
server:
ingress:
enabled: true
hosts:
- host: "vault.lakehouse.company.local" # Ваш домен для Vault
paths:
- path: /
pathType: Prefix
ingressClassName: "nginx" # Или ваш ingress controller
# Ресурсы для Vault
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "1Gi"
cpu: "500m"
Где взять значения:
hosts- доменное имя для доступа к Vault (согласуйте с сетевыми администраторами)ingressClassName- имя Ingress Controller в вашем кластере (можно посмотреть:kubectl get ingressclass)
Создание Workspace для Vault в KubeSphere
-
Workbench → Create Workspace → Имя:
"vault" -
В Workspace "vault":
- Projects → Create → Имя:
"vault" -
DevOps → Create DevOps Project → Имя:
"vault" -
В DevOps Project "vault":
- Code Repositories → Create:
- Name:
"vault-repo" - Code Repository:
Git - URL:
https://git.company.local/mwsdata/gitops.git - Credential: создайте Access Token в GitLab
- Name:
- Continuous Deployments → Create:
- Name:
"vault" - Project:
vault - Code Repository: выберите созданный репозиторий
- Branch:
vault-lakehouse - Path:
dev/apps/
- Name:
Инициализация и настройка Vault
После деплоя выполните:
# Получите доступ к pod Vault через KubeSphere CLI (кнопка в правом нижнем углу)
kubectl exec -ti --namespace vault vault-0 -- bash
# Инициализация Vault - СОХРАНИТЕ КЛЮЧИ И ROOT TOKEN!
vault operator init
# Распечатывание хранилища (выполнить 3 раза с разными Unseal Keys)
vault operator unseal <Unseal Key 1>
vault operator unseal <Unseal Key 2>
vault operator unseal <Unseal Key 3>
# Включение аутентификации Kubernetes
vault auth enable kubernetes
# Создание secrets engine (используем dataops вместо projects)
vault secrets enable -path=dataops kv-v2
# Настройка подключения к Kubernetes
vault write auth/kubernetes/config \
kubernetes_host="https://${KUBERNETES_PORT_443_TCP_ADDR}:443" \
issuer="https://kubernetes.default.svc.cluster.local"
Альтернативно через переменные окружения:
# Установите root token в переменную
export VAULT_TOKEN="your_root_token_here"
# Выполните команды с токеном
kubectl exec -ti --namespace vault vault-0 -- sh -c 'VAULT_TOKEN="$VAULT_TOKEN" vault auth enable kubernetes'
kubectl exec -ti --namespace vault vault-0 -- sh -c 'VAULT_TOKEN="$VAULT_TOKEN" vault secrets enable -path=dataops kv-v2'
Установка платформы
Подготовка репозитория платформы
# Клонируем репозиторий платформы
git clone https://git.company.local/mwsdata/gitops.git
cd gitops
# Создаем ветку от тега платформы
git checkout -b mwsdata-lakehouse 0.0.6-public
Настройка конфигурации платформы
Файл: dev/apps/values.yaml
spec:
source:
GitRepoURL: https://git.company.local/mwsdata/gitops
ChartRepoURL: https://registry.company.local/chartrepo/mwsdata
targetRevision: "mwsdata-lakehouse" # Имя вашей ветки
destination:
server: https://kubernetes.default.svc
namespace: "mwsdata" # Проект для развертывания
Файл: dev/values/common-dictionary-values.yaml
common:
rootPath: "lakehouse.company.local" # Базовый домен сервисов
platform_name: "mwsdata" # Имя платформы
workflow: "dev" # Окружение (dev/stage/prod)
# Настройки Vault
vault_secret_engine: "dataops" # Имя secrets engine в Vault
vault_secret_engine_version: "v2" # Версия KV engine
vault_url: "http://vault.vault.svc.cluster.local:8200" # URL Vault внутри кластера
Дополнительные настройки (если файл существует):
# Если файл dev/values/jupyterhub-values.yaml существует
hub:
config:
GenericOAuthenticator:
allowed_groups:
- "mwsdata_newtenant_devops"
- "mwsdata_newtenant_member"
Настройка секретов в Vault
Создайте секреты по пути: dataops/{platform_name}/{workflow}/{platform_name}/
# Установите переменные для удобства
export VAULT_ADDR="https://vault.lakehouse.company.local"
export VAULT_TOKEN="your_root_token"
# Создание секретов для платформы
vault kv put dataops/mwsdata/dev/mwsdata/allure_token token="your_allure_token"
vault kv put dataops/mwsdata/dev/mwsdata/git_repo_auth_token token="your_gitlab_token"
vault kv put dataops/mwsdata/dev/mwsdata/s3 s3_access_key="your_s3_access_key" s3_secret_key="your_s3_secret_key"
vault kv put dataops/mwsdata/dev/mwsdata/ldap LDAP_ADMIN_PASSWORD="your_ldap_admin_password"
Создание Workspace для платформы
-
Workbench → Create Workspace → Имя:
"mwsdata" -
В Workspace "mwsdata":
- Projects → Create → Имя:
"mwsdata" -
DevOps → Create DevOps Project → Имя:
"mwsdata" -
В Project "mwsdata" создайте секрет:
-
Configurations → Secrets → Create:
- Name:
vault-token - Key:
token - Value:
your_vault_root_token
- Name:
-
В DevOps Project "mwsdata" создайте Continuous Deployment аналогично Vault
Мониторинг установки платформы
Установка происходит последовательно ("волнами"). Проверяйте в ArgoCD:
- Applications → найдите "mwsdata"
- Убедитесь, что статус "Healthy"
- Проверьте логи компонентов, особенно
onboarding-manager
# Проверка статуса подов платформы
kubectl get pods -n mwsdata
# Просмотр логов onboarding-manager
kubectl logs -n mwsdata deployment/onboarding-manager -f
Установка тенанта
Подготовка репозитория тенанта
# Клонируем репозиторий тенанта
git clone https://git.company.local/mwsdata/client-paas.git
cd client-paas
# Создаем ветку от тега тенанта
git checkout -b newtenant-lakehouse 0.0.9-public
Настройка конфигурации тенанта
Файл: dev/apps/values.yaml
spec:
source:
GitRepoURL: https://git.company.local/mwsdata/client-paas.git
ChartRepoURL: https://registry.company.local/chartrepo/mwsdata
targetRevision: "newtenant-lakehouse" # Имя вашей ветки
destination:
server: https://kubernetes.default.svc
namespace: "newtenant" # Проект для развертывания
Файл: dev/values/common-dictionary-values.yaml
common:
rootPath: "lakehouse.company.local"
client_name: "newtenant" # Имя тенанта
platform_name: "mwsdata" # Имя платформы
workflow: "dev"
# Настройки Vault (должны совпадать с настройками платформы)
vault_secret_engine: "dataops"
vault_secret_engine_version: "v2"
vault_url: "http://vault.vault.svc.cluster.local:8200"
Настройка секретов для тенанта
# Создание секретов для тенанта
vault kv put dataops/mwsdata/dev/newtenant/s3 \
s3_access_key="tenant_s3_access_key" \
s3_secret_key="tenant_s3_secret_key"
Создание Workspace для тенанта
-
Workbench → Create Workspace → Имя:
"newtenant" -
В Workspace "newtenant":
- Projects → Create → Имя:
"newtenant" -
DevOps → Create DevOps Project → Имя:
"newtenant" -
Создайте Continuous Deployment аналогично предыдущим
Процесс онбординга тенанта
После запуска тенанта происходит автоматический процесс:
- Волна 1: Запускается
onboardingJob, которая добавляет лейбл на неймспейс - Платформа:
onboarding-managerобнаруживает новый неймспейс с лейбломpart-of-platform=mwsdata - Создание ресурсов:
- Клиент в Keycloak с именем тенанта
- Бакет в S3 с именем тенанта
- Роли и политики доступа в Vault
- Секреты для компонентов тенанта
- Завершение: Добавляется лейбл
deployed=true
Проверка процесса:
# Проверка лейблов на неймспейсе тенанта
kubectl get namespace newtenant --show-labels
# Мониторинг логов onboarding-manager
kubectl logs -n mwsdata deployment/onboarding-manager -f
Верификация установки
Проверка платформенных сервисов
- Keycloak:
https://keycloak.mwsdata.lakehouse.company.local - Проверьте realm платформы
-
Убедитесь в синхронизации с LDAP (интервал 300 секунд)
-
Vault:
https://vault.lakehouse.company.local -
Проверьте наличие секретов платформы и тенантов
-
KubeSphere: Убедитесь, что все компоненты в статусе "Running"
Проверка сервисов тенанта
- JupyterHub:
https://jupyterhub.newtenant.lakehouse.company.local -
Вход под учетной записью LDAP из групп тенанта
-
Spark History:
https://spark.newtenant.lakehouse.company.local -
CloudBeaver:
https://cloudbeaver.newtenant.lakehouse.company.local -
Логин:
newtenant, пароль из секретов -
StarRocks: через CloudBeaver или напрямую на
starrocks-fe-service.newtenant.svc.cluster.local:9030
Решение проблем
Распространенные проблемы и решения
1. Spark History Server не запускается
Error: Log directory specified does not exist: s3a://newtenant/eventlog
Решение:
# Создайте директорию eventlog в S3 бакете тенанта
aws s3api put-object --bucket newtenant --key eventlog/dummy.file
2. Проблемы с аутентификацией в StarRocks
Решение:
# Перезапустите compute nodes StarRocks
kubectl delete pod -n newtenant -l app=starrocks-fe
kubectl delete pod -n newtenant -l app=starrocks-be
3. Onboarding Manager не создает ресурсы для тенанта
Проверьте:
- Лейбл part-of-platform на неймспейсе тенанта
- Логи onboarding-manager на ошибки
- Доступность API Keycloak, Vault, S3
- Наличие секрета vault-token в неймспейсе платформы
4. Компоненты не деплоятся
Проверьте: - Доступность образов в registry - Корректность секретов в Vault - Сетевые политики Kubernetes - Ресурсы кластера
Полезные команды для диагностики
# Проверка статуса всех подов
kubectl get pods -A
# Просмотр логов компонента
kubectl logs -n mwsdata deployment/keycloak
# Проверка Ingress
kubectl get ingress -A
# Проверка секретов
kubectl get secrets -n mwsdata
# Проверка событий в неймспейсе
kubectl get events -n mwsdata
Приложения
Структура репозиториев
Платформа: https://git.company.local/mwsdata/gitops
gitops/
├── dev/
│ ├── apps/
│ │ └── values.yaml # Основной конфиг ArgoCD
│ └── values/
│ ├── common-dictionary-values.yaml # Общие настройки
│ ├── keycloak-values.yaml # Настройки Keycloak
│ ├── vault-values.yaml # Настройки Vault
│ └── ... # Другие компоненты
└── charts/ # Helm charts компонентов
Тенант: https://git.company.local/mwsdata/client-paas
client-paas/
├── dev/
│ ├── apps/
│ │ └── values.yaml # Основной конфиг ArgoCD
│ └── values/
│ └── common-dictionary-values.yaml # Общие настройки
└── charts/ # Helm charts компонентов тенанта