Vi har lanceret en officiel Terraform-udbyder til at arbejde med Selectel. Dette produkt giver brugerne mulighed for fuldt ud at implementere ressourcestyring gennem Infrastructure-as-code-metoden.
Udbyderen understøtter i øjeblikket serviceressourcestyring "Virtuel privat sky" (herefter benævnt VPC). I fremtiden planlægger vi at tilføje ressourcestyring til andre tjenester leveret af Selectel.
Som du allerede ved, er VPC-tjenesten bygget på OpenStack. Men på grund af det faktum, at OpenStack ikke leverer native værktøjer til at betjene den offentlige sky, implementerede vi den manglende funktionalitet i et sæt yderligere API'er, der forenkler håndteringen af komplekse sammensatte objekter og gør arbejdet mere bekvemt. Noget af den funktionalitet, der er tilgængelig i OpenStack, er lukket for direkte brug, men er tilgængelig via vores API.
Selectel Terraform-udbyderen inkluderer nu muligheden for at administrere følgende VPC-ressourcer:
projekter og deres kvoter;
brugere, deres roller og tokens;
offentlige undernet, herunder tværregionale og VRRP;
softwarelicenser.
Udbyderen bruger vores offentlige Go-bibliotek til at arbejde med VPC API. Både biblioteket og selve udbyderen er open source, deres udvikling udføres på Github:
For at administrere andre cloud-ressourcer, såsom virtuelle maskiner, diske, Kubernetes-klynger, kan du bruge OpenStack Terraform-udbyderen. Officiel dokumentation for begge udbydere er tilgængelig på følgende links:
For at komme i gang skal du installere Terraform (instruktioner og links til installationspakker kan findes på det officielle site).
For at fungere kræver udbyderen en Selectel API-nøgle, som er oprettet i kontokontrolpaneler.
Manifester til at arbejde med Selectel oprettes ved hjælp af Terraform eller ved hjælp af et sæt færdige eksempler, der er tilgængelige i vores Github-lager: terraform-eksempler.
Depotet med eksempler er opdelt i to mapper:
moduler, indeholdende små genanvendelige moduler, der tager et sæt parametre som input og administrerer et lille sæt ressourcer;
eksempler, der indeholder eksempler på et komplet sæt af sammenkoblede moduler.
Efter at have installeret Terraform, oprettet en Selectel API-nøgle og gjort dig bekendt med eksemplerne, lad os gå videre til praktiske eksempler.
Et eksempel på oprettelse af en server med en lokal disk
I fil vars.tf alle parametre, der vil blive brugt, når moduler kaldes, er beskrevet. Nogle af dem har standardværdier, for eksempel vil serveren blive oprettet i zonen ru-3a med følgende konfiguration:
argument ignore_changes giver dig mulighed for at ignorere attributændringer id for det billede, der blev brugt til at oprette den virtuelle maskine. I VPC-tjenesten opdateres de fleste offentlige billeder automatisk en gang om ugen og samtidig deres id også ændringer. Dette skyldes de særlige kendetegn ved OpenStack-komponenten - Glance, hvor billeder betragtes som uforanderlige enheder.
Hvis du opretter eller ændrer en eksisterende server eller disk, der har som argument image_id brugt id offentligt billede, så efter at billedet er opdateret, vil kørsel af Terraform-manifestet igen genskabe serveren eller disken. Ved at bruge et argument ignore_changes giver dig mulighed for at undgå en sådan situation.
Bemærk: argument ignore_changes dukkede op i Terraform for ganske lang tid siden: pull#2525.
argument ignore_resize_confirmation nødvendig for at kunne ændre størrelsen på lokal disk, kerner eller serverhukommelse. Sådanne ændringer foretages gennem OpenStack Nova-komponenten ved hjælp af en anmodning resize. Standard Nova efter anmodning resize sætter serveren i status verify_resize og venter på yderligere bekræftelse fra brugeren. Denne adfærd kan dog ændres, så Nova ikke venter på yderligere handlinger fra brugeren.
Det angivne argument tillader Terraform ikke at vente på status verify_resize for serveren og være forberedt på, at serveren er i en aktiv status efter at have ændret dens parametre. Argumentet er tilgængeligt fra version 1.10.0 af OpenStack Terraform-udbyderen: pull#422.
Oprettelse af ressourcer
Før du kører manifesterne, skal du være opmærksom på, at i vores eksempel lanceres to forskellige udbydere, og OpenStack-udbyderen afhænger af Selectel-udbyderens ressourcer, da uden at oprette en bruger i projektet er det umuligt at administrere de objekter, der hører til den. . Desværre kan vi af samme grund ikke bare køre kommandoen terraform gælder inde i vores eksempel. Vi skal først gøre ansøge til modul projekt_med_bruger og derefter til alt det andet.
Bemærk: Dette problem er endnu ikke løst i Terraform, du kan følge diskussionen på Github på udgave #2430 и udgave #4149.
Vi initialiserer modulerne ved hjælp af kommandoen:
$ terraform init
Outputtet viser, at Terraform downloader de nyeste versioner af de udbydere, det bruger, og kontrollerer alle de moduler, der er beskrevet i eksemplet.
Lad os først anvende modulet projekt_med_bruger. Dette kræver manuel overførsel af værdier for variabler, der ikke er indstillet:
sel_konto med dit Selectel-kontonummer;
sel_token med din nøgle til Selectel API;
bruger_adgangskode med en adgangskode til OpenStack-brugeren.
Værdierne for de to første variable skal tages fra kontrolpaneler.
For den sidste variabel kan du komme med en hvilken som helst adgangskode.
For at bruge modulet skal du erstatte værdierne SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD kører kommandoen:
Efter at have kørt kommandoen, vil Terraform vise hvilke ressourcer den vil oprette og bede om bekræftelse:
Plan: 3 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
Når projektet, brugeren og rollen er oprettet, kan du begynde at oprette de resterende ressourcer:
Du kan arbejde med den oprettede virtuelle maskine via SSH ved hjælp af den angivne IP.
Redigering af ressourcer
Ud over at skabe ressourcer gennem Terraform, kan de også ændres.
Lad os for eksempel øge antallet af kerner og hukommelse til vores server ved at ændre værdierne for parametrene server_vcpus и server_ram_mb i fil eksempler/vpc/server_local_root_disk/main.tf:
I vores eksempeldepoter Du kan også se manifester til at skabe virtuelle maskiner med netværksdrev.
Eksempel på oprettelse af en Kubernetes-klynge
Før vi går videre til det næste eksempel, vil vi rydde op i de ressourcer, vi oprettede tidligere. For at gøre dette i roden af projektet terraform-eksempler/eksempler/vpc/server_local_root_disk Lad os køre kommandoen for at slette OpenStack-objekter:
I begge tilfælde skal du bekræfte sletningen af alle objekter:
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
Dette eksempel opretter et projekt, en bruger med en rolle i projektet, og rejser én Kubernetes-klynge. I fil vars.tf du kan se standardværdier, såsom antallet af noder, deres karakteristika, Kubernetes-version osv.
For at oprette ressourcer, der ligner det første eksempel, vil vi først og fremmest begynde at initialisere moduler og oprette modulressourcer projekt_med_brugerog lav så alt det andet:
Vi vil overføre oprettelsen og administrationen af Kubernetes-klynger gennem OpenStack Magnum-komponenten. Du kan finde ud af mere om, hvordan du arbejder med en klynge i en af vores tidligere artikler, såvel som i vidensbase.
Når klyngen klargøres, oprettes diske og virtuelle maskiner, og alle nødvendige komponenter vil blive installeret. Forberedelsen tager omkring 4 minutter, i hvilken tid Terraform viser meddelelser som:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Når installationen er færdig, vil Terraform angive, at klyngen er klar og vise dens ID:
For at administrere den oprettede Kubernetes-klynge gennem værktøjet kubectl du skal have adgangsfilen til klyngen. For at gøre dette skal du gå til projektet oprettet gennem Terraform på listen over projekter på din konto:
Følg derefter linket som xxxxxx.selvpc.rusom vises under projektnavnet:
For login-oplysninger, brug brugernavnet og adgangskoden, som du oprettede gennem Terraform. Hvis du ikke har snydt vars.tf eller main.tf for vores eksempel vil brugeren have navnet tf_bruger. Du skal bruge værdien af variablen som adgangskode TF_VAR_user_password, som blev angivet ved opstart terraform gælder tidligere.
Inde i projektet skal du gå til fanen Kubernetes:
Det er her den klynge, der er oprettet via Terraform, er placeret. Download fil til kubectl du kan på fanen "Adgang":
Installationsvejledning er placeret på samme fane. kubectl og brug af det downloadede config.yaml.
Efter lancering kubectl og indstilling af miljøvariablen KUBECONFIG du kan bruge Kubernetes:
Når antallet af noder ændres, forbliver klyngen tilgængelig. Efter at have tilføjet en node via Terraform, kan du bruge den uden yderligere konfiguration:
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
tf-cluster-rz6nggvs4va7-master-0 Ready,SchedulingDisabled master 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-0 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-1 Ready <none> 8m v1.12.4
tf-cluster-rz6nggvs4va7-minion-2 Ready <none> 3m v1.12.4
Konklusion
I denne artikel stiftede vi bekendtskab med de vigtigste måder at arbejde med "Virtuel privat sky" via Terraform. Vi vil blive glade, hvis du bruger den officielle Terraform-udbyder Selectel og giver feedback.
Eventuelle fejl fundet i Selectel Terraform-udbyderen kan rapporteres via Github-problemer.