Ne kemi krijuar një ofrues zyrtar Terraform për të punuar me Selectel. Ky produkt i lejon përdoruesit të zbatojnë plotësisht menaxhimin e burimeve përmes metodologjisë Infrastruktura-si-kod.
Ofruesi aktualisht mbështet menaxhimin e burimeve të shërbimit "Reja private virtuale" (më tej referuar si VPC). Në të ardhmen, ne planifikojmë të shtojmë menaxhimin e burimeve për shërbime të tjera të ofruara nga Selectel.
Siç e dini tashmë, shërbimi VPC është ndërtuar në OpenStack. Sidoqoftë, për shkak të faktit se OpenStack nuk ofron mjete vendase për të shërbyer në renë publike, ne kemi implementuar funksionalitetin që mungon në një grup API-sh shtesë që thjeshtojnë menaxhimin e objekteve komplekse të përbërë dhe e bëjnë punën më të përshtatshme. Disa nga funksionalitetet e disponueshme në OpenStack janë të mbyllura nga përdorimi i drejtpërdrejtë, por janë të disponueshëm përmes API-ja jonë.
Ofruesi Selectel Terraform tani përfshin aftësinë për të menaxhuar burimet e mëposhtme të VPC:
projektet dhe kuotat e tyre;
përdoruesit, rolet dhe shenjat e tyre;
nënrrjetet publike, duke përfshirë ndër-rajonale dhe VRRP;
licencat e softuerit.
Ofruesi përdor bibliotekën tonë publike Go për të punuar me VPC API. Si biblioteka ashtu edhe vetë ofruesi janë me burim të hapur, zhvillimi i tyre kryhet në Github:
Për të menaxhuar burime të tjera cloud, si makina virtuale, disqe, grupime Kubernetes, mund të përdorni ofruesin OpenStack Terraform. Dokumentacioni zyrtar për të dy ofruesit është i disponueshëm në lidhjet e mëposhtme:
Manifestet për të punuar me Selectel krijohen duke përdorur Terraform ose duke përdorur një grup shembujsh të gatshëm që janë të disponueshëm në depon tonë të Github: terraform-shembuj.
Depoja me shembuj është e ndarë në dy drejtori:
Modulet, që përmban module të vogla të ripërdorshme që marrin një sërë parametrash si hyrje dhe menaxhojnë një grup të vogël burimesh;
shembuj, që përmban shembuj të një grupi të plotë modulesh të ndërlidhura.
Pas instalimit të Terraform, krijimit të një çelësi Selectel API dhe njohjes me shembujt, le të kalojmë në shembuj praktikë.
Një shembull i krijimit të një serveri me një disk lokal
Në dosje vars.tf janë përshkruar të gjithë parametrat që do të përdoren gjatë thirrjes së moduleve. Disa prej tyre kanë vlera të paracaktuara, për shembull, serveri do të krijohet në zonë ru-3a me konfigurimin e mëposhtëm:
Nëse është e nevojshme, mund të specifikoni një çelës publik tjetër. Çelësi nuk duhet të specifikohet si një shteg skedari; ju gjithashtu mund ta shtoni vlerën si një varg.
Më tej në këtë skedar lansohen modulet projekti_me_përdoruesin и server_local_root_disk, të cilat menaxhojnë burimet e nevojshme.
Le t'i shikojmë këto module në më shumë detaje.
Krijimi i një projekti dhe një përdoruesi me një rol
Përdoruesi i krijuar do të jetë në gjendje të hyjë në OpenStack dhe të menaxhojë burimet e tij. Moduli është i thjeshtë dhe menaxhon vetëm tre entitete:
selectel_vpc_project_v2,
selectel_vpc_user_v2,
selectel_vpc_role_v2.
Krijimi i një serveri virtual me disk lokal
Moduli i dytë merret me menaxhimin e objekteve OpenStack, të cilat janë të nevojshme për të krijuar një server me një disk lokal.
Ju duhet t'i kushtoni vëmendje disa prej argumenteve që janë specifikuar në këtë modul për burimin openstack_compute_instance_v2:
Argument injoroj_ndryshimet ju lejon të injoroni ndryshimet e atributeve id për imazhin e përdorur për të krijuar makinën virtuale. Në shërbimin VPC, shumica e imazheve publike përditësohen automatikisht një herë në javë dhe në të njëjtën kohë të tyre id gjithashtu ndryshon. Kjo është për shkak të veçorive të komponentit OpenStack - Glance, në të cilin imazhet konsiderohen entitete të pandryshueshme.
Nëse jeni duke krijuar ose modifikuar një server ose disk ekzistues që ka si argument image_id përdoret id imazh publik, më pas pasi ai imazh të përditësohet, ekzekutimi përsëri i manifestit Terraform do të rikrijojë serverin ose diskun. Duke përdorur një argument injoroj_ndryshimet ju lejon të shmangni një situatë të tillë.
Shënim: argument injoroj_ndryshimet u shfaq në Terraform shumë kohë më parë: tërheq #2525.
Argument ignore_resize_confirmation nevojiten për të ndryshuar me sukses madhësinë e diskut lokal, bërthamave ose kujtesës së serverit. Ndryshime të tilla bëhen përmes komponentit OpenStack Nova duke përdorur një kërkesë resize. Nova e paracaktuar pas kërkesës resize e vendos serverin në status verifiko_rimasën dhe pret për konfirmim shtesë nga përdoruesi. Sidoqoftë, kjo sjellje mund të ndryshohet në mënyrë që Nova të mos presë veprime shtesë nga përdoruesi.
Argumenti i specifikuar lejon Terraform të mos presë për statusin verifiko_rimasën për serverin dhe përgatituni që serveri të jetë në status aktiv pas ndryshimit të parametrave të tij. Argumenti është i disponueshëm nga versioni 1.10.0 i ofruesit të OpenStack Terraform: tërheq #422.
Krijimi i Burimeve
Para se të ekzekutoni manifestet, ju lutemi vini re se në shembullin tonë lëshohen dy ofrues të ndryshëm dhe ofruesi OpenStack varet nga burimet e ofruesit Selectel, pasi pa krijuar një përdorues në projekt, është e pamundur të menaxhoni objektet që i përkasin atij. . Fatkeqësisht, për të njëjtën arsye nuk mund të ekzekutojmë komandën terraform aplikohen brenda shembullit tonë. Së pari duhet të bëjmë zbatohen për modul projekti_me_përdoruesin dhe pas kësaj për gjithçka tjetër.
Shënim: Kjo çështje nuk është zgjidhur ende në Terraform, mund të ndiqni diskutimin në Github në numri #2430 и numri #4149.
Pas ekzekutimit të komandës, Terraform do të tregojë se cilat burime dëshiron të krijojë dhe do të kërkojë konfirmim:
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
Pasi të jenë krijuar projekti, përdoruesi dhe roli, mund të filloni të krijoni burimet e mbetura:
Ju mund të punoni me makinën virtuale të krijuar përmes SSH duke përdorur IP-në e specifikuar.
Redaktimi i burimeve
Përveç krijimit të burimeve përmes Terraform, ato gjithashtu mund të modifikohen.
Për shembull, le të rrisim numrin e bërthamave dhe memories për serverin tonë duke ndryshuar vlerat për parametrat server_vcpus и server_ram_mb në dosje shembuj/vpc/server_local_root_disk/main.tf:
Në tonë shembuj të depove Ju gjithashtu mund të shihni manifeste për krijimin e makinave virtuale me disqe rrjeti.
Shembull i krijimit të një grupi Kubernetes
Përpara se të kalojmë te shembulli tjetër, ne do të pastrojmë burimet që krijuam më parë. Për ta bërë këtë në rrënjë të projektit terraform-examples/examples/vpc/server_local_root_disk Le të ekzekutojmë komandën për të fshirë objektet OpenStack:
Në të dyja rastet, do t'ju duhet të konfirmoni fshirjen e të gjitha objekteve:
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
Ky shembull krijon një projekt, një përdorues me një rol në projekt dhe ngre një grup Kubernetes. Në dosje vars.tf mund të shihni vlerat e paracaktuara, të tilla si numri i nyjeve, karakteristikat e tyre, versioni Kubernetes, etj.
Për të krijuar burime të ngjashme me shembullin e parë, para së gjithash do të fillojmë të inicializojmë modulet dhe të krijojmë burime të moduleve projekti_me_përdoruesindhe më pas krijoni gjithçka tjetër:
Ne do të transferojmë krijimin dhe menaxhimin e grupimeve Kubernetes përmes komponentit OpenStack Magnum. Mund të mësoni më shumë se si të punoni me një grup në një nga tonat artikujt e mëparshëm, dhe kështu me radhë njohuri baze.
Gjatë përgatitjes së grupit, do të krijohen disqe dhe makina virtuale dhe do të instalohen të gjithë komponentët e nevojshëm. Përgatitja zgjat rreth 4 minuta, gjatë së cilës kohë Terraform do të shfaqë mesazhe si:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Pasi të përfundojë instalimi, Terraform do të tregojë se grupi është gati dhe do të shfaq ID-në e tij:
Për të menaxhuar grupin e krijuar Kubernetes përmes programit kubectl ju duhet të merrni skedarin e aksesit në grup. Për ta bërë këtë, shkoni te projekti i krijuar përmes Terraform në listën e projekteve në llogarinë tuaj:
Më pas, ndiqni lidhjen si xxxxxx.selvpc.rui cili shfaqet poshtë emrit të projektit:
Për informacionin e hyrjes, përdorni emrin e përdoruesit dhe fjalëkalimin që keni krijuar përmes Terraform. Nëse nuk keni mashtruar vars.tf ose kryesore.tf për shembullin tonë, përdoruesi do të ketë emrin tf_user. Ju duhet të përdorni vlerën e ndryshores si fjalëkalim TF_VAR_user_password, i cili u specifikua në fillim terraform aplikohen me heret
Brenda projektit duhet të shkoni te skeda Kubernetes:
Këtu ndodhet grupi i krijuar nëpërmjet Terraform. Shkarkoni skedarin për kubectl mundeni në skedën "Qasja":
Udhëzimet e instalimit gjenden në të njëjtën skedë. kubectl dhe përdorimin e të shkarkuarve konfigurim.yaml.
Pas nisjes kubectl dhe vendosja e ndryshores mjedisore KUBECONFIG mund të përdorni Kubernetes:
Kur numri i nyjeve ndryshon, grupi do të mbetet i disponueshëm. Pasi të keni shtuar një nyje përmes Terraform, mund ta përdorni pa konfigurim shtesë:
$ 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
Përfundim
Në këtë artikull u njohëm me mënyrat kryesore për të punuar "Reja private virtuale" nëpërmjet Terraform. Do të jemi të lumtur nëse përdorni ofruesin zyrtar të Terraform Selectel dhe jepni komente.
Çdo defekt i gjetur në ofruesin Selectel Terraform mund të raportohet nëpërmjet Çështjet e Github.