Классический деплой в Kubernetes — это kubectl apply или helm upgrade из пайплайна: конвейер имеет доступ в кластер и «пушит» изменения. Проблема — кластер и репозиторий легко расходятся: кто-то поправил объект руками, и что реально крутится в проде, уже не совпадает с тем, что в Git. ArgoCD переворачивает подход: не пайплайн пушит в кластер, а кластер сам подтягивает состояние из Git. Это называется GitOps.
Что это
ArgoCD — инструмент непрерывной доставки (CD) для Kubernetes по модели GitOps. Идея в одной фразе: Git — источник правды. В репозитории лежат желаемые манифесты (или Helm-чарты), а ArgoCD, живущий внутри кластера, постоянно сравнивает «что в Git» и «что в кластере» и приводит кластер к состоянию из Git.
Что это даёт:
- Декларативность. Хотите что-то изменить в проде — делаете commit в Git, а не
kubectlруками. Вся история изменений — в системе контроля версий, с ревью через pull request. - Автосинхронизация и лечение дрейфа. ArgoCD замечает расхождение (drift): если объект в кластере поправили мимо Git, он подсветит это или вернёт как в репозитории (self-heal).
- Наглядность. В UI видно состояние каждого приложения: синхронизировано с Git или нет, здорово ли оно.
Как выглядит
Само приложение ArgoCD описывается объектом Application: где лежит исходник (репозиторий + путь) и куда разворачивать (кластер + namespace):
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: orders
namespace: argocd
spec:
source:
repoURL: https://git.example.com/infra/orders.git
targetRevision: main
path: deploy/prod # тут лежат манифесты или Helm-чарт
destination:
server: https://kubernetes.default.svc
namespace: orders
syncPolicy:
automated:
prune: true # удалять то, что убрали из Git
selfHeal: true # возвращать состояние из Git при дрейфе
Дальше деплой выглядит так: разработчик правит deploy/prod в Git и открывает pull request; после мержа ArgoCD видит новую ревизию main и сам применяет её в namespace orders. Никакого kubectl из пайплайна — только commit.
Коротко
- ArgoCD — GitOps-инструмент непрерывной доставки в Kubernetes: Git — источник правды, а не пайплайн с доступом в кластер.
- Кластер сам подтягивает желаемое состояние из репозитория, а не получает push извне.
- Объект
Applicationзадаёт: откуда (repo + path) и куда (кластер + namespace) разворачивать. automated+selfHealдержат кластер синхронным с Git и чинят ручной дрейф; вся история изменений — в Git с ревью.
Что почитать дальше
- Ветки и релизный цикл — где GitOps встаёт в конвейер доставки.
- Helm — чарты, которые ArgoCD часто и разворачивает.
- Деплой в Kubernetes — манифесты и rolling update под капотом.