Spustili jsme oficiálního poskytovatele Terraform pro spolupráci se Selectel. Tento produkt umožňuje uživatelům plně implementovat správu zdrojů prostřednictvím metodiky Infrastructure-as-code.
Poskytovatel aktuálně podporuje správu zdrojů služeb "Virtuální privátní cloud" (dále jen VPC). V budoucnu plánujeme přidat správu zdrojů pro další služby poskytované společností Selectel.
Jak již víte, služba VPC je postavena na OpenStacku. Vzhledem k tomu, že OpenStack neposkytuje nativní nástroje pro obsluhu veřejného cloudu, implementovali jsme chybějící funkcionalitu do sady dalších API, které zjednodušují správu složitých kompozitních objektů a zpříjemňují práci. Některé funkce dostupné v OpenStack jsou uzavřeny z přímého použití, ale jsou dostupné prostřednictvím na API.
Poskytovatel Selectel Terraform nyní zahrnuje možnost spravovat následující zdroje VPC:
projekty a jejich kvóty;
uživatelé, jejich role a tokeny;
veřejné podsítě, včetně meziregionálních a VRRP;
softwarové licence.
Poskytovatel využívá naši veřejnou knihovnu Go pro práci s VPC API. Knihovna i samotný poskytovatel jsou open-source, jejich vývoj probíhá na Github:
Ke správě dalších cloudových prostředků, jako jsou virtuální počítače, disky, clustery Kubernetes, můžete použít poskytovatele OpenStack Terraform. Oficiální dokumentace pro oba poskytovatele je k dispozici na následujících odkazech:
Chcete-li začít, musíte nainstalovat Terraform (pokyny a odkazy na instalační balíčky naleznete na oficiální stránky).
K provozu poskytovatel vyžaduje klíč Selectel API, který je vytvořen v ovládací panely účtů.
Manifesty pro práci se Selectelem se vytvářejí pomocí Terraformu nebo pomocí sady hotových příkladů, které jsou k dispozici v našem úložišti Github: terraformní příklady.
Úložiště s příklady je rozděleno do dvou adresářů:
moduly, obsahující malé opakovaně použitelné moduly, které berou jako vstup sadu parametrů a spravují malou sadu zdrojů;
Příklady, obsahující příklady kompletní sady vzájemně propojených modulů.
Po instalaci Terraformu, vytvoření Selectel API klíče a seznámení se s příklady přejděme k praktickým příkladům.
V souboru vars.tf jsou popsány všechny parametry, které budou použity při volání modulů. Některé z nich mají výchozí hodnoty, například server bude vytvořen v zóně ru-3a s následující konfigurací:
argument ignore_changes umožňuje ignorovat změny atributů id pro obraz použitý k vytvoření virtuálního stroje. Ve službě VPC je většina veřejných obrázků aktualizována automaticky jednou týdně a zároveň jejich id se také mění. To je způsobeno zvláštnostmi komponenty OpenStack - Glance, ve které jsou obrázky považovány za neměnné entity.
Pokud vytváříte nebo upravujete existující server nebo disk, který má jako argument image_id použitý id public image, poté po aktualizaci tohoto obrazu opět spuštěním manifestu Terraform znovu vytvoříte server nebo disk. Použití argumentu ignore_changes vám umožní vyhnout se takové situaci.
Poznámka: argument ignore_changes se v Terraformu objevilo už docela dávno: pull#2525.
argument ignore_resize_confirmation potřebné k úspěšné změně velikosti místního disku, jader nebo paměti serveru. Takové změny se provádějí prostřednictvím komponenty OpenStack Nova pomocí požadavku velikost. Výchozí Nova po vyžádání velikost uvede server do stavu ověřit_změnit velikost a čeká na další potvrzení od uživatele. Toto chování lze ale změnit, aby Nova nečekala na další akce od uživatele.
Zadaný argument umožňuje Terraformu nečekat na stav ověřit_změnit velikost pro server a buďte připraveni na to, že po změně parametrů bude server v aktivním stavu. Argument je dostupný od verze 1.10.0 poskytovatele OpenStack Terraform: pull#422.
Vytváření zdrojů
Před spuštěním manifestů si prosím uvědomte, že v našem příkladu jsou spuštěni dva různí poskytovatelé a poskytovatel OpenStack závisí na zdrojích poskytovatele Selectel, protože bez vytvoření uživatele v projektu není možné spravovat objekty, které k němu patří. . Bohužel ze stejného důvodu nemůžeme příkaz jen tak spustit platí terraform uvnitř našeho příkladu. Nejprve musíme udělat aplikovat pro modul projekt_s_uživatelem a potom na všechno ostatní.
Poznámka: Tento problém ještě není vyřešen v Terraformu, můžete sledovat diskuzi na Githubu na problém č. 2430 и problém č. 4149.
Po spuštění příkazu Terraform ukáže, jaké zdroje chce vytvořit, a požádá o potvrzení:
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 vytvoření projektu, uživatele a role můžete začít vytvářet zbývající zdroje:
S vytvořeným virtuálním strojem můžete pracovat přes SSH pomocí zadané IP.
Editace zdrojů
Kromě vytváření zdrojů prostřednictvím Terraformu je lze také upravovat.
Například zvýšíme počet jader a paměti pro náš server změnou hodnot parametrů server_vcpus и server_ram_mb v souboru příklady/vpc/local_root_disk_serveru/main.tf:
V našem ukázková úložiště Můžete také vidět manifesty pro vytváření virtuálních počítačů se síťovými jednotkami.
Příklad vytvoření clusteru Kubernetes
Než přejdeme k dalšímu příkladu, vyčistíme prostředky, které jsme vytvořili dříve. Chcete-li to provést v kořenovém adresáři projektu terraform-examples/examples/vpc/server_local_root_disk Spusťte příkaz k odstranění objektů OpenStack:
V obou případech budete muset potvrdit odstranění všech objektů:
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 příklad vytvoří projekt, uživatele s rolí v projektu, a vyvolá jeden cluster Kubernetes. V souboru vars.tf můžete vidět výchozí hodnoty, jako je počet uzlů, jejich charakteristiky, verze Kubernetes atd.
Chcete-li vytvořit prostředky podobné prvnímu příkladu, nejprve začneme inicializovat moduly a vytvářet prostředky modulů projekt_s_uživatelema pak vytvořit vše ostatní:
Přes komponentu OpenStack Magnum přeneseme tvorbu a správu clusterů Kubernetes. Více o práci s clusterem se dozvíte v jednom z našich předchozí články, stejně jako v znalostní báze.
Při přípravě clusteru se vytvoří disky a virtuální stroje a nainstalují se všechny potřebné komponenty. Příprava trvá asi 4 minuty, během kterých Terraform zobrazí zprávy jako:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Jakmile je instalace dokončena, Terraform oznámí, že cluster je připraven, a zobrazí jeho ID:
Chcete-li spravovat vytvořený cluster Kubernetes pomocí nástroje kubectl musíte získat přístupový soubor clusteru. Chcete-li to provést, přejděte na projekt vytvořený prostřednictvím Terraform v seznamu projektů ve vašem účtu:
Dále následujte odkaz jako xxxxxx.selvpc.rukterý se objeví pod názvem projektu:
Pro přihlašovací údaje použijte uživatelské jméno a heslo, které jste vytvořili prostřednictvím Terraformu. Pokud jste nepodváděli vars.tf nebo main.tf v našem příkladu bude mít uživatel jméno tf_user. Jako heslo musíte použít hodnotu proměnné TF_VAR_user_password, který byl specifikován při spuštění platí terraform dříve.
Uvnitř projektu musíte přejít na kartu Kubernetes:
Zde se nachází cluster vytvořený pomocí Terraformu. Stáhnout soubor pro kubectl na kartě „Přístup“ můžete:
Pokyny k instalaci jsou umístěny na stejné kartě. kubectl a použití staženého config.yaml.
Po spuštění kubectl a nastavení proměnné prostředí KUBCONFIG můžete použít Kubernetes:
Když se počet uzlů změní, cluster zůstane dostupný. Po přidání uzlu přes Terraform jej můžete použít bez další konfigurace:
$ 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ávěr
V tomto článku jsme se seznámili s hlavními způsoby práce "Virtuální privátní cloud" přes Terraform. Budeme rádi, když využijete oficiálního poskytovatele Selectel Terraform a poskytnete nám zpětnou vazbu.
Jakékoli chyby nalezené u poskytovatele Selectel Terraform lze nahlásit prostřednictvím Problémy Github.