Работа с Kubernetes из GitLab

GitLab — инструмент непрерывной интеграции. GitLab позволяет собирать, тестировать и запускать контейнеризованные приложения.

Вы можете работать с Kubernetes в GitLab двумя способами:

Для любого из способов необходимо выполнить подготовительную работу.

Перед началом работы

Создайте виртуальную машину из образа GitLab

Запустите GitLab на виртуальной машине с публичным IP-адресом:

  1. На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.

  2. В поле Имя введите имя виртуальной машины: ci-tutorial-gitlab.

  3. Выберите зону доступности, в которой будет находиться виртуальная машина.

  4. В разделе Образы нажмите кнопку Выбрать.

  5. В открывшемся окне откройте вкладку DevTools.

  6. Выберите образ GitLab.

  7. В блоке Вычислительные ресурсы укажите следующую конфигурацию:

    • vCPU2
    • Гарантированная доля vCPU100%
    • RAM2 ГБ
  8. В блоке Сетевые настройки выберите, к какой подсети подключить виртуальную машину при создании.

  9. В поле Публичный адрес укажите Автоматически.

  10. Укажите данные для доступа на виртуальную машину:

    • В поле Логин введите имя пользователя.
    • В поле SSH ключ скопируйте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты ssh-keygen в Linux и macOS или PuTTYgen в Windows.
  11. Нажмите кнопку Создать ВМ.

Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING, вы можете перейти к ее настройке.

При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.

Настройте GitLab

Чтобы настроить GitLab и подготовить процесс непрерывной интеграции (Continuous Integration, CI), создайте новый проект и введите параметры для авторизации в CI.

  1. Откройте в браузере административную панель GitLab на созданной ВМ. Для этого откройте в браузере ссылку вида http://<публичный-IP-адрес-ВМ>.
  2. Задайте пароль администратора.
  3. Авторизуйтесь с логином root и заданным паролем администратора.
  4. Выберите сервис Create a project.
  5. Задайте имя проекта: gitlab-test.
  6. Нажмите кнопку Create project.

Создайте ресурсы Kubernetes

Для выполнения сценариев создайте необходимые ресурсы Kubernetes:

  1. Создайте кластер Kubernetes.
  2. Создайте группу узлов Kubernetes.

Получите токен сервисного аккаунта Kubernetes для аутентификации в GitLab

Чтобы получить сервисный токен:

  1. Сохраните спецификацию для создания сервисного аккаунта в YAML-файл gitlab-admin-service-account.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: gitlab-admin
      namespace: kube-system
    ---
    apiVersion: rbac.authorization.k8s.io/v1beta1
    kind: ClusterRoleBinding
    metadata:
      name: gitlab-admin
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: cluster-admin
    subjects:
    - kind: ServiceAccount
      name: gitlab-admin
      namespace: kube-system
    
  2. Выполните команду:

    kubectl apply -f gitlab-admin-service-account.yaml
    
  3. Узнайте токен с помощью команды kubectl describe secret. Он будет указан в поле token:

    kubectl -n kube-system describe secret $(kubectl -n kube-system get secret \
    | grep gitlab-admin \
    | awk '{print $1}')
    
  4. Сохраните полученный токен — он понадобится для следующих шагов.

Подключите кластер Kubernetes к сборкам GitLab

Для того, чтобы запускать задачи сборки на кластере Kubernetes, подключите кластер в настройках GitLab.

  1. Откройте в браузере ссылку вида http://<публичный IP-адрес ВМ GitLab>/root.

  2. Выберите проект с именем gitlab-test.

  3. В открывшемся окне слева нажмите на Operations и выберите пункт Kubernetes.

  4. Нажмите кнопку Add Kubernetes cluster.

  5. В открывшемся окне нажмите Add existing cluster.

  6. В поле Kubernetes cluster name введите имя кластера.

  7. В поле API URL введите адрес узла мастера. Узнайте его с помощью команды:

    yc managed-Kubernetes cluster get <cluster-id> --format=json \
    | jq -r .master.endpoints.external_v4_endpoint
    
  8. В поле CA Certificate введите сертификат мастера. Узнайте его с помощью команды:

    yc managed-kubernetes cluster get my-cluster --format=json \
    | jq -r .master.master_auth.cluster_ca_certificate
    
  9. В поле Service Token введите токен, который GitLab будет использовать для создания ресурсов Kubernetes. Используйте токен, полученный перед началом работы.

  10. Нажмите кнопку Save changes.

  11. Установите на кластер Kubernetes приложения, необходимые для корректной работы GitLab Runner:

    • Напротив надписи Helm Tiller нажмите кнопку Install.
    • Напротив надписи GitLab Runner нажмите кнопку Install.

Теперь вы можете запускать автоматизированные сборки внутри своего Kubernetes кластера.

Подробнее про настройки подключения кластера Kubernetes к сборкам GitLab читайте в документации GitLab.

Настройте автоматическое развертывание Kubernetes ресурсов из CI

Чтобы настроить автоматическое развертывание, необходимо прописать адрес мастера и токен сервисного аккаунта в настройках GitLab.

  1. Создайте переменные окружения GitLab:

    • KUBE_URL – адрес мастера. Узнайте его с помощью команды:

      yc managed-kubernetes cluster get <cluster-id> --format=json \
      | jq -r .master.endpoints.external_v4_endpoint
      
    • KUBE_TOKEN – токен, который будет использовать GitLab для применения конфигурации. Используйте токен, полученный перед началом работы.

  2. Используйте переменные окружения на этапе развертывания приложения.

    Файл конфигурации .gitlab-ci.yml в этом случае будет выглядеть следующим образом:

    deploy:
      image: gcr.io/cloud-builders/kubectl:latest
      stage: deploy
      script:
        - kubectl config set-cluster k8s --server="$KUBE_URL" --insecure-skip-tls-verify=true
        - kubectl config set-credentials admin --token="$KUBE_TOKEN"
        - kubectl config set-context default --cluster=k8s --user=admin
        - kubectl config use-context default
        - kubectl apply -f k8s.yaml
    

Теперь, при каждом запуске автоматизированной сборки, будет создаваться задача по изменению конфигурации ресурсов Kubernetes.

См. также