Интеграция Gitlab и Kubernetes для автоматизации деплоя приложений в кластер

Оцените статью

В первом приближении по моему CV/Blog у меня все готово. Шаблоны приложений созданы, сборка приложений в докер закончена, имеются окружение для разработки и Production-окружение в личном Kubernetes-кластере. Написан Yaml-манифест развертывания приложения в кластере и CI для автоматической сборки образов в GitLab CI.

Что же еще не хватает? Правильно не хватает автоматизированного деплоя в кластер, что называется «По кнопочке» из любого branch и авторазвертывания при деплое в ветку release. Чем собственно сейчас и займемся.

Настройка агента для Kubernetes

Для подключения к кластеру кубика создайте отдельный репозитарий и назовите его например k8s-connection. Создаем дефолтного агента для нашего приложения, для чего в репозитории создаем файл .gitlab/agents/default/config.yaml и пока оставляем его пустым.

В GUI GitLab переходим Operate > Kubernetes clusters > Connect a cluster (agent).

Получаем токен и инструкцию по развертыванию агента в кластере.

Токен мы конечно же сохраняем в хранилище паролей, после чего проверяем, что агент появился в списке и на связь не выходил.

Регистрируем агента при помощи helm-chart по инструкции любезно предоставленной нам гитлабом (helm должен быть установлен на вашей рабочей станции):

$ helm repo add gitlab https://charts.gitlab.io
$ helm repo update
$ helm upgrade --install default gitlab/gitlab-agent \
    --namespace gitlab-agent-default \
    --create-namespace \
    --set image.tag=v16.9.0-rc1 \
    --set config.token=xxx-SECRET-TOKEN-xxx \
    --set config.kasAddress=wss://gitlab.bds.su/-/kubernetes-agent/

Проверяем что пространство имен в кластере создано:

И соответственно удостоверимся, что агент вышел на связь.

Агент готов и можно переходить к настройке проекта.

Настройка проекта для автодеплоя приложения

Дальше сущий ужас и бардак. Пока искал адекватное объяснение процесса было непреодолимое желание все сделать по своему, но раз уж эта чертова интеграция настроена будем петь и плясать от этой стены. Итак, вообще зачем нам понадобился дополнительный репозиторий описанный выше? А он выступает в качестве своеобразного Firewall где мы описываем какие проекты, пользователи и группы могут взаимодействовать с нашим кластером. 

Мы можем разрешить доступ для:

  • Проекта
  • Группы проектов
  • Пользователя

Подробнее на официальном сайте https://docs.gitlab.com/ee/user/clusters/agent/ci_cd_workflow.html#authorize-the-agent

Минимальное содержимое файла .gitlab/agents/default/config.yaml будет выглядеть следующим образом (приминительно для моего приложения).

ci_access:
  projects:
    - id: production-services/chernousov-cv-and-blog

И пример собственно джобы для взаимодействия с кластером.

variables:
  KUBE_CONTEXT: production-services/k8s-connection:k8s-connection

deploy-prod:
  image:
    name: bitnami/kubectl:latest
    entrypoint: [""]
  stage: deploy-prod
  script:
    - kubectl config get-contexts
    - kubectl config use-context $KUBE_CONTEXT
    - kubectl get pods

Похожие записи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

В этой статье мы рассмотрим пошаговую настройку кластера Kubernetes на Ubuntu 24.04 с тремя узлами: один мастер (который также может запускать пользовательские поды) и два рабочих узла. Мы настроим PersistentVolume…

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

В рамках создания собственного кластера Kubernetes я поднаял кластер Mysql который работает в режиме Master-Slave и Slave-узлы соответственно работают в режиме read-only, а мастер в read-write. Соответственно мне нужен балансировщик…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Настройка кластера Kubernetes в Ubuntu Linux 24.04: три узла (один мастер с возможностью запуска пользовательских подов, PVC в каталоге на хосте, сеть на Calico)

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Инструкция по установке и настройке ProxySQL в Ubuntu 24.04

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по настройке UFW в Ubuntu: от основ до продвинутых правил

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Полное руководство по развертыванию GlusterFS в Ubuntu Linux: от подготовки до тестирования производительности

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Подробная инструкция по настройке кластера из трёх серверов MySQL на Ubuntu 24.04

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования

Полное руководство по настройке NFS-клиента в Ubuntu Linux: от установки до автоматического монтирования