Pêşkêşvanê Terraform Selectel

Pêşkêşvanê Terraform Selectel

Me pêşkêşvanek fermî ya Terraform da destpêkirin ku bi Selectel re bixebite. Ev hilber rê dide bikarhêneran ku bi rêgeznameya Binesaziya-wek kodê bi tevahî rêveberiya çavkaniyê bicîh bikin.

Pêşkêşkar niha rêveberiya çavkaniya karûbarê piştgirî dike "Ewra taybet a virtual" (li vir wekî VPC tê binav kirin). Di pêşerojê de, em plan dikin ku rêveberiya çavkaniyê ji bo karûbarên din ên ku ji hêla Selectel ve têne peyda kirin zêde bikin.

Wekî ku hûn jixwe dizanin, karûbarê VPC li ser OpenStack-ê hatî çêkirin. Lêbelê, ji ber ku OpenStack ji bo xizmetkirina ewrê gelemperî amûrên xwemalî peyda nake, me fonksiyona wenda di komek API-yên zêde de bicîh kir ku rêveberiya tiştên tevlihev ên tevlihev hêsan dike û kar hêsantir dike. Hin fonksiyonên ku di OpenStack de hene ji karanîna rasterast girtî ne, lê bi navgîniyê ve têne peyda kirin API-ya me.

Pêşkêşvanê Selectel Terraform naha şiyana birêvebirina çavkaniyên VPC yên jêrîn vedigire:

  • proje û kotayên wan;
  • bikarhêner, rol û nîşaneyên wan;
  • subnets giştî, di nav de cross-herêmî û VRRP;
  • lîsansên nivîsbariyê.

Pêşkêşkar pirtûkxaneya meya Go ya giştî bikar tîne da ku bi VPC API-yê re bixebite. Hem pirtûkxane û hem jî pêşkêşker bixwe çavkaniya vekirî ne, pêşkeftina wan li ser Github pêk tê:

Ji bo birêvebirina çavkaniyên din ên ewr, wek makîneyên virtual, dîskên, komên Kubernetes, hûn dikarin pêşkêşvanê OpenStack Terraform bikar bînin. Belgeyên fermî ji bo her du pêşkêşkaran li ser lînkên jêrîn hene:

Destpêkirin

Ji bo ku hûn dest pê bikin, hûn hewce ne ku Terraform saz bikin (rêber û girêdanên pakêtên sazkirinê li vir têne dîtin malpera fermî).

Ji bo xebitandinê, pêşkêşker mifteyek API-ya Selectel hewce dike, ku tê de hatî çêkirin panelên kontrola hesabê.

Manîfestên ji bo xebata bi Selectel re bi karanîna Terraform an jî bi karanîna komek nimûneyên amade yên ku di depoya meya Github de hene têne afirandin: terraform-nimûne.

Depoya bi mînakan li du pelrêçan tê dabeş kirin:

  • modules, di nav xwe de modulên piçûk ên ji nû ve bikar anîn hene ku komek pîvanan wekî têketinê digirin û komek piçûk a çavkaniyan îdare dikin;
  • nimûne, mînakên komek bêkêmasî ya modulên bi hev ve girêdayî hene.

Piştî sazkirina Terraform, afirandina mifteyek Selectel API û naskirina xwe bi mînakan, em biçin ser mînakên pratîk.

Mînakek afirandina serverek bi dîskek herêmî

Ka em li mînakek afirandina projeyek, bikarhênerek xwedî rol û makîneyek virtual bi dîskek herêmî binêrin: terraform-nimûne/nimûne/vpc/server_local_root_disk.

Di pelê de vars.tf hemî pîvanên ku dê di dema banga modulan de werin bikar anîn têne diyar kirin. Hin ji wan nirxên xwerû hene, ji bo nimûne, server dê li herêmê were afirandin ru-3a bi veavakirina jêrîn:

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

Di pelê de sereke.tf Pêşkêşkara Selectel dest pê dike:

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

Di vê pelê de ji bo mifteya SSH ya ku dê li ser serverê were saz kirin jî nirxa xwerû heye:

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

