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

Kubernetes и CI/CD — обзор раздела

До этого момента ты собирал приложение локально, упаковывал его в Docker-образ и, скорее всего, деплоил на VPS через docker-compose. Это законный путь — и для многих проектов окончательный. Но рано или поздно появляются вопросы, на которые compose не отвечает: что делать, когда нода упала в два часа ночи? Как выкатить новую версию, не прерывая обработку запросов? Как понять, что сервису не хватает памяти, — до того, как его убьёт OOM-killer? Кто и как откатывает плохой релиз? Kubernetes и CI/CD отвечают на все четыре вопроса одинаково: декларативно и автоматически. Ты описываешь желаемое состояние системы, а механизмы следят, чтобы реальность ему соответствовала, — 24 часа в сутки, без выходных.

Краткая версия учебника дала обзор: Pod, Deployment, Service, Ingress, Helm, пайплайн Lint → Test → Build → Scan → Deploy. Этого хватает, чтобы задеплоить pet-проект в k3s. Но в продакшене важна не радость первого деплоя, а спокойствие сотого: что произойдёт, когда контейнер зависнет, диск переполнится, сертификат истечёт или пайплайн пойдёт не по плану. Раздел построен вокруг этого: каждая глава — не справка по API, а ответ на вопрос «что может сломаться и как система это переживёт».

  1. Kubernetes: фундамент — то, без чего остальное не имеет смысла. Архитектура control plane и нод: кто принимает решения и кто их исполняет. Pod как атомарная единица и почему ты почти никогда не создаёшь его руками. Полный манифест Deployment с тремя видами проб, requests/limits и QoS-классами, Services, ConfigMap/Secret, PersistentVolume и CronJob для бэкапов. Плюс рабочий набор kubectl — инструмент, которым ты проводишь в кластере половину рабочего дня.

  2. Kubernetes: продвинутое — то, что отличает учебный кластер от боевого. Ingress и Ingress Controller, TLS через cert-manager, Helm как полноценный пакетный менеджер (шаблоны, values, зависимости, хуки), StatefulSet для баз данных, NetworkPolicies как сетевой фаервол, RBAC с сервис-аккаунтом для CI, PodDisruptionBudget и горизонтальное автомасштабирование.

  3. Наблюдаемость в Kubernetes — слепой кластер недолговечен. kube-prometheus-stack: метрики control plane, подов и нод; ServiceMonitor и PodMonitor; дашборды Grafana; логи через Loki и Promtail; алертинг через Alertmanager с реальными правилами; и kubectl get events — самый недооценённый источник правды.

  4. GitHub Actions глубоко — workflow-синтаксис без воды: jobs, steps, выходы и зависимости, кэширование npm-зависимостей и слоёв Docker через buildx, matrix-стратегии, reusable workflows и composite actions, environment protection rules, OIDC в облако вместо долгоживущих ключей, path-filters для монорепозиториев и отмена устаревших прогонов. Финал — полный пайплайн lint-test-build-scan-deploy.

  5. GitLab CI и GitOps — та же дисциплина на другом синтаксисе: .gitlab-ci.yml со stages и rules, artifacts против cache, docker:dind против kaniko, runner’ы. Затем главный сюжет раздела: GitOps. Почему push-модель деплоя опасна, как ArgoCD переворачивает поток управления, что такое app-of-apps и как CI всего лишь бампает тег образа в инфра-репозитории — а кластер сам приводит себя в нужное состояние.

Раздел опирается на Docker глубоко — образы, слои и сеть контейнеров здесь считаются известными. Healthcheck’и и graceful shutdown из главы о Node.js в продакшене — это ровно те механизмы, на которые опираются readiness- и liveness-пробы. Секреты и политики безопасности продолжают тему раздела про безопасность, а финальная наблюдаемость замыкает дугу с инфраструктурой и логированием.

Заведи локальный кластер — kind или k3d подойдут идеально, они стартуют за минуту и удаляются одной командой. Каждую главу проходи по схеме: примени манифест → сломай намеренно → посмотри, как кластер реагирует → почини. Читать про livenessProbe и получить CrashLoopBackOff на своём поде — разные уровни понимания; нужен второй.