Terraform provider Selectel

Terraform provider Selectel

Wy hawwe in offisjele Terraform-oanbieder lansearre om mei Selectel te wurkjen. Dit produkt lit brûkers boarnebehear folslein ymplementearje fia de Infrastructure-as-code-metodology.

De provider stipet op it stuit tsjinstboarnebehear "Fituele privee wolk" (hjirnei oantsjutten as VPC). Yn 'e takomst binne wy ​​fan plan om boarnebehear ta te foegjen foar oare tsjinsten oanbean troch Selectel.

Lykas jo al witte, is de VPC-tsjinst boud op OpenStack. Troch it feit dat OpenStack lykwols gjin native ark leveret foar it tsjinjen fan 'e iepenbiere wolk, hawwe wy de ûntbrekkende funksjonaliteit ymplementearre yn in set fan ekstra API's dy't it behear fan komplekse gearstalde objekten ferienfâldigje en it wurk handiger meitsje. Guon fan 'e funksjonaliteit beskikber yn OpenStack is net direkt brûkber, mar is beskikber fia ús API.

De oanbieder fan Selectel Terraform omfettet no de mooglikheid om de folgjende VPC-boarnen te behearjen:

  • projekten en harren kwotas;
  • brûkers, harren rollen en tokens;
  • iepenbiere subnets, ynklusyf cross-regionale en VRRP;
  • software lisinsjes.

De provider brûkt ús iepenbiere Go-bibleteek om te wurkjen mei de VPC API. Sawol de bibleteek as de provider sels binne iepen boarne, har ûntwikkeling wurdt útfierd op Github:

Om oare wolkboarnen te behearjen, lykas firtuele masines, skiven, Kubernetes-klusters, kinne jo de OpenStack Terraform-provider brûke. Offisjele dokumintaasje foar beide providers is beskikber op de folgjende keppelings:

Om te begjinnen

Om te begjinnen, moatte jo Terraform ynstallearje (ynstruksjes en keppelings nei ynstallaasjepakketten kinne fûn wurde op offisjele webside).

Om te operearjen fereasket de provider in Selectel API-kaai, dy't is makke yn account kontrôle panielen.

Manifesten foar wurkjen mei Selectel wurde makke mei Terraform of mei in set fan klearmakke foarbylden dy't beskikber binne yn ús Github-repository: terraform-foarbylden.

It repository mei foarbylden is ferdield yn twa mappen:

  • modules, mei lytse werbrûkbere modules dy't in set fan parameters as ynfier nimme en in lytse set fan boarnen beheare;
  • foarbylden, mei foarbylden fan in folsleine set fan inoar ferbûn modules.

Nei it ynstallearjen fan Terraform, it meitsjen fan in Selectel API-kaai en josels fertroud mei de foarbylden, litte wy trochgean nei praktyske foarbylden.

In foarbyld fan it meitsjen fan in tsjinner mei in lokale skiif

Litte wy nei in foarbyld sjen fan it meitsjen fan in projekt, in brûker mei in rol en in firtuele masine mei in lokale skiif: terraform-examples/examples/vpc/server_local_root_disk.

Yn triem vars.tf alle parameters dy't brûkt wurde by it oproppen fan modules wurde beskreaun. Guon fan harren hawwe standert wearden, bygelyks, de tsjinner wurdt makke yn de sône ru-3a mei de folgjende konfiguraasje:

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

Yn triem main.tf De Selectel-provider wurdt inisjalisearre:

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

Dit bestân befettet ek de standertwearde foar de SSH-kaai dy't op de tsjinner ynstalleare sil:

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

As it nedich is, kinne jo in oare iepenbiere kaai opjaan. De kaai hoecht net te wurde opjûn as in triempaad; Jo kinne de wearde ek tafoegje as in tekenrige.

Fierder yn dit bestân wurde de modules lansearre projekt_mei_brûker и server_local_root_disk, dy't de nedige middels beheare.

Litte wy nei dizze modules yn mear detail sjen.

It meitsjen fan in projekt en in brûker mei in rol

De earste module makket in projekt en in brûker mei in rol yn dat projekt: terraform-foarbylden/modules/vpc/project_with_user.

De makke brûker sil by steat wêze om oanmelde by OpenStack en beheare syn boarnen. De module is ienfâldich en beheart mar trije entiteiten:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

It meitsjen fan in firtuele tsjinner mei lokale skiif

De twadde module behannelet it behearen fan OpenStack-objekten, dy't nedich binne om in server te meitsjen mei in lokale skiif.

