Poskytovatel Terraform Selectel

Poskytovatel Terraform Selectel

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:

Začínáme

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.

Příklad vytvoření serveru s lokálním diskem

Podívejme se na příklad vytvoření projektu, uživatele s rolí a virtuálního stroje s lokálním diskem: terraform-examples/examples/vpc/server_local_root_disk.

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í:

variable "server_vcpus" {
default = 4
}

variable "server_ram_mb" {
default = 8192
}

variable "server_root_disk_gb" {
default = 8
}

variable "server_image_name" {
default = "Ubuntu 18.04 LTS 64-bit"
}

V souboru main.tf Poskytovatel Selectel je inicializován:

provider "selectel" {
token    = "${var.sel_token}"
}

Tento soubor také obsahuje výchozí hodnotu pro klíč SSH, který bude nainstalován na server:

module "server_local_root_disk" {
...
server_ssh_key      = "${file("~/.ssh/id_rsa.pub")}"
}

V případě potřeby můžete zadat jiný veřejný klíč. Klíč nemusí být zadán jako cesta k souboru, můžete také přidat hodnotu jako řetězec.

Dále v tomto souboru se spouštějí moduly projekt_s_uživatelem и server_local_root_disk, které spravují potřebné zdroje.

Podívejme se na tyto moduly podrobněji.

Vytvoření projektu a uživatele s rolí

První modul vytvoří projekt a uživatele s rolí v tomto projektu: terraform-examples/modules/vpc/project_with_user.

Vytvořený uživatel se bude moci přihlásit do OpenStack a spravovat jeho prostředky. Modul je jednoduchý a spravuje pouze tři entity:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Vytvoření virtuálního serveru s lokálním diskem

Druhý modul se zabývá správou objektů OpenStack, které jsou nezbytné pro vytvoření serveru s lokálním diskem.

Měli byste věnovat pozornost některým argumentům, které jsou uvedeny v tomto modulu pro zdroj openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

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.

Chcete-li vytvořit prostředky, přejděte do adresáře terraform-examples/examples/vpc/server_local_root_disk, jeho obsah by měl být takto:

$ ls
README.md	   main.tf		vars.tf

Moduly inicializujeme pomocí příkazu:

$ terraform init

Výstup ukazuje, že Terraform stahuje nejnovější verze poskytovatelů, které používá, a kontroluje všechny moduly popsané v příkladu.

Nejprve modul aplikujeme projekt_s_uživatelem. To vyžaduje ruční předání hodnot pro proměnné, které nebyly nastaveny:

  • sel_account s vaším číslem účtu Selectel;
  • sel_token s vaším klíčem pro Selectel API;
  • uživatelské heslo s heslem pro uživatele OpenStack.

Hodnoty pro první dvě proměnné musí být převzaty z ovládací panely.

Pro poslední proměnnou si můžete vymyslet libovolné heslo.

Chcete-li modul používat, musíte hodnoty nahradit SEL_ACCOUNT, SEL_TOKEN и UŽIVATELSKÉ HESLO spuštění příkazu:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply -target=module.project_with_user

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:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

Při vytváření zdrojů věnujte pozornost výstupu Terraform s externí IP adresou, kde bude vytvořený server přístupný:

module.server_local_root_disk.openstack_networking_floatingip_associate_v2.association_1: Creating...
  floating_ip: "" => "x.x.x.x"

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:

-  server_vcpus        = "${var.server_vcpus}"
-  server_ram_mb       = "${var.server_ram_mb}"
+  server_vcpus        = 8
+  server_ram_mb       = 10240

Poté zkontrolujeme, k jakým změnám to povede, pomocí následujícího příkazu:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform plan

V důsledku toho Terraform provedl změnu zdrojů openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Upozorňujeme, že to bude vyžadovat restart vytvořeného virtuálního počítače.

Chcete-li použít novou konfiguraci virtuálního počítače, použijte příkaz platí terraform, kterou jsme spustili již dříve.

Všechny vytvořené objekty se zobrazí v Ovládací panely VPC:

Poskytovatel Terraform Selectel

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:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform destroy -target=module.server_local_root_disk

Poté spusťte příkaz k vymazání objektů Selectel VPC API:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform destroy -target=module.project_with_user

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

Následující příklad je v adresáři terraform-examples/examples/vpc/kubernetes_cluster.

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í:

$ terraform init

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply -target=module.project_with_user

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

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:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)

Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

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:

Poskytovatel Terraform Selectel

Dále následujte odkaz jako xxxxxx.selvpc.rukterý se objeví pod názvem projektu:

Poskytovatel Terraform Selectel

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:

Poskytovatel Terraform Selectel

Zde se nachází cluster vytvořený pomocí Terraformu. Stáhnout soubor pro kubectl na kartě „Přístup“ můžete:

Poskytovatel Terraform Selectel

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:

$ kubectl get pods --all-namespaces

NAMESPACE        NAME                                    READY  STATUS  RESTARTS AGE
kube-system   coredns-9578f5c87-g6bjf                      1/1   Running   0 8m
kube-system   coredns-9578f5c87-rvkgd                     1/1   Running   0 6m
kube-system   heapster-866fcbc879-b6998                 1/1   Running   0 8m
kube-system   kube-dns-autoscaler-689688988f-8cxhf             1/1   Running   0 8m
kube-system   kubernetes-dashboard-7bdb5d4cd7-jcjq9          1/1   Running   0 8m
kube-system   monitoring-grafana-84c97bb64d-tc64b               1/1   Running   0 8m
kube-system   monitoring-influxdb-7c8ccc75c6-dzk5f                1/1   Running   0 8m
kube-system   node-exporter-tf-cluster-rz6nggvs4va7-minion-0 1/1   Running   0 8m
kube-system   node-exporter-tf-cluster-rz6nggvs4va7-minion-1 1/1   Running   0 8m
kube-system   openstack-cloud-controller-manager-8vrmp        1/1   Running   3 8m
prometeus-monitoring   grafana-76bcb7ffb8-4tm7t       1/1   Running   0 8m
prometeus-monitoring   prometheus-75cdd77c5c-w29gb           1/1   Running   0 8m

Počet uzlů clusteru lze snadno změnit pomocí Terraformu.
V souboru main.tf je určena následující hodnota:

cluster_node_count = "${var.cluster_node_count}"

Tato hodnota je nahrazena z vars.tf:

variable "cluster_node_count" {
default = 2
}

Můžete změnit buď výchozí hodnotu v vars.tfnebo zadejte požadovanou hodnotu přímo v main.tf:

-  cluster_node_count = "${var.cluster_node_count}"
+  cluster_node_count = 3

Chcete-li použít změny, jako v případě prvního příkladu, použijte příkaz platí terraform:

$ env 
TF_VAR_sel_account=SEL_ACCOUNT 
TF_VAR_sel_token=SEL_TOKEN 
TF_VAR_user_password=USER_PASSWORD 
terraform apply

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.

Zdroj: www.habr.com

Přidat komentář