Ответ
Деплой в Kubernetes из GitLab CI/CD организуется через конвейер, описанный в файле .gitlab-ci.yml. Ключевые элементы:
- Интеграция кластера Kubernetes: В проекте GitLab необходимо добавить и настроить кластер (Settings > Kubernetes). Это создаст сервисный аккаунт и необходимые RBAC-правила для доступа CI/CD-раннеров к API Kubernetes.
- Переменные окружения: Для безопасной работы используются переменные GitLab CI/CD, например, для хранения
KUBECONFIGили токенов доступа к регистрам образов (Container Registry). - Этапы конвейера: Типичный конвейер включает стадии
build(сборка Docker-образа),test(запуск тестов) иdeploy(развертывание в кластере). - Инструменты деплоя: В заданиях используется
kubectlдля применения манифестов или Helm для управления чартами.
Пример задания деплоя в .gitlab-ci.yml:
deploy:production:
stage: deploy
image: bitnami/kubectl:latest
script:
# Обновляем конфигурацию kubectl для доступа к целевому кластеру
- kubectl config use-context production-cluster
# Применяем манифесты из репозитория
- kubectl apply -f k8s/manifests/ --recursive
# Проверяем статус развертывания
- kubectl rollout status deployment/my-app -n production
only:
- main # Запускать только при пуше в ветку main
Практические нюансы:
- Для динамического провижининга (например, в GKE или EKS) часто используется
kubectlс конфигурацией, автоматически сгенерированной при интеграции кластера. - Для сложных развертываний применяется Helm:
helm upgrade --install my-app ./chart --values values-production.yaml. - Критично настроить корректные права (RBAC) для сервисного аккаунта GitLab в кластере, ограничив их необходимыми namespace и действиями.