Terraform provider Selectel

Terraform provider Selectel

Pokrenuli smo službenog Terraform provajdera za rad sa Selectelom. Ovaj proizvod omogućava korisnicima da u potpunosti implementiraju upravljanje resursima kroz metodologiju Infrastructure-as-code (infrastruktura kao kod).

Provajder trenutno podržava upravljanje resursima usluge "Virtuelni privatni oblak" (u daljem tekstu VPC). U budućnosti planiramo da tome dodamo upravljanje resursima drugih usluga koje pruža Selectel.

Kao što već znate, VPC servis je izgrađen na vrhu OpenStack-a. Međutim, zbog činjenice da OpenStack ne pruža izvorne alate za opsluživanje javnog oblaka, implementirali smo nedostajuću funkcionalnost u skup dodatnih API-ja koji pojednostavljuju upravljanje složenim složenim objektima i čine rad praktičnijim. Dio funkcionalnosti dostupnih u OpenStack-u zatvoren je za direktnu upotrebu, ali je dostupan putem naš API.

Selectel Terraform provajder sada ima mogućnost upravljanja sljedećim VPC resursima:

  • projekti i njihove kvote;
  • korisnici, njihove uloge i tokeni;
  • javne podmreže, uključujući međuregionalne i VRRP;
  • softverske licence.

Provajder koristi našu javnu Go biblioteku za rad sa VPC API-jem. I biblioteka i sam provajder su otvorenog koda, razvijaju se na Githubu:

Za upravljanje ostalim resursima u oblaku, kao što su virtuelne mašine, diskovi, Kubernetes klasteri, možete koristiti OpenStack Terraform provajdera. Službena dokumentacija za oba provajdera dostupna je na sljedećim linkovima:

Prvi koraci

Da biste započeli, morate instalirati Terraform (uputstva i linkovi za instalacijske pakete možete pronaći na službena web stranica).

Da bi radio, provajderu je potreban Selectel API ključ, koji je kreiran u kontrolna tabla naloga.

Manifesti za rad sa Selectelom kreiraju se pomoću Terraforma ili pomoću skupa gotovih primjera koji su dostupni u našem Github repozitoriju: terraform-primjeri.

Repozitorijum sa primerima je podeljen u dva direktorijuma:

  • modula, koji sadrži male višekratne module koji uzimaju skup parametara kao ulaz i upravljaju malim skupom resursa;
  • primjeri, koji sadrži primjere kompletnog skupa međusobno povezanih modula.

Nakon instalacije Terraforma, kreiranja Selectel API ključa i pregleda primjera, prijeđimo na praktične primjere.

Primjer kreiranja servera s lokalnim diskom

Razmotrimo primjer kreiranja projekta, korisnika s ulogom i virtualne mašine s lokalnim diskom: terraform-examples/examples/vpc/server_local_root_disk.

U fajlu vars.tf opisani su svi parametri koji će se koristiti prilikom pozivanja modula. Neki od njih imaju zadane vrijednosti, na primjer, server će biti kreiran u zoni en-3a sa sljedećom konfiguracijom:

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"
}

U fajlu main.tf provajder Selectel je inicijaliziran:

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

Ova datoteka također sadrži zadanu vrijednost za SSH ključ koji će biti instaliran na serveru:

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

Ako je potrebno, možete odrediti drugi javni ključ. Ključ ne mora biti specificiran kao putanja do datoteke, također možete dodati vrijednost kao string.

Dalje u ovoj datoteci se pokreću moduli project_with_user и server_local_root_diskkoji upravljaju potrebnim resursima.

Pogledajmo bliže ove module.

Kreirajte projekt i korisnika s ulogom

Prvi modul kreira projekat i korisnika sa ulogom u tom projektu: terraform-examples/modules/vpc/project_with_user.

Kreirani korisnik će se moći prijaviti na OpenStack i upravljati svojim resursima. Modul je jednostavan i upravlja sa samo tri entiteta:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Kreiranje virtuelnog servera sa lokalnim diskom

Drugi modul se bavi upravljanjem OpenStack objektima koji su potrebni za kreiranje servera sa lokalnim diskom.