Jo moatte omtinken jaan oan guon fan 'e arguminten dy't spesifisearre binne yn dizze module foar de boarne openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argumint negearje_feroarings kinne jo negearje attribút feroarings id foar de ôfbylding dy't brûkt wurdt om de firtuele masine te meitsjen. Yn 'e VPC-tsjinst wurde de measte iepenbiere ôfbyldings automatysk ien kear yn'e wike bywurke en tagelyk har id ek feroarings. Dit komt troch de eigenaardichheden fan 'e OpenStack-komponint - Glance, wêryn ôfbyldings wurde beskôge as ûnferoarlike entiteiten.

As jo ​​in besteande tsjinner of skiif meitsje of wizigje dy't as argumint hat image_id wurdt brûkt id iepenbiere ôfbylding, dan nei't dizze ôfbylding is bywurke, sil it Terraform-manifest opnij útfiere de tsjinner of skiif opnij oanmeitsje. Mei help fan in argumint negearje_feroarings lit jo sa'n situaasje foarkomme.

Opmerking: argumint negearje_feroarings ferskynde in hiel lang lyn yn Terraform: trek #2525.

Argumint ignore_resize_confirmation nedich om de grutte fan lokale skiif, kearnen of serverûnthâld mei súkses te feroarjen. Sokke wizigingen wurde makke fia de OpenStack Nova-komponint mei in fersyk feroarje. Standert Nova nei fersyk feroarje set de tsjinner yn status ferify_resize en wachtet op ekstra befêstiging fan de brûker. Dit gedrach kin lykwols feroare wurde sadat Nova net wachtet op ekstra aksjes fan de brûker.

It oantsjutte argumint lit Terraform net wachtsje op de status ferify_resize foar de tsjinner en wurde taret op de tsjinner om yn in aktive status te wêzen nei't syn parameters feroare binne. It argumint is beskikber fanút ferzje 1.10.0 fan de OpenStack Terraform-provider: trek #422.

Oanmeitsjen fan Resources

Foardat jo de manifesten útfiere, tink derom dat yn ús foarbyld twa ferskillende oanbieders wurde lansearre, en de OpenStack-provider hinget ôf fan 'e boarnen fan' e Selectel-provider, om't sûnder in brûker yn it projekt te meitsjen, it ûnmooglik is om de objekten dy't derby hearre te behearjen. . Spitigernôch kinne wy ​​om deselde reden net gewoan it kommando útfiere terraform jilde binnen ús foarbyld. Wy moatte earst dwaan tapasse foar module projekt_mei_brûker en dêrnei foar al it oare.

Opmerking: Dit probleem is noch net oplost yn Terraform, jo ​​kinne de diskusje folgje op Github by útjefte #2430 и útjefte #4149.

Om boarnen te meitsjen, gean nei de map terraform-examples/examples/vpc/server_local_root_disk, de ynhâld moat sa wêze:

$ ls
README.md	   main.tf		vars.tf

Wy inisjalisearje de modules mei it kommando:

$ terraform init

De útfier lit sjen dat Terraform de lêste ferzjes downloade fan 'e providers dy't it brûkt en kontrolearret alle modules beskreaun yn it foarbyld.

Litte wy earst de module tapasse projekt_mei_brûker. Dit fereasket it manuell trochjaan fan wearden foar fariabelen dy't net binne ynsteld:

  • sel_account mei jo Selectel-akkountnûmer;
  • sel_token mei jo kaai foar Selectel API;
  • brûker_wachtwurd mei in wachtwurd foar de OpenStack-brûker.

De wearden foar de earste twa fariabelen moatte wurde nommen út kontrôle panielen.

Foar de lêste fariabele kinne jo mei elk wachtwurd komme.

Om de module te brûken moatte jo de wearden ferfange SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD it kommando útfiere:

$ 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

Nei it útfieren fan it kommando sil Terraform sjen litte hokker boarnen it oanmeitsje wol en freegje om befêstiging:

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

Sadree't it projekt, brûker en rol binne oanmakke, kinne jo begjinne mei it meitsjen fan de oerbleaune boarnen:

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

By it meitsjen fan boarnen, betelje omtinken oan de Terraform-útfier mei it eksterne IP-adres wêr't de oanmakke tsjinner tagonklik sil wêze:

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

Jo kinne wurkje mei de makke firtuele masine fia SSH mei help fan de oantsjutte IP.

Resources bewurkje

Neist it meitsjen fan boarnen fia Terraform, kinne se ek wizige wurde.

Litte wy bygelyks it oantal kearnen en ûnthâld foar ús server ferheegje troch de wearden foar de parameters te feroarjen server_vcpus и server_ram_mb yn triem foarbylden/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

Hjirnei kontrolearje wy hokker feroaringen dit sil liede ta it brûken fan it folgjende kommando:

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

As gefolch, Terraform makke in boarne feroaring openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Tink derom dat dit it opnij opstarten fan 'e makke firtuele masine meibringt.

Om de nije konfiguraasje fan 'e firtuele masine oan te passen, brûk it kommando terraform jilde, dy't wy earder al lansearre hawwe.

