Што з'явілася раней - курыца ці яйка? Даволі дзіўны пачатак для артыкула пра Infrastructure-as-Code, ці не так?
Што такое яйка?
Часцей за ўсё Infrastructure-as-Code (IaC) – дэкларатыўны спосаб прадстаўлення інфраструктуры. У ім мы апісваем стан, які жадаем атрымаць, пачынальна ад жалезнай часткі, сканчаючы канфігурацыяй ПА. Таму IaC выкарыстоўваецца для:
Любы код ляжыць у 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 для карыстальніка корань.
Стварыць структуру праектаў у GitLab, выкарыстоўваючы GitLab-token.
Запушыць наяўны код у GitLab.
?
Profit!
Крок 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`
Мы дабіліся таго, што з нашай лакальнай машыны можам дэкларатыўна кіраваць усім. Цяпер жадаецца перанесці ўсе гэтыя задачы ў CI і толькі кнопачкі націскаць. Для гэтага трэба перадаць нашы лакальныя станы (Terraform state) у CI. Аб тым, як гэта зрабіць, у наступнай частцы.
Падпісвайцеся на наш блог, Каб не прапусціць выхады новых артыкулаў!