Mofani oa Terraform Selectel

Mofani oa Terraform Selectel

Re tsebisitse mofani oa semmuso oa Terraform ho sebetsa le Selectel. Sehlahisoa sena se lumella basebelisi ho kenya tšebetsong taolo ea lisebelisoa ka botlalo ka mokhoa oa Infrastructure-as-code.

Hajoale mofani o tšehetsa taolo ea lisebelisoa tsa litšebeletso "Virtual private cloud" (eo hamorao e tla bitsoa VPC). Nakong e tlang, re rera ho eketsa taolo ea lisebelisoa bakeng sa lits'ebeletso tse ling tse fanoang ke Selectel.

Joalokaha u se u ntse u tseba, tšebeletso ea VPC e hahiloe ho OpenStack. Leha ho le joalo, ka lebaka la hore OpenStack ha e fane ka lisebelisoa tsa tlhaho bakeng sa ho sebeletsa leru la sechaba, re sebelisitse ts'ebetso e sieo ka har'a sehlopha sa li-API tse eketsehileng tse nolofatsang tsamaiso ea lintho tse rarahaneng tse nang le likarolo tse ngata le ho etsa hore mosebetsi o be bonolo haholoanyane. Tse ling tsa ts'ebetso e fumanehang ho OpenStack e koetsoe ho sebelisoa ka kotloloho, empa e fumaneha ka API ea rona.

Mofani oa Selectel Terraform joale o kenyelletsa bokhoni ba ho laola lisebelisoa tse latelang tsa VPC:

  • merero le likhau tsa bona;
  • basebelisi, mesebetsi ea bona le matšoao;
  • li-subnets tsa sechaba, tse kenyeletsang libaka le VRRP;
  • laesense ea software.

Mofani o sebelisa laeborari ea rona ea Go ea sechaba ho sebetsa le VPC API. Ka bobeli laeborari le mofani oa eona ka boeona ke mohloli o bulehileng, nts'etsopele ea bona e etsoa ho Github:

Ho laola lisebelisoa tse ling tsa maru, tse kang mechine ea sebele, li-disks, lihlopha tsa Kubernetes, u ka sebelisa mofani oa OpenStack Terraform. Litokomane tsa molao bakeng sa bafani ka bobeli li fumaneha lihokelong tse latelang:

Ho qala

Ho qala, o hloka ho kenya Terraform (litaelo le lihokela tsa liphutheloana tsa ho kenya li ka fumaneha ho websaete ea molao).

Ho sebetsa, mofani oa thepa o hloka konopo ea Selectel API, e entsoeng ka hare liphanele tsa ho laola akhaonto.

Lipontšo tsa ho sebetsa le Selectel li entsoe ho sebelisoa Terraform kapa ho sebelisa mehlala e seng e entsoe e fumanehang sebakeng sa rona sa polokelo ea Github: terraform-mehlala.

Sebaka sa polokelo se nang le mehlala se arotsoe ka lihlopha tse peli:

  • dimmojule, e nang le li-modules tse nyenyane tse ka sebelisoang hape tse nkang sete ea litekanyetso e le ho kenya letsoho le ho laola lisebelisoa tse nyenyane;
  • mehlala, e nang le mehlala ea sete e feletseng ea li-module tse hokahaneng.

Kamora ho kenya Terraform, ho theha senotlolo sa Selectel API le ho tloaelana le mehlala, a re feteleng pele ho mehlala e sebetsang.

Mohlala oa ho theha seva ka disk ea lehae

Ha re shebeng mohlala oa ho theha projeke, mosebelisi ea nang le karolo le mochini o sebetsang o nang le disk ea lehae: terraform-mehlala/mehlala/vpc/server_local_root_disk.

Ka faele vars.tf lintlha tsohle tse tla sebelisoa ha ho letsetsa li-module li hlalositsoe. Tse ling tsa tsona li na le litekanyetso tsa kamehla, mohlala, seva se tla etsoa sebakeng seo ru-3a ka tlhophiso e latelang:

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

Ka faele ka sehloohong.tf Mofani oa Selectel o qalisoa:

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

