Į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:
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ų.
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:
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.
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:
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:
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:
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 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:
„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:
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:
Toliau sekite nuorodą patinka xxxxxx.selvpc.rukuris rodomas po projekto pavadinimu:
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:
Čia yra „Terraform“ sukurta klasteris. Parsisiųsti failą, skirtą kubectl skirtuke „Prieiga“ galite:
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:
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.