Spustili sme oficiálneho poskytovateľa Terraform pre spoluprácu so Selectel. Tento produkt umožňuje používateľom plne implementovať správu zdrojov prostredníctvom metodiky Infrastructure-as-code.
Poskytovateľ v súčasnosti podporuje správu zdrojov služby "Virtuálny súkromný cloud" (ďalej len VPC). V budúcnosti plánujeme pridať správu zdrojov pre ďalšie služby poskytované spoločnosťou Selectel.
Ako už viete, služba VPC je postavená na OpenStack. Vzhľadom na to, že OpenStack neposkytuje natívne nástroje na obsluhu verejného cloudu, implementovali sme chýbajúcu funkcionalitu do sady ďalších API, ktoré zjednodušujú správu zložitých kompozitných objektov a uľahčujú prácu. Niektoré funkcie dostupné v OpenStack sú uzavreté z priameho používania, ale sú dostupné prostredníctvom naše API.
Poskytovateľ Selectel Terraform teraz zahŕňa možnosť spravovať nasledujúce zdroje VPC:
projekty a ich kvóty;
používatelia, ich úlohy a tokeny;
verejné podsiete vrátane medziregionálnych a VRRP;
softvérové licencie.
Poskytovateľ používa našu verejnú knižnicu Go na prácu s VPC API. Knižnica aj samotný poskytovateľ sú open-source, ich vývoj prebieha na Github:
Na správu iných cloudových prostriedkov, ako sú virtuálne počítače, disky, klastre Kubernetes, môžete použiť poskytovateľa OpenStack Terraform. Oficiálna dokumentácia pre oboch poskytovateľov je k dispozícii na nasledujúcich odkazoch:
Ak chcete začať, musíte si nainštalovať Terraform (pokyny a odkazy na inštalačné balíčky nájdete na oficiálne internetové stránky).
Na fungovanie poskytovateľ vyžaduje kľúč Selectel API, ktorý je vytvorený v ovládacie panely účtov.
Manifesty pre prácu so Selectel sa vytvárajú pomocou Terraformu alebo pomocou sady hotových príkladov, ktoré sú dostupné v našom úložisku Github: terraform-príklady.
Úložisko s príkladmi je rozdelené do dvoch adresárov:
Moduly, ktorý obsahuje malé opakovane použiteľné moduly, ktoré berú súbor parametrov ako vstup a riadia malý súbor zdrojov;
Príklady, ktorý obsahuje príklady kompletnej sady vzájomne prepojených modulov.
Po inštalácii Terraformu, vytvorení kľúča Selectel API a oboznámení sa s príkladmi prejdime na praktické príklady.
V súbore vars.tf sú popísané všetky parametre, ktoré sa použijú pri volaní modulov. Niektoré z nich majú predvolené hodnoty, napríklad server sa vytvorí v zóne ru-3a s nasledujúcou konfiguráciou:
argument ignore_changes umožňuje ignorovať zmeny atribútov id pre obrázok použitý na vytvorenie virtuálneho počítača. V službe VPC sa väčšina verejných obrázkov aktualizuje automaticky raz týždenne a zároveň ich id sa tiež mení. Je to spôsobené zvláštnosťami komponentu OpenStack – Glance, v ktorom sú obrázky považované za nemenné entity.
Ak vytvárate alebo upravujete existujúci server alebo disk, ktorý má ako argument image_id použitý id verejný obrázok, potom po aktualizácii tohto obrázka opätovným spustením manifestu Terraform znova vytvoríte server alebo disk. Použitie argumentu ignore_changes umožňuje vyhnúť sa takejto situácii.
Poznámka: argument ignore_changes sa objavil v Terraforme už veľmi dávno: vytiahnuť#2525.
argument ignore_resize_confirmation potrebné na úspešnú zmenu veľkosti lokálneho disku, jadier alebo pamäte servera. Takéto zmeny sa vykonávajú prostredníctvom komponentu OpenStack Nova pomocou požiadavky veľkosť. Predvolená Nova po vyžiadaní veľkosť uvedie server do stavu over_resize a čaká na dodatočné potvrdenie od používateľa. Toto správanie sa však dá zmeniť, aby Nova nečakala na ďalšie akcie od používateľa.
Zadaný argument umožňuje Terraformu nečakať na stav over_resize pre server a buďte pripravení na to, že po zmene parametrov bude server v aktívnom stave. Argument je dostupný od verzie 1.10.0 poskytovateľa OpenStack Terraform: vytiahnuť#422.
Vytváranie zdrojov
Pred spustením manifestov si prosím všimnite, že v našom príklade sú spustení dvaja rôzni poskytovatelia a poskytovateľ OpenStack závisí od zdrojov poskytovateľa Selectel, pretože bez vytvorenia používateľa v projekte nie je možné spravovať objekty, ktoré mu patria. . Bohužiaľ, z rovnakého dôvodu nemôžeme príkaz len spustiť terraform platí v našom príklade. Najprv musíme urobiť platiť pre modul projekt_s_používateľom a potom na všetko ostatné.
Poznámka: Tento problém ešte nie je vyriešený v Terraforme, diskusiu môžete sledovať na Github na problém#2430 и problém#4149.
Po spustení príkazu Terraform ukáže, aké zdroje chce vytvoriť a požiada o potvrdenie:
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
Po vytvorení projektu, používateľa a roly môžete začať vytvárať zostávajúce zdroje:
S vytvoreným virtuálnym strojom môžete pracovať cez SSH pomocou zadanej IP.
Úprava zdrojov
Okrem vytvárania zdrojov cez Terraform sa dajú aj upravovať.
Zvýšme napríklad počet jadier a pamäte pre náš server zmenou hodnôt parametrov server_vcpus и server_ram_mb v súbore example/vpc/server_local_root_disk/main.tf:
V našom príklady úložísk Môžete tiež vidieť manifesty na vytváranie virtuálnych počítačov so sieťovými jednotkami.
Príklad vytvorenia klastra Kubernetes
Predtým, ako prejdeme k ďalšiemu príkladu, vyčistíme zdroje, ktoré sme vytvorili predtým. Ak to chcete urobiť, v koreňovom adresári projektu terraform-examples/examples/vpc/server_local_root_disk Spustite príkaz na odstránenie objektov OpenStack:
V oboch prípadoch budete musieť potvrdiť vymazanie všetkých objektov:
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
Tento príklad vytvorí projekt, používateľa s rolou v projekte, a vytvorí jeden klaster Kubernetes. V súbore vars.tf môžete vidieť predvolené hodnoty, ako je počet uzlov, ich charakteristiky, verzia Kubernetes atď.
Aby sme vytvorili prostriedky podobné prvému príkladu, najskôr začneme inicializovať moduly a vytvárať prostriedky modulov projekt_s_používateľoma potom vytvorte všetko ostatné:
Vytváranie a správu klastrov Kubernetes prenesieme cez komponent OpenStack Magnum. Viac o práci s klastrom nájdete v jednom z našich predchádzajúce články, ako aj v vedomostná základňa.
Pri príprave klastra sa vytvoria disky a virtuálne stroje a nainštalujú sa všetky potrebné komponenty. Príprava trvá približne 4 minúty, počas ktorých Terraform zobrazí správy ako:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Po dokončení inštalácie Terraform oznámi, že klaster je pripravený a zobrazí jeho ID:
Na správu vytvoreného klastra Kubernetes pomocou pomôcky kubectl musíte získať prístupový súbor klastra. Ak to chcete urobiť, prejdite na projekt vytvorený prostredníctvom Terraform v zozname projektov vo vašom účte:
Ďalej postupujte podľa odkazu ako xxxxxx.selvpc.ruktorý sa zobrazuje pod názvom projektu:
Pre prihlasovacie údaje použite užívateľské meno a heslo, ktoré ste si vytvorili cez Terraform. Ak ste nepodvádzali vars.tf alebo main.tf v našom príklade bude mať používateľ meno tf_user. Ako heslo musíte použiť hodnotu premennej TF_VAR_user_password, ktorý bol špecifikovaný pri spustení terraform platí skôr.
V rámci projektu musíte prejsť na kartu Kubernetes:
Tu sa nachádza klaster vytvorený cez Terraform. Stiahnite si súbor pre kubectl na karte „Prístup“ môžete:
Pokyny na inštaláciu sa nachádzajú na tej istej karte. kubectl a používanie prevzatého config.yaml.
Po spustení kubectl a nastavenie premennej prostredia KUBECOFIG môžete použiť Kubernetes:
Keď sa počet uzlov zmení, klaster zostane dostupný. Po pridaní uzla cez Terraform ho môžete použiť bez ďalšej konfigurácie:
$ 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
Záver
V tomto článku sme sa oboznámili s hlavnými spôsobmi práce "Virtuálny súkromný cloud" cez Terraform. Budeme radi, ak využijete oficiálneho poskytovateľa Selectel Terraform a poskytnete nám spätnú väzbu.
Akékoľvek chyby nájdené u poskytovateľa Selectel Terraform je možné nahlásiť cez Problémy Github.