Перейти к основному содержимому

О разделе

Сквозной практикум по GitOps (Git Operations — управление инфраструктурой и приложениями через Git-репозиторий). Вы поднимаете локальный Kubernetes, устанавливаете Argo CD (контроллер, который следит за Git и приводит кластер к описанному состоянию), храните манифесты в отдельном репозитории и меняете окружение только через commit. Теория и принципы — в статье GitOps.

Для кого раздел

Нужны базовый Docker, kubectl, Git и 4–8 GB RAM. Полезно пройти первые шаги Kubernetes до этого практикума.


Что такое GitOps на этом стенде

Git становится единственным источником правды (source of truth) для конфигурации кластера. Оператор не правит прод вручную через kubectl edit. Любое изменение — pull request, review, merge, после чего Argo CD подтягивает diff и применяет его в Kubernetes.

На стенде вы пройдёте полный цикл: кластер → Argo CD → Application → релиз через Git → drift и откат. Это тот же паттерн, который команды используют в staging и production, только без облачного биллинга.


Предварительные требования

Навык или инструментЗачем нуженГде подтянуть
Dockerkind и minikube создают кластер в контейнерахDocker — основы
kubectlПроверка подов, port-forward, отладкаПервые шаги Kubernetes
GitКоммиты, revert, работа с remoteGit в DevOps
YAML манифесты K8sDeployment, Service, namespaceСправочник Kubernetes
Аккаунт GitHub или GitLabХранение infra-репозиторияЛюбой публичный или private repo
4–8 GB RAMЛокальный кластер + Argo CDЗакройте лишние приложения на время lab

Проверьте версии перед стартом:

docker version --format '{{.Server.Version}}'
kubectl version --client --short 2>/dev/null || kubectl version --client
git --version

Ожидаемый результат — три команды завершаются без ошибки и показывают номера версий.


Сценарий стенда

КомпонентРоль
kind или minikubeЛокальный кластер Kubernetes на ноутбуке
demo-appУчебный Deployment с nginx
infra-gitРепозиторий с манифестами в apps/demo/
Argo CDСинхронизация Git → кластер
argocd/Манифест Application, связывающий repo и namespace

kind (Kubernetes in Docker) поднимает control plane и worker-ноды как Docker-контейнеры. minikube — одна виртуальная нода в Docker или hypervisor. Для lab подойдёт любой из вариантов; в шаге 1 показаны оба.

Argo CD — open-source GitOps-контроллер от CNCF. Он сравнивает желаемое состояние (Git) с фактическим (кластер) и выполняет sync. Подробнее о принципах — GitOps — теория.


Архитектура учебного стенда

Репозиторий infra-gitops-lab живёт на GitHub (или GitLab). Argo CD читает путь apps/demo/ и создаёт Deployment и Service в namespace demo. Секреты в этот public repo не кладём — для них есть практикум Vault.


Маршрут по шагам

ШагСтатьяСодержание
1Подготовка кластера и Argo CDkind, установка Argo CD, доступ к UI, namespace demo
2Репозиторий манифестов и ApplicationDeployment, Service, ресурс Application, auto-sync
3Обновление образа через GitРелиз через commit, rolling update, имитация CI
4Drift, sync policy и откатSelf-heal, git revert, sync windows

Закрепление — итоги, чек-лист.

Рекомендуемый порядок — строго 1 → 2 → 3 → 4. Шаг 2 требует работающий Argo CD из шага 1. Шаг 3 требует Application в статусе Synced из шага 2.


Что понадобится на диске и в сети

  1. kubectl — CLI для Kubernetes. Установка описана в первых шагах K8s.
  2. Docker — для kind или minikube. Альтернатива — встроенный Kubernetes в Docker Desktop.
  3. kind или minikube — один инструмент на выбор.
  4. Git и SSH-ключ или HTTPS-token для push в remote.
  5. Браузер — UI Argo CD по https://localhost:8080 (самоподписанный сертификат, предупреждение можно принять в lab).
  6. 4–8 GB RAM — при нехватке памяти kind может зависнуть на Creating cluster.

Примеры манифестов из lab-сборника — /lab/Примеры/11115 (минимальные YAML для Kubernetes).


Связь с теорией и другими разделами

ТемаРаздел энциклопедии
Pod, Deployment, Service8.06 Kubernetes
GitOps, pull-based deploy8.12 GitOps
Rolling update, стратегии8.04 DevOps CI/CD
Секреты вне Git8.14 Vault practicum
Политики на манифесты8.12 DevSecOps
Supply chain, pin digest8.12 Supply chain

Типичные проблемы до старта

СимптомВероятная причинаЧто сделать
kind create cluster зависаетМало RAM или Docker не запущенОсвободите память, перезапустите Docker Desktop
kubectl пишет connection refusedНеверный contextkubectl config get-contexts и выберите kind-gitops-lab
Argo CD UI не открываетсяport-forward не запущенПовторите kubectl port-forward svc/argocd-server -n argocd 8080:443
Application OutOfSync сразуНеверный repoURL или pathПроверьте URL и ветку main в demo-app.yaml

Подробные команды и expected output — в статьях шагов 1–4.


Временные затраты

ШагПримерное время
1 — кластер + Argo CD20–40 мин
2 — repo + Application30–45 мин
3 — релиз через Git15–25 мин
4 — drift и откат20–30 мин

Итого около 2–3 часов с первым проходом и отладкой сети.


Именование и соглашения lab

