Skip to content

Установка платформы 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

  1. WorkbenchCreate Workspace → Имя: "vault"

  2. В Workspace "vault":

  3. ProjectsCreate → Имя: "vault"
  4. DevOpsCreate DevOps Project → Имя: "vault"

  5. В DevOps Project "vault":

  6. Code RepositoriesCreate:
    • Name: "vault-repo"
    • Code Repository: Git
    • URL: https://git.company.local/mwsdata/gitops.git
    • Credential: создайте Access Token в GitLab
  7. Continuous DeploymentsCreate:
    • Name: "vault"
    • Project: vault
    • Code Repository: выберите созданный репозиторий
    • Branch: vault-lakehouse
    • Path: dev/apps/

Инициализация и настройка 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 для платформы

  1. WorkbenchCreate Workspace → Имя: "mwsdata"

  2. В Workspace "mwsdata":

  3. ProjectsCreate → Имя: "mwsdata"
  4. DevOpsCreate DevOps Project → Имя: "mwsdata"

  5. В Project "mwsdata" создайте секрет:

  6. ConfigurationsSecretsCreate:

    • Name: vault-token
    • Key: token
    • Value: your_vault_root_token
  7. В DevOps Project "mwsdata" создайте Continuous Deployment аналогично Vault

Мониторинг установки платформы

Установка происходит последовательно ("волнами"). Проверяйте в ArgoCD:

  1. Applications → найдите "mwsdata"
  2. Убедитесь, что статус "Healthy"
  3. Проверьте логи компонентов, особенно 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 для тенанта

  1. WorkbenchCreate Workspace → Имя: "newtenant"

  2. В Workspace "newtenant":

  3. ProjectsCreate → Имя: "newtenant"
  4. DevOpsCreate DevOps Project → Имя: "newtenant"

  5. Создайте Continuous Deployment аналогично предыдущим

Процесс онбординга тенанта

После запуска тенанта происходит автоматический процесс:

  1. Волна 1: Запускается onboardingJob, которая добавляет лейбл на неймспейс
  2. Платформа: onboarding-manager обнаруживает новый неймспейс с лейблом part-of-platform=mwsdata
  3. Создание ресурсов:
  4. Клиент в Keycloak с именем тенанта
  5. Бакет в S3 с именем тенанта
  6. Роли и политики доступа в Vault
  7. Секреты для компонентов тенанта
  8. Завершение: Добавляется лейбл deployed=true

Проверка процесса:

# Проверка лейблов на неймспейсе тенанта
kubectl get namespace newtenant --show-labels

# Мониторинг логов onboarding-manager
kubectl logs -n mwsdata deployment/onboarding-manager -f

Верификация установки

Проверка платформенных сервисов

  1. Keycloak: https://keycloak.mwsdata.lakehouse.company.local
  2. Проверьте realm платформы
  3. Убедитесь в синхронизации с LDAP (интервал 300 секунд)

  4. Vault: https://vault.lakehouse.company.local

  5. Проверьте наличие секретов платформы и тенантов

  6. KubeSphere: Убедитесь, что все компоненты в статусе "Running"

Проверка сервисов тенанта

  1. JupyterHub: https://jupyterhub.newtenant.lakehouse.company.local
  2. Вход под учетной записью LDAP из групп тенанта

  3. Spark History: https://spark.newtenant.lakehouse.company.local

  4. CloudBeaver: https://cloudbeaver.newtenant.lakehouse.company.local

  5. Логин: newtenant, пароль из секретов

  6. 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 компонентов тенанта