Faele ena e boetse e na le boleng ba kamehla bakeng sa senotlolo sa SSH se tla kenngoa ho seva:

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

Haeba ho hlokahala, o ka hlakisa senotlolo se fapaneng sa sechaba. Senotlolo ha sea tlameha ho hlalosoa e le tsela ea faele; o ka eketsa boleng joalo ka khoele.

Ho feta moo faeleng ena, li-module li hlahisoa morero_le_mosebedisi и server_local_root_disk, tse laolang lisebelisoa tse hlokahalang.

Ha re shebeng li-module tsena ka botlalo.

Ho theha morero le mosebelisi ea nang le karolo

Mojule oa pele o theha projeke le mosebelisi ea nang le karolo morerong oo: terraform-examples/modules/vpc/project_with_user.

Mosebelisi ea bōpiloeng o tla khona ho kena ho OpenStack le ho laola lisebelisoa tsa eona. Mojule o bonolo ebile o laola likarolo tse tharo feela:

  • khetha_vpc_project_v2,
  • selectel_vpc_user_v2,
  • khetha_vpc_role_v2.

Ho theha seva ea sebele ka disk ea lehae

Mojule oa bobeli o sebetsana le ho laola lintho tsa OpenStack, tse hlokahalang ho theha seva ka disk ea lehae.

U lokela ho ela hloko tse ling tsa likhang tse boletsoeng mojulung ona bakeng sa mohlodi Openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

khang hlokomoloha_phetoho e o lumella ho iphapanyetsa liphetoho tsa sebopeho id bakeng sa setšoantšo se sebelisitsoeng ho bopa mochine oa sebele. Tšebeletsong ea VPC, litšoantšo tse ngata tsa sechaba li nchafatsoa hang ka beke 'me ka nako e ts'oanang tsa bona id le tsona lia fetoha. Sena se bakoa ke likarolo tse ikhethang tsa karolo ea OpenStack - Glance, eo ho eona litšoantšo li nkoang e le mekhatlo e sa fetoheng.

Haeba u theha kapa u fetola seva kapa disk e teng e nang le khang setšoantšo_id e sebelisoa id setšoantšo sa sechaba, ka mor'a hore setšoantšo seo se ntlafatsoe, ho sebelisa Terraform manifest hape ho tla tsosolosa seva kapa disk. Ho sebelisa khang hlokomoloha_phetoho e u lumella ho qoba boemo bo joalo.

Tlhokomeliso: khang hlokomoloha_phetoho e hlahile Terraform khale haholo: hula#2525.

khang hlokomoloha_resize_confirmation e hlokahalang ho fetola boholo ba disk ea lehae ka katleho, li-cores, kapa memori ea seva. Liphetoho tse joalo li etsoa ka karolo ea OpenStack Nova ho sebelisoa kopo fetola. Nova ea kamehla ka mor'a kopo fetola e beha seva maemong netefatsa_resize mme e emetse netefatso e eketsehileng ho tsoa ho mosebelisi. Leha ho le joalo, boitšoaro bona bo ka fetoloa e le hore Nova e se ke ea emela liketso tse eketsehileng ho tsoa ho mosebedisi.

Khang e boletsoeng e lumella Terraform hore e se ke ea emela boemo netefatsa_resize bakeng sa seva 'me u itokisetse hore seva se be boemong bo sebetsang ka mor'a ho fetola liparamente tsa eona. Khang e fumaneha ho tsoa ho mofuta oa 1.10.0 oa mofani oa OpenStack Terraform: hula#422.

Ho theha Lisebelisoa

Pele o tsamaisa lipontšo, ka kopo hlokomela hore mohlaleng oa rona, ho qalisoa bafani ba babeli ba fapaneng, 'me mofani oa OpenStack o itšetlehile ka lisebelisoa tsa mofani oa Selectel, kaha ntle le ho theha mosebedisi morerong, ho ke ke ha khoneha ho laola lintho tsa eona. . Ka bomalimabe, ka lebaka le tšoanang re ke ke ra tsamaisa taelo feela terraform e sebetsa ka hare ho mohlala oa rona. Re lokela ho etsa pele sebetsa bakeng sa mojule morero_le_mosebedisi mme kamora moo bakeng sa tse ding tsohle.

