Установка GitLab Runner на Kubernetes с помощью Helm chart
Полное руководство по развертыванию CI/CD исполнителя в Kubernetes кластере
Использование CI/CD систем для быстрой сборки и развертывания программного обеспечения стало стандартом в профессиональной разработке. Команды, использующие CI/CD системы, могут собирать, тестировать и развертывать каждый коммит из своего репозитория.
Вместе с CI/CD системами, инструменты автоматизированного развертывания и оркестрации, такие как Kubernetes, заняли центральное место в современных дата-центрах с полностью контейнеризированными рабочими нагрузками.
Автоматизированный пайплайн для сборки, тестирования и развертывания вашего кода становится реальностью при интеграции CI/CD системы с Kubernetes. Создание такой системы становится простым с помощью GitLab Runner и Kubernetes кластера.
В этом руководстве я покажу, как настроить CI/CD систему GitLab и запустить её на Kubernetes кластере — для полностью автоматизированных релизов.
Конфигурация Helm chart
Helm: https://charts.gitlab.io, Chart: gitlab/gitlab-runner
1gitlabUrl: https://gitlab.com
2runnerToken: glrt-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
3
4runners:
5 config: |
6 [[runners]]
7 [runners.kubernetes]
8 namespace = "{{ default .Release.Namespace .Values.runners.jobNamespace }}"
9 image = "ubuntu:20.04"
10 privileged = true
11 [[runners.kubernetes.volumes.empty_dir]]
12 name = "docker-certs"
13 mount_path = "/certs/client"
14 medium = "Memory"Объяснение securityContext
Для работы Docker-in-Docker в Kubernetes требуется:
privileged = true— доступ к устройствам ядра и монтирование файловых системallowPrivilegeEscalation = true— возможность повышения привилегий для Docker daemon
Docker-in-Docker с TLS
1build-backend:
2 stage: build
3 image: docker:24.0
4 services:
5 - name: docker:24.0-dind
6 command:
7 - "--mtu=1400"
8 variables:
9 HEALTHCHECK_TCP_PORT: "2376"
10 variables:
11 DOCKER_HOST: tcp://docker:2376
12 DOCKER_TLS_CERTDIR: "/certs"
13 DOCKER_TLS_VERIFY: 1
14 DOCKER_CERT_PATH: "$DOCKER_TLS_CERTDIR/client"Пояснение параметров:
--mtu=1400— решение сетевых проблем в некоторых окруженияхDOCKER_TLS_CERTDIR: "/certs"— путь к сертификатам TLSDOCKER_TLS_VERIFY: 1— включение проверки TLS сертификатов
Решение сетевых проблем
В некоторых сетевых окружениях (особенно при использовании VPN, overlay сетей или определенных провайдеров) могут возникать проблемы с фрагментацией пакетов.
Параметр --mtu=1400 уменьшает Maximum Transmission Unit для Docker daemon, что помогает избежать фрагментации пакетов.
Как мы видим, настройка GitLab Runner на Kubernetes не является сложной задачей. С помощью регистрационного токена из GitLab мы можем легко авторизовать нового Runner. Затем простые ConfigMap и Deployment используются для запуска Runner в Kubernetes кластере.
Используя Kubernetes executor на Runner, пайплайны могут автоматически масштабироваться по кластеру по мере роста спроса на ваши задачи сборки. Хотя базовый Runner уже мощный, подключение Docker daemon к Runner позволяет ему собирать Docker контейнеры.
После того как Runner запущен и работает, мы можем выполнять CI/CD пайплайны и развертывать сборки на Kubernetes кластере — всё на 100% автоматизировано.
Установка GitLab Runner в Kubernetes с помощью Helm chart предоставляет мощное решение для CI/CD. Ключевые аспекты:
- Использование
privileged = trueсallowPrivilegeEscalation = trueдля обеспечения работы Docker-in-Docker - Настройка Docker-in-Docker с TLS для безопасной коммуникации
- Решение сетевых проблем через настройку MTU при необходимости
- Использование emptyDir volumes для хранения сертификатов TLS
Нужна помощь с CI/CD?
Мы поможем настроить GitLab Runner и CI/CD pipeline для ваших проектов. Свяжитесь с нами для консультации.