Ponudnik terraform Selectel

Ponudnik terraform Selectel

Uvedli smo uradnega ponudnika Terraform za sodelovanje s Selectelom. Ta izdelek omogoča uporabnikom, da v celoti implementirajo upravljanje virov prek metodologije Infrastructure-as-code.

Ponudnik trenutno podpira upravljanje virov storitve "Navidezni zasebni oblak" (v nadaljevanju VPC). V prihodnosti nameravamo dodati upravljanje virov za druge storitve, ki jih ponuja Selectel.

Kot že veste, je storitev VPC zgrajena na OpenStacku. Ker pa OpenStack ne ponuja izvornih orodij za strežbo javnega oblaka, smo manjkajočo funkcionalnost implementirali v nabor dodatnih API-jev, ki poenostavijo upravljanje kompleksnih sestavljenih objektov in naredijo delo bolj priročno. Nekatere funkcije, ki so na voljo v OpenStacku, so zaprte za neposredno uporabo, vendar so na voljo prek naš API.

Ponudnik Selectel Terraform zdaj vključuje možnost upravljanja naslednjih virov VPC:

  • projekti in njihove kvote;
  • uporabniki, njihove vloge in žetoni;
  • javna podomrežja, vključno z medregionalnimi in VRRP;
  • programske licence.

Ponudnik uporablja našo javno knjižnico Go za delo z API-jem VPC. Tako knjižnica kot sam ponudnik sta odprtokodna, njun razvoj poteka na Githubu:

Za upravljanje drugih virov v oblaku, kot so virtualni stroji, diski, gruče Kubernetes, lahko uporabite ponudnika OpenStack Terraform. Uradna dokumentacija za oba ponudnika je dostopna na povezavah:

Začetek

Za začetek morate namestiti Terraform (navodila in povezave do namestitvenih paketov najdete na uradna spletna stran).

Ponudnik za delovanje potrebuje ključ API Selectel, ki je ustvarjen v nadzorne plošče računa.

Manifesti za delo s Selectelom so ustvarjeni s pomočjo Terraforma ali z uporabo nabora že pripravljenih primerov, ki so na voljo v našem repozitoriju Github: terraform-primeri.

Repozitorij s primeri je razdeljen na dva direktorija:

  • moduli, ki vsebuje majhne module za večkratno uporabo, ki sprejmejo nabor parametrov kot vhod in upravljajo majhen nabor virov;
  • Primeri, ki vsebuje primere celotnega sklopa med seboj povezanih modulov.

Po namestitvi Terraform, ustvarjanju ključa Selectel API in se seznanitvi s primeri, preidimo na praktične primere.

Primer izdelave strežnika z lokalnim diskom

Oglejmo si primer ustvarjanja projekta, uporabnika z vlogo in virtualnega stroja z lokalnim diskom: terraform-examples/examples/vpc/server_local_root_disk.

V datoteki vars.tf opisani so vsi parametri, ki bodo uporabljeni pri klicanju modulov. Nekateri od njih imajo privzete vrednosti, na primer strežnik bo ustvarjen v coni ru-3a z naslednjo konfiguracijo:

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

V datoteki main.tf Ponudnik Selectel je inicializiran:

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

Ta datoteka vsebuje tudi privzeto vrednost za ključ SSH, ki bo nameščen na strežniku:

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

Po potrebi lahko določite drug javni ključ. Ključa ni treba navesti kot pot do datoteke; vrednost lahko dodate tudi kot niz.

Nadalje v tej datoteki se zaženejo moduli projekt_z_uporabnikom и strežnik_lokalni_korenski_disk, ki upravljajo potrebna sredstva.

Oglejmo si te module podrobneje.

Ustvarjanje projekta in uporabnika z vlogo

Prvi modul ustvari projekt in uporabnika z vlogo v tem projektu: terraform-examples/modules/vpc/project_with_user.

Ustvarjeni uporabnik se bo lahko prijavil v OpenStack in upravljal z njegovimi viri. Modul je preprost in upravlja samo s tremi entitetami:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Ustvarjanje virtualnega strežnika z lokalnim diskom

Drugi modul se ukvarja z upravljanjem objektov OpenStack, ki so potrebni za izdelavo strežnika z lokalnim diskom.

