Terraform Provider Selectel

Terraform Provider Selectel

Mir hunn en offiziellen Terraform Provider lancéiert fir mat Selectel ze schaffen. Dëst Produkt erlaabt d'Benotzer d'Ressourceverwaltung voll duerch d'Infrastructure-as-code Methodik ëmzesetzen.

De Provider ënnerstëtzt de Moment Service Ressource Management "Virtuell privat Wollek" (nachfolgend als VPC bezeechent). An Zukunft plangen mir d'Ressourceverwaltung fir aner Servicer vun Selectel ze addéieren.

Wéi Dir scho wësst, ass de VPC Service op OpenStack gebaut. Wéi och ëmmer, wéinst der Tatsaach datt OpenStack keng gebierteg Tools ubitt fir d'ëffentlech Cloud ze servéieren, hu mir déi fehlend Funktionalitéit an enger Rei vun zousätzlech APIen ëmgesat, déi d'Gestioun vu komplexe Kompositobjekte vereinfachen an d'Aarbecht méi bequem maachen. E puer vun der Funktionalitéit, déi am OpenStack verfügbar ass, ass vun der direkter Benotzung zou, awer ass verfügbar duerch eis API.

De Selectel Terraform Provider enthält elo d'Fäegkeet fir déi folgend VPC Ressourcen ze managen:

  • Projeten an hir Quoten;
  • Benotzer, hir Rollen an Tokens;
  • ëffentlech Subnets, dorënner cross-regional a VRRP;
  • Software Lizenzen.

De Provider benotzt eis ëffentlech Go-Bibliothéik fir mat der VPC API ze schaffen. Souwuel d'Bibliothéik wéi och de Provider selwer sinn Open-Source, hir Entwécklung gëtt op Github duerchgefouert:

Fir aner Cloud Ressourcen ze managen, wéi virtuell Maschinnen, Disken, Kubernetes Cluster, kënnt Dir den OpenStack Terraform Provider benotzen. Offiziell Dokumentatioun fir béid Ubidder ass op de folgende Linken verfügbar:

Schrëtt;

Fir unzefänken, musst Dir Terraform installéieren (Instruktioune a Linken op Installatiounspakete kënnen op offizieller Websäit).

Fir ze bedreiwen erfuerdert de Fournisseur e Selectel API Schlëssel, deen erstallt gëtt Kont Kontroll Brieder.

Manifestatiounen fir mat Selectel ze schaffen ginn erstallt mat Terraform oder mat enger Rei vu fäerdege Beispiller déi an eisem Github Repository verfügbar sinn: terraform-Beispiller.

De Repository mat Beispiller ass an zwee Verzeichnisser opgedeelt:

  • Moduler, déi kleng reusable Moduler enthalen déi e Set vu Parameteren als Input huelen an e klenge Set vu Ressourcen verwalten;
  • Beispiller, mat Beispiller vun engem komplette Set vu verbonne Moduler.

Nodeems Dir Terraform installéiert hutt, e Selectel API Schlëssel erstallt an Iech mat de Beispiller vertraut hutt, loosst eis op praktesch Beispiller weidergoen.

E Beispill fir e Server mat enger lokaler Disk ze kreéieren

Loosst eis e Beispill kucken fir e Projet ze kreéieren, e Benotzer mat enger Roll an eng virtuell Maschinn mat enger lokaler Scheif: terraform-examples/examples/vpc/server_local_root_disk.

Am Dossier vars.tf all Parameteren déi benotzt ginn wann Moduler Opruff sinn beschriwwen. E puer vun hinnen hunn Standardwäerter, zum Beispill gëtt de Server an der Zone erstallt ru-3a mat der folgender Konfiguratioun:

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"
}

Am Dossier main.tf De Selectel Provider gëtt initialiséiert:

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

Dëse Fichier enthält och de Standardwäert fir den SSH Schlëssel deen um Server installéiert gëtt:

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

Wann néideg, kënnt Dir en anere ëffentleche Schlëssel uginn. De Schlëssel muss net als Dateiwee spezifizéiert ginn; Dir kënnt och de Wäert als String derbäisetzen.

Weider an dësem Fichier ginn d'Module lancéiert project_with_user и server_local_root_disk, déi déi néideg Ressourcen verwalten.

Loosst eis dës Moduler méi detailléiert kucken.

E Projet erstellen an e Benotzer mat enger Roll

Den éischte Modul erstellt e Projet an e Benotzer mat enger Roll an deem Projet: terraform-examples/modules/vpc/project_with_user.

De erstallte Benotzer kann sech op OpenStack aloggen a seng Ressourcen verwalten. De Modul ass einfach a geréiert nëmmen dräi Entitéiten:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Erstellt e virtuelle Server mat lokalen Disk

Den zweete Modul beschäftegt sech mat der Gestioun vun OpenStack Objeten, déi néideg sinn fir e Server mat enger lokaler Disk ze kreéieren.

