Развёртывание
Это руководство охватывает развёртывание IceGate в продакшен окружениях.
Предварительные Требования
- Объектное Хранилище: S3, RustFS или S3-совместимое хранилище
- Каталог Iceberg: встроенный S3-каталог (по умолчанию), либо Nessie (REST), AWS S3 Tables или AWS Glue
- Docker/Kubernetes: Для оркестрации контейнеров
Архитектурные Решения
Масштабирование Компонентов
| Компонент | Масштабирование | Примечания |
|---|---|---|
| Ingest | Горизонтальное | Масштабируйте для увеличения пропускной способности записи |
| Query | Горизонтальное | Масштабируйте для увеличения параллелизма запросов |
| Maintain | Горизонтальное | Воркеры координируются через состояние задач в объектном хранилище (compare-and-swap) |
Требования к Ресурсам
Сервис Ingest (на реплику):
- CPU: 2-4 ядра
- Память: 4-8 GB
- Диск: Минимальный (запись в объектное хранилище)
Сервис Query (на реплику):
- CPU: 4-8 ядер
- Память: 8-32 GB (зависит от сложности запросов)
- Диск: Рекомендуется SSD для кэша (
catalog.cache.disk_dir)
Сервис Maintain:
- CPU: 2-4 ядра
- Память: 4-8 GB
- Диск: SSD для временных файлов компакции
Развёртывание с Docker Compose
Профили Docker Compose
Проект включает профили Docker Compose для различных сценариев развёртывания:
# Основные сервисы: RustFS, Ingest, Query, Maintain
make run-core-release
# Основные + генератор нагрузки для тестирования
make run-load-release
# Основные + мониторинг (Jaeger, Prometheus, Grafana)
# Основные + аналитика (Trino)
make run-analytics-release
Продакшен Настройка
# docker-compose.yml
services:
rustfs:
image: rustfs/rustfs:1.0.0-beta.8
environment:
RUSTFS_ACCESS_KEY: ${S3_ACCESS_KEY}
RUSTFS_SECRET_KEY: ${S3_SECRET_KEY}
RUSTFS_VOLUMES: /data
RUSTFS_CONSOLE_ENABLE: "true"
RUSTFS_CONSOLE_ADDRESS: "0.0.0.0:9001"
volumes:
- rustfs-data:/data
ports:
- "9000:9000" # S3 API
- "9001:9001" # Console
ingest:
image: icegate/ingest:latest
command: run -c /etc/icegate/ingest.yaml
environment:
AWS_ACCESS_KEY_ID: ${S3_ACCESS_KEY}
AWS_SECRET_ACCESS_KEY: ${S3_SECRET_KEY}
volumes:
- ./config/ingest.yaml:/etc/icegate/ingest.yaml:ro
ports:
- "4317:4317" # OTLP gRPC
- "4318:4318" # OTLP HTTP
- "9091:9091" # Prometheus metrics
depends_on:
- rustfs
query:
image: icegate/query:latest
command: run -c /etc/icegate/query.yaml
environment:
AWS_ACCESS_KEY_ID: ${S3_ACCESS_KEY}
AWS_SECRET_ACCESS_KEY: ${S3_SECRET_KEY}
volumes:
- ./config/query.yaml:/etc/icegate/query.yaml:ro
- query-cache:/tmp/icegate/cache
ports:
- "3100:3100" # Loki API
- "9090:9090" # Prometheus API
- "3200:3200" # Tempo API
- "8815:8815" # Arrow Flight SQL
depends_on:
- rustfs
maintain:
image: icegate/maintain:latest
environment:
AWS_ACCESS_KEY_ID: ${S3_ACCESS_KEY}
AWS_SECRET_ACCESS_KEY: ${S3_SECRET_KEY}
volumes:
- ./config/maintain.yaml:/etc/icegate/maintain.yaml:ro
depends_on:
- rustfs
volumes:
rustfs-data:
query-cache:
Сборка Docker
Сборка контейнерных образов из исходного кода:
# Сборка сервиса ingest (release режим)
docker build -t icegate/ingest:latest \
--build-arg BINARY=ingest \
--build-arg PROFILE=release \
-f config/docker/Dockerfile .
# Сборка сервиса query
docker build -t icegate/query:latest \
--build-arg BINARY=query \
--build-arg PROFILE=release \
-f config/docker/Dockerfile .
# Сборка сервиса maintain
docker build -t icegate/maintain:latest \
--build-arg BINARY=maintain \
--build-arg PROFILE=release \
-f config/docker/Dockerfile .
Развёртывание в Kubernetes
Helm Charts
IceGate включает Helm charts для развёртывания в Kubernetes:
# Установка из локальных charts
helm install icegate ./config/helm/icegate
# С пользовательскими значениями
helm install icegate ./config/helm/icegate \
-f my-values.yaml \
--set storage.bucket=my-warehouse
Kustomize Overlays
Доступны готовые Kustomize overlays для распространённых сценариев:
| Overlay | Описание |
|---|---|
skaffold |
Локальная разработка со Skaffold |
orbstack |
Среда выполнения контейнеров OrbStack |
aws-glue |
Интеграция с каталогом AWS Glue |
aws-s3tables |
Интеграция каталога AWS S3 Tables |
external-s3 |
Внешнее хранилище S3 с каталогом Nessie |
# Применение с kustomize
kubectl apply -k config/kustomize/overlays/aws-glue
Конфигурация Хранилища S3
AWS S3
storage:
backend: !s3
bucket: icegate-warehouse
region: us-east-1
RustFS (S3-совместимое)
storage:
backend: !s3
bucket: warehouse
endpoint: http://rustfs:9000
region: us-east-1
Высокая Доступность
Мультизонное Развёртывание
Развёртывание сервисов в нескольких зонах доступности:
services:
query:
deploy:
replicas: 3
placement:
constraints:
- node.labels.zone != ${ZONE}
Проверки Здоровья
Все сервисы предоставляют эндпоинты проверки здоровья:
- Ingest:
GET /health(порт 4318) - Query:
GET /ready(порт 3100)
Мониторинг
Метрики
Сервисы IceGate предоставляют метрики Prometheus на выделенном порту (по умолчанию: 9091):
- Метрики Ingest:
http://ingest:9091/metrics - Метрики Query:
http://query:9091/metrics
Настройка в каждом сервисе:
metrics:
enabled: true
host: 0.0.0.0
port: 9091
path: /metrics
Самонаблюдаемость с Трейсингом
IceGate может экспортировать собственные трейсы через OTLP для отладки:
tracing:
enabled: true
service_name: icegate-query
otlp_endpoint: http://jaeger:4317
sample_ratio: 0.1 # 10% sampling in production
Логирование
Сервисы пишут логи в stdout. Настройте уровень логирования через переменную окружения RUST_LOG:
environment:
RUST_LOG: "info,icegate_query=debug"
Безопасность
Сетевая Безопасность
- Используйте TLS для всех внешних подключений
- Ограничьте доступ к объектному хранилищу и любому внешнему каталогу только внутренней сетью
- Используйте сетевые политики в Kubernetes
Аутентификация
Настройте аутентификацию тенантов через обратный прокси или API gateway:
location /loki/ {
auth_request /auth;
proxy_set_header X-Scope-OrgID $remote_user;
proxy_pass http://query:3100/;
}
Следующие Шаги
- Настройте операции Обслуживания
- Настройте процедуры Устранения Неполадок
- Изучите Архитектуру для принятия решений по масштабированию