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

О разделе

Сквозной практикум по 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

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