Terraform veitandi Selectel

Terraform veitandi Selectel

Við höfum hleypt af stokkunum opinberum Terraform veitanda til að vinna með Selectel. Þessi vara gerir notendum kleift að innleiða auðlindastjórnun að fullu með Infrastructure-as-code aðferðafræðinni.

Þjónustuveitan styður sem stendur þjónustuauðlindastjórnun „Raunverulegt einkaský“ (hér eftir nefnt VPC). Í framtíðinni ætlum við að bæta við auðlindastjórnun fyrir aðra þjónustu sem Selectel veitir.

Eins og þú veist nú þegar er VPC þjónustan byggð á OpenStack. Hins vegar, vegna þess að OpenStack býður ekki upp á innfædd verkfæri til að þjóna almenningsskýinu, innleiddum við þá virkni sem vantaði í mengi viðbótar API sem einfalda stjórnun flókinna samsettra hluta og gera vinnuna þægilegri. Sum virkni sem til er í OpenStack er lokuð fyrir beinni notkun, en er fáanleg í gegnum API okkar.

Selectel Terraform veitandinn hefur nú möguleika á að stjórna eftirfarandi VPC auðlindum:

  • verkefni og kvóta þeirra;
  • notendur, hlutverk þeirra og tákn;
  • opinber undirnet, þar á meðal svæðisbundin og VRRP;
  • hugbúnaðarleyfi.

Þjónustuveitan notar opinbera Go bókasafnið okkar til að vinna með VPC API. Bæði bókasafnið og veitandinn sjálfur eru opinn uppspretta, þróun þeirra fer fram á Github:

Til að stjórna öðrum skýjaauðlindum, svo sem sýndarvélum, diskum, Kubernetes þyrpingum, geturðu notað OpenStack Terraform veituna. Opinber skjöl fyrir báða veitendur eru fáanleg á eftirfarandi tenglum:

getting Started

Til að byrja þarftu að setja upp Terraform (leiðbeiningar og tengla á uppsetningarpakka er að finna á opinber vefsíða).

Til að starfa þarf veitandinn Selectel API lykil, sem er búinn til í reikningsstjórnborð.

Birtingarmyndir til að vinna með Selectel eru búnar til með Terraform eða með því að nota sett af tilbúnum dæmum sem eru fáanleg í Github geymslunni okkar: terraform-dæmi.

Geymslan með dæmum er skipt í tvær möppur:

  • einingar, sem inniheldur litlar endurnýtanlegar einingar sem taka sett af breytum sem inntak og stjórna litlu safni auðlinda;
  • dæmi, sem inniheldur dæmi um heildarsett af samtengdum einingum.

Eftir að Terraform hefur verið sett upp, búið til Selectel API lykil og kynnt þér dæmin skulum við halda áfram að hagnýtum dæmum.

Dæmi um að búa til netþjón með staðbundnum diski

Við skulum skoða dæmi um að búa til verkefni, notanda með hlutverk og sýndarvél með staðbundnum diski: terraform-examples/examples/vpc/server_local_root_disk.

Í skrá vars.tf öllum breytum sem verða notaðar þegar hringt er í einingar er lýst. Sum þeirra hafa sjálfgefin gildi, til dæmis verður þjónninn búinn til á svæðinu ru-3a með eftirfarandi uppsetningu:

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

Í skrá aðal.tf Selectel veitandinn er frumstilltur:

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

Þessi skrá inniheldur einnig sjálfgefið gildi fyrir SSH lykilinn sem verður settur upp á þjóninum:

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

Ef nauðsyn krefur geturðu tilgreint annan opinberan lykil. Lykillinn þarf ekki að vera tilgreindur sem skráarslóð; þú getur líka bætt gildinu við sem streng.

Lengra í þessari skrá eru einingarnar ræstar verkefni_með_notanda и server_local_root_disk, sem hafa umsjón með nauðsynlegum fjármunum.

Við skulum skoða þessar einingar nánar.

Að búa til verkefni og notanda með hlutverk

Fyrsta einingin býr til verkefni og notanda með hlutverk í því verkefni: terraform-dæmi/modules/vpc/project_with_user.

Stofnaður notandi mun geta skráð sig inn á OpenStack og stjórnað auðlindum sínum. Einingin er einföld og stjórnar aðeins þremur einingum:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Að búa til sýndarþjón með staðbundnum diski

Önnur einingin fjallar um að stjórna OpenStack hlutum, sem eru nauðsynlegir til að búa til netþjón með staðbundnum diski.