Bodite pozorni na nekatere argumente, ki so navedeni v tem modulu za vir openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Prepir ignore_changes vam omogoča, da prezrete spremembe atributov id za sliko, uporabljeno za ustvarjanje virtualnega stroja. V storitvi VPC se večina javnih slik samodejno posodobi enkrat tedensko in hkrati njihova id tudi spremembe. To je posledica posebnosti komponente OpenStack - Glance, v kateri slike veljajo za nespremenljive entitete.

Če ustvarjate ali spreminjate obstoječi strežnik ali disk, ki ima kot argument image_id rabljeni id javna slika, potem ko je ta slika posodobljena, bo ponovni zagon manifesta Terraform znova ustvaril strežnik ali disk. Uporaba argumenta ignore_changes vam omogoča, da se izognete takšni situaciji.

Opomba: argument ignore_changes pojavil v Terraformu že dolgo nazaj: poteg #2525.

Prepir ignore_resize_confirmation potrebno za uspešno spreminjanje velikosti lokalnega diska, jeder ali pomnilnika strežnika. Takšne spremembe se izvedejo prek komponente OpenStack Nova z uporabo zahteve spremeniti velikost. Privzeto Nova po zahtevi spremeniti velikost postavi strežnik v stanje verify_resize in čaka na dodatno potrditev uporabnika. Vendar pa je to vedenje mogoče spremeniti, tako da Nova ne čaka na dodatna dejanja uporabnika.

Podani argument omogoča Terraformu, da ne čaka na stanje verify_resize za strežnik in bodite pripravljeni, da bo strežnik po spremembi parametrov v aktivnem stanju. Argument je na voljo v različici 1.10.0 ponudnika OpenStack Terraform: poteg #422.

Ustvarjanje virov

Preden zaženete manifeste, upoštevajte, da sta v našem primeru zagnana dva različna ponudnika in da je ponudnik OpenStack odvisen od virov ponudnika Selectel, saj je brez ustvarjanja uporabnika v projektu nemogoče upravljati objekte, ki mu pripadajo. . Na žalost iz istega razloga ne moremo kar zagnati ukaza uporabi terraform znotraj našega primera. Najprej moramo narediti veljajo za modul projekt_z_uporabnikom potem pa za vse ostalo.

Opomba: Ta težava še ni rešena v Terraformu, razpravi lahko sledite na Githubu na izdaja#2430 и izdaja#4149.

Če želite ustvariti vire, pojdite v imenik terraform-examples/examples/vpc/server_local_root_disk, bi morala biti njegova vsebina takšna:

$ ls
README.md	   main.tf		vars.tf

Module inicializiramo z ukazom:

$ terraform init

Rezultat kaže, da Terraform prenese najnovejše različice ponudnikov, ki jih uporablja, in preveri vse module, opisane v primeru.

Najprej uporabimo modul projekt_z_uporabnikom. To zahteva ročno posredovanje vrednosti za spremenljivke, ki niso bile nastavljene:

  • sel_account s številko računa Selectel;
  • sel_token z vašim ključem za Selectel API;
  • uporabniško_geslo z geslom za uporabnika OpenStack.

Vrednosti za prvi dve spremenljivki je treba vzeti iz nadzorne plošče.

Za zadnjo spremenljivko si lahko izmislite poljubno geslo.

Za uporabo modula morate zamenjati vrednosti SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD izvajanje ukaza:

$ 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

Po zagonu ukaza bo Terraform pokazal, katere vire želi ustvariti, in prosil za potrditev:

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

Ko so projekt, uporabnik in vloga ustvarjeni, lahko začnete ustvarjati preostale vire:

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

Pri ustvarjanju virov bodite pozorni na izpis Terraform z zunanjim naslovom IP, kjer bo ustvarjeni strežnik dostopen:

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

Z ustvarjenim virtualnim strojem lahko delate prek SSH z navedenim IP-jem.

Urejanje virov

Poleg ustvarjanja virov prek Terraforma jih je mogoče tudi spreminjati.

Na primer, povečajmo število jeder in pomnilnika za naš strežnik s spreminjanjem vrednosti parametrov server_vcpus и strežnik_ram_mb v datoteki 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

Po tem preverimo, do kakšnih sprememb bo to privedlo z naslednjim ukazom:

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

Posledično je Terraform spremenil vir openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Upoštevajte, da bo to pomenilo ponovni zagon ustvarjenega virtualnega stroja.

