Vi har lansert en offisiell Terraform-leverandør for å jobbe med Selectel. Dette produktet lar brukere fullt ut implementere ressursadministrasjon gjennom Infrastructure-as-code-metoden.
Leverandøren støtter for tiden tjenesteressursadministrasjon "Virtuell privat sky" (heretter kalt VPC). I fremtiden planlegger vi å legge til ressursadministrasjon for andre tjenester levert av Selectel.
Som du allerede vet, er VPC-tjenesten bygget på OpenStack. Men på grunn av det faktum at OpenStack ikke tilbyr native verktøy for å betjene den offentlige skyen, implementerte vi den manglende funksjonaliteten i et sett med ekstra APIer som forenkler administrasjonen av komplekse sammensatte objekter og gjør arbeidet mer praktisk. Noe av funksjonaliteten som er tilgjengelig i OpenStack er stengt fra direkte bruk, men er tilgjengelig gjennom vårt API.
Selectel Terraform-leverandøren inkluderer nå muligheten til å administrere følgende VPC-ressurser:
prosjekter og deres kvoter;
brukere, deres roller og tokens;
offentlige undernett, inkludert tverrregionale og VRRP;
programvarelisenser.
Leverandøren bruker vårt offentlige Go-bibliotek for å jobbe med VPC API. Både biblioteket og selve leverandøren er åpen kildekode, utviklingen deres utføres på Github:
For å administrere andre skyressurser, som virtuelle maskiner, disker, Kubernetes-klynger, kan du bruke OpenStack Terraform-leverandøren. Offisiell dokumentasjon for begge leverandørene er tilgjengelig på følgende lenker:
For å komme i gang må du installere Terraform (instruksjoner og lenker til installasjonspakker finner du på offisiell nettside).
For å operere krever leverandøren en Selectel API-nøkkel, som er opprettet i kontokontrollpaneler.
Manifester for å jobbe med Selectel lages ved hjelp av Terraform eller ved å bruke et sett med ferdige eksempler som er tilgjengelige i vårt Github-lager: terraform-eksempler.
Depotet med eksempler er delt inn i to kataloger:
moduler, som inneholder små gjenbrukbare moduler som tar et sett med parametere som input og administrerer et lite sett med ressurser;
eksempler, som inneholder eksempler på et komplett sett med sammenkoblede moduler.
Etter å ha installert Terraform, opprettet en Selectel API-nøkkel og gjort deg kjent med eksemplene, la oss gå videre til praktiske eksempler.
I fil vars.tf alle parametere som vil bli brukt når du kaller moduler er beskrevet. Noen av dem har standardverdier, for eksempel vil serveren opprettes i sonen ru-3a med følgende konfigurasjon:
argument ignore_changes lar deg ignorere attributtendringer id for bildet som ble brukt til å lage den virtuelle maskinen. I VPC-tjenesten oppdateres de fleste offentlige bilder automatisk en gang i uken og samtidig deres id endres også. Dette er på grunn av særegenhetene til OpenStack-komponenten - Glance, der bilder anses som uforanderlige enheter.
Hvis du oppretter eller endrer en eksisterende server eller disk som har som argument image_id brukes id offentlig bilde, og etter at bildet er oppdatert, vil kjøring av Terraform-manifestet på nytt gjenskape serveren eller disken. Ved å bruke et argument ignore_changes lar deg unngå en slik situasjon.
Merk: argument ignore_changes dukket opp i Terraform for ganske lenge siden: pull#2525.
argument ignore_resize_confirmation nødvendig for å kunne endre størrelse på lokal disk, kjerner eller serverminne. Slike endringer gjøres gjennom OpenStack Nova-komponenten ved å bruke en forespørsel endre størrelse. Standard Nova etter forespørsel endre størrelse setter serveren i status verify_resize og venter på ytterligere bekreftelse fra brukeren. Denne oppførselen kan imidlertid endres slik at Nova ikke venter på ytterligere handlinger fra brukeren.
Det angitte argumentet lar Terraform ikke vente på statusen verify_resize for serveren og være forberedt på at serveren er i aktiv status etter å ha endret parameterne. Argumentet er tilgjengelig fra versjon 1.10.0 av OpenStack Terraform-leverandøren: pull#422.
Opprette ressurser
Før du kjører manifestene, vær oppmerksom på at i vårt eksempel lanseres to forskjellige leverandører, og OpenStack-leverandøren avhenger av ressursene til Selectel-leverandøren, siden uten å opprette en bruker i prosjektet, er det umulig å administrere objektene som tilhører den . Dessverre, av samme grunn kan vi ikke bare kjøre kommandoen terraform gjelder i vårt eksempel. Vi må først gjøre søke om for modul prosjekt_med_bruker og etter det for alt annet.
Merk: Dette problemet er ennå ikke løst i Terraform, du kan følge diskusjonen på Github på problem#2430 и problem#4149.
Etter å ha kjørt kommandoen, vil Terraform vise hvilke ressurser den vil opprette og be om bekreftelse:
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 prosjektet, brukeren og rollen er opprettet, kan du begynne å lage de gjenværende ressursene:
Du kan jobbe med den opprettede virtuelle maskinen via SSH ved å bruke den angitte IP-en.
Redigering av ressurser
I tillegg til å opprette ressurser gjennom Terraform, kan de også modifiseres.
La oss for eksempel øke antall kjerner og minne for serveren vår ved å endre verdiene for parameterne server_vcpus и server_ram_mb i fil eksempler/vpc/server_local_root_disk/main.tf:
I vår eksempellagre Du kan også se manifester for å lage virtuelle maskiner med nettverksstasjoner.
Eksempel på å lage en Kubernetes-klynge
Før vi går videre til neste eksempel, skal vi rydde opp i ressursene vi opprettet tidligere. For å gjøre dette i roten til prosjektet terraform-eksempler/eksempler/vpc/server_lokal_rotdisk La oss kjøre kommandoen for å slette OpenStack-objekter:
I begge tilfeller må du bekrefte slettingen av 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 eksemplet oppretter et prosjekt, en bruker med en rolle i prosjektet, og oppretter én Kubernetes-klynge. I fil vars.tf du kan se standardverdier, for eksempel antall noder, deres egenskaper, Kubernetes-versjon osv.
For å lage ressurser som ligner på det første eksemplet, vil vi først og fremst begynne å initialisere moduler og lage modulressurser prosjekt_med_brukerog deretter lage alt annet:
Vi vil overføre opprettelsen og administrasjonen av Kubernetes-klynger gjennom OpenStack Magnum-komponenten. Du kan finne ut mer om hvordan du jobber med en klynge i en av våre tidligere artikler, så vel som i kunnskapsbase.
Når du klargjør klyngen, vil disker og virtuelle maskiner bli opprettet og alle nødvendige komponenter vil bli installert. Forberedelsen tar omtrent 4 minutter, i løpet av denne tiden vil Terraform vise meldinger som:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Når installasjonen er fullført, vil Terraform indikere at klyngen er klar og vise IDen:
For å administrere den opprettede Kubernetes-klyngen gjennom verktøyet kubectl du må få tilgangsfilen til klyngen. For å gjøre dette, gå til prosjektet opprettet gjennom Terraform i listen over prosjekter på kontoen din:
Deretter følger du lenken som xxxxxx.selvpc.rusom vises under prosjektnavnet:
For påloggingsinformasjon, bruk brukernavnet og passordet du opprettet gjennom Terraform. Hvis du ikke har jukset vars.tf eller main.tf for vårt eksempel vil brukeren ha navnet tf_user. Du må bruke verdien til variabelen som passord TF_VAR_user_password, som ble spesifisert ved oppstart terraform gjelder Tidligere.
Inne i prosjektet må du gå til fanen Kubernetes:
Det er her klyngen opprettet via Terraform ligger. Last ned fil for kubectl du kan på "Tilgang"-fanen:
Installasjonsinstruksjoner er plassert på samme fane. kubectl og bruk av det nedlastede config.yaml.
Etter lansering kubectl og angi miljøvariabelen KUBECONFIG du kan bruke Kubernetes:
Når antallet noder endres, vil klyngen forbli tilgjengelig. Etter å ha lagt til en node via Terraform, kan du bruke den uten ytterligere konfigurasjon:
$ 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
Konklusjon
I denne artikkelen ble vi kjent med de viktigste måtene å jobbe med "Virtuell privat sky" via Terraform. Vi vil være glade hvis du bruker den offisielle Selectel Terraform-leverandøren og gir tilbakemelding.
Eventuelle feil funnet i Selectel Terraform-leverandøren kan rapporteres via Github-problemer.