Как интегрировать CI/CD с Kubernetes (ArgoCD, Flux)?
Концепция GitOps — кратко
GitOps = «Git как источник истины» для всей конфигурации кластера. CI собирает артефакты (obraz, chart), записывает/промежуточно проверяет изменения в Git; CD (ArgoCD/Flux) автоматически синхронизирует состояние кластера с содержимым репозитория. Это даёт audit trail, откат по коммиту и повторяемость.
Структура repo и паттерны
-
Monorepo: все окружения/сервисы в одном репозитории — проще согласование, сложнее права.
-
Multi-repo: по сервису или по окружению — легче ограничивать доступ.
Типичная структура (kustomize/helm):
```python
/infrastructure
/apps
/service-a
/base
/overlays
/staging
/prod
- Используйте parametrization (kustomize vars, Helm values) и immutable tags (SHA) для production.
# **Argo CD — ключевые возможности и конфигурация**
- Развёрнутый контроллер, который смотрит Git и применяет манифесты.
- **Application** CR описывает репозиторий, путь, target cluster/namespace, syncPolicy (manual/automated).
- automated sync + prune для удаления ненужных ресурсов; self-heal — автоисправление дрейфа.
- **App of Apps** — иерархия приложений: центральный Application, который создаёт другие Applications (удобно для multi-cluster).
- Настройка RBAC в ArgoCD для ограничения кто может синкать/prod.
Пример Application (синопсис):
```python
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
source:
repoURL: git@...
path: apps/service-a/overlays/prod
destination:
server: https://kubernetes.default.svc
namespace: service-a
syncPolicy:
automated: { prune: true, selfHeal: true }
Flux — ключевые возможности и конфигурация
-
Flux использует набор CRD: GitRepository / Kustomization / HelmRepository / HelmRelease.
-
Поддерживает Image Automation: ImageRepository + ImagePolicy + ImageUpdateAutomation, которые автоматически поднимают image tags/values в Git при push нового образа.
-
Flux хорошо интегрируется с SOPS/SealedSecrets и имеет GitOps Toolkit для extensibility.
Пример Kustomization:
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
spec:
interval: 1m
path: ./apps/service-a/overlays/prod
prune: true
sourceRef: { kind: GitRepository, name: infra-repo }
CI ⇢ CD рабочий процесс (пример)
-
CI (GitHub Actions/GitLab/CI) билдит образ, прогоняет тесты, сканирует, пушит образ в registry (с immutable digest).
-
CI создаёт PR/коммит в GitOps репозиторий (обновляет image tag на digest) или публикация через ImageUpdateAutomation.
-
ArgoCD/Flux обнаруживает изменение и применяет его в кластере.
-
Выполняется post-sync health checks, smoke tests; в случае ошибки откат — через revert коммита или ArgoCD rollback.
Безопасность и секреты
-
Не храните plain secrets в Git. Используйте SOPS, SealedSecrets или ExternalSecrets (Vault, Cloud Secrets) + CSI provider.
-
Доступ ArgoCD/Flux к репозиторию — deploy keys / robot accounts с минимальными правами. Подпись коммитов/мерджей (signed commits) повышает доверие.
-
Ограничьте права на управление Argo (RBAC) и используйте AppProjects (Argo) или namespace scoping (Flux) для multi-tenant.
Multi-cluster и продвинутые сценарии
-
ArgoCD: несколько destination clusters через cluster secrets; AppProject контролирует доступ.
-
Flux: bootstrap в каждом кластере или централизованное управление через MultiCluster tooling.
-
Canary/Blue-Green: интегрируйте с Argo Rollouts или сервис-меш для поэтапного переключения трафика; GitOps хранит правила маршрутизации.
Валидация и тестирование
-
CI прогоняет kubeval, helm lint, kustomize build и unit/integration тесты манифестов.
-
Preview environments: автоматическое создание temporary namespace + deploy PR-версии для интеграционных тестов.
-
Политики валидации: OPA/Gatekeeper/Kyverno в admission path для запрета небезопасных/несоответствующих изменений.
Наблюдаемость и откат
-
Включайте Prometheus/Grafana для мониторинга синков и health. ArgoCD и Flux экспортируют метрики.
-
Откат через revert коммита в Git (быстрее и безопаснее чем ручной rollback).
Best practices (кратко)
-
Git = единый источник истины; CI только пушит артефакты/обновления в Git.
-
Immutable image tags (digest) для production.
-
Мелкие, проверяемые PR, автоматические проверки манифестов.
-
Secrets через SOPS/ExternalSecrets; RBAC строго ограничен.
-
Canary/Smoke tests + automated health checks перед full rollout.