Trebali biste obratiti pažnju na neke od argumenata koji su navedeni u ovom modulu za resurs 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 omogućava zanemarivanje promjene atributa id za sliku koja se koristi za kreiranje virtuelne mašine. U VPC servisu, većina javnih slika se ažurira automatski jednom sedmično iu isto vrijeme id takođe menja. To je zbog posebnosti rada komponente OpenStack - Glance, u kojoj se slike smatraju nepromjenjivim entitetima.

Ako kreirate ili modificirate postojeći server ili disk koji ima kao argument image_id polovan id javna slika, onda nakon što se ta slika ažurira, ponovno pokretanje Terraform manifesta će ponovo kreirati server ili disk. Koristeći argument ignore_changes izbegava takvu situaciju.

napomena: argument ignore_changes pojavio se u Terraformu davno: pull#2525.

Argument ignore_resize_confirmation potrebno za uspješnu promjenu veličine lokalnog diska, jezgri ili memorije poslužitelja. Takve promjene se vrše preko OpenStack Nova komponente koristeći zahtjev resize. Default Nova na zahtjev resize stavlja server u status verify_resize i čeka dodatnu potvrdu korisnika. Međutim, ovo ponašanje se može promijeniti tako da Nova ne mora čekati da korisnik poduzme dodatnu radnju.

Navedeni argument dozvoljava Terraformu da ne čeka status verify_resize za server i budite spremni na činjenicu da će server biti u aktivnom statusu nakon promjene svojih parametara. Argument je dostupan od verzije 1.10.0 OpenStack Terraform provajdera: pull#422.

Kreiranje resursa

Prije pokretanja manifesta, treba napomenuti da su u našem primjeru pokrenuta dva različita provajdera, a OpenStack provajder zavisi od resursa Selectel provajdera, jer je bez kreiranja korisnika u projektu nemoguće upravljati objektima koji mu pripadaju . Nažalost, iz istog razloga, ne možemo jednostavno pokrenuti naredbu terraform apply unutar našeg primjera. Moramo prvo da uradimo primijeniti za modul project_with_user a nakon toga i za sve ostalo.

Napomena: Prijavljeni problem još nije riješen u Terraformu, možete pratiti diskusiju na Githubu na issue#2430 и issue#4149.

Za kreiranje resursa idite na direktorij terraform-examples/examples/vpc/server_local_root_disk, njegov sadržaj bi trebao biti ovakav:

$ ls
README.md	   main.tf		vars.tf

Inicijaliziramo module pomoću naredbe:

$ terraform init

Izlaz pokazuje da Terraform preuzima najnovije verzije korištenih provajdera i provjerava sve module opisane u primjeru.

Prvo primenite modul project_with_user. Ovo zahtijeva ručno prosljeđivanje vrijednosti za varijable koje nisu postavljene:

  • sel_account sa brojem vašeg Selectel računa;
  • sel_token sa vašim Selectel API ključem;
  • korisnička_lozinka sa lozinkom za OpenStack korisnika.

Vrijednosti za prve dvije varijable se moraju uzeti iz kontrolne ploče.

Za posljednju varijablu možete smisliti bilo koju lozinku.

Da biste koristili modul, trebate zamijeniti vrijednosti SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD pokretanjem naredbe:

$ 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

Nakon pokretanja naredbe, Terraform će pokazati koje resurse želi da kreira i zahtijeva potvrdu:

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

Kada se kreiraju projekat, korisnik i uloga, možete početi kreirati ostatak resursa:

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

Prilikom kreiranja resursa obratite pažnju na Terraform izlaz sa eksternom IP adresom na kojoj će kreirani server biti dostupan:

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

Sa kreiranom virtuelnom mašinom možete raditi preko SSH koristeći navedenu IP adresu.

Uređivanje resursa

Osim stvaranja resursa kroz Terraform, oni se također mogu mijenjati.

Na primjer, povećajmo broj jezgara i memorije za naš server promjenom vrijednosti za parametre server_vcpus и server_ram_mb u fajlu examples/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

Nakon toga provjeravamo do kakvih promjena će to dovesti pomoću sljedeće naredbe:

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

Kao rezultat toga, Terraform je napravio promjenu resursa openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Imajte na umu da će to podrazumijevati ponovno pokretanje kreirane virtuelne mašine.