Tlhokomeliso: Taba ena ha e so rarolloe ho Terraform, o ka latela puisano ka Github ho Setšoantšo #2430 и Setšoantšo #4149.

Ho theha lisebelisoa, e-ea ho directory terraform-mehlala/mehlala/vpc/server_local_root_disk, litaba tsa eona li lokela ho ba tjena:

$ ls
README.md	   main.tf		vars.tf

Re qala li-module re sebelisa taelo:

$ terraform init

Sephetho se bonts'a hore Terraform e khoasolla mefuta ea morao-rao ea bafani bao e e sebelisang mme e lekola li-module tsohle tse hlalositsoeng mohlaleng.

Pele, a re sebeliseng mojule morero_le_mosebedisi. Sena se hloka litekanyetso tse fetang ka letsoho bakeng sa mefuta e sa kang ea beoa:

  • sel_account ka nomoro ea hau ea ak'haonte ea Selectel;
  • sel_token ka senotlolo sa hau sa Selectel API;
  • user_password ka password bakeng sa mosebelisi oa OpenStack.

Litekanyetso tsa mefuta e 'meli ea pele li tlameha ho nkuoa ho tsona diphanele taolo.

Bakeng sa phetoho ea ho qetela, o ka tla le password efe kapa efe.

Ho sebelisa mojule o hloka ho khutlisa boleng SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD ho tsamaisa taelo:

$ 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

Kamora ho tsamaisa taelo, Terraform e tla bonts'a lisebelisoa tseo e batlang ho li theha le ho kopa netefatso:

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

Hang ha morero, mosebelisi le karolo li se li entsoe, u ka qala ho theha lisebelisoa tse setseng:

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

Ha u theha lisebelisoa, ela hloko tlhahiso ea Terraform e nang le aterese ea IP ea kantle moo seva e entsoeng e tla fumaneha:

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

O ka sebetsa ka mochini o hlophisitsoeng o entsoeng ka SSH o sebelisa IP e boletsoeng.

Lisebelisoa tsa ho hlophisa

Ntle le ho theha lisebelisoa ka Terraform, li ka boela tsa fetoloa.

Mohlala, ha re eketse palo ea li-cores le memori bakeng sa seva sa rona ka ho fetola boleng ba li-parameter. seva_vcpus и seva_ram_mb ka faele mehlala/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

Ka mor'a sena, re hlahloba hore na ke liphetoho life tse tla lebisa ho sebeliseng taelo e latelang:

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

Ka lebaka leo, Terraform e ile ea etsa phetoho ea lisebelisoa Openstack_compute_instance_v2 и Openstack_compute_flavor_v2.

Ka kopo elelloa hore sena se tla kenyelletsa ho qala mochini o hlophisitsoeng bocha.

Ho sebelisa tlhophiso e ncha ea mochini o hlakileng, sebelisa taelo terraform e sebetsa, eo re seng re e thakhotse pejana.

Lintho tsohle tse entsoeng li tla hlahisoa ho Liphanele tsa taolo ea VPC:

Mofani oa Terraform Selectel

Ho rona mohlala oa polokelo U ka boela ua bona lipontšo tsa ho theha mechini ea sebele e nang le li-drive tsa marang-rang.

Mohlala oa ho theha sehlopha sa Kubernetes

Pele re fetela mohlaleng o latelang, re tla hloekisa lisebelisoa tseo re li entseng pejana. Ho etsa sena motso oa morero terraform-mehlala/mehlala/vpc/server_local_root_disk Ha re tsamaise taelo ea ho hlakola lintho tsa 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

Ebe u tsamaisa taelo ea ho hlakola lintho tsa 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

Maemong ana ka bobeli, o tla hloka ho netefatsa ho hlakoloa ha lintho tsohle:

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

Mohlala o latelang o bukeng terraform-examples/examples/vpc/kubernetes_cluster.

