Mea hoʻolako Terraform Selectel

Mea hoʻolako Terraform Selectel

Ua hoʻomaka mākou i kahi mea hoʻolako Terraform mana e hana pū me Selectel. Hāʻawi kēia huahana i nā mea hoʻohana e hoʻokō piha i ka hoʻokele waiwai ma o ka Infrastructure-as-code methodology.

Kākoʻo ka mea hoʻolako i ka hoʻokele waiwai lawelawe "Ke ao pilikino virtual" (i kapa ʻia ma hope aku ʻo VPC). I ka wā e hiki mai ana, hoʻolālā mākou e hoʻohui i ka hoʻokele waiwai no nā lawelawe ʻē aʻe i hāʻawi ʻia e Selectel.

E like me kāu i ʻike ai, kūkulu ʻia ka lawelawe VPC ma OpenStack. Eia nō naʻe, ma muli o ka hāʻawi ʻole ʻana o OpenStack i nā mea hana maoli no ka lawelawe ʻana i ke ao lehulehu, ua hoʻokō mākou i ka hana i nalowale i kahi pūʻulu o nā API hou e hoʻomaʻamaʻa i ka hoʻokele ʻana i nā mea composite paʻakikī a ʻoi aku ka maʻalahi o ka hana. Ua pani ʻia kekahi o nā hana i loaʻa ma OpenStack mai ka hoʻohana pololei ʻana, akā loaʻa ma o kā mākou API.

Loaʻa i ka mea hāʻawi Selectel Terraform ka hiki ke hoʻokele i kēia mau kumuwaiwai VPC:

  • nā papahana a me kā lākou mau helu;
  • nā mea hoʻohana, kā lākou kuleana a me nā hōʻailona;
  • nā subnets lehulehu, me ka cross-regional a me VRRP;
  • laikini lako polokalamu.

Hoʻohana ka mea hoʻolako i kā mākou waihona Go public e hana pū me ka VPC API. ʻO ka hale waihona puke a me ka mea hoʻolako ponoʻī he open-source, hoʻokō ʻia kā lākou kūkulu ʻana ma Github:

No ka mālama ʻana i nā kumuwaiwai ʻē aʻe, e like me nā mīkini virtual, nā disks, nā pūʻulu Kubernetes, hiki iā ʻoe ke hoʻohana i ka mea hāʻawi OpenStack Terraform. Loaʻa nā palapala kūhelu no nā mea hoʻolako ʻelua ma nā loulou aʻe:

noho hoʻomaka 'ana

No ka hoʻomaka ʻana, pono ʻoe e hoʻokomo iā Terraform (hiki ke loaʻa nā ʻōlelo aʻoaʻo a me nā loulou i nā pūʻulu hoʻonohonoho ma kahua pūnaewele).

No ka hana, pono ka mea hāʻawi i kahi kī API Selectel, i hana ʻia i loko nā panela mālama moʻokāki.

Hana ʻia nā hōʻike no ka hana ʻana me Selectel me ka hoʻohana ʻana iā Terraform a i ʻole ka hoʻohana ʻana i kahi hoʻonohonoho o nā hiʻohiʻona mākaukau i loaʻa i kā mākou waihona Github: nā hiʻohiʻona terraform.

Ua māhele ʻia ka waihona me nā laʻana i ʻelua papa kuhikuhi:

  • modules, loaʻa nā modula liʻiliʻi hiki ke hoʻohana hou ʻia e lawe i kahi hoʻonohonoho o nā palena ma ke ʻano he hoʻokomo a mālama i kahi pūʻulu waiwai liʻiliʻi;
  • nā hiʻohiʻona, loaʻa nā laʻana o kahi pūʻulu piha o nā modula pili.

Ma hope o ka hoʻokomo ʻana iā Terraform, ka hana ʻana i kahi kī Selectel API a hoʻomaʻamaʻa iā ʻoe iho me nā laʻana, e neʻe kākou i nā hiʻohiʻona kūpono.

ʻO kahi laʻana o ka hana ʻana i kahi kikowaena me kahi disk kūloko

E nānā i kahi laʻana o ka hana ʻana i kahi papahana, kahi mea hoʻohana me kahi kuleana a me kahi mīkini virtual me kahi disk kūloko: terraform-examples/examples/vpc/server_local_root_disk.

Ma ka waihona vars.tf wehewehe ʻia nā ʻāpana āpau e hoʻohana ʻia i ke kāhea ʻana i nā modules. Loaʻa i kekahi o lākou nā waiwai paʻamau, no ka laʻana, e hana ʻia ke kikowaena ma ka ʻāpana ru-3a me kēia hoʻonohonoho:

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

Ma ka waihona main.tf Hoʻomaka ka mea hoʻolako Selectel:

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

