Москва: проверенные б/у ноутбуки с гарантией и проверкой перед оплатой
+7 906 722-94-45

Главная → Статьи → GitOps: декларативное управление инфраструктурой

GitOps на практике: декларативное управление инфраструктурой через Git

GitOps: принципы, инструменты (Argo CD, Flux), автоматическая синхронизация, управление конфигурацией и практические паттерны инфраструктура-как-код.

Прямой ответ

GitOps — подход к управлению инфраструктурой, где Git — единственный источник истины (gitops — «Git как источник истины» — gitops — incident — «декларативная конфигурация» — gitops), зачем: автоматическая синхронизация (gitops — «инфраструктура автоматически синхронизируется с Git» — gitops — incident — «без ручных изменений» — gitops — k8s — «автоматизация» — gitops); принципы GitOps (gitops — «четыре принципа» — gitops): (1) Декларативность (gitops — «желаемое состояние в Git» — gitops — incident — «не императивные команды» — gitops — terraform — «декларативно» — gitops); (2) Версионирование (gitops — «всё в Git» — gitops — incident — «история изменений» — gitops — k8s — «версии» — gitops); (3) Автоматическая синхронизация (gitops — «изменения в Git автоматически применяются» — gitops — incident — «без ручного применения» — gitops — k8s — «автоматически» — gitops); (4) Непрерывная сверка (gitops — «агент постоянно сверяет состояние» — gitops — incident — «drift обнаруживается» — gitops — k8s — «сверка» — gitops); инструменты (gitops): (1) Argo CD (gitops — «GitOps для Kubernetes» — gitops — incident — «веб-интерфейс» — gitops — k8s — «синхронизация» — gitops — Argo CD — «популярный» — gitops); (2) Flux (gitops — «GitOps для Kubernetes» — gitops — incident — «без веб-интерфейса» — gitops — k8s — «синхронизация» — gitops — Flux — «CNCF» — gitops); (3) Terraform (terraform — «инфраструктура как код» — terraform — incident — «облачная инфраструктура» — terraform — gitops — «в Git» — terraform — «декларативно» — gitops); как работает (gitops — «цикл» — gitops): (1) Коммит в Git (gitops — «изменение конфигурации» — gitops — incident — «git commit» — gitops — k8s — «в репозиторий» — gitops); (2) Агент обнаруживает (gitops — «Argo CD/Flux видит изменение» — gitops — incident — «опрос Git» — gitops — k8s — «автоматически» — gitops); (3) Синхронизация (gitops — «применяет к кластеру» — gitops — incident — «kubectl apply» — gitops — k8s — «автоматически» — gitops); (4) Сверка (gitops — «постоянная сверка» — gitops — incident — «drift обнаруживается» — gitops — k8s — «исправляется» — gitops); преимущества (gitops): (1) Аудит (gitops — «всё в Git» — gitops — incident — «история изменений» — gitops — k8s — «кто что изменил» — gitops); (2) Откат (gitops — «git revert» — gitops — incident — «откат простой» — gitops — k8s — «версия в Git» — gitops); (3) Автоматизация (gitops — «без ручных изменений» — gitops — incident — «автоматически» — gitops — k8s — «синхронизация» — gitops); (4) Drift detection (gitops — «отклонения обнаруживаются» — gitops — incident — «ручные изменения видны» — gitops — k8s — «исправляются» — gitops); когда использовать (gitops): Kubernetes (gitops — «управление кластерами» — gitops — incident — «декларативно» — gitops — k8s), инфраструктура (gitops — «облачная инфраструктура» — gitops — incident — «Terraform» — gitops — terraform), автоматизация (gitops — «без ручных изменений» — gitops — incident — «автоматически» — gitops); антипаттерны: ручные изменения (gitops — «kubectl apply вручную» — gitops — incident — «вне Git» — gitops — k8s — «drift» — gitops), игнорирование drift (gitops — «drift не исправляется» — gitops — incident — «отклонения накапливаются» — gitops — «исправлять» — gitops).

Практика: GitOps с Argo CD

