Terraformų tiekėjas Selectel

Terraformų tiekėjas Selectel

Įkūrėme oficialų „Terraform“ tiekėją, kuris dirbs su „Selectel“. Šis produktas leidžia vartotojams visiškai įgyvendinti išteklių valdymą naudojant „Infrastructure-as-code“ metodiką.

Teikėjas šiuo metu palaiko paslaugų išteklių valdymą „Virtualus privatus debesis“ (toliau – VPC). Ateityje planuojame pridėti išteklių valdymą ir kitoms Selectel teikiamoms paslaugoms.

Kaip jau žinote, VPC paslauga yra sukurta „OpenStack“. Tačiau dėl to, kad „OpenStack“ nepateikia vietinių įrankių viešajam debesiui aptarnauti, trūkstamą funkcionalumą įdiegėme papildomų API rinkinyje, kuris supaprastina sudėtingų sudėtinių objektų valdymą ir padaro darbą patogesnį. Kai kurios „OpenStack“ funkcijos yra uždarytos nuo tiesioginio naudojimo, tačiau yra pasiekiamos per mūsų API.

„Selectel Terraform“ teikėjas dabar turi galimybę valdyti šiuos VPC išteklius:

  • projektai ir jų kvotos;
  • vartotojai, jų vaidmenys ir žetonai;
  • viešieji potinkliai, įskaitant tarpregioninius ir VRRP;
  • programinės įrangos licencijos.

Teikėjas naudoja mūsų viešąją Go biblioteką darbui su VPC API. Tiek biblioteka, tiek pats teikėjas yra atvirojo kodo, jų kūrimas vykdomas Github:

Norėdami valdyti kitus debesies išteklius, pvz., virtualias mašinas, diskus, „Kubernetes“ grupes, galite naudoti „OpenStack Terraform“ teikėją. Oficialūs abiejų teikėjų dokumentai pateikiami šiose nuorodose:

Darbo pradžia

Norėdami pradėti, turite įdiegti „Terraform“ (instrukcijas ir nuorodas į diegimo paketus rasite adresu oficiali svetainė).

Kad galėtų veikti, teikėjas reikalauja Selectel API rakto, kuris yra sukurtas paskyros valdymo pultai.

Manifestai, skirti dirbti su „Selectel“, sukuriami naudojant „Terraform“ arba naudojant paruoštų pavyzdžių rinkinį, kuris yra mūsų „Github“ saugykloje: teraformos pavyzdžiai.

Saugykla su pavyzdžiais yra padalinta į du katalogus:

  • moduliai, kuriame yra nedideli daugkartinio naudojimo moduliai, kurie kaip įvestis naudoja parametrų rinkinį ir valdo nedidelį išteklių rinkinį;
  • pavyzdžiai, kuriame yra viso tarpusavyje sujungtų modulių rinkinio pavyzdžiai.

Įdiegę Terraform, sukūrę Selectel API raktą ir susipažinę su pavyzdžiais, pereikime prie praktinių pavyzdžių.

Serverio su vietiniu disku kūrimo pavyzdys

Pažvelkime į projekto kūrimo pavyzdį, vartotoją su vaidmeniu ir virtualią mašiną su vietiniu disku: terraform-examples/examples/vpc/server_local_root_disk.

Byloje vars.tf aprašyti visi parametrai, kurie bus naudojami iškviečiant modulius. Kai kurie iš jų turi numatytąsias reikšmes, pavyzdžiui, serveris bus sukurtas zonoje ru-3a su tokia konfigūracija:

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

Byloje pagrindinis.tf „Selectel“ teikėjas inicijuojamas:

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

Šiame faile taip pat yra numatytoji SSH rakto, kuris bus įdiegtas serveryje, reikšmė:

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

Jei reikia, galite nurodyti kitą viešąjį raktą. Raktas neturi būti nurodytas kaip failo kelias; taip pat galite pridėti reikšmę kaip eilutę.

Toliau šiame faile paleidžiami moduliai projektas_su_vartotoju и server_local_root_disk, kurios valdo reikiamus išteklius.

Pažvelkime į šiuos modulius išsamiau.

Projekto ir vartotojo su vaidmeniu kūrimas

Pirmasis modulis sukuria projektą ir vartotoją, turintį vaidmenį tame projekte: terraform-examples/modules/vpc/project_with_user.

Sukurtas vartotojas galės prisijungti prie OpenStack ir valdyti jo išteklius. Modulis yra paprastas ir valdo tik tris objektus:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Virtualaus serverio su vietiniu disku kūrimas

Antrasis modulis skirtas valdyti OpenStack objektus, kurie yra būtini norint sukurti serverį su vietiniu disku.