Dir sollt op e puer vun den Argumenter oppassen, déi an dësem Modul fir d'Ressource spezifizéiert sinn 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 erlaabt Iech Attributer Ännerungen ze ignoréieren id fir d'Bild benotzt fir déi virtuell Maschinn ze kreéieren. Am VPC Service ginn déi meescht ëffentlech Biller automatesch eemol d'Woch aktualiséiert a gläichzäiteg hir id och Ännerungen. Dëst ass wéinst de Besonderheeten vun der OpenStack Komponent - Bléck, an deem Biller als onverännerbar Entitéite ugesi ginn.

Wann Dir en existente Server oder Disk erstellt oder ännert deen als Argument ass image_id benotzt gëtt id ëffentlecht Bild, dann nodeems dat Bild aktualiséiert ass, de Terraform Manifest erëm auszeféieren wäert de Server oder den Disk nei erstellen. Mat engem Argument ignore_changes erlaabt Iech esou eng Situatioun ze vermeiden.

Notiz: Argument ignore_changes ass viru laanger Zäit an Terraform opgetaucht: zitt #2525.

Argument ignore_resize_confirmation néideg fir d'Gréisst vun der lokaler Disk, Cores oder Server Memory erfollegräich z'änneren. Esou Ännerungen ginn duerch d'OpenStack Nova Komponent mat enger Ufro gemaach resize. Standard Nova no Ufro resize setzt de Server an de Status verify_size a waart op zousätzlech Bestätegung vum Benotzer. Allerdéngs kann dëst Verhalen geännert ginn sou datt Nova net op zousätzlech Handlungen vum Benotzer waart.

De spezifizéierte Argument erlaabt Terraform net op de Status ze waarden verify_size fir de Server a virbereet ginn fir de Server an engem aktive Status ze sinn nodeems se seng Parameteren geännert hunn. D'Argument ass verfügbar vun der Versioun 1.10.0 vum OpenStack Terraform Provider: zitt #422.

Schafen Ressourcen

Ier Dir d'Manifester leeft, bemierkt w.e.g. datt an eisem Beispill zwee verschidde Fournisseuren lancéiert ginn, an den OpenStack Provider hänkt vun de Ressourcen vum Selectel Provider of, well ouni e Benotzer am Projet ze kreéieren ass et onméiglech d'Objeten ze managen, déi derzou gehéieren. . Leider, aus dem selwechte Grond kënne mir net nëmmen de Kommando ausféieren terraform gëllen an eisem Beispill. Mir mussen als éischt maachen zoutrëfft fir Modul project_with_user an duerno fir alles anescht.

Notiz: Dëst Thema ass nach net an Terraform geléist, Dir kënnt d'Diskussioun op Github verfollegen Thema #2430 и Thema #4149.

Fir Ressourcen ze kreéieren, gitt an den Dossier terraform-examples/examples/vpc/server_local_root_disk, säin Inhalt soll esou sinn:

$ ls
README.md	   main.tf		vars.tf

Mir initialiséieren d'Moduler mam Kommando:

$ terraform init

D'Ausgab weist datt Terraform déi lescht Versioune vun de Fournisseuren eroflueden déi se benotzt a kontrolléiert all d'Moduler, déi am Beispill beschriwwe ginn.

Loosst eis als éischt de Modul applizéieren project_with_user. Dëst erfuerdert manuell Wäerter fir Variabelen déi net agestallt goufen:

  • sel_account mat Ärer Selectel Kontosnummer;
  • sel_token mat Ärem Schlëssel fir Selectel API;
  • user_password mat engem Passwuert fir den OpenStack Benotzer.

D'Wäerter fir déi éischt zwou Variabelen mussen aus geholl ginn Kontroll Brieder.

Fir déi lescht Variabel kënnt Dir mat all Passwuert kommen.

Fir de Modul ze benotzen, musst Dir d'Wäerter ersetzen SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD de Kommando ausféieren:

$ 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

Nodeems Dir de Kommando ausgeführt hutt, weist Terraform wéi eng Ressourcen et wëllt erstellen a froen no Bestätegung:

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

Wann de Projet, de Benotzer an d'Roll erstallt sinn, kënnt Dir ufänken déi verbleiwen Ressourcen ze kreéieren:

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

Wann Dir Ressourcen erstellt, oppassen op d'Terraform-Output mat der externer IP Adress wou de erstallte Server zougänglech ass:

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

Dir kënnt mat der erstallt virtueller Maschinn iwwer SSH mat der spezifizéierter IP schaffen.

Redaktioun Ressourcen

Zousätzlech fir Ressourcen duerch Terraform ze kreéieren, kënnen se och geännert ginn.

Zum Beispill, loosst eis d'Zuel vu Kären an Erënnerung fir eise Server erhéijen andeems d'Wäerter fir d'Parameteren änneren server_vcpus и server_ram_mb am Fichier Beispiller/vpc/server_local_root_disk/main.tf:

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

Duerno kontrolléiere mir wéi eng Ännerungen dëst féiert zum Gebrauch vum folgenden Kommando:

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

Als Resultat huet Terraform eng Ressource änneren openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Notéiert w.e.g. datt dëst de Restart vun der erstallt virtueller Maschinn enthält.

