Terraform hornitzailea Selectel

Terraform hornitzailea Selectel

Terraform hornitzaile ofiziala jarri dugu martxan Selectel-ekin lan egiteko. Produktu honek erabiltzaileei baliabideen kudeaketa guztiz ezartzeko aukera ematen die Infrastructure-as-code metodologiaren bidez.

Gaur egun, hornitzaileak zerbitzu-baliabideen kudeaketa onartzen du "Hodei pribatu birtuala" (aurrerantzean VPC deitzen zaio). Etorkizunean, Selectelek eskaintzen dituen beste zerbitzu batzuetarako baliabideen kudeaketa gehitzeko asmoa dugu.

Dagoeneko dakizuenez, VPC zerbitzua OpenStack-en eraikita dago. Hala ere, OpenStack-ek hodei publikoa zerbitzatzeko berezko tresnarik eskaintzen ez duenez, falta den funtzionaltasuna inplementatu dugu objektu konposatu konplexuen kudeaketa errazten duten eta lana erosoago egiten duten API osagarrien multzo batean. OpenStack-en eskuragarri dauden funtzionalitate batzuk ez dira zuzenean erabilgarri, baina erabilgarri daude gure APIa.

Selectel Terraform hornitzaileak VPC baliabide hauek kudeatzeko gaitasuna barne hartzen du orain:

  • proiektuak eta haien kuotak;
  • erabiltzaileak, haien rolak eta tokenak;
  • azpisare publikoak, eskualde artekoak eta VRRP barne;
  • software lizentziak.

Hornitzaileak gure Go liburutegi publikoa erabiltzen du VPC APIarekin lan egiteko. Liburutegia eta hornitzailea bera kode irekikoak dira, haien garapena Github-en egiten da:

Hodeiko beste baliabide batzuk kudeatzeko, hala nola makina birtualak, diskoak, Kubernetes klusterrak, OpenStack Terraform hornitzailea erabil dezakezu. Bi hornitzaileentzako dokumentazio ofiziala esteka hauetan dago eskuragarri:

Pizten

Hasteko, Terraform instalatu behar duzu (instalazio paketeetarako argibideak eta estekak helbidean aurki daitezke webgune ofiziala).

Funtzionatzeko, hornitzaileak Selectel API gako bat behar du, hau da kontu kontrol panelak.

Selectel-ekin lan egiteko manifestuak Terraform erabiliz edo gure Github biltegian eskuragarri dauden prest dauden adibide multzo bat erabiliz sortzen dira: terraforma-adibideak.

Adibideak dituen biltegia bi direktoriotan banatzen da:

  • moduluak, sarrera gisa parametro multzo bat hartzen duten eta baliabide multzo txiki bat kudeatzen duten modulu berrerabilgarri txikiak dituena;
  • adibide, interkonektatutako moduluen multzo oso baten adibideak biltzen dituena.

Terraform instalatu ondoren, Selectel API gako bat sortu eta adibideak ezagutu ondoren, joan gaitezen adibide praktikoetara.

Disko lokal batekin zerbitzari bat sortzeko adibide bat

Ikus dezagun proiektu bat, rol bat duen erabiltzaile bat eta disko lokal batekin makina birtual bat sortzeko adibide bat: terraform-examples/examples/vpc/server_local_root_disk.

Fitxategian vars.tf moduluetara deitzerakoan erabiliko diren parametro guztiak deskribatzen dira. Horietako batzuek balio lehenetsiak dituzte, adibidez, zerbitzaria eremuan sortuko da ru-3a konfigurazio honekin:

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

Fitxategian nagusia.tf Selectel hornitzailea hasieratzen da:

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

Fitxategi honek zerbitzarian instalatuko den SSH gakoaren balio lehenetsia ere badu:

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

Beharrezkoa izanez gero, beste gako publiko bat zehaztu dezakezu. Gakoa ez da fitxategi-bide gisa zehaztu behar; balioa kate gisa ere gehi dezakezu.

Fitxategi honetan aurrerago moduluak abiarazten dira proiektua_erabiltzailearekin и server_local_root_disk, beharrezko baliabideak kudeatzen dituztenak.

Ikus ditzagun zehatzago modulu hauek.

Proiektu bat eta rol bat duen erabiltzaile bat sortzea

Lehenengo moduluak proiektu bat eta proiektu horretan rol bat duen erabiltzaile bat sortzen ditu: terraform-examples/modules/vpc/project_with_user.

Sortutako erabiltzaileak OpenStack-en saioa hasi eta bere baliabideak kudeatu ahal izango ditu. Modulua erraza da eta hiru entitate soilik kudeatzen ditu:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Zerbitzari birtual bat sortzea disko lokalarekin

Bigarren moduluak OpenStack objektuak kudeatzeaz arduratzen da, beharrezkoak diren disko lokal batekin zerbitzari bat sortzeko.

