null

Gitlab agent - Quick start

Вы когда-нибудь сталкивались с проблемой частого деплоя большого количества приложений в Kubernetes-кластер? Представьте, что у вас десяток сервисов, которые успешно сбилдились, и образы приложений ждут своего часа в registry, но к сожалению деплойменты в Kubernetes сами себя не рестартанут. Вам приходится вручную перезапускать каждый деплоймент, чтобы он подхватил новый образ приложения. Возможно, вы даже написали скрипт для ускорения этой процедуры. Но, как порядочный DevOps-инженер, вы задумываетесь: "Неужели нельзя оптимизировать этот процесс?" Можно! И сегодня мы рассмотрим, как GitLab Agent решает эту проблему, позволяя управлять Kubernetes-кластером напрямую из GitLab CI.

GitLab Agent — это компонент GitLab, который помогает интегрировать и автоматизировать процессы CI/CD с использованием GitLab и Kubernetes. Агент обеспечивает связь между GitLab и Kubernetes-кластерами, позволяя деплоить приложения и управлять ими непосредственно из GitLab.
 

Этому инструменты можно найти множество применений, но сейчас мы рассмотрим простой пример рестарта деплоймента из CI для обновления образа приложения.

Для данного рецепта вам понадобится:

  • Kubernetes-кластер
  • GitLab (если у вас self-hosted, убедитесь что то, что стоит перед gitlab умеет в websocket )
  • Helm
  • Прямые руки

 

Шаг 1.

Создаем в gitlab новый проект.

Шаг 2.

Заходим в проект и создаем файл с путем вида: .gitlab/agents/project-name/config.yaml

Пока оставляем этот файл пустым.

Шаг 3.

Теперь необходимо задеплоить сам агент в кластер. Находим в нашем созданном проекте раздел Operate-> Kubernetes clusters.

Находим там кнопку Connect a cluster. Нажимаем.

Выбираем репозиторий с нашим агентом (он сам будет предложен для выбора).

Шаг 4.

Выполните сгенерированные Helm команды из командной строки в контексте вашего Kubernetes кластера (лучше их не изменять). Сохраните access token, он больше не появится.

Закройте окно и обновите страницу, чтобы статус сменился с Never connected на Connected.

Шаг 5.

Идем в репозиторий вашего сервиса (проекта), в котором располагается непосредственно gitlab-ci, в котором вы хотите использовать команды управления Kubernetes кластером. Смотрим на url этого проекта и вставляем запись в ранее созданный файл .gitlab/agents/project-name/config.yaml в проекте агента.

Запись должна выглядеть примерно так, по надобности можно добавлять сколько угодно проектов, чтобы дать доступ к ним агенту.

Шаг 6.

Осталось добавить новую джобу в ci вашего сервиса. Это мой пример, но вы можете оформить ее как хотите. Только укажу, что необходимо использовать DEPLOYMENT_NAME ровно такое же как оно отображается в кластере. А K8S_CONTEXT состоит из "path проекта с агентом" : "имя агнета".

 

Ура! Теперь можно идти переписывать все ci в проектах и больше не заниматься ручным рестартом деплойментов в Kubernetes кластере.

Назад