Þú ættir að borga eftirtekt til sumra af þeim rökum sem eru tilgreindar í þessari einingu fyrir tilfangið openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Rök hunsa_breytingar gerir þér kleift að hunsa breytingar á eiginleikum id fyrir myndina sem notuð er til að búa til sýndarvélina. Í VPC þjónustunni eru flestar opinberar myndir uppfærðar sjálfkrafa einu sinni í viku og á sama tíma þeirra id breytist líka. Þetta er vegna sérkennis OpenStack íhlutans - Glance, þar sem myndir eru taldar óbreytanlegar einingar.

Ef þú ert að búa til eða breyta núverandi netþjóni eða diski sem hefur sem rök myndauðkenni notað id opinbera mynd, eftir að myndin hefur verið uppfærð mun endurgerð Terraform upplýsingaskránnar endurskapa þjóninn eða diskinn. Að nota rök hunsa_breytingar gerir þér kleift að forðast slíkar aðstæður.

Athugið: rök hunsa_breytingar birtist í Terraform fyrir nokkuð löngu síðan: draga #2525.

Rök ignore_resize_confirmation þarf til að breyta stærð staðbundins disks, kjarna eða minni miðlara. Slíkar breytingar eru gerðar í gegnum OpenStack Nova hluti með beiðni búa. Sjálfgefin Nova eftir beiðni búa setur netþjóninn í stöðu staðfesta_breyta stærð og bíður eftir frekari staðfestingu frá notanda. Hins vegar er hægt að breyta þessari hegðun þannig að Nova bíði ekki eftir frekari aðgerðum frá notanda.

Tilgreind rök leyfa Terraform að bíða ekki eftir stöðunni staðfesta_breyta stærð fyrir þjóninn og vertu viðbúinn því að þjónninn sé í virkri stöðu eftir að breyta breytum hans. Rökin eru fáanleg frá útgáfu 1.10.0 af OpenStack Terraform veitunni: draga #422.

Að búa til auðlindir

Áður en birtingarskrárnar eru keyrðar, vinsamlegast hafðu í huga að í dæminu okkar eru tveir mismunandi veitendur ræstir og OpenStack veitandinn er háður auðlindum Selectel veitunnar, þar sem án þess að búa til notanda í verkefninu er ómögulegt að stjórna hlutunum sem tilheyra því . Því miður, af sömu ástæðu getum við ekki bara keyrt skipunina terraform gilda inni í dæminu okkar. Við þurfum fyrst að gera sækja um fyrir mát verkefni_með_notanda og eftir það fyrir allt hitt.

Athugið: Þetta mál er ekki enn leyst í Terraform, þú getur fylgst með umræðunni á Github á tölublað #2430 и tölublað #4149.

Til að búa til auðlindir, farðu í möppuna terraform-examples/examples/vpc/server_local_root_disk, innihald hennar ætti að vera svona:

$ ls
README.md	   main.tf		vars.tf

Við frumstillum einingarnar með því að nota skipunina:

$ terraform init

Úttakið sýnir að Terraform halar niður nýjustu útgáfunum af veitunum sem það notar og athugar allar einingarnar sem lýst er í dæminu.

Fyrst skulum við beita einingunni verkefni_með_notanda. Þetta krefst þess að handvirkt sendi gildi fyrir breytur sem hafa ekki verið stilltar:

  • sel_reikningur með Selectel reikningsnúmerinu þínu;
  • sel_tákn með lyklinum þínum fyrir Selectel API;
  • user_password með lykilorði fyrir OpenStack notandann.

Taka verður gildin fyrir fyrstu tvær breyturnar úr stjórnborð.

Fyrir síðustu breytuna geturðu fundið hvaða lykilorð sem er.

Til að nota eininguna þarftu að skipta um gildin SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD keyra skipunina:

$ 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

Eftir að hafa keyrt skipunina mun Terraform sýna hvaða auðlindir það vill búa til og biðja um staðfestingu:

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

Þegar búið er að búa til verkefnið, notandann og hlutverkið geturðu byrjað að búa til tilföngin sem eftir eru:

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

Þegar þú býrð til auðlindir skaltu fylgjast með Terraform-úttakinu með ytri IP-tölu þar sem búið er að nálgast netþjóninn:

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

Þú getur unnið með sýndarvélina sem búið var til í gegnum SSH með því að nota tilgreinda IP.

Að breyta tilföngum

Auk þess að búa til auðlindir í gegnum Terraform er einnig hægt að breyta þeim.

Til dæmis, við skulum auka fjölda kjarna og minni fyrir netþjóninn okkar með því að breyta gildunum fyrir færibreyturnar server_vcpus и server_ram_mb í skrá 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

Eftir þetta athugum við hvaða breytingar þetta mun leiða til með því að nota eftirfarandi skipun:

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

Fyrir vikið gerði Terraform auðlindabreytingu openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Vinsamlegast athugaðu að þetta mun fela í sér að endurræsa sýndarvélina sem búin var til.

Notaðu skipunina til að nota nýju sýndarvélarstillingarnar terraform gilda, sem við höfum þegar hleypt af stokkunum áðan.

