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:
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.
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:
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.
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.
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:
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:
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:
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
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:
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:
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:
Slijedite link xxxxxx.selvpc.ru, koji se prikazuje ispod naziva projekta:
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:
Ovdje je klaster kreiran kroz Terraform. Preuzmite datoteku za kubectl možete na kartici "Pristup":
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:
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.