Mohlala ona o theha morero, mosebelisi ea nang le karolo morerong ona, mme o phahamisa sehlopha se le seng sa Kubernetes. Ka faele vars.tf o ka bona boleng ba kamehla, joalo ka palo ea li-node, litšobotsi tsa bona, mofuta oa Kubernetes, jj.

Ho theha lisebelisoa tse ts'oanang le mohlala oa pele, pele ho tsohle re tla qala ho qala li-module le ho theha lisebelisoa tsa module morero_le_mosebedisiebe o etsa tse ling kaofela:

$ 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

Re tla fetisetsa pōpo le tsamaiso ea lihlopha tsa Kubernetes ka karolo ea OpenStack Magnum. U ka tseba haholoanyane ka mokhoa oa ho sebetsa le sehlopha ho e 'ngoe ea rona lihlooho tse fetilenghammoho motheo oa tsebo.

Ha ho lokisoa sehlopha, li-disk le mechini ea sebele li tla etsoa 'me likarolo tsohle tse hlokahalang li tla kenngoa. Boitokisetso bo nka metsotso e ka bang 4, nakong eo Terraform e tla hlahisa melaetsa e kang:

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

Hang ha ts'ebetso e felile, Terraform e tla bontša hore sehlopha se se se lokile 'me se bonts'a ID ea sona:

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

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

Ho laola sehlopha sa Kubernetes se entsoeng ka ts'ebeliso kubctl o hloka ho fumana faele ea phihlello ea cluster. Ho etsa sena, ea ho projeke e entsoeng ka Terraform lethathamong la merero e akhaonteng ea hau:

Mofani oa Terraform Selectel

E latelang, latela sehokelo joalo ka xxxxx.selvpc.rue hlahang ka tlase ho lebitso la projeke:

Mofani oa Terraform Selectel

Bakeng sa tlhaiso-leseling ea ho kena, sebelisa lebitso la mosebelisi le phasewete tseo u li entseng ka Terraform. Haeba ha o so qhekelle vars.tf kapa ka sehloohong.tf mohlala oa rona, mosebelisi o tla ba le lebitso tf_user. U tlameha ho sebelisa boleng ba ho feto-fetoha joalo ka senotlolo TF_VAR_user_password, e boletsoeng qalong terraform e sebetsa pejana.

Ka hare ho morero o hloka ho ea tab Kubernetes:

Mofani oa Terraform Selectel

Mona ke moo sehlopha se entsoeng ka Terraform se leng teng. Khoasolla faele bakeng sa kubctl u ka khona ho "Access" tab ya:

Mofani oa Terraform Selectel

Litaelo tsa ho kenya li fumaneha tabeng e tšoanang. kubctl le tšebeliso ea tse jarollotsoeng config.yaml.

Kamora ho qala kubctl le ho beha phetoho ya tikoloho KUBECONFIG U ka sebelisa 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

Palo ea li-cluster node e ka fetoloa habonolo ka Terraform.
Ka faele ka sehloohong.tf boleng bo latelang bo hlalositsoe:

cluster_node_count = "${var.cluster_node_count}"

Boleng bona bo nkeloa sebaka ke vars.tf:

variable "cluster_node_count" {
default = 2
}

U ka fetola boleng ba kamehla ho vars.tf, kapa bolela boleng bo hlokahalang ka kotloloho ho ka sehloohong.tf:

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

Ho sebelisa liphetoho, joalo ka mohlala oa pele, sebelisa taelo terraform e sebetsa:

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

Ha palo ea li-node e fetoha, sehlopha se tla lula se le teng. Kamora ho eketsa node ka Terraform, o ka e sebelisa ntle le tlhophiso e eketsehileng:

$ 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

fihlela qeto e

Sehloohong sena re ile ra tloaelana le litsela tse ka sehloohong tsa ho sebetsa le tsona "Virtual private cloud" ka Terraform. Re tla thaba ha o sebelisa mofani oa semmuso oa Selectel Terraform mme o fana ka maikutlo.

Litšitšili leha e le life tse fumanoang ho mofani oa Selectel Terraform li ka tlalehoa ka Mathata a Github.

Source: www.habr.com

Eketsa ka tlhaloso