Alle oanmakke objekten wurde werjûn yn VPC kontrôle panielen:

Terraform provider Selectel

Yn ús foarbyld repositories Jo kinne ek manifesten sjen foar it meitsjen fan firtuele masines mei netwurkskiven.

Foarbyld fan it meitsjen fan in Kubernetes-kluster

Foardat wy nei it folgjende foarbyld geane, sille wy de boarnen skjinmeitsje dy't wy earder makke hawwe. Om dit te dwaan yn 'e root fan it projekt terraform-examples/examples/vpc/server_local_root_disk Litte wy it kommando útfiere om OpenStack-objekten te wiskjen:

$ 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

Fier dan it kommando út om Selectel VPC API-objekten te wiskjen:

$ 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

Yn beide gefallen moatte jo it wiskjen fan alle objekten befêstigje:

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

It folgjende foarbyld is yn 'e map terraform-examples/examples/vpc/kubernetes_cluster.

Dit foarbyld makket in projekt, in brûker mei in rol yn it projekt, en bringt ien Kubernetes-kluster op. Yn triem vars.tf jo kinne standertwearden sjen, lykas it oantal knopen, har skaaimerken, Kubernetes-ferzje, ensfh.

Om boarnen te meitsjen lykas it earste foarbyld, sille wy earst begjinne mei it inisjalisearjen fan modules en it meitsjen fan moduleboarnen projekt_mei_brûkeren meitsje dan al it oare:

$ 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

Wy sille de skepping en behear fan Kubernetes-klusters oerdrage fia de OpenStack Magnum-komponint. Jo kinne mear útfine oer hoe't jo wurkje mei in kluster yn ien fan ús foarige artikelslykas kennisbasis.

By it tarieden fan it kluster wurde skiven en firtuele masines oanmakke en alle nedige komponinten wurde ynstalleare. Tarieding duorret sawat 4 minuten, yn hokker tiid sil Terraform berjochten werjaan lykas:

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

As de ynstallaasje foltôge is, sil Terraform oanjaan dat it kluster klear is en syn ID werjaan:

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

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

Om it oanmakke Kubernetes-kluster te behearjen fia it hulpprogramma kubectl jo moatte it kluster tagongsbestân krije. Om dit te dwaan, gean nei it projekt makke fia Terraform yn 'e list mei projekten yn jo akkount:

Terraform provider Selectel

Folgje dan de keppeling lykas xxxxxx.selvpc.rudy't ûnder de projektnamme ferskynt:

Terraform provider Selectel

Foar oanmeldynformaasje, brûk de brûkersnamme en wachtwurd dat jo makke hawwe fia Terraform. As jo ​​hawwe net bedrogen vars.tf of main.tf foar ús foarbyld sil de brûker de namme hawwe tf_brûker. Jo moatte de wearde fan 'e fariabele brûke as wachtwurd TF_VAR_user_password, dat waard oantsjutte by it opstarten terraform jilde earder.

Binnen it projekt moatte jo nei de ljepper gean Kubernetes:

Terraform provider Selectel

Dit is wêr it kluster makke fia Terraform leit. Download triem foar kubectl kinne jo op it ljepblêd "Tagong":

Terraform provider Selectel

Ynstallaasje ynstruksjes lizze op deselde ljepper. kubectl en gebrûk fan de ynladen config.yaml.

Nei lansearring kubectl en it ynstellen fan de omjouwingsfariabele KUBECONFIG Jo kinne Kubernetes brûke:

$ 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

It oantal klusterknooppunten kin maklik wizige wurde fia Terraform.
Yn triem main.tf de folgjende wearde is oantsjutte:

cluster_node_count = "${var.cluster_node_count}"

Dizze wearde wurdt ferfongen fan vars.tf:

variable "cluster_node_count" {
default = 2
}

Jo kinne de standertwearde feroarje yn vars.tf, of spesifisearje de fereaske wearde direkt yn main.tf:

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

Om de wizigingen oan te passen, lykas yn it gefal fan it earste foarbyld, brûk it kommando terraform jilde:

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

As it oantal knooppunten feroaret, sil it kluster beskikber bliuwe. Nei it tafoegjen fan in knooppunt fia Terraform, kinne jo it brûke sûnder ekstra konfiguraasje:

$ 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

konklúzje

Yn dit artikel binne wy ​​yn 'e kunde kommen mei de wichtichste manieren om mei te wurkjen "Fituele privee wolk" fia Terraform. Wy sille bliid wêze as jo de offisjele Terraform-oanbieder Selectel brûke en feedback jouwe.

Alle bugs fûn yn 'e Selectel Terraform-provider kinne wurde rapportearre fia Github problemen.

Boarne: www.habr.com

Add a comment