Terraformu nodroŔinātājs Selectel

Terraformu nodroŔinātājs Selectel

Mēs esam uzsākuÅ”i oficiālo Terraform nodroÅ”inātāju darbam ar Selectel. Å is produkts ļauj lietotājiem pilnÄ«bā ieviest resursu pārvaldÄ«bu, izmantojot metodi Infrastructure-as-code (infrastruktÅ«ra kā kods).

Pakalpojumu sniedzējs paÅ”laik atbalsta pakalpojumu resursu pārvaldÄ«bu "Virtuālais privātais mākonis" (turpmāk VPC). Nākotnē plānojam tai pievienot arÄ« citu Selectel sniegto pakalpojumu resursu pārvaldÄ«bu.

Kā jÅ«s jau zināt, VPC pakalpojums ir izveidots uz OpenStack. Tomēr, ņemot vērā to, ka OpenStack nenodroÅ”ina vietējos rÄ«kus publiskā mākoņa apkalpoÅ”anai, mēs esam ieviesuÅ”i trÅ«kstoÅ”o funkcionalitāti papildu API komplektā, kas vienkārÅ”o sarežģītu saliktu objektu pārvaldÄ«bu un padara darbu ērtāku. Daļa no OpenStack pieejamās funkcionalitātes ir slēgta no tieÅ”as lietoÅ”anas, taču ir pieejama caur mÅ«su API.

Selectel Terraform nodroŔinātājs tagad var pārvaldīt Ŕādus VPC resursus:

  • projekti un to kvotas;
  • lietotāji, viņu lomas un marÄ·ieri;
  • publiskie apakÅ”tÄ«kli, tostarp starpreÄ£ionu un VRRP;
  • programmatÅ«ras licences.

Pakalpojumu sniedzējs izmanto mÅ«su publisko Go bibliotēku, lai strādātu ar VPC API. Gan bibliotēka, gan pats nodroÅ”inātājs ir atvērtā pirmkoda, tie tiek izstrādāti vietnē Github:

Lai pārvaldÄ«tu pārējos mākoņa resursus, piemēram, virtuālās maŔīnas, diskus, Kubernetes klasterus, varat izmantot OpenStack Terraform nodroÅ”inātāju. Oficiālā dokumentācija abiem pakalpojumu sniedzējiem ir pieejama Å”ajās saitēs:

Darba sākŔana

Lai sāktu, jums jāinstalē Terraform (instrukcijas un saites uz instalācijas pakotnēm var atrast vietnē oficiālā vietne).

Lai strādātu, pakalpojumu sniedzējam ir nepiecieÅ”ama Selectel API atslēga, kas ir izveidota konta vadÄ«bas panelis.

Manifesti darbam ar Selectel tiek izveidoti, izmantojot Terraform vai izmantojot gatavu piemēru kopu, kas ir pieejama mūsu Github repozitorijā: terraformas piemēri.

Repozitorijs ar piemēriem ir sadalīts divos direktorijos:

  • moduļi, kas satur mazus atkārtoti lietojamus moduļus, kas izmanto parametru kopu kā ievadi un pārvalda nelielu resursu kopu;
  • piemēri, kurā ir piemēri pilnam savstarpēji savienotu moduļu komplektam.

Pēc Terraform instalÄ“Å”anas, Selectel API atslēgas izveidoÅ”anas un piemēru pārskatÄ«Å”anas, pāriesim pie praktiskiem piemēriem.

Piemērs servera izveidei ar lokālo disku

Apsveriet piemēru, kā izveidot projektu, lietotāju ar lomu un virtuālo maŔīnu ar vietējo disku: terraform-examples/examples/vpc/server_local_root_disk.

Failā vars.tf ir aprakstÄ«ti visi parametri, kas tiks izmantoti, izsaucot moduļus. Dažām no tām ir noklusējuma vērtÄ«bas, piemēram, serveris tiks izveidots zonā lv-3a ar Ŕādu konfigurāciju:

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

Failā galvenais.tf Selectel nodroÅ”inātājs ir inicializēts:

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