Ger hewce be, hûn dikarin mifteyek gelemperî ya cûda diyar bikin. Ne hewce ye ku mift wekî riya pelê were destnîşankirin; hûn dikarin nirxê wekî rêzek jî lê zêde bikin.

Zêdetir di vê pelê de modul têne destpêkirin project_with_user и server_local_root_disk, ku çavkaniyên pêwîst birêve dibin.

Ka em bi hûrgulî li van modulan binêrin.

Afirandina projeyek û bikarhênerek bi rolek

Modula yekem projeyek û bikarhênerek ku di wê projeyê de rolek heye diafirîne: terraform-nimûne/module/vpc/project_with_user.

Bikarhênerê hatî afirandin dê bikaribe têkeve OpenStack û çavkaniyên xwe birêve bibe. Module sade ye û tenê sê saziyan birêve dibe:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Afirandina serverek virtual bi dîska herêmî

Modula duyemîn bi rêvebirina tiştên OpenStack re, ku ji bo afirandina serverek bi dîskek herêmî re hewce ne, mijûl dibe.

Divê hûn bala xwe bidin hin argumanên ku di vê modulê de ji bo çavkaniyê hatine destnîşan kirin openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Bersivk ignore_changes destûrê dide te ku hûn guhartinên taybetmendiyê paşguh bikin id ji bo wêneyê ku ji bo afirandina makîneya virtual tê bikar anîn. Di karûbarê VPC de, piraniya wêneyên gelemperî heftê carekê bixweber têne nûve kirin û di heman demê de wan id jî diguhere. Ev ji ber taybetmendiyên beşê OpenStack - Glance ye, ku tê de wêne hebûnên neguhêrbar têne hesibandin.

Ger hûn serverek an dîskek heyî ya ku wekî argumanek heye diafirînin an diguhezînin image_id bikar anîn ji hêla id wêneya giştî, dûv re piştî ku ew wêne were nûve kirin, manîfestoya Terraform dîsa dê server an dîskê ji nû ve biafirîne. Bikaranîna argumanek ignore_changes destûrê dide te ku ji rewşek weha dûr bikevin.

Nîşe: arguman ignore_changes demeke dirêj berê di Terraform de xuya bû: vekişîne # 2525.

Bersivk ignore_resize_confirmation pêdivî ye ku bi serfirazî mezinahiya dîska herêmî, naverok, an bîranîna serverê bi serfirazî veguherîne. Guhertinên weha bi navgîniya hêmanek OpenStack Nova bi karanîna daxwazek têne çêkirin resize. Piştî daxwazê ​​Nova standard resize serverê dixe statûyê verify_resize û li benda pejirandina zêde ji bikarhêner e. Lêbelê, ev tevger dikare were guheztin da ku Nova li benda kiryarên zêde ji bikarhêner nemîne.

Argumana diyarkirî dihêle Terraform li benda statûyê nemîne verify_resize ji bo serverê û ji bo serverê piştî guheztina pîvanên xwe di rewşek çalak de amade bibin. Argument ji guhertoya 1.10.0 ya pêşkêşvanê OpenStack Terraform heye: vekişîne # 422.

Çêkirina Çavkaniyan

Berî ku manîfestoyan bimeşînin, ji kerema xwe bala xwe bidin ku di mînaka me de, du pêşkêşkerên cihêreng têne destpêkirin, û pêşkêşkarê OpenStack bi çavkaniyên pêşkêşvanê Selectel ve girêdayî ye, ji ber ku bêyî afirandina bikarhênerek di projeyê de, ne gengaz e ku meriv tiştên ku jê re girêdayî ne were rêvebirin. . Mixabin, ji ber heman sedemê em nekarin tenê fermanê bimeşînin terraform sepandin di hundurê mînaka me de. Pêşî divê em bikin bikaranîn ji bo module project_with_user û piştî wê ji bo her tiştê din.

