Что появилось раньше — курица или яйцо? Довольно странное начало для статьи про Infrastructure-as-Code, не так ли?
Что такое яйцо?
Чаще всего Infrastructure-as-Code (IaC) — декларативный способ представления инфраструктуры. В нем мы описываем состояние, которое хотим получить, начиная от железной части, заканчивая конфигурацией ПО. Поэтому IaC используется для:
Resource Provision. Это VMs, S3, VPC и т.д. Основные инструменты для работы: Terraform и CloudFormation.
Любой код лежит в git-репозиториях. И рано или поздно тимлид решит, что надо бы навести порядок в них. И будет рефакторить он. И создаст некоторую структуру. И увидит он, что это есть хорошо.
Также хорошо, что уже существует GitLab и GitHub-провайдер для Terraform (и это Software Configuration). С их помощью можно управлять всем проектом: членами команды, CI/CD, git-flow и т.д.
Откуда взялось яйцо?
Вот мы и постепенно подходим к главному вопросу.
Прежде всего надо начинать с репозитория, который описывает структуру других репозиториев, в том числе себя. И конечно же, в рамках GitOps нужно добавить CI, чтобы автоматически изменения исполнялись.
Если Git еще не создан?
Как его хранить в Git?
Как прикрутить CI?
Если Gitlab мы тоже разворачиваем с помощью IaC, да еще и в Kubernetes?
И GitLab Runner тоже в Kubernetes?
А Kubernetes в облачном провайдере?
Что появилось раньше: GitLab, на который я загружу свой код, или код, описывающий то, какой GitLab мне нужен?
Получить MY_SELECTEL_TOKEN из панели my.selectel.ru.
Создать кластер Kubernetes, передав в него токен от аккаунта.
Получить KUBECONFIG от созданного кластера.
Установить GitLab в Kubernetes.
Получить GitLab-token от созданного GitLab для пользователя ជា root.
Создать структуру проектов в GitLab, используя GitLab-token.
Запушить имеющийся код в GitLab.
???
ប្រាក់ចំណេញ!
បោះជំហាន 1. Токен можно получить в разделе Ключи API.
បោះជំហាន 2. Подготавливаем наш Terraform для «запекания» кластера из 2 нод. Если вы уверены в том, что у вас хватит на все ресурсов, то можно включить автоквоты:
បោះជំហាន 8. Приводим Git-репозитории к правильной иерархии с помощью Gitlab Provider.
cd ../internal/gitlab/hierarchy && terraform apply -input=false -auto-approve planfile
К сожалению, в terraform GitLab provider есть плавающий កំហុស. Тогда придется удалить конфликтующие проекты руками, чтобы tf.state починился. Затем перезапустите команду `$ make all`
បោះជំហាន 9. Переносим локальные репозитории на сервер.
Мы добились того, что с нашей локальной машины можем декларативно управлять всем. Теперь хочется перенести все эти задачи в CI и только кнопочки нажимать. Для этого нужно передать наши локальные состояния (Terraform state) в CI. О том, как это сделать, в следующей части.
ជាវប្រចាំរបស់យើង។ ប្លក់, чтобы не пропустить выходы новых статей!