Šajā failā ir arī noklusējuma vērtība SSH atslēgai, kas tiks instalēta serverī:

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

Ja nepiecieÅ”ams, varat norādÄ«t citu publisko atslēgu. Atslēga nav jānorāda kā ceļŔ uz failu, vērtÄ«bu var pievienot arÄ« kā virkni.

Tālāk Å”ajā failā tiek palaisti moduļi projekts_ar_lietotāju Šø server_local_root_diskkas pārvalda nepiecieÅ”amos resursus.

Apskatīsim Ŕos moduļus tuvāk.

Izveidojiet projektu un lietotāju ar lomu

Pirmais modulis izveido projektu un lietotāju ar lomu Ŕajā projektā: terraform-examples/modules/vpc/project_with_user.

Izveidotais lietotājs varēs pieteikties OpenStack un pārvaldÄ«t tā resursus. Modulis ir vienkārÅ”s un pārvalda tikai trÄ«s entÄ«tijas:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Virtuālā servera izveide ar lokālo disku

Otrais modulis ir saistīts ar OpenStack objektu pārvaldību, kas nepiecieŔami, lai izveidotu serveri ar lokālo disku.

Jums vajadzētu pievērst uzmanÄ«bu dažiem argumentiem, kas ir norādÄ«ti Å”ajā resursa modulÄ« openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Arguments ignorēt_izmaiņas ļauj ignorēt atribÅ«tu izmaiņas id attēlam, ko izmanto, lai izveidotu virtuālo maŔīnu. VPC servisā lielākā daļa publisko attēlu tiek automātiski atjaunināti reizi nedēļā un tajā paŔā laikā id arÄ« mainās. Tas ir saistÄ«ts ar OpenStack komponenta - Glance - darbÄ«bas Ä«patnÄ«bām, kurās attēli tiek uzskatÄ«ti par nemainÄ«gām entÄ«tijām.

Ja izveidojat vai modificējat esoÅ”u serveri vai disku, kuram ir kā arguments attēla_id lietots id publisks attēls, pēc Ŕī attēla atjaunināŔanas, vēlreiz palaižot Terraform manifestu, serveris vai disks tiks izveidots no jauna. Izmantojot argumentu ignorēt_izmaiņas izvairās no Ŕādas situācijas.

piezīme: arguments ignorēt_izmaiņas parādījās Terraform jau sen: pull #2525.

Arguments ignore_resize_confirmation nepiecieÅ”ams, lai veiksmÄ«gi mainÄ«tu servera lokālā diska, serdeņu vai atmiņas izmērus. Šādas izmaiņas tiek veiktas, izmantojot OpenStack Nova komponentu, izmantojot pieprasÄ«jumu mainÄ«t. Noklusējuma Nova pēc pieprasÄ«juma mainÄ«t nostāda serveri statusā verify_resize un gaida papildu apstiprinājumu no lietotāja. Tomēr Å”o uzvedÄ«bu var mainÄ«t, lai Nova nebÅ«tu jāgaida, lÄ«dz lietotājs veiks papildu darbÄ«bas.

NorādÄ«tais arguments ļauj Terraform negaidÄ«t statusu verify_resize serverim un esiet gatavi tam, ka serveris pēc parametru maiņas bÅ«s aktÄ«vā statusā. Arguments ir pieejams kopÅ” OpenStack Terraform nodroÅ”inātāja versijas 1.10.0: pull #422.

Resursu izveide

Pirms manifestu palaiÅ”anas jāņem vērā, ka mÅ«su piemērā tiek palaisti divi dažādi nodroÅ”inātāji, un OpenStack nodroÅ”inātājs ir atkarÄ«gs no Selectel nodroÅ”inātāja resursiem, jo, neizveidojot projektā lietotāju, nav iespējams pārvaldÄ«t viņam piederoÅ”os objektus. . Diemžēl tā paÅ”a iemesla dēļ mēs nevaram vienkārÅ”i palaist komandu pielietot terraformu mÅ«su piemērā. Mums vispirms jādara piemērot modulim projekts_ar_lietotāju un pēc tam par visu pārējo.