Allir búnir hlutir verða sýndir í VPC stjórnborð:

Terraform veitandi Selectel

Í okkar dæmi um geymslur Þú getur líka séð birtingarmyndir til að búa til sýndarvélar með netdrifum.

Dæmi um að búa til Kubernetes klasa

Áður en við förum yfir í næsta dæmi munum við hreinsa upp auðlindirnar sem við bjuggum til áðan. Til að gera þetta í rót verkefnisins terraform-examples/examples/vpc/server_local_root_disk Við skulum keyra skipunina til að eyða OpenStack hlutum:

$ 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

Keyrðu síðan skipunina til að hreinsa Selectel VPC API hluti:

$ 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

Í báðum tilfellum þarftu að staðfesta eyðingu allra hluta:

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

Eftirfarandi dæmi er í möppunni terraform-examples/examples/vpc/kubernetes_cluster.

Þetta dæmi býr til verkefni, notanda með hlutverk í verkefninu, og vekur upp einn Kubernetes þyrping. Í skrá vars.tf þú getur séð sjálfgefin gildi, eins og fjölda hnúta, eiginleika þeirra, Kubernetes útgáfu o.s.frv.

Til að búa til tilföng svipað og fyrsta dæmið, fyrst og fremst munum við byrja að frumstilla einingar og búa til einingartilföng verkefni_með_notandaog búa svo til allt hitt:

$ 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

Við munum flytja stofnun og stjórnun Kubernetes klasa í gegnum OpenStack Magnum íhlutinn. Þú getur fengið frekari upplýsingar um hvernig á að vinna með klasa í einum af okkar fyrri greinar, eins og heilbrigður eins og í þekkingargrunnur.

Þegar klasinn er undirbúinn verða diskar og sýndarvélar búnar til og allir nauðsynlegir íhlutir settir upp. Undirbúningur tekur um 4 mínútur, á þeim tíma mun Terraform birta skilaboð eins og:

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

Þegar uppsetningunni er lokið mun Terraform gefa til kynna að þyrpingin sé tilbúin og sýna auðkenni hans:

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

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

Til að stjórna tilbúnum Kubernetes þyrpingunni í gegnum tólið kubectl þú þarft að fá aðgangsskrána fyrir klasa. Til að gera þetta, farðu í verkefnið sem búið var til í gegnum Terraform á lista yfir verkefni á reikningnum þínum:

Terraform veitandi Selectel

Næst skaltu fylgja hlekknum eins og xxxxxx.selvpc.rusem birtist fyrir neðan nafn verkefnisins:

Terraform veitandi Selectel

Fyrir innskráningarupplýsingar, notaðu notandanafnið og lykilorðið sem þú bjóst til í gegnum Terraform. Ef þú hefur ekki svindlað vars.tf eða aðal.tf fyrir dæmi okkar mun notandinn hafa nafnið tf_notandi. Þú verður að nota gildi breytunnar sem lykilorð TF_VAR_user_password, sem var tilgreint við ræsingu terraform gilda Fyrr.

Inni í verkefninu þarftu að fara í flipann Kubernetes:

Terraform veitandi Selectel

Þetta er þar sem þyrpingin sem er búin til í gegnum Terraform er staðsett. Sækja skrá fyrir kubectl þú getur á flipanum „Aðgangur“:

Terraform veitandi Selectel

Uppsetningarleiðbeiningar eru á sama flipa. kubectl og notkun þess sem hlaðið er niður config.yaml.

Eftir sjósetningu kubectl og stilla umhverfisbreytuna KUBECONFIG þú getur notað 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

Auðvelt er að breyta fjölda klasahnúta með Terraform.
Í skrá aðal.tf eftirfarandi gildi er tilgreint:

cluster_node_count = "${var.cluster_node_count}"

Þetta gildi er skipt út frá vars.tf:

variable "cluster_node_count" {
default = 2
}

Þú getur breytt annað hvort sjálfgefna gildinu í vars.tf, eða tilgreindu nauðsynlegt gildi beint í aðal.tf:

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

Til að beita breytingunum, eins og í fyrsta dæminu, notaðu skipunina terraform gilda:

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

Þegar fjöldi hnúta breytist verður þyrpingin áfram tiltæk. Eftir að þú hefur bætt við hnút í gegnum Terraform geturðu notað hann án viðbótarstillingar:

$ 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

Ályktun

Í þessari grein kynntumst við helstu leiðum til að vinna með „Raunverulegt einkaský“ í gegnum Terraform. Við munum vera ánægð ef þú notar opinbera Selectel Terraform veituna og gefur álit.

Hægt er að tilkynna allar villur sem finnast í Selectel Terraform veitunni í gegnum Github vandamál.

Heimild: www.habr.com

Bæta við athugasemd