Terraform udbyder Selectel

Terraform udbyder Selectel

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:

Kom godt i gang

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

Lad os se på et eksempel på at oprette et projekt, en bruger med en rolle og en virtuel maskine med en lokal disk: terraform-eksempler/eksempler/vpc/server_local_root_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:

variable "server_vcpus" {
default = 4
}

variable "server_ram_mb" {
default = 8192
}

variable "server_root_disk_gb" {
default = 8
}

variable "server_image_name" {
default = "Ubuntu 18.04 LTS 64-bit"
}

I fil main.tf Selectel-udbyderen initialiseres:

provider "selectel" {
token    = "${var.sel_token}"
}

Denne fil indeholder også standardværdien for SSH-nøglen, der vil blive installeret på serveren:

module "server_local_root_disk" {
...
server_ssh_key      = "${file("~/.ssh/id_rsa.pub")}"
}

Om nødvendigt kan du angive en anden offentlig nøgle. Nøglen behøver ikke at være angivet som en filsti; du kan også tilføje værdien som en streng.

Længere i denne fil lanceres modulerne projekt_med_bruger и server_local_root_disk, som forvalter de nødvendige ressourcer.

Lad os se på disse moduler mere detaljeret.

Oprettelse af et projekt og en bruger med en rolle

Det første modul opretter et projekt og en bruger med en rolle i det pågældende projekt: terraform-eksempler/moduler/vpc/projekt_med_bruger.

Den oprettede bruger vil være i stand til at logge på OpenStack og administrere sine ressourcer. Modulet er enkelt og administrerer kun tre enheder:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Oprettelse af en virtuel server med lokal disk

Det andet modul omhandler administration af OpenStack-objekter, som er nødvendige for at oprette en server med en lokal disk.

Du bør være opmærksom på nogle af de argumenter, der er specificeret i dette modul for ressourcen openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

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.

Gå til biblioteket for at oprette ressourcer terraform-eksempler/eksempler/vpc/server_local_root_disk, dens indhold skal være sådan:

$ ls
README.md	   main.tf		vars.tf

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:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply -target=module.project_with_user

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:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

Når du opretter ressourcer, skal du være opmærksom på Terraform-outputtet med den eksterne IP-adresse, hvor den oprettede server vil være tilgængelig:

module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating...
  floating_ip: "" => "x.x.x.x"

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:

-  server_vcpus        = "${var.server_vcpus}"
-  server_ram_mb       = "${var.server_ram_mb}"
+  server_vcpus        = 8
+  server_ram_mb       = 10240

Efter dette kontrollerer vi, hvilke ændringer dette vil føre til ved at bruge følgende kommando:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform plan

Som et resultat foretog Terraform en ressourceændring openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Bemærk venligst, at dette vil medføre genstart af den oprettede virtuelle maskine.

Brug kommandoen for at anvende den nye virtuelle maskine-konfiguration terraform gælder, som vi allerede har lanceret tidligere.

Alle oprettede objekter vil blive vist i VPC kontrolpaneler:

Terraform udbyder Selectel

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:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform destroy -target=module.server_local_root_disk

Kør derefter kommandoen for at rydde Selectel VPC API-objekter:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform destroy -target=module.project_with_user

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

Følgende eksempel er i mappen terraform-examples/examples/vpc/kubernetes_cluster.

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:

$ terraform init

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply -target=module.project_with_user

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

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:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)

Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

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:

Terraform udbyder Selectel

Følg derefter linket som xxxxxx.selvpc.rusom vises under projektnavnet:

Terraform udbyder Selectel

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:

Terraform udbyder Selectel

Det er her den klynge, der er oprettet via Terraform, er placeret. Download fil til kubectl du kan på fanen "Adgang":

Terraform udbyder Selectel

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:

$ kubectl get pods --all-namespaces

NAMESPACE        NAME                                    READY  STATUS  RESTARTS AGE
kube-system   coredns-9578f5c87-g6bjf                      1/1   Running   0 8m
kube-system   coredns-9578f5c87-rvkgd                     1/1   Running   0 6m
kube-system   heapster-866fcbc879-b6998                 1/1   Running   0 8m
kube-system   kube-dns-autoscaler-689688988f-8cxhf             1/1   Running   0 8m
kube-system   kubernetes-dashboard-7bdb5d4cd7-jcjq9          1/1   Running   0 8m
kube-system   monitoring-grafana-84c97bb64d-tc64b               1/1   Running   0 8m
kube-system   monitoring-influxdb-7c8ccc75c6-dzk5f                1/1   Running   0 8m
kube-system   node-exporter-tf-cluster-rz6nggvs4va7-minion-0 1/1   Running   0 8m
kube-system   node-exporter-tf-cluster-rz6nggvs4va7-minion-1 1/1   Running   0 8m
kube-system   openstack-cloud-controller-manager-8vrmp        1/1   Running   3 8m
prometeus-monitoring   grafana-76bcb7ffb8-4tm7t       1/1   Running   0 8m
prometeus-monitoring   prometheus-75cdd77c5c-w29gb           1/1   Running   0 8m

Antallet af cluster noder kan nemt ændres via Terraform.
I fil main.tf følgende værdi er angivet:

cluster_node_count = "${var.cluster_node_count}"

Denne værdi er erstattet fra vars.tf:

variable "cluster_node_count" {
default = 2
}

Du kan ændre enten standardværdien i vars.tf, eller angiv den ønskede værdi direkte i main.tf:

-  cluster_node_count = "${var.cluster_node_count}"
+  cluster_node_count = 3

For at anvende ændringerne, som i det første eksempel, skal du bruge kommandoen terraform gælder:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

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.

Kilde: www.habr.com

Tilføj en kommentar