PiezÄ«me. Paziņotā problēma vēl nav atrisināta pakalpojumā Terraform. Varat sekot diskusijai vietnē Github vietnē izdevums Nr. 2430 Šø izdevums Nr. 4149.

Lai izveidotu resursus, dodieties uz direktoriju terraform-examples/examples/vpc/server_local_root_disk, tā saturam jābūt Ŕādam:

$ ls
README.md	   main.tf		vars.tf

Mēs inicializējam moduļus, izmantojot komandu:

$ terraform init

Izvade parāda, ka Terraform lejupielādē izmantoto pakalpojumu sniedzēju jaunākās versijas un pārbauda visus piemērā aprakstītos moduļus.

Vispirms pielietojiet moduli projekts_ar_lietotāju. Tas prasa manuālu vērtÄ«bu pārsÅ«tÄ«Å”anu mainÄ«gajiem, kas nav iestatÄ«ti:

  • sel_konts ar savu Selectel konta numuru;
  • sel_token ar savu Selectel API atslēgu;
  • lietotāja_parole ar OpenStack lietotāja paroli.

Pirmo divu mainīgo vērtības ir jāņem no vadības paneļi.

Pēdējam mainīgajam varat izdomāt jebkuru paroli.

Lai izmantotu moduli, ir jāaizstāj vērtÄ«bas SEL_KONTS, SEL_TOKEN Šø USER_PASSWORD izpildot komandu:

$ 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

Pēc komandas palaiÅ”anas Terraform parādÄ«s, kādus resursus tā vēlas izveidot, un bÅ«s nepiecieÅ”ams apstiprinājums:

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

Kad projekts, lietotājs un loma ir izveidoti, varat sākt veidot pārējos resursus.

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

Veidojot resursus, pievērsiet uzmanību Terraform izvadei ar ārējo IP adresi, kurā būs pieejams izveidotais serveris:

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

Jūs varat strādāt ar izveidoto virtuālo maŔīnu, izmantojot SSH, izmantojot norādīto IP.

Resursu rediģēŔana

Papildus resursu izveidei, izmantojot Terraform, tos var arī modificēt.

Piemēram, palielināsim mÅ«su servera kodolu un atmiņas skaitu, mainot parametru vērtÄ«bas serveris_vcpus Šø serveris_ram_mb failā examples/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

Pēc tam mēs pārbaudām, pie kādām izmaiņām tas novedÄ«s, izmantojot Ŕādu komandu:

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

Rezultātā Terraform veica resursu izmaiņas openstack_compute_instance_v2 Šø openstack_compute_flavor_v2.

LÅ«dzu, ņemiet vērā, ka tas nozÄ«mē izveidotās virtuālās maŔīnas pārstartÄ“Å”anu.

Lai lietotu jauno virtuālās maŔīnas konfigurāciju, izmantojiet komandu pielietot terraformu, kuru jau esam laiduŔi klajā iepriekŔ.

Visi izveidotie objekti tiks parādīti VPC vadības paneļi:

Terraformu nodroŔinātājs Selectel

MÅ«sos piemēru krātuves Varat arÄ« redzēt manifestus virtuālo maŔīnu izveidei ar tÄ«kla diskdziņiem.

Kubernetes klastera izveides piemērs

Pirms pāriet uz nākamo piemēru, mēs iztÄ«rÄ«sim iepriekÅ” izveidotos resursus. Lai to izdarÄ«tu, projekta saknē terraform-examples/examples/vpc/server_local_root_disk palaidiet komandu, lai izdzēstu OpenStack objektus:

$ 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

Pēc tam palaidiet komandu, lai notīrītu Selectel VPC API objektus:

$ 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

Abos gadÄ«jumos jums bÅ«s jāapstiprina visu objektu dzÄ“Å”ana:

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

Šis piemērs ir direktorijā terraform-examples/examples/vpc/kubernetes_cluster.

Šajā piemērā tiek izveidots projekts, lietotājs ar lomu projektā un tiek izveidots viens Kubernetes klasteris. Failā vars.tf jūs varat redzēt noklusējuma vērtības, piemēram, mezglu skaitu, to raksturlielumus, Kubernetes versiju un daudz ko citu.

