1. Архитектура CI/CD и методы интеграции GitLab с кластером Kubernetes
Архитектура CI/CD и методы интеграции GitLab с кластером Kubernetes
Добро пожаловать на курс «Автоматизация деплоя в Kubernetes с помощью GitLab CI». Это первая статья, в которой мы заложим фундамент для всех последующих практических занятий. Прежде чем писать скрипты и конфигурации, необходимо четко понимать, как взаимодействуют между собой компоненты системы, где выполняется код и каким образом команды доставки доходят до вашего кластера.
В этой статье мы разберем архитектуру CI/CD, роль GitLab Runner и основные методы «общения» между GitLab и Kubernetes.
Что такое CI/CD в контексте Kubernetes?
Аббревиатура CI/CD расшифровывается как Continuous Integration (Непрерывная интеграция) и Continuous Delivery/Deployment (Непрерывная доставка/развертывание).
В классической разработке процесс выглядел так: разработчик писал код, передавал его системному администратору, а тот вручную копировал файлы на сервер. В мире Kubernetes и микросервисов такой подход невозможен из-за сложности и масштаба систем.
При использовании GitLab CI процесс выглядит следующим образом:
!Общая схема потока данных от кода разработчика до работающего приложения в кластере.
Ключевые компоненты архитектуры
Чтобы понять, как настроить деплой, нужно знать участников процесса. Их всего три:
1. GitLab Server
Это «мозг» операции. Здесь хранится ваш код, настройки доступа и конфигурация пайплайнов (файлы.gitlab-ci.yml). GitLab Server управляет очередью задач, но сам он не выполняет сборку или деплой.2. GitLab Runner
Это «руки» системы. GitLab Runner — это отдельное приложение (агент), которое получает задачи от GitLab Server и выполняет их. Именно Runner запускает командыdocker build, kubectl apply и другие.> Важно понимать: когда вы пишете скрипт деплоя, этот скрипт выполняется не на сервере GitLab, а на машине, где установлен Runner.
3. Kubernetes Cluster
Это целевая среда, где должно работать ваше приложение. Кластер управляется через API-сервер. Чтобы развернуть приложение, нам нужно отправить правильные команды этому API-серверу.Где разместить GitLab Runner?
Один из самых важных архитектурных вопросов — где именно должен находиться Runner. Существует два основных подхода.
Подход А: Внешний Runner
Runner установлен на отдельной виртуальной машине или используется общий (Shared) Runner, предоставляемый GitLab.com.* Плюс: Простота старта (не нужно ничего инсталлировать, если используете облачные раннеры). * Минус: Для деплоя Runner должен иметь сетевой доступ к API вашего кластера Kubernetes. Это означает, что API кластера должен быть открыт в интернет, что создает потенциальные риски безопасности.
Подход Б: Runner внутри кластера
Вы устанавливаете GitLab Runner прямо внутрь вашего Kubernetes-кластера (как обычный под).* Плюс: Безопасность. Раннеру не нужно выходить в интернет, чтобы «постучаться» в кластер — он уже внутри. API кластера можно закрыть от внешнего мира. * Плюс: Скорость. Скачивание образов и кэширование происходит быстрее внутри внутренней сети. * Минус: Требует предварительной настройки и выделения ресурсов кластера.
!Сравнение расположения Runner относительно кластера Kubernetes.
Методы интеграции GitLab и Kubernetes
Как именно Runner сообщает кластеру: «Эй, обнови приложение»? Существует несколько способов аутентификации и взаимодействия.
1. Прямое использование KUBECONFIG (Push-модель)
Это самый простой и распространенный метод для начинающих. Вы берете файл конфигурации доступа к кластеру (kubeconfig), кодируете его и сохраняете как переменную в GitLab CI/CD Variables.В скрипте пайплайна это выглядит примерно так:
Как это работает:
Runner скачивает переменную, создает временный файл с ключами доступа и использует утилиту kubectl для отправки команд в кластер.
Недостатки: * Вам нужно передавать чувствительные данные (ключи админа или сервисного аккаунта) в GitLab. * Если API кластера закрыт фаерволом, этот метод не сработает с внешними раннерами.
2. GitLab Agent for Kubernetes (Рекомендуемый метод)
Это современный способ интеграции, который решает проблемы безопасности. В кластер устанавливается специальный агент (GitLab Agent).Как это работает: Агент устанавливает исходящее соединение с GitLab. Это работает как туннель. GitLab Server использует этот туннель, чтобы передавать команды в кластер. Вам не нужно открывать порты во внешний мир.
Преимущества агента:
* Не нужно хранить KUBECONFIG в переменных CI/CD.
* Работает за NAT и фаерволами.
* Позволяет использовать GitOps-подходы (автоматическая синхронизация состояния).
3. Сертификатная интеграция (Устарело)
Ранее в GitLab существовала кнопка «Add Kubernetes Cluster», которая требовала вставки URL API и токена. Этот метод (Certificate-based integration) официально объявлен устаревшим (deprecated) в пользу GitLab Agent, поэтому в нашем курсе мы не будем его рассматривать.Стратегии деплоя: Push vs Pull
Понимая архитектуру, стоит упомянуть две философии доставки кода.
Push-based (Классический CI/CD)
Именно этот подход мы будем изучать в первой части курса. GitLab (через Runner) активно «толкает» (push) изменения в кластер.* Логика: «Я собрал новый образ -> Я запускаю команду kubectl set image».
* Инструменты: Стандартные .gitlab-ci.yml пайплайны.
Pull-based (GitOps)
В этом подходе кластер сам следит за репозиторием. Внутри кластера работает оператор (например, ArgoCD или Flux, а также GitLab Agent в режиме GitOps).* Логика: «Я вижу, что в git-репозитории изменился манифест -> Я привожу себя в соответствие с этим манифестом». * Инструменты: GitLab Agent, ArgoCD.
Резюме
Для успешной автоматизации деплоя нам нужно:
В следующей статье мы перейдем от теории к практике и подготовим необходимое окружение: создадим простой кластер и настроим локальные инструменты для работы.
Готовы погрузиться в практику? Тогда до встречи в следующем уроке!