Dobavljač terraform Selectel

Dobavljač terraform Selectel

Pokrenuli smo službenog Terraform pružatelja usluga za suradnju sa Selectelom. Ovaj proizvod omogućuje korisnicima potpunu implementaciju upravljanja resursima kroz metodologiju Infrastructure-as-code.

Davatelj trenutno podržava upravljanje resursima usluge "Virtualni privatni oblak" (u daljnjem tekstu VPC). U budućnosti planiramo dodati upravljanje resursima za ostale usluge koje pruža Selectel.

Kao što već znate, VPC usluga izgrađena je na OpenStacku. Međutim, zbog činjenice da OpenStack ne pruža izvorne alate za posluživanje javnog oblaka, implementirali smo funkcionalnost koja nedostaje u skupu dodatnih API-ja koji pojednostavljuju upravljanje složenim složenim objektima i čine rad praktičnijim. Neke od funkcija dostupnih u OpenStacku zatvorene su za izravnu upotrebu, ali su dostupne putem naš API.

Selectel Terraform pružatelj sada uključuje 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.

Davatelj koristi našu javnu biblioteku Go za rad s VPC API-jem. I biblioteka i sam pružatelj su otvorenog koda, njihov razvoj se odvija na Githubu:

Za upravljanje drugim resursima u oblaku, kao što su virtualni strojevi, diskovi, Kubernetes klasteri, možete koristiti OpenStack Terraform providera. Službena dokumentacija za oba pružatelja dostupna je na sljedećim poveznicama:

Početak

Za početak morate instalirati Terraform (upute i poveznice na instalacijske pakete možete pronaći na službene web stranice).

Da bi radio, pružatelj zahtijeva Selectel API ključ koji je kreiran u upravljačke ploče računa.

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

Repozitorij s primjerima podijeljen je u dva direktorija:

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

Nakon instaliranja Terraforma, kreiranja Selectel API ključa i upoznavanja s primjerima, prijeđimo na praktične primjere.

Primjer kreiranja poslužitelja s lokalnim diskom

Pogledajmo primjer kreiranja projekta, korisnika s ulogom i virtualnog stroja s lokalnim diskom: terraform-examples/examples/vpc/server_local_root_disk.

U spisu vars.tf opisani su svi parametri koji će se koristiti prilikom pozivanja modula. Neki od njih imaju zadane vrijednosti, na primjer, poslužitelj će biti kreiran u zoni ru-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 spisu glavni.tf Selectel pružatelj usluga je inicijaliziran:

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

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

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

Ako je potrebno, možete navesti drugi javni ključ. Ključ ne mora biti naveden kao put datoteke; vrijednost možete dodati i kao niz.

Dalje u ovoj datoteci pokreću se moduli projekt_s_korisnikom и server_local_root_disk, koji upravljaju potrebnim resursima.

Pogledajmo ove module detaljnije.

Izrada projekta i korisnika s ulogom

Prvi modul stvara projekt i korisnika s ulogom u tom projektu: terraform-examples/modules/vpc/project_with_user.

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

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Izrada virtualnog poslužitelja s lokalnim diskom

Drugi modul bavi se upravljanjem OpenStack objektima koji su potrebni za kreiranje poslužitelja s lokalnim diskom.

Trebali biste obratiti pozornost 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 ignoriraj_promjene omogućuje ignoriranje promjena atributa id za sliku korištenu za stvaranje virtualnog stroja. U VPC servisu većina javnih slika ažurira se automatski jednom tjedno i u isto vrijeme njihove id također mijenja. To je zbog osobitosti komponente OpenStack - Glance, u kojoj se slike smatraju nepromjenjivim entitetima.

Ako stvarate ili mijenjate postojeći poslužitelj ili disk koji ima kao argument image_id polovan id javnu sliku, nakon što se ta slika ažurira, ponovno pokretanje Terraform manifesta ponovno će stvoriti poslužitelj ili disk. Korištenje argumenta ignoriraj_promjene omogućuje izbjegavanje takve situacije.

Napomena: argument ignoriraj_promjene pojavio u Terraformu dosta davno: povlačenje#2525.

argument ignore_resize_confirmation potreban za uspješnu promjenu veličine lokalnog diska, jezgri ili memorije poslužitelja. Takve se promjene vrše putem komponente OpenStack Nova pomoću zahtjeva veličinu. Zadana Nova nakon zahtjeva veličinu stavlja poslužitelj u status potvrdi_promjenu veličine i čeka dodatnu potvrdu od korisnika. Međutim, ovo se ponašanje može promijeniti tako da Nova ne čeka dodatne radnje od korisnika.

Navedeni argument omogućuje Terraformu da ne čeka status potvrdi_promjenu veličine za poslužitelj i budite spremni da poslužitelj bude u aktivnom statusu nakon promjene njegovih parametara. Argument je dostupan od verzije 1.10.0 dobavljača OpenStack Terraform: povlačenje#422.

Stvaranje resursa

