GitOps + Kubernetes — управление инфраструктурой и приложениями через Git
“Git — это не только про код. Это источник истины для всей инфраструктуры. Добро пожаловать в GitOps.”
Что такое GitOps
GitOps — это подход, при котором вся конфигурация инфраструктуры и приложений хранится в Git, а состояние кластера автоматически синхронизируется с этим репозиторием.
- Git → источник истины
- Pull Request → способ внесения изменений
- CI/CD → автоматизация тестирования и проверки
- GitOps-оператор → применяет манифесты в Kubernetes
В итоге:
- Все изменения версионируются
- Можно откатиться на любой коммит
- Деплой → просто
git push - Прозрачность, контроль, безопасность
Основные принципы GitOps
| Принцип | Описание |
|---|---|
| Single Source of Truth | Вся инфраструктура описана декларативно в Git |
| Declarative | Манифесты описывают желаемое состояние, а не инструкции |
| Automated Reconciliation | GitOps-оператор следит за дрейфом и автоматически синхронизирует |
| Continuous Delivery | Новое состояние → PR → merge → автоприменение |
| Audit & Rollback | Git хранит историю изменений и позволяет откатиться к любому состоянию |
GitOps + Kubernetes: как это работает
- Ты коммитишь манифесты приложения или инфраструктуры в Git
- GitOps-оператор (например, Argo CD или Flux) мониторит репозиторий
- Он подтягивает изменения и применяет их к кластеру
- Постоянно следит, чтобы кластер ≡ Git. Если кто-то что-то ручками изменил — GitOps вернёт всё назад
Developer → Git (PR) → Merge
↓
GitOps Controller (ArgoCD/Flux)
↓
Kubernetes Cluster ← синхронизация
Типовая структура репозитория
gitops-repo/
├── apps/
│ ├── frontend/
│ │ ├── kustomization.yaml
│ │ └── deployment.yaml
│ └── backend/
│ ├── kustomization.yaml
│ └── deployment.yaml
└── infra/
├── namespaces/
├── network-policies/
├── cert-manager/
└── ingress/
Все изменения идут через PR → review → merge → Argo CD или Flux их подхватывает.
Пример с Argo CD
Argo CD — один из самых популярных GitOps-инструментов для Kubernetes.
1️⃣ Установка Argo CD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
2️⃣ Доступ в UI
kubectl port-forward svc/argocd-server -n argocd 8080:443
Зайди на https://localhost:8080 и залогинься (логин admin, пароль — в secret/argocd-initial-admin-secret).
3️⃣ Подключение репозитория
В UI → Settings → Repositories → Add Git → вставь URL и токен (SSH/HTTPS).
4️⃣ Создание Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: frontend
namespace: argocd
spec:
project: default
source:
repoURL: 'https://github.com/example/gitops-repo.git'
path: apps/frontend
targetRevision: main
destination:
server: 'https://kubernetes.default.svc'
namespace: frontend
syncPolicy:
automated:
prune: true
selfHeal: true
Argo CD автоматически задеплоит и будет поддерживать синхронизацию.
GitOps и CI/CD
GitOps не заменяет CI, а дополняет его:
- CI (GitLab CI, GitHub Actions) → собирает образы, пушит в registry
- GitOps (Argo/Flux) → подтягивает новые манифесты и деплоит
Типичный flow:
- CI собирает Docker-образ и пушит в registry
- CI обновляет
values.yamlили манифесты с новым тегом образа → коммитит в GitOps репозиторий - Argo CD замечает изменения и обновляет кластер
Безопасность GitOps
GitOps повышает безопасность, но требует правильной настройки:
- Только GitOps-оператор должен иметь доступ на
applyв кластер - Запретить ручные
kubectl applyв проде - Использовать SSH и read-only токены для Git
- Все изменения идут через PR и review
- Argo CD RBAC — ограничивать, кто может синхронизировать и изменять приложения
- Secrets — выносить в sealed-secrets, SOPS или External Secrets
Расширенные сценарии
- Multi-cluster — один GitOps репозиторий, несколько кластеров (dev/stage/prod)
- Multi-tenant — разные команды → разные namespaces или проекты в Argo CD
- Helm + GitOps — GitOps синхронизирует Helm-чарты (Argo умеет сам рендерить)
- Drift Detection — автооткат при ручных изменениях в кластере
- Rollback через Git revert — мгновенный откат до стабильного коммита
Заключение
GitOps — это не просто модное слово. Это фундаментальный сдвиг в управлении инфраструктурой:
- Прозрачность
- Контроль изменений
- Лёгкие откаты
- Автоматизация
С GitOps твой Kubernetes живёт не “по наитию DevOps-инженера”, а строго по Git — и это .