Turėtumėte atkreipti dėmesį į kai kuriuos argumentus, nurodytus šiame šaltinio modulyje openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argumentas ignoruoti_pakeitimus leidžia ignoruoti atributų pakeitimus id vaizdui, naudotam kuriant virtualią mašiną. VPC paslaugoje dauguma viešų vaizdų atnaujinami automatiškai kartą per savaitę ir tuo pačiu metu jų id taip pat keičiasi. Taip yra dėl „OpenStack“ komponento ypatumų – „Glance“, kuriame vaizdai laikomi nekintamais objektais.

Jei kuriate arba modifikuojate esamą serverį ar diską, kuris turi kaip argumentą vaizdo_id naudotas id viešasis vaizdas, tada atnaujinus tą vaizdą, dar kartą paleidus Terraform manifestą, serveris arba diskas bus sukurtas iš naujo. Naudojant argumentą ignoruoti_pakeitimus leidžia išvengti tokios situacijos.

Pastaba: argumentas ignoruoti_pakeitimus pasirodė Terraform gana seniai: trauk #2525.

Argumentas ignoruoti_dydžio_keitimo patvirtinimą reikalingi norint sėkmingai pakeisti vietinio disko, branduolių ar serverio atminties dydį. Tokie pakeitimai atliekami naudojant „OpenStack Nova“ komponentą naudojant užklausą dydį. Numatytoji Nova po prašymo dydį perkelia serverio būseną verify_resize ir laukia papildomo vartotojo patvirtinimo. Tačiau šį elgesį galima pakeisti taip, kad Nova nelauktų papildomų vartotojo veiksmų.

Nurodytas argumentas leidžia Terraform nelaukti būsenos verify_resize serveriui ir pasiruoškite, kad pakeitus parametrus serveris bus aktyvios būsenos. Argumentą galima rasti iš „OpenStack Terraform“ teikėjo 1.10.0 versijos: trauk #422.

Išteklių kūrimas

Prieš paleisdami manifestus, atkreipkite dėmesį, kad mūsų pavyzdyje paleidžiami du skirtingi tiekėjai, o „OpenStack“ teikėjas priklauso nuo „Selectel“ teikėjo išteklių, nes nesukūrus vartotojo projekte neįmanoma valdyti jam priklausančių objektų. . Deja, dėl tos pačios priežasties negalime tiesiog paleisti komandos taikyti teraformą mūsų pavyzdyje. Pirmiausia turime padaryti taikyti moduliui projektas_su_vartotoju o po to dėl viso kito.

Pastaba: „Terraform“ ši problema dar neišspręsta, diskusiją „Github“ galite stebėti adresu leidimas Nr. 2430 и leidimas Nr. 4149.

Norėdami sukurti išteklius, eikite į katalogą terraform-examples/examples/vpc/server_local_root_disk, jo turinys turėtų būti toks:

$ ls
README.md	   main.tf		vars.tf

Modulius inicijuojame naudodami komandą:

$ terraform init

Išvestis rodo, kad Terraform atsisiunčia naujausias naudojamų teikėjų versijas ir patikrina visus pavyzdyje aprašytus modulius.

Pirmiausia pritaikykime modulį projektas_su_vartotoju. Tam reikia rankiniu būdu perduoti kintamųjų, kurie nebuvo nustatyti, reikšmes:

  • sel_sąskaita su savo Selectel sąskaitos numeriu;
  • sel_token su savo Selectel API raktu;
  • vartotojo_slaptažodis su OpenStack vartotojo slaptažodžiu.

Pirmųjų dviejų kintamųjų reikšmės turi būti paimtos iš valdymo pultus.

Paskutiniam kintamajam galite sugalvoti bet kokį slaptažodį.

Norėdami naudoti modulį, turite pakeisti reikšmes SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD paleidus komandą:

$ 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

Paleidus komandą, Terraform parodys, kokius išteklius nori sukurti, ir paprašys patvirtinimo:

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

Sukūrę projektą, vartotoją ir vaidmenį, galite pradėti kurti likusius išteklius:

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

Kurdami išteklius atkreipkite dėmesį į Terraform išvestį su išoriniu IP adresu, kuriuo bus pasiekiamas sukurtas serveris:

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

Galite dirbti su sukurta virtualia mašina per SSH naudodami nurodytą IP.

Redaguoti išteklius

Be išteklių kūrimo naudojant Terraform, juos taip pat galima keisti.

Pavyzdžiui, padidinkime savo serverio branduolių ir atminties skaičių pakeisdami parametrų reikšmes serveris_vcpus и serverio_ram_mb faile 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 to patikriname, kokius pakeitimus tai sukels, naudodami šią komandą:

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

Dėl to Terraform pakeitė išteklius openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Atminkite, kad tai teks iš naujo paleisti sukurtą virtualią mašiną.

Norėdami pritaikyti naują virtualios mašinos konfigūraciją, naudokite komandą taikyti teraformą, kurią jau paleidome anksčiau.

