GitLabKubernetesHelmSecurity

Установка GitLab Runner на Kubernetes с помощью Helm chart

Полное руководство по развертыванию CI/CD исполнителя в Kubernetes кластере

12 февраля 2026Арно Фернандес
Введение
Автоматизация CI/CD с GitLab Runner и Kubernetes

Использование CI/CD систем для быстрой сборки и развертывания программного обеспечения стало стандартом в профессиональной разработке. Команды, использующие CI/CD системы, могут собирать, тестировать и развертывать каждый коммит из своего репозитория.

Вместе с CI/CD системами, инструменты автоматизированного развертывания и оркестрации, такие как Kubernetes, заняли центральное место в современных дата-центрах с полностью контейнеризированными рабочими нагрузками.

Автоматизированный пайплайн для сборки, тестирования и развертывания вашего кода становится реальностью при интеграции CI/CD системы с Kubernetes. Создание такой системы становится простым с помощью GitLab Runner и Kubernetes кластера.

В этом руководстве я покажу, как настроить CI/CD систему GitLab и запустить её на Kubernetes кластере — для полностью автоматизированных релизов.

Конфигурация Helm chart

values.yaml для production
values.yaml
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

privileged = true и allowPrivilegeEscalation = true
Почему Docker-in-Docker требует привилегированного режима

Для работы Docker-in-Docker в Kubernetes требуется:

  • privileged = true — доступ к устройствам ядра и монтирование файловых систем
  • allowPrivilegeEscalation = true — возможность повышения привилегий для Docker daemon

Docker-in-Docker с TLS

Конфигурация GitLab CI/CD pipeline
.gitlab-ci.yml
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" — путь к сертификатам TLS
  • DOCKER_TLS_VERIFY: 1 — включение проверки TLS сертификатов

Решение сетевых проблем

Настройка MTU

В некоторых сетевых окружениях (особенно при использовании 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. Ключевые аспекты:

  1. Использование privileged = true с allowPrivilegeEscalation = true для обеспечения работы Docker-in-Docker
  2. Настройка Docker-in-Docker с TLS для безопасной коммуникации
  3. Решение сетевых проблем через настройку MTU при необходимости
  4. Использование emptyDir volumes для хранения сертификатов TLS

Нужна помощь с CI/CD?

Мы поможем настроить GitLab Runner и CI/CD pipeline для ваших проектов. Свяжитесь с нами для консультации.