Установка Argo CD (gitops — kubectl create namespace argocd kubectl apply -n argocd -f (gitops — «Argo CD в кластер» — gitops — [k8s](./kubernetes-osnovy-dlya-razrabotchika-pody-deploy.md) — «установка» — gitops — Argo CD); **Application** (gitops — apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: myapp spec: source: repoURL: path: k8s targetRevision: main destination: server: namespace: myapp(gitops — «приложение из Git» — gitops — [k8s](./kubernetes-osnovy-dlya-razrabotchika-pody-deploy.md) — «репозиторий» — gitops — Argo CD); **Синхронизация** (gitops —kubectl apply -f application.yaml(gitops — «Argo CD синхронизирует» — gitops — [k8s](./kubernetes-osnovy-dlya-razrabotchika-pody-deploy.md) — «автоматически» — gitops — [incident](./incident-management-oncall-i-runbook.md) — «из Git» — gitops); **Веб-интерфейс** (gitops —kubectl port-forward svc/argocd-server -n argocd 8080:443(gitops — «веб-интерфейс Argo CD» — gitops — [k8s](./kubernetes-osnovy-dlya-razrabotchika-pody-deploy.md) — «визуализация» — gitops — Argo CD); **Flux** (gitops —flux create source git myapp --url= --branch=main flux create kustomization myapp --source=myapp --path=./k8s` (gitops — «Flux синхронизирует» — gitops — k8s — «автоматически» — gitops — Flux).

Практический сценарий: GitOps для микросервисов

Контекст: микросервисы (k8s — много сервисов (incident — gitops), боль: ручные изменения (gitops — «kubectl apply вручную» — gitops — incident — «вне Git» — gitops — k8s — «drift» — gitops); решение — GitOps: (1) репозиторий (gitops — конфигурация в Git (gitops — «k8s манифесты» — gitops — k8s — «репозиторий» — gitops — incident); (2) Argo CD (gitops — установка (gitops — kubectl apply -f install.yaml (gitops — k8s — «Argo CD» — gitops — Argo CD); (3) Application (gitops — kind: Application spec: source: repoURL: ... (gitops — «приложение из Git» — gitops — k8s — «синхронизация» — gitops — incident); (4) синхронизация (gitops — автоматическая (gitops — «изменения в Git применяются» — gitops — k8s — «автоматически» — gitops — incident); (5) drift detection (gitops — постоянная сверка (gitops — «drift обнаруживается» — gitops — k8s — «исправляется» — gitops — incident); результат: GitOps настроен (gitops — «автоматическая синхронизация» — gitops — incident — «без ручных изменений» — gitops — k8s — «drift обнаруживается» — gitops — «всё в Git» — gitops); вывод: GitOps решили задачу (автоматизация — gitops — ADR — «ручные изменения» — антипаттерн — gitops — только через Git — gitops — техдолг).

FAQ

Что такое GitOps и какие у него принципы? GitOps (gitops — подход, где Git — источник истины (gitops — «декларативная конфигурация» — gitops — incident — «всё в Git» — gitops — k8s); принципы (gitops — «четыре принципа» — gitops): декларативность (gitops — «желаемое состояние» — gitops — terraform — «декларативно» — gitops), версионирование (gitops — «всё в Git» — gitops — incident — «история» — gitops), автоматическая синхронизация (gitops — «изменения применяются» — gitops — k8s — «автоматически» — gitops), непрерывная сверка (gitops — «drift обнаруживается» — gitops — incident — «сверка» — gitops); «GitOps без Git» — антипаттерн (Git обязателен — gitops — источник истины — gitops — ADR — техдолг).

Какие инструменты GitOps существуют и чем они отличаются? Argo CD (gitops — «GitOps для Kubernetes» — gitops — incident — «веб-интерфейс» — gitops — k8s — Argo CD — «популярный» — gitops); Flux (gitops — «GitOps для Kubernetes» — gitops — incident — «без веб-интерфейса» — gitops — k8s — Flux — «CNCF» — gitops); Terraform (terraform — «инфраструктура как код» — terraform — incident — «облачная инфраструктура» — terraform — gitops — «в Git» — terraform); отличие: Argo CD — веб-интерфейс (gitops — Argo CD), Flux — без интерфейса (gitops — Flux), Terraform — облако (terraform — «выбор по задаче» — gitops — incident — ADR — техдолг).

Как настроить GitOps для Kubernetes кластера? Настройка (gitops — Argo CD (gitops — kubectl apply -f install.yaml (gitops — k8s — «установка» — gitops — Argo CD); репозиторий (gitops — конфигурация в Git (gitops — «k8s манифесты» — gitops — k8s — «репозиторий» — gitops — incident); Application (gitops — kind: Application spec: source: repoURL: ... (gitops — «приложение» — gitops — k8s — «из Git» — gitops); синхронизация (gitops — автоматическая (gitops — «изменения применяются» — gitops — k8s — «автоматически» — gitops — incident); «ручные изменения» — антипаттерн (вне Git — gitops — только через Git — gitops — ADR — техдолг).

Что такое drift detection и как его обрабатывать? Drift detection (gitops — обнаружение отклонений (gitops — «состояние кластера ≠ Git» — gitops — incident — «drift» — gitops — k8s — «отклонения» — gitops); как: непрерывная сверка (gitops — «агент постоянно сверяет» — gitops — incident — «drift обнаруживается» — gitops — k8s — «автоматически» — gitops), исправление (gitops — «автоматически исправляется» — gitops — incident — «синхронизация» — gitops — k8s — «к состоянию Git» — gitops), мониторинг (метрики — метрики drift (метрики — «сколько drift» — метрики — incident — «обнаружение» — метрики — gitops); «игнорирование drift» — антипаттерн (отклонения накапливаются — incident — исправлять — gitops — ADR — техдолг).

Источники: OpenGitOps (principles), Argo CD docs, Flux docs — ссылки в шапке.