Fir déi nei virtuell Maschinn Konfiguratioun z'applizéieren, benotzt de Kommando terraform gëllen, déi mir scho virdru lancéiert hunn.

All erstallt Objete ginn an VPC Kontroll Brieder:

Terraform Provider Selectel

An eiser Beispill Repositories Dir kënnt och Manifestatiounen gesinn fir virtuell Maschinnen mat Netzwierkfueren ze kreéieren.

Beispill fir e Kubernetes Cluster ze kreéieren

Ier mer op dat nächst Beispill weidergoen, botzen mir d'Ressourcen déi mir virdru erstallt hunn. Fir dëst an der Wuerzel vum Projet ze maachen terraform-examples/examples/vpc/server_local_root_disk Loosst eis de Kommando ausféieren fir OpenStack Objekter ze läschen:

$ 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

Fuert dann de Kommando fir Selectel VPC API Objekter ze läschen:

$ 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

A béide Fäll musst Dir d'Läsche vun all Objekter bestätegen:

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

Déi folgend Beispill ass am Verzeechnes terraform-examples/examples/vpc/kubernetes_cluster.

Dëst Beispill erstellt e Projet, e Benotzer mat enger Roll am Projet, an erhéicht ee Kubernetes Cluster. Am Dossier vars.tf Dir kënnt Standardwäerter gesinn, wéi d'Zuel vun den Noden, hir Charakteristiken, d'Kubernetes Versioun, etc.

Fir Ressourcen ähnlech wéi dat éischt Beispill ze kreéieren, fänken mir als éischt un Moduler ze initialiséieren an Modulressourcen ze kreéieren project_with_useran dann alles anescht erstellen:

$ 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

Mir wäerten d'Schafung a Gestioun vu Kubernetes Cluster iwwer d'OpenStack Magnum Komponent transferéieren. Dir kënnt méi gewuer ginn wéi Dir mat engem Cluster schafft an engem vun eisen virdrun Artikelenwéi och an Wëssen Basis.

Wann Dir de Cluster virbereet, ginn Disken a virtuelle Maschinnen erstallt an all néideg Komponente ginn installéiert. D'Virbereedung dauert ongeféier 4 Minutten, während där Zäit Terraform Messagen wéi:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)

Wann d'Installatioun fäerdeg ass, weist Terraform un datt de Stärekoup prett ass a weist seng 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.

Fir de geschafene Kubernetes Cluster duerch den Utility ze managen kubectl Dir musst de Cluster Zougangsdatei kréien. Fir dëst ze maachen, gitt op de Projet erstallt duerch Terraform an der Lëscht vun de Projeten op Ärem Kont:

Terraform Provider Selectel

Nächst, befollegt de Link wéi xxxxxx.selvpc.rudéi ënner dem Projet Numm erschéngt:

Terraform Provider Selectel

Fir Umeldungsinformatioune benotzt de Benotzernumm a Passwuert dat Dir iwwer Terraform erstallt hutt. Wann Dir net fuddelen hutt vars.tf oder main.tf fir eist Beispill wäert de Benotzer den Numm hunn tf_user. Dir musst de Wäert vun der Variabel als Passwuert benotzen TF_VAR_user_password, déi beim Startup spezifizéiert gouf terraform gëllen fréier.

Am Projet musst Dir op d'Tab goen Kubernetes:

Terraform Provider Selectel

Dëst ass wou de Cluster erstallt iwwer Terraform läit. Download Datei fir kubectl Dir kënnt op der Tab "Zougang":

Terraform Provider Selectel

Installatiounsinstruktiounen sinn op der selwechter Tab. kubectl a Gebrauch vun der erofgeluede config.yaml.

Nom Start kubectl a setzen d'Ëmweltvariabel KUBECONFIG Dir kënnt Kubernetes benotzen:

$ 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

D'Zuel vun de Clusternoden kann einfach iwwer Terraform geännert ginn.
Am Dossier main.tf de folgende Wäert gëtt uginn:

cluster_node_count = "${var.cluster_node_count}"

Dëse Wäert gëtt ersat aus vars.tf:

variable "cluster_node_count" {
default = 2
}

Dir kënnt entweder de Standardwäert änneren an vars.tf, oder spezifizéiert den erfuerderleche Wäert direkt an main.tf:

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

Fir d'Ännerungen z'applizéieren, wéi am Fall vum éischte Beispill, benotzt de Kommando terraform gëllen:

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

Wann d'Zuel vun den Noden ännert, bleift de Cluster verfügbar. Nodeems Dir en Node iwwer Terraform bäigefüügt hutt, kënnt Dir et ouni zousätzlech Konfiguratioun benotzen:

$ 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

Konklusioun

An dësem Artikel hu mir mat den Haapt Weeër vertraut ze schaffen "Virtuell privat Wollek" iwwer Terraform. Mir wäerte frou sinn wann Dir den offiziellen Selectel Terraform Provider benotzt a Feedback gitt.

All Bugs, déi am Selectel Terraform Provider fonnt goufen, kënnen iwwer gemellt ginn Github Problemer.

Source: will.com

Setzt e Commentaire