Če želite uporabiti novo konfiguracijo navideznega stroja, uporabite ukaz uporabi terraform, ki smo ga lansirali že prej.

Vsi ustvarjeni predmeti bodo prikazani v VPC nadzorne plošče:

Ponudnik terraform Selectel

V našem primeri repozitorijev Ogledate si lahko tudi manifeste za ustvarjanje virtualnih strojev z omrežnimi pogoni.

Primer ustvarjanja gruče Kubernetes

Preden preidemo na naslednji primer, bomo počistili vire, ki smo jih ustvarili prej. Če želite to narediti v korenu projekta terraform-examples/examples/vpc/server_local_root_disk Zaženimo ukaz za brisanje objektov OpenStack:

$ 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

Nato zaženite ukaz za brisanje predmetov API Selectel VPC:

$ 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

V obeh primerih boste morali potrditi izbris vseh predmetov:

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

Naslednji primer je v imeniku terraform-examples/examples/vpc/kubernetes_cluster.

Ta primer ustvari projekt, uporabnika z vlogo v projektu in dvigne eno gručo Kubernetes. V datoteki vars.tf lahko vidite privzete vrednosti, kot so število vozlišč, njihove značilnosti, različica Kubernetes itd.

Za ustvarjanje virov, podobnih prvemu primeru, bomo najprej začeli inicializirati module in ustvarjati vire modulov projekt_z_uporabnikomin nato ustvari vse 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

Ustvarjanje in upravljanje gruč Kubernetes bomo prenesli preko komponente OpenStack Magnum. Več o tem, kako delati z gručo, lahko izveste v enem od naših prejšnji članki, kot tudi v Baza znanja.

Pri pripravi gruče bodo izdelani diski in virtualni stroji ter nameščene vse potrebne komponente. Priprava traja približno 4 minute, v tem času pa bo Terraform prikazal sporočila, kot so:

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

Ko je namestitev končana, bo Terraform pokazal, da je gruča pripravljena, in prikazal njen 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 ustvarjene gruče Kubernetes prek pripomočka kubectl pridobiti morate datoteko za dostop do gruče. Če želite to narediti, pojdite na projekt, ustvarjen s programom Terraform, na seznamu projektov v vašem računu:

Ponudnik terraform Selectel

Nato sledite povezavi like xxxxxx.selvpc.ruki se pojavi pod imenom projekta:

Ponudnik terraform Selectel

Za podatke za prijavo uporabite uporabniško ime in geslo, ki ste ju ustvarili prek Terraform. Če nisi goljufal vars.tf ali main.tf v našem primeru bo imel uporabnik ime tf_uporabnik. Kot geslo morate uporabiti vrednost spremenljivke TF_VAR_uporabniško_geslo, ki je bil določen ob zagonu uporabi terraform prej.

Znotraj projekta morate iti na zavihek Kubernetes:

Ponudnik terraform Selectel

Tu se nahaja gruča, ustvarjena prek Terraforma. Prenesite datoteko za kubectl lahko na zavihku »Dostop«:

Ponudnik terraform Selectel

Navodila za namestitev se nahajajo na istem zavihku. kubectl in uporabo prenesenega config.yaml.

Po izstrelitvi kubectl in nastavitev spremenljivke okolja KUBECONFIG lahko uporabite 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

Število vozlišč gruče lahko preprosto spremenite prek Terraforma.
V datoteki main.tf navedena je naslednja vrednost:

cluster_node_count = "${var.cluster_node_count}"

Ta vrednost je nadomeščena z vars.tf:

variable "cluster_node_count" {
default = 2
}

Privzeto vrednost lahko spremenite v vars.tf, ali pa zahtevano vrednost določite neposredno v main.tf:

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

Za uveljavitev sprememb, kot v primeru prvega primera, uporabite ukaz uporabi terraform:

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

Ko se število vozlišč spremeni, bo gruča ostala na voljo. Ko dodate vozlišče prek Terraform, ga lahko uporabljate brez 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ček

V tem članku smo se seznanili z glavnimi načini dela "Navidezni zasebni oblak" preko Terraform. Veseli bomo, če boste uporabili uradnega ponudnika Selectel Terraform in posredovali povratne informacije.

Vse napake, odkrite pri ponudniku Selectel Terraform, lahko prijavite prek Težave z Githubom.

Vir: www.habr.com

Dodaj komentar