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