GitOps-репозиторий для управления Kubernetes-инфраструктурой через ArgoCD.
├── clusters/ # Конфигурации окружений
│ ├── dev/ # Development кластер
│ └── prd/ # Production кластер
├── platform/ # Платформенные компоненты
│ ├── core/ # Bootstrap ArgoCD, RBAC
│ ├── gitops/ # ApplicationSets, Image Updater
│ ├── infrastructure/ # Инфраструктура (nginx, cert-manager, storage)
│ └── observability/ # Мониторинг (Grafana, Loki, OTEL)
├── tenants/ # Приложения команд
│ └── product-team/ # Tenant: product-team
├── policies/ # OPA Rego политики
└── .github/workflows/ # CI валидация
- Root Application (
platform/core/cluster-bootstrap/app-of-apps.yaml) указывает наclusters/<env>/ - Kustomization (
clusters/<env>/kustomization.yaml) собирает все ArgoCD Applications - Патчи подставляют правильный destination кластер через
destination.yaml
Git Push → ArgoCD → Sync Applications → Kubernetes
↑
argocd-image-updater (автообновление образов)
Порядок деплоя контролируется через argocd.argoproj.io/sync-wave:
0— Ingress, базовая инфраструктура5— Приложения (chat-api)
| Компонент | Описание |
|---|---|
| ingress-nginx | Ingress controller (LoadBalancer) |
| cert-manager | TLS сертификаты (Let's Encrypt DNS challenge) |
| external-dns | Автоматические DNS записи в Cloudflare |
| sealed-secrets | Шифрование секретов в git (kubeseal) |
| external-secrets | Синхронизация секретов из внешних хранилищ |
| reflector | Репликация секретов между namespace |
| longhorn | Distributed block storage |
| Компонент | Описание |
|---|---|
| pgo-operator | Crunchy PostgreSQL (Patroni, enterprise-grade) |
| cloudnative-pg | CloudNativePG (simple, recommended for dev) |
| Компонент | Описание |
|---|---|
| Grafana | Дашборды и визуализация |
| Loki | Агрегация логов |
| Vector | Log collector и transformer |
| OTEL Collector | OpenTelemetry (OTLP → Loki) |
| Компонент | Описание |
|---|---|
| Open WebUI | UI для LLM моделей |
- Создай директорию в
tenants/<team>/apps/<app>/base/ - Добавь
application.yamlс ArgoCD Application - Добавь
kustomization.yaml - Включи в
clusters/<env>/kustomization.yaml:resources: - ../../tenants/<team>/apps/<app>/base
Для автоматического обновления версий используется argocd-image-updater:
annotations:
argocd-image-updater.argoproj.io/image-list: app=ghcr.io/org/app:^1
argocd-image-updater.argoproj.io/app.update-strategy: semver
argocd-image-updater.argoproj.io/write-back-method: gitGitHub Actions валидирует манифесты на каждый PR:
- Kustomize build — рендеринг манифестов
- Kubeconform — валидация против JSON схем
- OPA — проверка политик безопасности
- Контейнеры должны иметь limits (cpu, memory)
- Обязательные probes (liveness, readiness)
- Запуск не от root (
runAsNonRoot: true) - Наличие namespace
- OTEL endpoint для телеметрии
# Рендеринг манифестов
kubectl kustomize clusters/dev/
# Валидация
kubeconform -summary -strict <(kubectl kustomize clusters/dev/)
# Проверка политик
opa eval -f pretty -d policies/ -i rendered.yaml "data.kubernetes.deny[msg]"- Kubernetes кластер (Timeweb Cloud или другой)
- ArgoCD установлен в namespace
argocd - Доступ к GitHub репозиториям
- Architecture — архитектура платформы и компонентов
- Golden Install — чистая установка с нуля
| Репозиторий | Назначение |
|---|---|
| app-poly-gitops-infra | Terraform + ArgoCD bootstrap |
| app-poly-gitops-helm | Helm charts |
| app-poly-gitops-fastapi | FastAPI приложение (chat-api) |
MIT