Visi sukurti objektai bus rodomi VPC valdymo pultai:

Terraformų tiekėjas Selectel

Mumyse pavyzdžių saugyklos Taip pat galite pamatyti virtualių mašinų su tinklo diskais kūrimo manifestus.

„Kubernetes“ klasterio kūrimo pavyzdys

Prieš pereidami prie kito pavyzdžio, išvalysime anksčiau sukurtus išteklius. Norėdami tai padaryti, projekto šaknyje terraform-examples/examples/vpc/server_local_root_disk Vykdykime komandą, norėdami ištrinti „OpenStack“ objektus:

$ 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

Tada paleiskite komandą, kad išvalytumėte Selectel VPC API objektus:

$ 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

Abiem atvejais turėsite patvirtinti visų objektų ištrynimą:

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

Šis pavyzdys yra kataloge terraform-examples/examples/vpc/kubernetes_cluster.

Šis pavyzdys sukuria projektą, vartotoją, turintį vaidmenį projekte, ir iškelia vieną „Kubernetes“ klasterį. Byloje vars.tf galite matyti numatytąsias reikšmes, tokias kaip mazgų skaičius, jų charakteristikos, Kubernetes versija ir kt.

Norėdami sukurti panašius išteklius kaip pirmame pavyzdyje, pirmiausia pradėsime inicijuoti modulius ir kurti modulių išteklius projektas_su_vartotojuir tada sukurti visa kita:

$ 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

„Kubernetes“ klasterių kūrimą ir valdymą perkelsime per „OpenStack Magnum“ komponentą. Daugiau apie tai, kaip dirbti su grupe, galite sužinoti viename iš mūsų ankstesni straipsniai, taip pat in žinių bazė.

Rengiant klasterį bus sukurti diskai ir virtualios mašinos bei įdiegti visi reikalingi komponentai. Paruošimas trunka apie 4 minutes, per tą laiką Terraform rodys tokius pranešimus:

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

Kai diegimas bus baigtas, Terraform parodys, kad klasteris yra paruoštas, ir parodys jo 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.

Sukurtą Kubernetes klasterį tvarkyti per įrankį kubectl jums reikia gauti klasterio prieigos failą. Norėdami tai padaryti, savo paskyros projektų sąraše eikite į projektą, sukurtą naudojant Terraform:

Terraformų tiekėjas Selectel

Toliau sekite nuorodą patinka xxxxxx.selvpc.rukuris rodomas po projekto pavadinimu:

Terraformų tiekėjas Selectel

Norėdami gauti prisijungimo informaciją, naudokite vartotojo vardą ir slaptažodį, kuriuos sukūrėte naudodami Terraform. Jei neapgavote vars.tf arba pagrindinis.tf mūsų pavyzdyje vartotojas turės vardą tf_user. Turite naudoti kintamojo reikšmę kaip slaptažodį TF_VAR_user_password, kuris buvo nurodytas paleidžiant taikyti teraformą anksčiau.

Projekto viduje turite eiti į skirtuką Kubernetes:

Terraformų tiekėjas Selectel

Čia yra „Terraform“ sukurta klasteris. Parsisiųsti failą, skirtą kubectl skirtuke „Prieiga“ galite:

Terraformų tiekėjas Selectel

Diegimo instrukcijos yra tame pačiame skirtuke. kubectl ir atsisiųstų dalykų naudojimas config.yaml.

Po paleidimo kubectl ir nustatyti aplinkos kintamąjį KUBECONFIG galite naudoti 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

Klasterio mazgų skaičius gali būti lengvai keičiamas naudojant Terraform.
Byloje pagrindinis.tf nurodyta ši vertė:

cluster_node_count = "${var.cluster_node_count}"

Ši vertė pakeičiama iš vars.tf:

variable "cluster_node_count" {
default = 2
}

Galite pakeisti bet kurią numatytąją reikšmę vars.tfarba tiesiogiai nurodykite reikiamą reikšmę pagrindinis.tf:

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

Norėdami pritaikyti pakeitimus, kaip ir pirmojo pavyzdžio atveju, naudokite komandą taikyti teraformą:

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

Pasikeitus mazgų skaičiui, klasteris išliks pasiekiamas. Pridėję mazgą per Terraform, galite jį naudoti be papildomos konfigūracijos:

$ 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

išvada

Šiame straipsnyje susipažinome su pagrindiniais darbo būdais „Virtualus privatus debesis“ per Terraform. Mums bus malonu, jei pasinaudosite oficialiu Selectel Terraform tiekėju ir pateiksite atsiliepimą.

Apie visas „Selectel Terraform“ teikėjo klaidas galima pranešti per „Github“ problemos.

Šaltinis: www.habr.com

Добавить комментарий