Aia i loko o kēia waihona ka waiwai paʻamau no ke kī SSH e hoʻokomo ʻia ma ke kikowaena:

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

Inā pono, hiki iā ʻoe ke kuhikuhi i kahi kī lehulehu ʻē aʻe. ʻAʻole pono e kuhikuhi ʻia ke kī ma ke ʻano he ala faila; hiki iā ʻoe ke hoʻohui i ka waiwai ma ke ʻano he kaula.

Hoʻomaka hou i loko o kēia faila nā modules papahana_me_mea hoʻohana и server_local_root_disk, nāna e mālama i nā kumuwaiwai e pono ai.

E nānā pono kākou i kēia mau modules.

Ke hana ʻana i kahi papahana a me kahi mea hoʻohana me kahi kuleana

Hoʻokumu ka module mua i kahi papahana a me kahi mea hoʻohana me kahi kuleana ma ia papahana: terraform-examples/modules/vpc/project_with_user.

Hiki i ka mea hoʻohana i hana ke komo i OpenStack a mālama i kāna mau kumuwaiwai. He maʻalahi ka module a mālama i ʻekolu mau mea wale nō:

  • koho_vpc_project_v2,
  • koho_vpc_user_v2,
  • koho_vpc_role_v2.

Ke hana ʻana i kahi kikowaena virtual me ka disk kūloko

ʻO ka lua o ka module e pili ana i ka mālama ʻana i nā mea OpenStack, pono e hana i kahi kikowaena me kahi disk kūloko.

Pono ʻoe e noʻonoʻo i kekahi o nā hoʻopaʻapaʻa i ʻōlelo ʻia ma kēia module no ka kumuwaiwai openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Hoopaapaa hoʻololi hiki iā ʻoe ke haʻalele i nā hoʻololi ʻano id no ke kiʻi i hoʻohana ʻia e hana i ka mīkini virtual. Ma ka lawelawe VPC, hoʻonui ʻia ka hapa nui o nā kiʻi lehulehu i hoʻokahi manawa i ka pule a i ka manawa like id hoololi hoi. ʻO kēia ma muli o nā hiʻohiʻona o ka OpenStack component - Glance, kahi i manaʻo ʻia ai nā kiʻi he mau mea hiki ʻole ke hoʻololi.

Inā ʻoe e hana ana a hoʻololi paha i kahi kikowaena a i ʻole disk i loaʻa i ka hoʻopaʻapaʻa kiʻi_id i ʻ a? id kiʻi lehulehu, a laila ma hope o ka hoʻonui ʻia ʻana o kēlā kiʻi, e holo hou ana ka Terraform manifest e hana hou i ka server a i ʻole ka disk. Ke hoʻohana nei i ka hoʻopaʻapaʻa hoʻololi hiki iā ʻoe ke pale i kēlā kūlana.

Nānā: hoʻopaʻapaʻa hoʻololi ua ʻike ʻia ma Terraform i kahi manawa lōʻihi aku nei: huki#2525.

Hoopaapaa hōʻoia_hoʻololi_hoʻololi pono e hoʻololi i ka nui o ka diski kūloko, cores, a i ʻole ka hoʻomanaʻo kikowaena. Hana ʻia ia mau hoʻololi ma o ka OpenStack Nova māhele me ka hoʻohana ʻana i kahi noi hoʻonui hou. Default Nova ma hope o ke noi hoʻonui hou hoʻokomo i ke kikowaena i ke kūlana verify_resize a kali no ka hōʻoia hou mai ka mea hoʻohana. Eia naʻe, hiki ke hoʻololi ʻia kēia ʻano i ʻole e kali ʻo Nova i nā hana hou mai ka mea hoʻohana.

ʻO ka hoʻopaʻapaʻa i ʻōlelo ʻia e ʻae iā Terraform ʻaʻole e kali i ke kūlana verify_resize no ke kikowaena a hoʻomākaukau no ke kikowaena i kahi kūlana hana ma hope o ka hoʻololi ʻana i kāna mau ʻāpana. Loaʻa ka hoʻopaʻapaʻa mai ka mana 1.10.0 o ka mea hāʻawi OpenStack Terraform: huki#422.

Hana i nā kumuwaiwai

Ma mua o ka holo ʻana i nā hōʻike, e ʻoluʻolu e hoʻomaopopo i kā mākou laʻana, ua hoʻokuʻu ʻia ʻelua mau mea hoʻolako like ʻole, a hilinaʻi ka mea hāʻawi OpenStack i nā kumuwaiwai o ka mea hoʻolako Selectel, ʻoiai me ka ʻole o ka hoʻokumu ʻana i kahi mea hoʻohana i ka papahana, ʻaʻole hiki ke mālama i nā mea nona ia. . ʻO ka mea pōʻino, no ke kumu like ʻaʻole hiki iā mākou ke holo i ke kauoha pili ka terraform i loko o kā mākou laʻana. Pono mua mākou e hana noi no ka module papahana_me_mea hoʻohana a mahope iho no na mea e ae.

