Как интегрировать 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 рабочий процесс (пример)

  1. CI (GitHub Actions/GitLab/CI) билдит образ, прогоняет тесты, сканирует, пушит образ в registry (с immutable digest).

  2. CI создаёт PR/коммит в GitOps репозиторий (обновляет image tag на digest) или публикация через ImageUpdateAutomation.

  3. ArgoCD/Flux обнаруживает изменение и применяет его в кластере.

  4. Выполняется 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.