Как выстраивается деплой в Kubernetes с использованием GitLab CI/CD?

«Как выстраивается деплой в Kubernetes с использованием GitLab CI/CD?» — вопрос из категории CI/CD, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Деплой в Kubernetes из GitLab CI/CD организуется через конвейер, описанный в файле .gitlab-ci.yml. Ключевые элементы:

  1. Интеграция кластера Kubernetes: В проекте GitLab необходимо добавить и настроить кластер (Settings > Kubernetes). Это создаст сервисный аккаунт и необходимые RBAC-правила для доступа CI/CD-раннеров к API Kubernetes.
  2. Переменные окружения: Для безопасной работы используются переменные GitLab CI/CD, например, для хранения KUBECONFIG или токенов доступа к регистрам образов (Container Registry).
  3. Этапы конвейера: Типичный конвейер включает стадии build (сборка Docker-образа), test (запуск тестов) и deploy (развертывание в кластере).
  4. Инструменты деплоя: В заданиях используется 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 и действиями.