Nānā: ʻAʻole i hoʻoholo ʻia kēia pilikia ma Terraform, hiki iā ʻoe ke hahai i ke kūkākūkā ma Github ma pukana #2430 и pukana #4149.

No ka hana ʻana i nā kumuwaiwai, e hele i ka papa kuhikuhi terraform-examples/examples/vpc/server_local_root_disk, pono e like me keia:

$ ls
README.md	   main.tf		vars.tf

Hoʻomaka mākou i nā modula me ke kauoha:

$ terraform init

Hōʻike ka hopena e hoʻoiho ʻo Terraform i nā mana hou loa o nā mea hoʻolako e hoʻohana ai a nānā i nā modules āpau i wehewehe ʻia ma ka laʻana.

E hoʻohana mua i ka module papahana_me_mea hoʻohana. Pono kēia i ka hāʻawi lima ʻana i nā waiwai no nā ʻano like ʻole i hoʻonohonoho ʻia:

  • sel_account me kāu helu moʻokāki Selectel;
  • sel_token me kāu kī no Selectel API;
  • mea hoʻohana_password me ka ʻōlelo huna no ka mea hoʻohana OpenStack.

Pono e lawe ʻia nā waiwai no nā ʻano ʻelua mua nā panela hoʻomalu.

No ka hoʻololi hope, hiki iā ʻoe ke hana i kekahi ʻōlelo huna.

No ka hoʻohana ʻana i ka module pono ʻoe e pani i nā waiwai SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD e holo ana i ke kauoha:

$ 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

Ma hope o ka holo ʻana i ke kauoha, e hōʻike ʻo Terraform i nā kumuwaiwai āna e makemake ai e hana a noi no ka hōʻoia:

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

Ke hana ʻia ka papahana, ka mea hoʻohana a me ke kuleana, hiki iā ʻoe ke hoʻomaka e hana i nā kumuwaiwai i koe:

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

I ka hana ʻana i nā kumuwaiwai, e hoʻolohe i ka Terraform output me ka IP address waho kahi e hiki ai ke kikowaena i hana ʻia:

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

Hiki iā ʻoe ke hana me ka mīkini virtual i hana ʻia ma o SSH me ka hoʻohana ʻana i ka IP i kuhikuhi ʻia.

Nā Punawai Hoʻoponopono

Ma kahi o ka hana ʻana i nā kumuwaiwai ma o Terraform, hiki ke hoʻololi ʻia.

No ka laʻana, e hoʻonui i ka helu o nā cores a me ka hoʻomanaʻo no kā mākou kikowaena ma ka hoʻololi ʻana i nā waiwai no nā ʻāpana. server_vcpus и server_ram_mb ma ka waihona 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

Ma hope o kēia, nānā mākou i nā loli e alakaʻi ai i ka hoʻohana ʻana i kēia kauoha:

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

ʻO ka hopena, ua hana ʻo Terraform i kahi hoʻololi waiwai openstack_compute_instance_v2 и openstack_compute_flavor_v2.

E ʻoluʻolu e pili ana kēia i ka rebooting i ka mīkini virtual i hana ʻia.

No ka hoʻohana ʻana i ka hoʻonohonoho mīkini virtual hou, e hoʻohana i ke kauoha pili ka terraform, a mākou i hoʻomaka mua ai.

E hōʻike ʻia nā mea hana a pau i loko Nā papa hoʻomalu VPC:

Mea hoʻolako Terraform Selectel

I kā mākou laʻana waihona Hiki iā ʻoe ke ʻike i nā hōʻike no ka hana ʻana i nā mīkini virtual me nā drive network.

Ka laʻana o ka hana ʻana i kahi pūʻulu Kubernetes

Ma mua o ka neʻe ʻana i ka laʻana aʻe, e hoʻomaʻemaʻe mākou i nā kumuwaiwai a mākou i hana ai ma mua. E hana i kēia ma ke kumu o ka papahana terraform-examples/examples/vpc/server_local_root_disk E holo kāua i ke kauoha e holoi i nā mea 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

A laila e holo i ke kauoha e holoi i nā mea API VPC Selectel:

$ 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

I nā hihia ʻelua, pono ʻoe e hōʻoia i ka holoi ʻana i nā mea āpau:

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

Aia ka la'ana ma ka papa kuhikuhi terraform-examples/examples/vpc/kubernetes_cluster.

Hoʻokumu kēia laʻana i kahi papahana, kahi mea hoʻohana me ke kuleana ma ka papahana, a hoʻāla i hoʻokahi hui Kubernetes. Ma ka waihona vars.tf hiki iā ʻoe ke ʻike i nā waiwai paʻamau, e like me ka helu o nā nodes, ko lākou ʻano, ka mana Kubernetes, etc.

