Работа с Kubernetes из GitLab
GitLab — инструмент непрерывной интеграции. GitLab позволяет собирать, тестировать и запускать контейнеризованные приложения.
Вы можете работать с Kubernetes в GitLab двумя способами:
- Подключить Kubernetes кластер к сборкам GitLab.
- Автоматически развертывать Kubernetes ресурсы из CI.
Для любого из способов необходимо выполнить подготовительную работу.
Перед началом работы
Создайте виртуальную машину из образа GitLab
Запустите GitLab на виртуальной машине с публичным IP-адресом:
-
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины:
ci-tutorial-gitlab
. -
Выберите зону доступности, в которой будет находиться виртуальная машина.
-
В разделе Образы нажмите кнопку Выбрать.
-
В открывшемся окне откройте вкладку DevTools.
-
Выберите образ GitLab.
-
В блоке Вычислительные ресурсы укажите следующую конфигурацию:
- vCPU —
2
- Гарантированная доля vCPU —
100%
- RAM —
2 ГБ
- vCPU —
-
В блоке Сетевые настройки выберите, к какой подсети подключить виртуальную машину при создании.
-
В поле Публичный адрес укажите
Автоматически
. -
Укажите данные для доступа на виртуальную машину:
- В поле Логин введите имя пользователя.
- В поле SSH ключ скопируйте содержимое файла открытого ключа. Пару ключей для подключения по SSH необходимо создать самостоятельно. Для создания ключей используйте сторонние инструменты, например утилиты
ssh-keygen
в Linux и macOS или PuTTYgen в Windows.
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING
, вы
можете перейти к ее настройке.
При создании виртуальной машине назначаются IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
Настройте GitLab
Чтобы настроить GitLab и подготовить процесс непрерывной интеграции (Continuous Integration, CI), создайте новый проект и введите параметры для авторизации в CI.
- Откройте в браузере административную панель GitLab на созданной ВМ. Для этого откройте в браузере ссылку вида
http://<публичный-IP-адрес-ВМ>
. - Задайте пароль администратора.
- Авторизуйтесь с логином
root
и заданным паролем администратора. - Выберите сервис Create a project.
- Задайте имя проекта:
gitlab-test
. - Нажмите кнопку Create project.
Создайте ресурсы Kubernetes
Для выполнения сценариев создайте необходимые ресурсы Kubernetes:
Получите токен сервисного аккаунта Kubernetes для аутентификации в GitLab
Чтобы получить сервисный токен:
-
Сохраните спецификацию для создания сервисного аккаунта в 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
-
Выполните команду:
Bashkubectl apply -f gitlab-admin-service-account.yaml
-
Узнайте токен с помощью команды
kubectl describe secret
. Он будет указан в поле token:Bashkubectl -n kube-system describe secret $(kubectl -n kube-system get secret \ | grep gitlab-admin \ | awk '{print $1}')
-
Сохраните полученный токен — он понадобится для следующих шагов.
Подключите кластер Kubernetes к сборкам GitLab
Для того, чтобы запускать задачи сборки на кластере Kubernetes, подключите кластер в настройках GitLab.
-
Откройте в браузере ссылку вида
http://<публичный IP-адрес ВМ GitLab>/root
. -
Выберите проект с именем
gitlab-test
. -
В открывшемся окне слева нажмите на Operations и выберите пункт Kubernetes.
-
Нажмите кнопку Add Kubernetes cluster.
-
В открывшемся окне нажмите Add existing cluster.
-
В поле Kubernetes cluster name введите имя кластера.
-
В поле API URL введите адрес узла мастера. Узнайте его с помощью команды:
Bashyc managed-Kubernetes cluster get <cluster-id> --format=json \ | jq -r .master.endpoints.external_v4_endpoint
-
В поле CA Certificate введите сертификат мастера. Узнайте его с помощью команды:
Bashyc managed-kubernetes cluster get my-cluster --format=json \ | jq -r .master.master_auth.cluster_ca_certificate
-
В поле Service Token введите токен, который GitLab будет использовать для создания ресурсов Kubernetes. Используйте токен, полученный перед началом работы.
-
Нажмите кнопку Save changes.
-
Установите на кластер Kubernetes приложения, необходимые для корректной работы GitLab Runner:
- Напротив надписи Helm Tiller нажмите кнопку Install.
- Напротив надписи GitLab Runner нажмите кнопку Install.
Теперь вы можете запускать автоматизированные сборки внутри своего Kubernetes кластера.
Подробнее про настройки подключения кластера Kubernetes к сборкам GitLab читайте в документации GitLab.
Настройте автоматическое развертывание Kubernetes ресурсов из CI
Чтобы настроить автоматическое развертывание, необходимо прописать адрес мастера и токен сервисного аккаунта в настройках GitLab.
-
Создайте переменные окружения GitLab:
-
KUBE_URL
– адрес мастера. Узнайте его с помощью команды:Bashyc managed-kubernetes cluster get <cluster-id> --format=json \ | jq -r .master.endpoints.external_v4_endpoint
-
KUBE_TOKEN
– токен, который будет использовать GitLab для применения конфигурации. Используйте токен, полученный перед началом работы.
-
-
Используйте переменные окружения на этапе развертывания приложения.
Файл конфигурации
.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.