Nîşe: Ev pirsgirêk hîn di Terraform de nehatiye çareser kirin, hûn dikarin li ser Github nîqaşê bişopînin hejmar#2430 и hejmar#4149.

Ji bo afirandina çavkaniyan, biçin pelrêça terraform-nimûne/nimûne/vpc/server_local_root_disk, naveroka wê divê wiha be:

$ ls
README.md	   main.tf		vars.tf

Em modulan bi karanîna fermanê dest pê dikin:

$ terraform init

Hilber destnîşan dike ku Terraform guhertoyên herî dawî yên pêşkêşkerên ku ew bikar tîne dadixe û hemî modulên ku di nimûneyê de hatine destnîşan kirin kontrol dike.

Pêşî em modulê bicîh bînin project_with_user. Ev hewce dike ku bi destan nirxan ji bo guhêrbarên ku nehatine danîn derbas bikin:

  • sel_account bi hejmara hesabê xweya Selectel;
  • sel_token bi mifteya xwe ya ji bo Selectel API;
  • user_password bi şîfreyek ji bo bikarhênerê OpenStack.

Nirxên du guherbarên pêşîn divê ji wan bêne girtin panelên kontrolê.

Ji bo guhêrbara paşîn, hûn dikarin her şîfreyekê derxînin.

Ji bo karanîna modulê hûn hewce ne ku nirxan biguhezînin SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD fermanê dimeşîne:

$ 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

Piştî xebitandina fermanê, Terraform dê nîşan bide ka kîjan çavkaniyan dixwaze biafirîne û piştrastkirinê bixwaze:

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

Piştî ku proje, bikarhêner û rol hatin afirandin, hûn dikarin dest bi afirandina çavkaniyên mayî bikin:

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

Dema ku çavkaniyan diafirînin, bala xwe bidin derana Terraform bi navnîşana IP-ya derve ya ku servera hatî çêkirin dê bigihîje:

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

Hûn dikarin bi makîneya virtual ya hatî afirandin re bi navgîniya SSH-ê bi karanîna IP-ya diyarkirî re bixebitin.

Çavkaniyên Editing

Ji bilî afirandina çavkaniyan bi rêya Terraform, ew jî dikarin bêne guhertin.

Mînakî, em bi guheztina nirxên pîvanan re ji bo servera xwe hejmara naverok û bîra zêde bikin. server_vcpus и server_ram_mb di dosyayê de mînakên/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

Piştî vê yekê, em kontrol dikin ka ev ê çi guhertinan bike ku emrê jêrîn bikar bînin:

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

Wekî encamek, Terraform guhertinek çavkaniyek çêkir openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Ji kerema xwe not bikin ku ev ê ji nû ve destpêkirina makîneya virtual ya hatî afirandin pêk bîne.

Ji bo sepandina veavakirina makîneya virtual ya nû, fermanê bikar bînin terraform sepandin, ku me berê berê dest pê kir.

Hemî tiştên çêkirî dê tê de bêne xuyang kirin Panelên kontrolê yên VPC:

Pêşkêşvanê Terraform Selectel

Vîdeo depoyên nimûne Her weha hûn dikarin ji bo afirandina makîneyên virtual bi ajokarên torê re manîfestoyan bibînin.

Mînaka afirandina komek Kubernetes

Berî ku em derbasî mînaka din bibin, em ê çavkaniyên ku me berê afirandine paqij bikin. Ji bo vê yekê di bingeha projeyê de bikin terraform-nimûne/nimûne/vpc/server_local_root_disk Ka em emrê jêbirina tiştên OpenStack bimeşînin:

$ 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

Dûv re fermanê bimeşînin da ku tiştên API-ê Selectel VPC paqij bikin:

$ 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

Di her du rewşan de, hûn ê hewce bikin ku jêbirina hemî tiştan piştrast bikin:

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

Mînaka jêrîn di pelrêçê de ye terraform-nimûne/nimûne/vpc/kubernetes_cluster.