No ka hana ʻana i nā kumuwaiwai e like me ka laʻana mua, ʻo ka mea mua e hoʻomaka mākou i ka hoʻomaka ʻana i nā modules a me ka hana ʻana i nā kumuwaiwai module papahana_me_mea hoʻohanaa laila hana i nā mea ʻē aʻe:

$ 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

E hoʻololi mākou i ka hana ʻana a me ka hoʻokele ʻana o nā pūʻulu Kubernetes ma o ka ʻāpana OpenStack Magnum. Hiki iā ʻoe ke ʻike hou aʻe e pili ana i ka hana ʻana me kahi pūʻulu ma kekahi o kā mākou nā ʻatikala ma muaao j io ike kumu.

I ka hoʻomākaukau ʻana i ka pūʻulu, e hana ʻia nā disks a me nā mīkini virtual a hoʻokomo ʻia nā mea pono a pau. ʻO ka hoʻomākaukau ʻana ma kahi o 4 mau minuke, ma ia manawa e hōʻike ʻo Terraform i nā memo e like me:

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

Ke hoʻopau ʻia ka hoʻonohonoho ʻana, e hōʻike ʻo Terraform ua mākaukau ka pūʻulu a hōʻike i kāna 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.

E hoʻokele i ka hui Kubernetes i hana ʻia ma o ka pono kubectl pono ʻoe e kiʻi i ka faila komo cluster. No ka hana ʻana i kēia, e hele i ka papahana i hana ʻia ma o Terraform i ka papa inoa o nā papahana i kāu moʻokāki:

Mea hoʻolako Terraform Selectel

A laila, e hahai i ka loulou like xxxxxx.selvpc.ruaia ma lalo o ka inoa papahana:

Mea hoʻolako Terraform Selectel

No ka ʻike inoa inoa, e hoʻohana i ka inoa inoa a me ka ʻōlelo huna āu i hana ai ma o Terraform. Inā ʻaʻole ʻoe i hoʻopunipuni vars.tf ai ole ia, main.tf no kā mākou laʻana, e loaʻa i ka mea hoʻohana ka inoa tf_mea hoʻohana. Pono ʻoe e hoʻohana i ka waiwai o ka mea hoʻololi e like me ka ʻōlelo huna TF_VAR_user_password, i kuhikuhi ʻia ma ka hoʻomaka ʻana pili ka terraform ma mua.

I loko o ka papahana pono ʻoe e hele i ka pā Kubernetes:

Mea hoʻolako Terraform Selectel

ʻO kēia kahi o ka hui i hana ʻia ma o Terraform. Hoʻoiho i ka faila no kubectl hiki iā ʻoe ma ka pā "Access":

Mea hoʻolako Terraform Selectel

Aia nā ʻōlelo hoʻonohonoho ma ka pā like. kubectl a me ka hoʻohana ʻana i ka mea i hoʻoiho ʻia config.yaml.

Ma hope o ka hoʻolana kubectl a me ka hoʻonohonoho ʻana i ka hoʻololi kaiapuni KUBECONFIG hiki iā ʻoe ke hoʻohana i nā 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

Hiki ke hoʻololi maʻalahi ʻia ka helu o nā pūnana puʻupuʻu ma o Terraform.
Ma ka waihona main.tf ua kuhikuhi ʻia kēia waiwai:

cluster_node_count = "${var.cluster_node_count}"

Ua pani ʻia kēia waiwai mai vars.tf:

variable "cluster_node_count" {
default = 2
}

Hiki iā ʻoe ke hoʻololi i ka waiwai paʻamau ma vars.tf, a i ʻole e kuhikuhi pololei i ka waiwai i makemake ʻia ma main.tf:

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

No ka hoʻohana ʻana i nā hoʻololi, e like me ke ʻano o ka laʻana mua, e hoʻohana i ke kauoha pili ka terraform:

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

Ke hoʻololi ka helu o nā nodes, e loaʻa ka pūʻulu. Ma hope o ka hoʻohui ʻana i kahi node ma o Terraform, hiki iā ʻoe ke hoʻohana me ka ʻole o ka hoʻonohonoho hou ʻana:

$ 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

hopena

Ma kēia ʻatikala ua kamaʻāina mākou i nā ala nui e hana ai "Ke ao pilikino virtual" ma o Terraform. E hauʻoli mākou inā ʻoe e hoʻohana i ka mea lawelawe ʻo Selectel Terraform a hāʻawi i nā manaʻo.

Hiki ke hōʻike ʻia nā hewa i loaʻa ma ka Selectel Terraform provider Nā Pilikia Github.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka