Wat was er eerst: de kip of het ei? Een nogal vreemde start voor een artikel over Infrastructure-as-Code, nietwaar?
Wat is een ei?
Meestal is Infrastructure-as-Code (IaC) een declaratieve manier om infrastructuur weer te geven. Daarin beschrijven we de staat die we willen bereiken, beginnend bij het hardwaregedeelte en eindigend met de softwareconfiguratie. Daarom wordt IaC gebruikt voor:
Voorziening van hulpbronnen. Dit zijn VM's, S3, VPC, enz. Basishulpmiddelen voor werk: Terraform и Wolkenvorming.
Elke code bevindt zich in git-repository's. En vroeg of laat zal de teamleider besluiten dat ze op orde moeten worden gebracht. En hij zal herstructureren. En het zal wat structuur creëren. En hij zal zien dat dit goed is.
Het is ook goed dat het al bestaat GitLab и GitHub-provider voor Terraform (en dit is Softwareconfiguratie). Met hun hulp kun je het hele project beheren: teamleden, CI/CD, git-flow, enz.
Waar kwam het ei vandaan?
We naderen dus geleidelijk de hoofdvraag.
Allereerst moet je beginnen met een repository die de structuur van andere repository's beschrijft, inclusief jezelf. En natuurlijk moet je, als onderdeel van GitOps, CI toevoegen zodat wijzigingen automatisch worden uitgevoerd.
Als Git nog niet is gemaakt?
Hoe sla je het op in Git?
Hoe CI installeren?
Als we Gitlab ook inzetten met IaC, en zelfs in Kubernetes?
En GitLab Runner ook in Kubernetes?
Hoe zit het met Kubernetes in de cloudprovider?
Wat was er eerst: het GitLab waar ik mijn code upload, of de code die beschrijft wat voor soort GitLab ik nodig heb?
Ontvang MY_SELECTEL_TOKEN van het paneel mijn.selectel.ru.
Maak een Kubernetes-cluster door er een accounttoken naar over te dragen.
Haal KUBECONFIG op uit het gemaakte cluster.
Installeer GitLab op Kubernetes.
Haal het GitLab-token op van GitLab gemaakt voor de gebruiker wortel.
Maak een projectstructuur in GitLab met behulp van GitLab-token.
Push bestaande code naar GitLab.
???
Winst!
Stap 1. Het token kan worden verkregen in de sectie API-sleutels.
Stap 2. We bereiden onze Terraform voor op het “bakken” van een cluster van 2 knooppunten. Als u zeker weet dat u voor alles voldoende middelen heeft, kunt u automatische quota inschakelen:
Voor velen zullen wij de standaard gebruiken nginx-ingang. Er zijn al voldoende instructies om het te installeren, dus we zullen er niet bij stilstaan.
Stap 8. Git-repository's naar de juiste hiërarchie brengen met behulp van de Gitlab Provider.
cd ../internal/gitlab/hierarchy && terraform apply -input=false -auto-approve planfile
Helaas heeft de terraform GitLab-provider een floating beestje. Vervolgens moet u de conflicterende projecten handmatig verwijderen om tf.state te kunnen herstellen. Voer vervolgens het commando `$make all` opnieuw uit
Stap 9. We dragen lokale repository's over naar de server.
We hebben bereikt dat we alles declaratief kunnen beheren vanaf onze lokale machine. Nu wil ik al deze taken overbrengen naar CI en gewoon op de knoppen drukken. Om dit te doen, moeten we onze lokale staten (Terraform-staat) overbrengen naar CI. Hoe u dit doet, vindt u in het volgende deel.
Abonneer u op onze blogom de release van nieuwe artikelen niet te missen!