Index
Документация по установке и использованию GitLab Runner Operator через OLM (Operator Lifecycle Manager) в рамках платформы AIOps.
Оглавление
- Описание
- Архитектура
- Namespaces
- Быстрый старт (OLM)
- Команды Makefile
- Конфигурация Runner
- Метрики и мониторинг
- Подключение к GitLab
- RBAC для доступа к секретам PostgreSQL
- Troubleshooting
- Ссылки
Описание
GitLab Runner Operator — официальный Kubernetes-оператор от GitLab
для управления GitLab Runner инстансами через CRD Runner.
В данном проекте оператор устанавливается строго через OLM, что гарантирует:
- корректную установку CRD (полная схема)
- управляемые обновления оператора
- отсутствие «урезанных» CRD и рассинхронизации схем
Архитектура
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | |
Namespaces
| Компонент | Namespace |
|---|---|
| OLM | olm, operators |
| GitLab Runner Operator | tech-gitlab-runner-operator |
| GitLab Runner instances | tech-gitlab-runner-instances |
| Monitoring (Prometheus) | tech-monitoring |
Быстрый старт (OLM)
1. Установка OLM
1 | |
Что делает команда:
- устанавливает CRD OLM
- разворачивает
olm-operatorиcatalog-operator - создаёт namespaces
olmиoperators
Проверка:
1 2 | |
2. Установка GitLab Runner Operator через OLM
1 | |
В процессе:
- создаётся
Subscriptionиз OperatorHub (channelstable) - OLM устанавливает полную CRD
Runner - оператор управляется через
ClusterServiceVersion (CSV)
Проверка:
1 2 3 | |
3. Создание секрета с токеном GitLab
Получите токен в GitLab:
1 | |
Создание секрета:
1 | |
Параметры секрета:
- name:
gitlab-runner-token - namespace:
tech-gitlab-runner-instances - key:
runner-registration-token
4. Создание Runner instance
1 | |
После этого оператор создаст Runner Pod и зарегистрирует его в GitLab.
5. Проверка статуса
1 | |
Также можно проверить вручную:
1 2 | |
Команды Makefile
OLM
1 2 | |
GitLab Runner Operator
1 2 3 | |
Runner instances
1 2 3 | |
RBAC для PostgreSQL
1 2 | |
Конфигурация Runner
Пример Runner Custom Resource:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | |
Основные параметры:
- tags — используются в
.gitlab-ci.yml - concurrent — максимальное число параллельных jobs
- namespace — где создаются build pods
- buildImage — образ по умолчанию
Метрики и мониторинг
Метрики оператора
Источник:
- Service:
gitlab-runner-controller-manager-metrics-service - Namespace:
tech-gitlab-runner-operator - Port:
8443 - Protocol: HTTPS (через
kube-rbac-proxy)
Используется отдельный ServiceMonitor с:
scheme: httpsbearerTokenFileinsecureSkipVerify: true
Метрики GitLab Runner
По умолчанию отключены.
Для включения требуется:
- установка оператора через OLM
- расширенная CRD
- включение через
listenAddrилиspec.config
После включения:
- port:
9242 - path:
/metrics - Service:
gitlab-runner-tech
Prometheus
Метрики собираются через ServiceMonitor в namespace tech-monitoring:
- отдельный monitor для оператора
- отдельный monitor для runner
Подключение к GitLab
Проверка регистрации Runner
В GitLab:
1 | |
Runner должен появиться со статусом online и тегами:
1 | |
Использование в .gitlab-ci.yml
1 2 3 4 5 | |
RBAC для доступа к секретам PostgreSQL
GitLab Runner автоматически читает credentials для миграций из Kubernetes секретов, если они не указаны явно в GitLab CI/CD Variables.
Установка RBAC
1 | |
Команда применяет манифест gitlab-runner-rbac.yaml, который создаёт:
* Role gitlab-runner-postgres-secrets-reader в namespace tech-postgres-databases
* RoleBinding для ServiceAccount gitlab-runner-app-sa
Проверка прав
1 | |
Команда проверяет:
* Существование ServiceAccount
* Права на чтение секретов в namespace tech-postgres-databases
* Наличие RoleBinding
Ожидаемый результат:
1 2 | |
Как это работает
- Если в CI указана переменная
MIGRATION_ENV_VARS_*(например,MIGRATION_ENV_VARS_STAGE), используется она - Если переменная не указана, система автоматически:
- Определяет окружение из
CI_ENVIRONMENT_NAME(stage/pre/production) - Читает секрет
pg-user-{SERVICE}-{ENV}из namespacetech-postgres-databases - Извлекает credentials и создаёт
.env.migrationдля docker
Обратная совместимость
Старый способ через GitLab CI/CD Variables продолжает работать. Автоматическое чтение K8s секретов включается только если MIGRATION_ENV_VARS_* не указана.
Требования
- Секрет должен существовать:
make postgres-init-service-db SERVICE=your-service - RBAC должен быть применён:
make gitlab-runner-apply-rbac - KUBECONFIG должен быть настроен в CI jobs (уже есть через
KUBECONFIG_STAGE/PRE/PROD)
Безопасность
RBAC ограничивает права GitLab Runner:
* Только чтение (get) секретов
* Только в namespace tech-postgres-databases
* Только секреты с префиксом pg-user-*
Troubleshooting
Operator не запускается
1 2 | |
ImagePullBackOff: ose-kube-rbac-proxy
В gitlab-runner-operator.yaml у Subscription задано RELATED_IMAGE_KUBE_RBAC_PROXY → публичный kube-rbac-proxy (quay.io/brancz/...), чтобы при установке с нуля OLM мог подставить override (как задумано в Operator SDK для related images).
Если в конкретной версии CSV sidecar всё ещё тянет битый digest из манифеста bundle — это уже разовая операция в кластере (например kubectl set image … kube-rbac-proxy=…), а не часть репозитория.
CRD не принимает новые поля
Причины:
- оператор установлен не через OLM
- CRD применена вручную
- конфликт версий
Проверка схемы:
1 | |
Runner не регистрируется в GitLab
1 2 | |
Build pods не создаются
1 2 | |
Ссылки
- GitLab Runner Operator (OperatorHub) https://operatorhub.io/operator/gitlab-runner-operator
- GitLab Runner Operator Docs https://docs.gitlab.com/runner/install/operator/
- Operator Lifecycle Manager https://olm.operatorframework.io/
- GitLab Runner https://docs.gitlab.com/runner/