Интеграция с Argo CD
Argo CD
В этом руководстве описана интеграция инстанса Yandex Managed Service for GitLab, кластера Managed Service for Kubernetes и установленных в кластере Argo CD и GitLab Runner, который выполняет сборку Docker-контейнеров с помощью инструмента Kaniko
Чтобы интегрировать Argo CD с Managed Service for Kubernetes и Managed Service for GitLab:
- Создайте инстанс GitLab.
- Настройте GitLab.
- Создайте GitLab Runner.
- Подготовьте репозиторий приложения для развертывания.
- Разверните приложение с помощью Argo CD.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру
-
Если у вас еще нет сети, создайте ее.
-
Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Managed Service for Kubernetes и группа узлов.
-
- Сервисный аккаунт для ресурсов Kubernetes с ролями
k8s.clusters.agent
иvpc.publicAdmin
на каталог, в котором создается кластер Managed Service for Kubernetes. - Сервисный аккаунт для узлов Managed Service for Kubernetes с ролями container-registry.images.puller и container-registry.images.pusher. От его имени узлы Managed Service for Kubernetes будут загружать в реестр собранные в GitLab Docker-образы, а также скачивать их для запуска подов.
Совет
Вы можете использовать один и тот же сервисный аккаунт для управления кластером Managed Service for Kubernetes и его группами узлов.
- Сервисный аккаунт для ресурсов Kubernetes с ролями
-
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте группу безопасности для работы инстанса Managed Service for GitLab.
-
Создайте кластер Managed Service for Kubernetes и группу узлов. При создании кластера Managed Service for Kubernetes укажите ранее созданные сервисные аккаунты для ресурсов и узлов и группы безопасности для кластера.
-
Сохраните идентификатор созданного реестра — он понадобится для следующих шагов.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации кластера Managed Service for Kubernetes k8s-argocd.tf
. В файле описаны:-
Сеть.
-
Кластер Managed Service for Kubernetes.
-
Сервисный аккаунт для ресурсов и узлов Managed Service for Kubernetes.
-
Реестр Container Registry.
-
Группы безопасности, которые содержат необходимые правила для кластера Managed Service for Kubernetes и входящих в него групп узлов.
В этих группах безопасности также присутствуют правила, необходимые для работы инстанса Managed Service for GitLab и реестра Container Registry.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
-
Укажите в файле конфигурации:
- Идентификатор каталога.
- Версию Kubernetes для кластера Managed Service for Kubernetes и групп узлов.
- CIDR кластера Managed Service for Kubernetes.
- Имя сервисного аккаунта для ресурсов и узлов Managed Service for Kubernetes.
- Имя реестра Container Registry.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Установите дополнительные зависимости
Установите в локальном окружении:
- Интерфейс командной строки Yandex Cloud (YC CLI).
- Утилиту потоковой обработки JSON-файлов
jq
. - Менеджер пакетов Helm
. -
Установите kubectl
и настройте его на работу с созданным кластером.
Создайте инстанс GitLab
Создайте инстанс Managed Service for GitLab или виртуальную машину с образом GitLab в той же облачной сети, где расположен кластер Managed Service for Kubernetes.
Создайте инстанс Managed Service for GitLab согласно инструкции.
Запустите GitLab на ВМ с публичным IP-адресом.
-
На странице каталога в консоли управления
нажмите кнопку Создать ресурс и выберитеВиртуальная машина
. -
В блоке Образ загрузочного диска в поле Поиск продукта введите
Gitlab
и выберите публичный образ GitLab. -
В блоке Расположение выберите зону доступности, в которой будет находиться ВМ. Если вы не знаете, какая зона доступности вам нужна, оставьте выбранную по умолчанию.
-
В блоке Вычислительные ресурсы перейдите на вкладку
Своя конфигурация
и укажите необходимую платформу, количество vCPU и объем RAM:- Платформа —
Intel Ice Lake
. - vCPU —
4
. - Гарантированная доля vCPU —
100%
. - RAM —
8 ГБ
.
- Платформа —
-
В блоке Сетевые настройки:
- В поле Подсеть выберите сеть и подсеть, к которым нужно подключить ВМ. Если нужной сети или подсети еще нет, создайте их.
- В поле Публичный адрес оставьте значение
Автоматически
, чтобы назначить ВМ случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.
-
В блоке Доступ выберите вариант SSH-ключ и укажите данные для доступа на ВМ:
- В поле Логин введите имя пользователя. Не используйте имя
root
или другие имена, зарезервированные ОС. Для выполнения операций, требующих прав суперпользователя, используйте командуsudo
. -
В поле SSH-ключ выберите SSH-ключ, сохраненный в вашем профиле пользователя организации.
Если в вашем профиле нет сохраненных SSH-ключей или вы хотите добавить новый ключ:
- Нажмите кнопку Добавить ключ.
- Задайте имя SSH-ключа.
- Загрузите или вставьте содержимое открытого SSH-ключа. Пару SSH-ключей для подключения к ВМ по SSH необходимо создать самостоятельно.
- Нажмите кнопку Добавить.
SSH-ключ будет добавлен в ваш профиль пользователя организации.
Если в организации отключена возможность добавления пользователями SSH-ключей в свои профили, добавленный открытый SSH-ключ будет сохранен только в профиле пользователя создаваемой виртуальной машины.
- В поле Логин введите имя пользователя. Не используйте имя
-
В блоке Общая информация задайте имя ВМ:
ci-tutorial-gitlab
. -
Нажмите кнопку Создать ВМ.
Создание ВМ может занять несколько минут. Когда ВМ перейдет в статус RUNNING
и запустится GitLab, настройте его.
Настройте GitLab
Чтобы настроить GitLab и подготовить процесс непрерывной интеграции (Continuous Integration, CI), создайте новый проект и введите параметры для авторизации в CI:
-
Авторизуйтесь в веб-интерфейсе инстанса Managed Service for GitLab.
-
Нажмите кнопку Create a project.
-
Нажмите кнопку Create blank project.
-
Заполните поля:
- Project name —
gitlab-test
. - Project URL — выберите пользователя-администратора в поле рядом с FQDN инстанса Managed Service for GitLab.
Остальные поля оставьте без изменений.
- Project name —
-
Нажмите кнопку Create project.
-
На странице сервиса Yandex Compute Cloud выберите созданную ВМ и скопируйте ее публичный IP-адрес.
-
Подключитесь к ВМ по протоколу SSH.
-
Получите пароль администратора GitLab с помощью команды ВМ:
sudo cat /etc/gitlab/initial_root_password
-
Скопируйте пароль из строки
Password
(исключая пробелы) в буфер обмена или отдельный файл. -
Откройте в браузере ссылку
http://<публичный_IP-адрес_ВМ>
. Откроется веб-интерфейс GitLab. -
Войдите в систему с учетной записью администратора:
- Username or email —
root
. - Password — пароль, скопированный ранее.
Если вы не можете войти, сбросьте пароль учетной записи администратора
. - Username or email —
-
Повторно войдите в систему с учетной записью администратора, используя новый пароль.
-
Выберите Create a project.
-
Задайте имя проекта:
gitlab-test
. -
Нажмите кнопку Create project.
Создайте GitLab Runner
Чтобы запускать задачи сборки в кластере Yandex Managed Service for Kubernetes, создайте GitLab Runner
После установки вы можете запускать автоматизированные сборки внутри своего кластера Managed Service for Kubernetes.
Подробнее про установку и настройку GitLab Runner читайте в документации GitLab
Подготовьте репозиторий приложения для развертывания
-
Получите авторизованный ключ для созданного ранее сервисного аккаунта с ролями
container-registry.images.puller
иcontainer-registry.images.pusher
:yc iam key create --service-account-name <имя_сервисного_аккаунта_для_узлов> -o key.json
-
Сохраните содержимое этого ключа — оно потребуется на следующем шаге:
cat key.json | base64
-
Создайте переменные окружения GitLab
:-
На панели слева в GitLab перейдите в раздел Settings и во всплывающем списке выберите пункт CI/CD.
-
Нажмите кнопку Expand напротив пункта Variables.
-
Добавьте переменные окружения:
CI_REGISTRY
— адрес созданного ранее реестра в форматеcr.yandex/<идентификатор_реестра>
.CI_REGISTRY_USER
—json_key
.CI_REGISTRY_PASSWORD
— вывод командыcat key.json | base64
.
Для добавления переменной:
- Нажмите кнопку Add variable.
- В появившемся окне в поле Key укажите имя переменной, в поле Value — значение переменной.
- Нажмите кнопку Add variable.
-
-
Настройте доступ к репозиторию:
- Сгенерируйте новую пару SSH-ключей или используйте существующую.
- Добавьте публичную часть SSH-ключа в настройки учетной записи GitLab
.
-
Клонируйте репозиторий:
git clone git@<имя_инстанса>.gitlab.yandexcloud.net:<имя_пользователя-администратора>/gitlab-test.git
-
Клонируйте репозиторий yc-webinar-gitops-argo-crossplane
на рабочую машину:git clone https://github.com/yandex-cloud-examples/yc-webinar-gitops-argo-crossplane.git
-
Скопируйте в директорию
gitlab-test
все файлы из директорииyc-webinar-gitops-argo-crossplane/02-argocd/app
, включая скрытые:cp -rT <путь_к_директории_app> <путь_к_директории_gitlab-test>
-
Зафиксируйте изменения в
gitlab-test
и отправьте их в репозиторий:git add . && \ git commit -m "Add app src and CI" && \ git push
-
Запустится сценарий сборки. Чтобы посмотреть его выполнение, выберите в выпадающем меню пункт Build → Pipelines. Дождитесь успешного завершения обоих этапов сборки.
-
Откройте завершенную сборку и скопируйте строку из лога, она понадобится на следующем этапе:
INFO[0025] Pushing image to cr.yandex/<идентификатор_реестра>/<имя_пользователя-администратора>/gitlab-test:main.<номер_коммита>
Разверните приложение с помощью Argo CD
Установите Argo CD в кластер Managed Service for Kubernetes
-
Установите Argo CD согласно инструкции.
Важно
Группам узлов Kubernetes требуется доступ в интернет для скачивания образов и компонентов.
Предоставить доступ в интернет можно следующими способами:
- Назначить каждому узлу в группе публичный IP адрес.
- Настроить виртуальную машину в качестве NAT-инстанса.
- Настроить NAT-шлюз.
-
Настройте переадресацию порта сервиса ArgoCD на локальный компьютер:
kubectl port-forward service/<название_приложения_Argo_CD>-argocd-server \ --namespace <пространство_имен> 8080:443
-
Получите пароль администратора из секрета Kubernetes:
kubectl --namespace <пространство_имен> get secret argocd-initial-admin-secret \ --output jsonpath="{.data.password}" | base64 -d
-
Откройте в браузере консоль Argo CD по адресу
https://127.0.0.1:8080
. -
Авторизуйтесь в консоли, используя имя пользователя
admin
и пароль, полученный на предыдущем шаге.
Добавьте репозиторий GitLab в Argo CD
-
На панели слева в GitLab перейдите в раздел Settings и во всплывающем списке выберите пункт Access Tokens.
-
Задайте параметры нового токена:
- Token name —
argocd
. - Select a role —
Maintainer
. - Select scopes —
read_repository
.
- Token name —
-
Нажмите кнопку Create project access token.
-
Скопируйте значение созданного токена.
-
В консоли Argo CD перейдите в раздел Settings → Repositories.
-
Нажмите кнопку Connect Repo Using HTTPS.
-
В открывшейся форме задайте параметры:
- Repository URL — URL репозитория вида
https://<имя_инстанса_GitLab>.gitlab.yandexcloud.net/<имя_пользователя-администратора>/gitlab-test.git
. - Username —
gitlab-ci-token
. - Password — токен GitLab, сгенерированный ранее.
- Repository URL — URL репозитория вида
-
Нажмите кнопку Connect.
-
В консоли Argo CD перейдите в раздел Applications и нажмите кнопку Create Application.
-
В открывшейся форме задайте параметры:
- Application Name —
gitlab-test
. - Project —
default
. - Sync policy —
Automatic
, затем выберите опции Prune resources и Self Heal. - Sync options — выберите опцию
Auto-Create Namespace
. - Repository URL — укажите URL репозитория вида
https://<имя_инстанса_GitLab>.gitlab.yandexcloud.net/<имя_пользователя-администратора>/gitlab-test.git
. - Path —
.helm
. - Cluster URL —
https://kubernetes.default.svc
. - Namespace —
gitlab-test
. - image.repository —
cr.yandex/<идентификатор_реестра>/<имя_пользователя-администратора>/gitlab-test
. - image.tag —
main.<номер_коммита>
.
- Application Name —
-
Нажмите кнопку Create и дождитесь завершения синхронизации.
-
Для проверки запуска приложения выполните команду в кластере Managed Service for Kubernetes:
kubectl get all -n gitlab-test
Результат:
NAME READY STATUS RESTARTS AGE pod/gitlab-test-67c8d58bc4-6w4q7 1/1 Running 0 2m26s pod/gitlab-test-67c8d58bc4-sldpc 1/1 Running 0 2m26s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/gitlab-test ClusterIP 10.96.186.223 <none> 80/TCP 2m26s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/gitlab-test 2/2 2 2 2m26s NAME DESIRED CURRENT READY AGE replicaset.apps/gitlab-test-67c8d58bc4 2 2 2 2m26s
Проверьте автоматическую синхронизацию из репозитория
-
Перейдите в директорию с клонированным проектом и откройте файл
.helm/values.yaml
. -
Измените значение параметра
replicaCount
на3
. -
Сохраните изменения и отправьте их в репозиторий:
git add . && \ git commit -m "Increase replica count" && \ git push
-
В консоли Argo CD дождитесь синхронизации приложения.
-
Проверьте, что количество подов приложения в кластере Managed Service for Kubernetes увеличилось:
kubectl get pod -n gitlab-test
Результат:
NAME READY STATUS RESTARTS AGE pod/gitlab-test-67c8d58bc4-6w4q7 1/1 Running 0 15m pod/gitlab-test-67c8d58bc4-7hmcn 1/1 Running 0 10m pod/gitlab-test-67c8d58bc4-sldpc 1/1 Running 0 15m NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/gitlab-test ClusterIP 10.96.186.223 <none> 80/TCP 15m NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/gitlab-test 3/3 3 3 15m NAME DESIRED CURRENT READY AGE replicaset.apps/gitlab-test-67c8d58bc4 3 3 3 15m
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
Удалите кластер Managed Service for Kubernetes и реестр Container Registry:
ВручнуюTerraform-
В командной строке перейдите в директорию, в которой расположен актуальный конфигурационный файл Terraform с планом инфраструктуры.
-
Удалите конфигурационный файл
k8s-argocd.tf
. -
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Подтвердите изменение ресурсов.
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
Все ресурсы, которые были описаны в конфигурационном файле
k8s-argocd.tf
, будут удалены. -
-
-
Удалите созданную виртуальную машину GitLab или инстанс Managed Service for GitLab.