Lai izveidotu resursus, līdzīgi kā pirmajā piemērā, vispirms sāksim moduļu inicializāciju un moduļu resursu izveidi projekts_ar_lietotājuun tad izveido visu pārējo:

$ 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

Nodosim Kubernetes klasteru izveidi un pārvaldÄ«bu caur OpenStack Magnum komponentu. Vairāk par to, kā strādāt ar kopu, varat uzzināt kādā no mÅ«su iepriekŔējie raksti, kā arÄ« iekŔā zināŔanu pamats.

Sagatavojot klasteru, tiks izveidoti diski, virtuālās maŔīnas un uzstādÄ«tas visas nepiecieÅ”amās sastāvdaļas. SagatavoÅ”ana aizņem apmēram 4 minÅ«tes, kuru laikā Terraform parādÄ«s Ŕādus ziņojumus:

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

Kad instalÄ“Å”ana ir pabeigta, Terraform ziņos, ka klasteris ir gatavs, un parādÄ«s tā 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.

Lai pārvaldītu izveidoto Kubernetes klasteru, izmantojot utilītu kubectl jums ir jāiegūst klastera piekļuves fails. Lai to izdarītu, sava konta projektu sarakstā dodieties uz projektu, kas izveidots, izmantojot Terraform:

Terraformu nodroŔinātājs Selectel

Tālāk sekojiet saitei xxxxxx.selvpc.ru, kas tiek parādīts zem projekta nosaukuma:

Terraformu nodroŔinātājs Selectel

Kā pieteikÅ”anās informāciju izmantojiet lietotājvārdu un paroli, kas tika izveidota, izmantojot Terraform. Ja neesi mainÄ«jies vars.tf vai galvenais.tf mÅ«su piemērā lietotājam bÅ«s vārds tf_user. MainÄ«gā vērtÄ«ba ir jāizmanto kā parole TF_VAR_user_password, kas tika norādÄ«ts startÄ“Å”anas laikā pielietot terraformu agrāk.

Projekta iekÅ”pusē jums jāiet uz cilni Kubernetes:

Terraformu nodroŔinātājs Selectel

Šeit ir klasteris, kas izveidots, izmantojot Terraform. Lejupielādēt failu kubectl cilnē "Piekļuve" varat:

Terraformu nodroŔinātājs Selectel

Å ajā cilnē ir instalÄ“Å”anas norādÄ«jumi. kubectl un izmantojiet lejupielādēto config.yaml.

Pēc palaiÅ”anas kubectl un vides mainÄ«gā iestatÄ«Å”ana KUBECONFIG varat izmantot 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

Klasteru mezglu skaitu var viegli mainīt, izmantojot Terraform.
Failā galvenais.tf tiek dota Ŕāda vērtÄ«ba:

cluster_node_count = "${var.cluster_node_count}"

Šī vērtība tiek aizstāta ar vars.tf:

variable "cluster_node_count" {
default = 2
}

Varat mainÄ«t vai nu noklusējuma vērtÄ«bu vars.tfvai tieÅ”i norādiet vajadzÄ«go vērtÄ«bu galvenais.tf:

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

Lai piemērotu izmaiņas, tāpat kā pirmajā piemērā, izmantojiet komandu pielietot terraformu:

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

Ja mezglu skaits mainās, klasteris paliks pieejams. Pēc mezgla pievienoÅ”anas, izmantojot Terraform, varat to izmantot bez papildu konfigurācijas:

$ 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

Secinājums

Šajā rakstā mēs iepazināmies ar galvenajiem veidiem, kā strādāt ar "Virtuālais privātais mākonis" izmantojot Terraform. Mēs priecāsimies, ja izmantosiet oficiālo Selectel Terraform pakalpojumu sniedzēju un sniegsiet atsauksmes.

Par visām atrastajām Selectel Terraform nodroÅ”inātāja kļūdām var ziņot, izmantojot Github problēmas.

Avots: www.habr.com

Pievieno komentāru