Modulu honetan baliabiderako zehazten diren argumentu batzuei erreparatu behar diezu openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argudioa ez ikusi_aldaketak atributuen aldaketak alde batera uzteko aukera ematen du id makina birtuala sortzeko erabilitako irudirako. VPC zerbitzuan, irudi publiko gehienak automatikoki eguneratzen dira astean behin eta aldi berean euren id ere aldatzen da. Hau OpenStack osagaiaren berezitasunengatik gertatzen da - Glance, zeinetan irudiak entitate aldaezintzat hartzen diren.

Argumentu gisa duen zerbitzari edo disko bat sortzen edo aldatzen ari bazara irudi_id Erabilitako id irudi publikoa, ondoren, irudi hori eguneratu ondoren, Terraform manifestua berriro exekutatzen da zerbitzaria edo diskoa birsortuko du. Argudio bat erabiliz ez ikusi_aldaketak horrelako egoera bat saihesteko aukera ematen du.

Oharra: argumentua ez ikusi_aldaketak Duela dezente Terraform-en agertu zen: tira #2525.

Argudioa ez ikusiaren_tamainaren_berrespena tokiko diskoa, nukleoak edo zerbitzariaren memoria behar bezala aldatzeko. Aldaketa horiek OpenStack Nova osagaiaren bidez egiten dira eskaera baten bidez resize. Nova lehenetsia eskatu ondoren resize zerbitzaria egoeran jartzen du egiaztatu_tamaina aldatu eta erabiltzailearen baieztapen gehigarriaren zain dago. Hala ere, portaera hori alda daiteke, Novak erabiltzailearen ekintza gehigarrien zain egon ez dezan.

Zehaztutako argumentuak Terraform-ek egoeraren zain ez izatea ahalbidetzen du egiaztatu_tamaina aldatu zerbitzariarentzat eta prest egon zerbitzaria egoera aktiboan egoteko parametroak aldatu ondoren. Argumentua OpenStack Terraform hornitzailearen 1.10.0 bertsiotik dago eskuragarri: tira #422.

Baliabideak sortzea

Manifestuak exekutatu aurretik, kontuan izan gure adibidean bi hornitzaile ezberdin abiarazten direla eta OpenStack hornitzailea Selectel hornitzailearen baliabideen araberakoa dela, izan ere, proiektuan erabiltzailerik sortu gabe, ezinezkoa baita hari dagozkion objektuak kudeatzea. . Zoritxarrez, arrazoi beragatik ezin dugu komandoa exekutatu terraforma aplikatu gure adibidearen barruan. Lehenengo egin behar dugu aplikatu modulurako proiektua_erabiltzailearekin eta gero beste guztiarako.

Oharra: arazo hau oraindik ez dago Terraform-en konponduta, Github-en eztabaida jarrai dezakezu hemen alea #2430 и alea #4149.

Baliabideak sortzeko, joan direktoriora terraform-examples/examples/vpc/server_local_root_disk, bere edukiak honelakoak izan behar dira:

$ ls
README.md	   main.tf		vars.tf

Moduluak hasieratuko ditugu komandoa erabiliz:

$ terraform init

Irteerak erakusten du Terraformek erabiltzen dituen hornitzaileen azken bertsioak deskargatzen dituela eta adibidean deskribatutako modulu guztiak egiaztatzen dituela.

Lehenik eta behin aplika dezagun modulua proiektua_erabiltzailearekin. Honek ezarri ez diren aldagaietarako balioak eskuz pasa behar ditu:

  • sal_kontua zure Selectel kontu-zenbakiarekin;
  • sel_token Selectel APIrako zure gakoarekin;
  • erabiltzaile_pasahitza OpenStack erabiltzailearentzat pasahitz batekin.

Lehenengo bi aldagaien balioak hartu behar dira kontrol panelak.

Azken aldagaiari dagokionez, edozein pasahitz sor dezakezu.

Modulua erabiltzeko balioak ordezkatu behar dituzu SEL_AKCOUNT, SEL_TOKEN и USER_PASSWORD komandoa exekutatzea:

$ 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

Komandoa exekutatu ondoren, Terraformek zer baliabide sortu nahi dituen erakutsiko du eta berrespena eskatuko du:

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

Proiektua, erabiltzailea eta rola sortu ondoren, gainerako baliabideak sortzen has zaitezke:

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

Baliabideak sortzean, kontutan izan Terraform-en irteeran sortutako zerbitzaria eskuragarri egongo den kanpoko IP helbidearekin:

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

SSH bidez sortutako makina birtualarekin lan egin dezakezu zehaztutako IPa erabiliz.

Baliabideak editatzea

Terraform bidez baliabideak sortzeaz gain, alda daitezke.

Adibidez, handitu dezagun gure zerbitzariaren nukleoen eta memoria kopurua parametroen balioak aldatuz zerbitzaria_vcpus и zerbitzaria_ram_mb fitxategian adibideak/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

Honen ondoren, zer aldaketa ekarriko dituen egiaztatuko dugu komando hau erabiliz:

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

Ondorioz, Terraformek baliabide aldaketa bat egin zuen openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Kontuan izan horrek sortutako makina birtuala berrabiaraztea ekarriko duela.

