Перейти к содержимому

Быстрый старт: Kubernetes / Helm

Быстрый старт: Kubernetes / Helm

Установка Portal в Kubernetes через Helm chart и portal-cli.

Требования

  • Kubernetes 1.28+
  • Helm 3.12+
  • kubectl с доступом к кластеру
  • Ingress Controller (nginx-ingress рекомендуется)
  • StorageClass для PVC (PostgreSQL, Valkey, SeaweedFS)
  • 8 GB RAM на кластер (минимум для пилота)

Установка Ingress Controller (если нет)

Окно терминала
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx -n ingress --create-namespace

Сборка образов (из исходников)

Окно терминала
export PORTAL_VERSION=1.0.0
docker build -f backend/Dockerfile --target api -t portal/api:$PORTAL_VERSION backend
docker build -f backend/Dockerfile --target worker -t portal/worker:$PORTAL_VERSION backend
docker build -f frontend/Dockerfile -t portal/frontend:$PORTAL_VERSION frontend
docker build -f docker/db-init.Dockerfile -t portal/db-init:$PORTAL_VERSION .
# Для minikube/k3s: загрузите образы в кластер
# minikube image load portal/api:$PORTAL_VERSION
# k3s ctr images import ...

Установка

Окно терминала
chmod +x deploy/portal-cli/portal-cli
# Генерирует portal-values.generated.yaml и устанавливает chart
./deploy/portal-cli/portal-cli install --mode k8s

Production-профиль (PgBouncer, 2 реплики API/Worker):

Окно терминала
./deploy/portal-cli/portal-cli install --mode k8s --prod

Что происходит при установке

  1. Создаётся namespace portal
  2. Поднимаются PostgreSQL, Valkey, SeaweedFS (StatefulSet + PVC)
  3. Helm hook Job db-init: SQL-миграции, seed admin, S3 bucket
  4. Запускаются API, Worker, Frontend, Collabora
  5. Создаётся Ingress для портала и Collabora

Проверка

Окно терминала
./deploy/portal-cli/portal-cli status --mode k8s
kubectl get pods -n portal
kubectl logs -n portal job/portal-db-init
# Если Ingress не настроен:
kubectl port-forward -n portal svc/portal-frontend 8080:80
curl http://localhost:8080/api/v1/system/version

Обновление

Окно терминала
./deploy/portal-cli/portal-cli upgrade --mode k8s

При upgrade автоматически запускается db-init (pre-upgrade hook) для миграций.

Конфигурация

ФайлНазначение
deploy/helm/portal/values.yamlЗначения по умолчанию
deploy/helm/portal/portal-values.generated.yamlСгенерированные секреты (portal-cli)

Ключевые параметры в values.yaml:

ingress:
host: portal.company.ru
tls:
enabled: true
secretName: portal-tls
backend:
replicas: 3
pgbouncer:
enabled: true
postgresql:
enabled: true # false + host для внешней БД

Внешние сервисы

Отключите встроенные компоненты и укажите хосты:

postgresql:
enabled: false
host: postgres.internal
port: 5432
redis:
enabled: false
host: valkey.internal
seaweedfs:
enabled: false
endpoint: s3.internal

DNS

Добавьте записи для Ingress hosts:

  • portal.company.ru → Ingress IP
  • collabora.company.ru → Ingress IP

Или используйте /etc/hosts для пилота:

127.0.0.1 portal.local collabora.portal.local

Структура chart

deploy/helm/portal/
Chart.yaml
values.yaml
templates/
backend.yaml, worker.yaml, frontend.yaml
postgresql.yaml, redis.yaml, seaweedfs.yaml
db-init-job.yaml # Helm hooks
ingress.yaml