MLOps Path

3.7.1 · блок 3

GitOps и Argo CD

GitOps и Argo CD

Зачем это нужно

До GitOps: Jenkins собрал образ → кто-то kubectl apply или helm upgrade с ноутбука. Через месяц непонятно, что реально в prod — drift, «у меня работало», нет audit trail. GitOps: желаемое состояние кластера хранится в Git; контроллер (Argo CD) непрерывно синхронизирует кластер с repo.

Для ML это означает: версия модели в values, chart inference, HTTPRoute — всё через Merge Request. Rollback = revert commit, не ручной patch Pod'а.

Основные идеи

Git как single source of truth. Репозиторий gitops-ml-prod содержит Helm charts, Kustomize overlays, или plain manifests. Tag образа scorer:128 — строка в values-prod.yaml, не «запомнили на созвоне».

Pull vs push. CI (Jenkins) push'ит образ в registry и обновляет Git (MR с новым tag). Argo CD pull'ит Git и apply в кластер. CI не держит kubeconfig prod — меньше риска утечки.

Argo CD — основные сущности.

| Сущность | Смысл |

|----------|--------|

| **Application** | Связь: Git repo + path + cluster/namespace |

| **Sync** | Применить манифесты из Git |

| **Health** | Deployment ready? PVC bound? |

| **Sync status** | Synced / OutOfSync |

| **Revision** | commit SHA в Git |

Application (упрощённо):


apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: scorer-prod
  namespace: argocd
spec:
  project: ml
  source:
    repoURL: https://git.mdp.ru/ml/scorer-chart.git
    path: .
    targetRevision: main
    helm:
      valueFiles:
        - values-prod.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: ml-prod
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Automated sync + selfHeal. Кто-то kubectl edit deployment — Argo вернёт состояние из Git. Prune удалит ресурсы, убранные из Git (осторожно с PVC).

App of Apps / ApplicationSet. Platform team ставит десятки Application одним parent chart — каждый ML-сервис = отдельный Application.

Связь с OpenGitOps. Принципы: declarative, versioned, immutable artifacts, software agents, closed loop — описаны на opengitops.dev; Argo CD — популярная реализация для Kubernetes.

Helm + Argo. Argo рендерит Helm при sync; не нужен отдельный helm upgrade в CI. Jenkins только обновляет values в Git.

Как это выглядит на практике

Типичный release inference-модели:

1. Jenkins: test → build registry/ml/scorer:129 → push.

2. Bot или инженер: MR в scorer-chart, image.tag: "129", model.key: scorer/v44/....

3. Review + merge в main.

4. Argo CD detect OutOfSync → sync → rolling update Deployment.

5. UI Argo: зелёный health, revision = merge commit.

Ручной sync (учебный кластер):


argocd app get scorer-dev
argocd app sync scorer-dev
kubectl rollout status deployment/scorer -n ml-dev

OutOfSync не всегда плохо. Временный debug patch — Argo покажет diff. SelfHeal откатит через минуту — для экспериментов отключайте selfHeal или sync вручную.

Secrets в GitOps. Не коммитьте plain secrets. Паттерны: Sealed Secrets, External Secrets Operator, SOPS — platform MDP выбирает один; вы монтируете готовый Secret из chart template.

Что сделать после занятия

Официальные материалы

Открыть интерактивную версию