Makina birtualaren konfigurazio berria aplikatzeko, erabili komandoa terraforma aplikatu, lehenago martxan jarri duguna.

Sortutako objektu guztiak bertan bistaratuko dira VPC kontrol panelak:

Terraform hornitzailea Selectel

Gure adibide-biltegiak Sareko unitateekin makina birtualak sortzeko manifestuak ere ikus ditzakezu.

Kubernetes kluster bat sortzeko adibidea

Hurrengo adibidera pasatu aurretik, lehenago sortu ditugun baliabideak garbituko ditugu. Horretarako proiektuaren erroan terraform-examples/examples/vpc/server_local_root_disk Exekutatu dezagun komandoa OpenStack objektuak ezabatzeko:

$ 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

Ondoren, exekutatu komandoa Selectel VPC API objektuak garbitzeko:

$ 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

Bi kasuetan, objektu guztiak ezabatzea berretsi beharko duzu:

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

Hurrengo adibidea direktorioa dago terraform-examples/examples/vpc/kubernetes_cluster.

Adibide honek proiektu bat sortzen du, proiektuan rol bat duen erabiltzaile bat, eta Kubernetes kluster bat sortzen du. Fitxategian vars.tf balio lehenetsiak ikus ditzakezu, hala nola nodo kopurua, haien ezaugarriak, Kubernetes bertsioa, etab.

Lehen adibidearen antzeko baliabideak sortzeko, lehenik eta behin moduluak hasieratzen eta moduluen baliabideak sortzen hasiko gara proiektua_erabiltzailearekineta gero beste guztia sortuz:

$ 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

Kubernetes klusterren sorrera eta kudeaketa OpenStack Magnum osagaiaren bidez transferituko dugu. Kluster batekin lan egiteko moduari buruz gehiago jakin dezakezu gure batean aurreko artikuluakbaita ezagutza oinarria.

Klusterra prestatzerakoan, diskoak eta makina birtualak sortuko dira eta beharrezko osagai guztiak instalatuko dira. Prestaketak 4 minutu inguru irauten du, eta denbora horretan Terraformek honelako mezuak erakutsiko ditu:

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

Instalazioa amaitutakoan, Terraform-ek clusterra prest dagoela adieraziko du eta bere IDa erakutsiko du:

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

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

Sortutako Kubernetes klusterra utilitatearen bidez kudeatzeko kubectl kluster atzitzeko fitxategia lortu behar duzu. Horretarako, zoaz Terraform-en bidez sortutako proiektura zure kontuko proiektuen zerrendan:

Terraform hornitzailea Selectel

Jarraian, jarraitu esteka bezala xxxxxx.selvpc.ruproiektuaren izenaren azpian agertzen dena:

Terraform hornitzailea Selectel

Saioa hasteko informazioa lortzeko, erabili Terraform-en bidez sortu dituzun erabiltzaile-izena eta pasahitza. Iruzurrik egin ez baduzu vars.tf edo nagusia.tf gure adibidez, erabiltzaileak izango du izena tf_erabiltzailea. Pasahitz gisa aldagaiaren balioa erabili behar duzu TF_VAR_erabiltzaile_pasahitza, abiaraztean zehaztu zena terraforma aplikatu lehenago.

Proiektuaren barruan fitxara joan behar duzu Kubernetes:

Terraform hornitzailea Selectel

Bertan dago Terraform bidez sortutako klusterra. Deskargatu fitxategia kubectl "Sarbidea" fitxan egin dezakezu:

Terraform hornitzailea Selectel

Instalazio argibideak fitxa berean daude. kubectl eta deskargatutakoaren erabilera konfig.yaml.

Abian jarri ondoren kubectl eta ingurune-aldagaia ezartzea KUBECONFIG Kubernetes erabil dezakezu:

$ 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

Kluster-nodoen kopurua erraz alda daiteke Terraform bidez.
Fitxategian nagusia.tf balio hau zehazten da:

cluster_node_count = "${var.cluster_node_count}"

Balio hau ordezkatzen da vars.tf:

variable "cluster_node_count" {
default = 2
}

Balio lehenetsia alda dezakezu vars.tfedo zehaztu behar den balioa zuzenean nagusia.tf:

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

Aldaketak aplikatzeko, lehen adibidearen kasuan bezala, erabili komandoa terraforma aplikatu:

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

Nodo kopurua aldatzen denean, klusterrak erabilgarri jarraituko du. Terraform bidez nodo bat gehitu ondoren, konfigurazio gehigarririk gabe erabil dezakezu:

$ 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

Ondorioa

Artikulu honetan lan egiteko modu nagusiak ezagutu ditugu "Hodei pribatu birtuala" Terraform bidez. Pozik egongo gara Selectel Terraform hornitzaile ofiziala erabiltzen baduzu eta iritzia ematen baduzu.

Selectel Terraform hornitzailean aurkitutako akatsen bidez jakinarazi daiteke Github Arazoak.

Iturria: www.habr.com

Gehitu iruzkin berria