Da biste primijenili novu konfiguraciju virtuelne mašine, koristite naredbu terraform apply, koju smo već pokrenuli ranije.

Svi kreirani objekti će biti prikazani u VPC kontrolni paneli:

Terraform provider Selectel

U našem primjera spremišta Također možete vidjeti manifeste za kreiranje virtuelnih mašina sa mrežnim diskovima.

Primjer kreiranja Kubernetes klastera

Prije nego što pređemo na sljedeći primjer, očistit ćemo resurse koje smo ranije kreirali. Da biste to učinili, u korijenu projekta terraform-examples/examples/vpc/server_local_root_disk pokrenite naredbu za brisanje OpenStack objekata:

$ 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

Zatim pokrenite naredbu za brisanje Selectel VPC API objekata:

$ 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

U oba slučaja, morat ćete potvrditi brisanje svih objekata:

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

Sljedeći primjer je u imeniku terraform-examples/examples/vpc/kubernetes_cluster.

Ovaj primjer kreira projekt, korisnika s ulogom u projektu i podiže jedan Kubernetes klaster. U fajlu vars.tf možete vidjeti zadane vrijednosti, kao što su broj čvorova, njihove karakteristike, Kubernetes verzija i još mnogo toga.

Za kreiranje resursa, slično kao u prvom primjeru, prije svega, počnimo s inicijalizacijom modula i kreiranjem resursa modula project_with_usera zatim kreirati sve ostalo:

$ 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

Prenesimo kreiranje i upravljanje Kubernetes klasterima kroz OpenStack Magnum komponentu. Više o tome kako raditi s klasterom možete saznati u jednom od naših prethodni članci, kao i u baza znanja.

Prilikom pripreme klastera biće kreirani diskovi, virtuelne mašine i instalirane sve potrebne komponente. Priprema traje oko 4 minute, a za to vrijeme Terraform će prikazati poruke poput:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)

Nakon završetka instalacije, Terraform će izvestiti da je klaster spreman i prikazati njegov 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.

Za upravljanje kreiranim Kubernetes klasterom putem uslužnog programa kubectl morate dobiti datoteku za pristup klasteru. Da biste to učinili, idite na projekat kreiran putem Terraforma na listi projekata na vašem računu:

Terraform provider Selectel

Slijedite link xxxxxx.selvpc.ru, koji se prikazuje ispod naziva projekta:

Terraform provider Selectel

Koristite korisničko ime i lozinku koji su kreirani putem Terraforma kao informacije za prijavu. Ako se nisi promenio vars.tf ili main.tf za naš primjer, korisnik će imati ime tf_user. Vrijednost varijable se mora koristiti kao lozinka TF_VAR_user_password, koji je naveden pri pokretanju terraform apply ranije.

Unutar projekta morate otići na karticu Kubernet:

Terraform provider Selectel

Ovdje je klaster kreiran kroz Terraform. Preuzmite datoteku za kubectl možete na kartici "Pristup":

Terraform provider Selectel

Ova kartica sadrži upute za instalaciju. kubectl i koristite preuzeto config.yaml.

Nakon lansiranja kubectl i postavljanje varijable okruženja KUBECONFIG možete koristiti 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

Broj čvorova klastera se lako mijenja kroz Terraform.
U fajlu main.tf data je sljedeća vrijednost:

cluster_node_count = "${var.cluster_node_count}"

Ova vrijednost je zamijenjena iz vars.tf:

variable "cluster_node_count" {
default = 2
}

Možete promijeniti ili zadanu vrijednost u vars.tf, ili navedite potrebnu vrijednost direktno u main.tf:

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

Da biste primijenili promjene, kao u slučaju prvog primjera, koristite naredbu terraform apply:

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

Ako se broj čvorova promijeni, klaster će ostati dostupan. Nakon dodavanja čvora putem Terraforma, možete ga koristiti bez dodatne konfiguracije:

$ 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

zaključak

U ovom članku smo se upoznali s glavnim načinima rada "Virtuelni privatni oblak" preko Terraforma. Bit će nam drago ako koristite službenog Selectel Terraform provajdera i pošaljete povratne informacije.

Sve pronađene greške provajdera Selectel Terraform mogu se prijaviti putem Github Issues.

izvor: www.habr.com

Dodajte komentar