ОбъектИмя в practicum
kind clustergitops-lab
Applicationdemo-nginx
namespace appdemo
Git repoinfra-gitops-lab
Git pathapps/demo/

Единые имена упрощают копирование команд из статей.


Связь с lab-примерами

ПримерЧто взять
/lab/Примеры/11115Минимальные Deployment/Service YAML
/lab/Примеры/1134CI pipeline, bump manifest

Энциклопедические статьи дают контекст, lab — готовые фрагменты кода.


Чек перед шагом 1

docker info >/dev/null 2>&1 && echo "Docker OK" || echo "Start Docker"
command -v kubectl >/dev/null && echo "kubectl OK"
command -v kind >/dev/null || command -v minikube >/dev/null && echo "cluster tool OK"
git --version

Все четыре проверки должны вывести OK или версию.


Ожидаемый результат после всего практикума

После шага 4 вы сможете:

  1. Объяснить, почему Git — источник правды для конфигурации кластера.
  2. Создать Argo CD Application с automated sync и selfHeal.
  3. Выпустить новую версию образа одним commit без ручного kubectl apply.
  4. Обнаружить drift и откатить релиз через git revert.
  5. Назвать отличия dev-политики sync (automated) от prod (manual sync, sync windows).

Полный walkthrough перед шагом 1

Ниже — сквозной сценарий подготовки окружения без пропусков. Выполняйте команды в одном терминале, фиксируйте вывод при отклонениях.

Шаг A — проверка Docker и инструментов

docker info >/dev/null 2>&1 && echo "Docker OK" || echo "FAIL: запустите Docker Desktop"
command -v kind >/dev/null && kind version || echo "FAIL: установите kind"
command -v kubectl >/dev/null && kubectl version --client --short 2>/dev/null || kubectl version --client
git --version

Ожидаемый результат — четыре блока без FAIL. Пример kind version:

kind v0.24.0 go1.22.5 linux/amd64

Шаг B — создание кластера gitops-lab

kind create cluster --name gitops-lab
kubectl config use-context kind-gitops-lab
kubectl get nodes

Ожидаемый вывод kubectl get nodes:

NAME STATUS ROLES AGE VERSION
gitops-lab-control-plane Ready control-plane 45s v1.31.0

Шаг C — установка Argo CD

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
kubectl wait --for=condition=Available deployment/argocd-server -n argocd --timeout=300s
kubectl get pods -n argocd

Все поды argocd-* должны перейти в Running в течение 2–5 минут. Если argocd-server в Pending — проверьте RAM Docker Desktop (минимум 6 GB).

Шаг D — доступ к UI

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d && echo
kubectl port-forward svc/argocd-server -n argocd 8080:443

В браузере откройте https://localhost:8080, логин admin. Предупреждение о сертификате в lab принимают — не открывайте port-forward на 0.0.0.0 в production.

Шаг E — namespace demo

kubectl create namespace demo
kubectl get ns argocd demo

Ожидаемый вывод:

NAME STATUS AGE
argocd Active 8m
demo Active 3s

Типичные ошибки на этапе подготовки

СимптомОжидаемый вывод при успехеЧто делать
kind create cluster зависает на Preparing nodesПрогресс за 1–3 минУвеличьте RAM Docker, перезапустите engine
Unable to connect to the servercluster-info без ошибкиkubectl config use-context kind-gitops-lab
argocd-server CrashLoopBackOffPod Running 1/1kubectl logs -n argocd -l app.kubernetes.io/name=argocd-server --tail=50
port-forward address already in useТуннель на 8080netstat -ano | findstr 8080 (Windows) или смените локальный порт на 8081
Пароль admin не подходитДекодированная строка без пробеловПовторите base64 decode, проверьте namespace argocd

Предупреждения безопасности раздела

  1. Root-пароль Argo CD (admin) смените после lab или удалите port-forward из интернета.
  2. Манифесты в public Git без секретов — пароли и tokens только в Vault practicum.
  3. Stable manifest Argo CD тянет образы из публичного registry — в production pin digest (Supply chain).
  4. RBAC kind по умолчанию широкий — учебный стенд; в prod ограничьте Argo CD через AppProject.
  5. Self-signed TLS на UI — норма для lab; в prod используйте Ingress с Let's Encrypt или corporate CA.

Чек-лист готовности к шагу 2

#ПроверкаКомандаОжидание
1Context кластераkubectl config current-contextkind-gitops-lab
2Argo CD serverkubectl get deploy argocd-server -n argocdREADY 1/1
3UI доступенcurl при port-forwardHTTP 200 или 302
4Namespace demokubectl get ns demoActive
5Git установленgit --versionверсия без ошибки
6Remote repo готоваккаунт GitHub/GitLabпустой или новый repo

Все шесть пунктов зелёные — переходите к шагу 2.


Сравнение kind и minikube для lab

Критерийkindminikube
Скорость стартабыстрее, один контейнерчуть дольше
RAM4 GB минимум6–8 GB комфортнее
Multi-nodeда, через configограниченно
Удалениеkind delete clusterminikube delete

Для practicum достаточно kind; minikube — если kind недоступен на вашей ОС.


Ожидаемые артефакты после всего практикума

АртефактГде живёт
Репозиторий infra-gitops-labGitHub/GitLab
Application demo-nginxnamespace argocd
Deployment + Servicenamespace demo
История Git commitsbump образа, revert
Runbook в головеdrift → git revert

Закрепление — итоги, чек-лист.