Ev mînak projeyek, bikarhênerek ku di projeyê de rolek heye diafirîne, û komek Kubernetes radike. Di pelê de vars.tf hûn dikarin nirxên xwerû, wekî hejmara girêkan, taybetmendiyên wan, guhertoya Kubernetes, hwd, bibînin.

Ji bo afirandina çavkaniyên mîna mînaka yekem, berî her tiştî em ê dest bi destpêkirina modulan bikin û çavkaniyên modulê biafirînin project_with_userû paşê her tiştê din çêbikin:

$ 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

Em ê afirandin û rêveberiya komên Kubernetes bi navgîniya beşê OpenStack Magnum veguhezînin. Hûn dikarin di yek ji me de bêtir fêr bibin ka meriv çawa bi komekê re dixebite gotarên berêû her weha bingeha zanînê.

Dema ku komê were amadekirin, dê dîsk û makîneyên virtual werin afirandin û hemî pêkhateyên pêwîst dê bêne saz kirin. Amadekirin bi qasî 4 hûrdem digire, di vê demê de Terraform dê peyamên wekî:

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

Piştî ku sazkirin qediya, Terraform dê destnîşan bike ku kom amade ye û nasnameya xwe nîşan bide:

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

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

Ji bo birêvebirina koma Kubernetes a hatî afirandin bi navgîniyê ve kubectl hûn hewce ne ku pelê gihîştina komê bistînin. Ji bo vê yekê, biçin projeya ku bi Terraform ve hatî afirandin di navnîşa projeyên di hesabê xwe de:

Pêşkêşvanê Terraform Selectel

Piştre, lînka mîna bişopînin xxxxxx.selvpc.ruku li jêr navê projeyê xuya dike:

Pêşkêşvanê Terraform Selectel

Ji bo agahdariya têketinê, navê bikarhêner û şîfreya ku we bi Terraform ve afirandiye bikar bînin. Heger te xapandine vars.tf an sereke.tf ji bo nimûneya me, bikarhêner dê navê xwe hebe tf_user. Divê hûn nirxa guherbarê wekî şîfre bikar bînin TF_VAR_user_password, ku di destpêkê de hate diyarkirin terraform sepandin zûtir

Di hundurê projeyê de hûn hewce ne ku biçin tabê Kubernetes:

Pêşkêşvanê Terraform Selectel

Li vir komika ku bi Terraform ve hatî afirandin li vir e. Ji bo pelê dakêşin kubectl hûn dikarin li ser tabê "Gihîştin":

Pêşkêşvanê Terraform Selectel

Talîmatên sazkirinê li ser heman tabloyê ne. kubectl û karanîna dakêşandî config.yaml.

Piştî destpêkirinê kubectl û danîna guherbara jîngehê KUBECONFIG Hûn dikarin Kubernetes bikar bînin:

$ 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

Hejmara girêkên komê bi hêsanî dikare bi Terraform ve were guheztin.
Di pelê de sereke.tf nirxa jêrîn tête diyar kirin:

cluster_node_count = "${var.cluster_node_count}"

Ev nirx ji şûna vars.tf:

variable "cluster_node_count" {
default = 2
}

Hûn dikarin di nav de nirxa xwerû biguherînin vars.tf, an nirxa pêwîst rasterast tê de diyar bikin sereke.tf:

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

Ji bo pêkanîna guhertinan, wekî mînaka yekem, fermanê bikar bînin terraform sepandin:

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

Dema ku hejmara girêkan biguhere, kom dê berdest bimîne. Piştî ku girêkek bi Terraform ve zêde kirin, hûn dikarin wê bêyî veavakirina zêde bikar bînin:

$ 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

encamê

Di vê gotarê de em bi awayên sereke yên xebatê re nas kirin "Ewra taybet a virtual" bi rêya Terraform. Ger hûn pêşkêşkara fermî ya Selectel Terraform bikar bînin û bersivê bidin, em ê kêfxweş bibin.

Her xeletiyên ku di pêşkêşvanê Selectel Terraform de têne dîtin dikarin bi rê ve werin rapor kirin Pirsgirêkên Github.

Source: www.habr.com

Add a comment