Prije pokretanja manifesta, imajte na umu da su u našem primjeru pokrenuta dva različita pružatelja usluga, a pružatelj OpenStack ovisi o resursima pružatelja Selectel, budući da je bez stvaranja korisnika u projektu nemoguće upravljati objektima koji mu pripadaju . Nažalost, iz istog razloga ne možemo jednostavno pokrenuti naredbu terraform primijeniti unutar našeg primjera. Prvo trebamo učiniti primijeniti za modul projekt_s_korisnikom a nakon toga za sve ostalo.

Napomena: ovaj problem još nije riješen u Terraformu, raspravu možete pratiti na Githubu na izdanje #2430 и izdanje #4149.

Za stvaranje resursa idite u imenik terraform-examples/examples/vpc/server_local_root_disk, njegov sadržaj bi trebao biti ovakav:

$ ls
README.md	   main.tf		vars.tf

Module inicijaliziramo pomoću naredbe:

$ terraform init

Izlaz pokazuje da Terraform preuzima najnovije verzije pružatelja usluga koje koristi i provjerava sve module opisane u primjeru.

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

  • sel_račun s vašim brojem Selectel računa;
  • sel_token s vašim ključem za Selectel API;
  • korisnička lozinka s lozinkom za OpenStack korisnika.

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

Za posljednju varijablu možete smisliti bilo koju lozinku.

Za korištenje modula morate zamijeniti vrijednosti SEL_ACCOUNT, SEL_TOKEN и KORISNIČKA LOZINKA pokretanje 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 stvoriti i zatražiti 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

Nakon što su projekt, korisnik i uloga stvoreni, možete početi stvarati preostale resurse:

$ 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 pozornost na Terraform izlaz s vanjskom IP adresom na kojoj će kreirani poslužitelj biti dostupan:

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

S kreiranim virtualnim strojem možete raditi putem SSH-a koristeći navedeni IP.

Resursi za uređivanje

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

Na primjer, povećajmo broj jezgri i memorije za naš poslužitelj promjenom vrijednosti za parametre server_vcpus и server_ram_mb u spisu primjeri/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 će to promjena 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 zahtijevati ponovno pokretanje stvorenog virtualnog stroja.

Za primjenu nove konfiguracije virtualnog stroja upotrijebite naredbu terraform primijeniti, koji smo već pokrenuli ranije.

Svi stvoreni objekti bit će prikazani u VPC upravljačke ploče:

Dobavljač terraform Selectel

U našem primjer spremišta Također možete vidjeti manifeste za stvaranje virtualnih strojeva s mrežnim pogonima.

Primjer kreiranja Kubernetes klastera

Prije nego što prijeđemo na sljedeći primjer, očistit ćemo resurse koje smo ranije stvorili. Da biste to učinili u korijenu projekta terraform-examples/examples/vpc/server_local_root_disk Pokrenimo 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 nalazi se u imeniku terraform-examples/examples/vpc/kubernetes_cluster.

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

Da bismo stvorili resurse slične prvom primjeru, prvo ćemo započeti s inicijalizacijom modula i stvaranjem resursa modula projekt_s_korisnikoma zatim stvara 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

Prenijet ćemo 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 člancikao i u baza znanja.

Prilikom pripreme klastera izradit će se diskovi i virtualni strojevi te instalirati 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)

Kada instalacija završi, Terraform će pokazati 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 stvorenim Kubernetes klasterom putem uslužnog programa kubectl trebate nabaviti datoteku za pristup klasteru. Da biste to učinili, idite na projekt kreiran putem Terraforma na popisu projekata na vašem računu:

Dobavljač terraform Selectel

Zatim slijedite vezu like xxxxxx.selvpc.rukoji se pojavljuje ispod naziva projekta:

Dobavljač terraform Selectel

Za podatke za prijavu koristite korisničko ime i lozinku koje ste kreirali putem Terraforma. Ako niste varali vars.tf ili glavni.tf za naš primjer, korisnik će imati ime tf_korisnik. Morate koristiti vrijednost varijable kao lozinku TF_VAR_korisnička_lozinka, koji je naveden pri pokretanju terraform primijeniti ranije.

Unutar projekta morate otići na karticu Kubernetes:

Dobavljač terraform Selectel

Ovdje se nalazi klaster stvoren putem Terraforma. Preuzmite datoteku za kubectl možete na kartici "Pristup":

Dobavljač terraform Selectel

Upute za instalaciju nalaze se na istoj kartici. kubectl i korištenje preuzetog config.yaml.

Nakon lansiranja kubectl i postavljanje varijable okoline 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 može se jednostavno promijeniti putem Terraforma.
U spisu glavni.tf navedena je sljedeća vrijednost:

cluster_node_count = "${var.cluster_node_count}"

Ova vrijednost je zamijenjena s vars.tf:

variable "cluster_node_count" {
default = 2
}

Zadanu vrijednost možete promijeniti u vars.tf, ili navedite traženu vrijednost izravno u glavni.tf:

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

Za primjenu promjena, kao u slučaju prvog primjera, koristite naredbu terraform primijeniti:

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

Kada 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 smo se članku upoznali s glavnim načinima rada "Virtualni privatni oblak" putem Terraforma. Bit će nam drago ako koristite službenog dobavljača Selectel Terraform i date povratne informacije.

Sve greške pronađene u Selectel Terraform pružatelju mogu se prijaviti putem Problemi s Githubom.

Izvor: www.habr.com

Dodajte komentar