Index

Пошаговое внедрение GitOps в продакшен

1. Подготовительный этап

Требования перед стартом:
  • Kubernetes кластер версии 1.16+
  • Git-репозиторий с настроенным CI (GitHub/GitLab)
  • Права на установку операторов в кластере

1.1. Инфраструктура как код (IaC)

Terraform → Облачный провайдер → K8s Cluster

Пример структуры репозитория:


infra/
  ├── terraform/       # Инфраструктура кластера
  └── k8s/            # Kubernetes-манифесты
      ├── base/       # Базовые конфиги
      └── overlays/   # Окружения (dev/prod)

2. Установка и настройка ArgoCD

2.1. Установка в кластер


# Установка через Helm
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd \
  --namespace argocd \
  --create-namespace \
  --set server.service.type=LoadBalancer

2.2. Базовая конфигурация

Параметр Рекомендуемое значение Описание
syncPolicy automated Автоматическая синхронизация
selfHeal true Автовосстановление при дрифте

3. Организация репозиториев

Монопозиторий

  • Проще управлять зависимостями
  • Atomic-изменения

Мультирепозиторий

  • Независимость команд
  • Точечный доступ

3.1. Пример App of Apps


# root-app.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: root-application
spec:
  destination:
    server: https://kubernetes.default.svc
  source:
    repoURL: https://github.com/your-org/gitops-repo
    path: apps
    targetRevision: HEAD
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

4. Безопасность и RBAC

4.1. Модель доступа

Developer → PR → Approvers → ArgoCD Sync

4.2. Настройка SSO


# argocd-cm.yaml
data:
  url: https://argocd.your-domain.com
  dex.config: |
    connectors:
    - type: github
      id: github
      name: GitHub
      config:
        clientID: $GITHUB_CLIENT_ID
        clientSecret: $GITHUB_CLIENT_SECRET
        orgs:
        - name: your-org

5. Мониторинг и observability

5.1. Метрики для отслеживания

Метрика Инструмент Целевое значение
Sync Status ArgoCD Dashboard Synced = 100%
Drift Detection ArgoCD + Prometheus Drift = 0

5.2. Alerting Rules


# prometheus-rules.yaml
- alert: ArgoCDSyncFailed
  expr: argocd_app_info{sync_status="OutOfSync"} == 1
  for: 15m
  labels:
    severity: critical
  annotations:
    summary: "Приложение {{ $labels.name }} не синхронизировано"

6. Обучение команды

Ключевые темы для обучения:
  • Git-воркфлоу для инфраструктуры
  • Архитектура ArgoCD (ApplicationSet, Project)
  • Практика code review для манифестов

Чеклист внедрения

  1. Тестовый кластер с GitOps
  2. Демонстрация рабочего процесса
  3. Постепенный переход продакшена