Принципы GitOps
GitOps — это подход к continuous deployment, где Git является единственным источником истины для инфраструктуры.
▸Ключевые принципы
Declarative — вся система описана declaratively
Versioned — конфигурация хранится в Git
Automated — изменения автоматически применяются
Self-healing — автоматическое откат при расхождении
ArgoCD
▸Установка
1kubectl create namespace argocd2kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
▸Доступ к UI
1kubectl port-forward svc/argocd-server -n argocd 8080:44323# Получение пароля4kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
▸Конфигурация приложения
1apiVersion: argoproj.io/v1alpha12kind: Application3metadata:4 name: myapp5 namespace: argocd6spec:7 project: default8 source:9 repoURL: https://github.com/user/myapp.git10 targetRevision: main11 path: k8s12 destination:13 server: https://kubernetes.default.svc14 namespace: production15 syncPolicy:16 automated:17 prune: true18 selfHeal: true19 syncOptions:20 - CreateNamespace=true
▸Автосинхронизация
ArgoCD автоматически обнаруживает изменения в Git и применяет их к кластеру. При расхождении состояния ArgoCD восстанавливает желаемое состояние.
Flux
▸Установка
1# Установка Bootstrap2flux bootstrap github --owner=my-github-organization --repository=fleet-infra --branch=main --path=clusters/production --personal
▸Source
1apiVersion: source.toolkit.fluxcd.io/v12kind: GitRepository3metadata:4 name: myapp5 namespace: flux-system6spec:7 interval: 1m8 url: https://github.com/user/myapp.git9 ref:10 branch: main
▸Kustomization
1apiVersion: kustomize.toolkit.fluxcd.io/v12kind: Kustomization3metadata:4 name: myapp5 namespace: flux-system6spec:7 interval: 5m8 path: ./k8s9 prune: true10 sourceRef:11 kind: GitRepository12 name: myapp
Сравнение ArgoCD и Flux
| Критерий | ArgoCD | Flux |
|----------|--------|------|
| UI | Веб-интерфейс | CLI |
| Мульти-тенант | Да | Да |
| SOPS | Через плагин | Из коробки |
| Webhooks | Да | Да |
| Сложность | Выше | Ниже |
Структура репозитория
1myapp/2├── src/ # Исходный код3├── k8s/ # Kubernetes манифесты4│ ├── base/ # Базовая конфигурация5│ └── overlays/ # Перекрытия для сред6│ ├── dev/7│ ├── staging/8│ └── production/9└── charts/ # Helm чарты
Best Practices
Разделяйте код и конфигурацию
Используйте Kustomize или Helm для параметризации
Настройте автоматический синхронизацию
Используйте sealed secrets или SOPS для секретов
Мониторьте здоровье приложений
Заключение
GitOps автоматизирует деплой через Git. ArgoCD предоставляет удобный UI, Flux — lightweight CLI. Оба инструмента обеспечивают self-healing и audit trail для Kubernetes-кластеров.