Fornitur Terraform Selectel

Fornitur Terraform Selectel

Nedejna fornitur uffiċjali ta’ Terraform biex naħdmu ma’ Selectel. Dan il-prodott jippermetti lill-utenti biex jimplimentaw bis-sħiħ il-ġestjoni tar-riżorsi permezz tal-metodoloġija Infrastructure-as-code.

Il-fornitur bħalissa jappoġġja l-ġestjoni tar-riżorsi tas-servizz "Sħaba privata virtwali" (minn hawn 'il quddiem imsejħa VPC). Fil-futur, qed nippjanaw li nżidu l-ġestjoni tar-riżorsi għal servizzi oħra pprovduti minn Selectel.

Kif diġà taf, is-servizz VPC huwa mibni fuq OpenStack. Madankollu, minħabba l-fatt li OpenStack ma jipprovdix għodod indiġeni biex iservi l-cloud pubbliku, implimentajna l-funzjonalità nieqsa f'sett ta 'APIs addizzjonali li jissimplifikaw il-ġestjoni ta' oġġetti komposti kumplessi u jagħmlu x-xogħol aktar konvenjenti. Xi wħud mill-funzjonalità disponibbli f'OpenStack hija magħluqa mill-użu dirett, iżda hija disponibbli permezz API tagħna.

Il-fornitur Selectel Terraform issa jinkludi l-abbiltà li jimmaniġġja r-riżorsi tal-VPC li ġejjin:

  • proġetti u l-kwoti tagħhom;
  • utenti, ir-rwoli u t-tokens tagħhom;
  • subnets pubbliċi, inklużi transreġjonali u VRRP;
  • liċenzji tas-softwer.

Il-fornitur juża l-librerija pubblika Go tagħna biex jaħdem mal-API VPC. Kemm il-librerija kif ukoll il-fornitur innifsu huma open-source, l-iżvilupp tagħhom jitwettaq fuq Github:

Biex timmaniġġja riżorsi oħra tas-sħab, bħal magni virtwali, diski, clusters Kubernetes, tista 'tuża l-fornitur OpenStack Terraform. Dokumentazzjoni uffiċjali għaż-żewġ fornituri hija disponibbli fil-links li ġejjin:

Getting Started

Biex tibda, trid tinstalla Terraform (l-istruzzjonijiet u l-links għall-pakketti tal-installazzjoni jistgħu jinstabu fuq websajt uffiċjali).

Biex jopera, il-fornitur jeħtieġ ċavetta Selectel API, li hija maħluqa fi pannelli tal-kontroll tal-kont.

Manifesti biex taħdem ma 'Selectel huma maħluqa bl-użu ta' Terraform jew bl-użu ta 'sett ta' eżempji lesti li huma disponibbli fir-repożitorju Github tagħna: terraform-eżempji.

Ir-repożitorju b'eżempji huwa maqsum f'żewġ direttorji:

  • moduli, li fihom moduli żgħar li jistgħu jerġgħu jintużaw li jieħdu sett ta' parametri bħala input u jimmaniġġjaw sett żgħir ta' riżorsi;
  • eżempji, li jkun fih eżempji ta' sett komplut ta' moduli interkonnessi.

Wara li tinstalla Terraform, toħloq ċavetta Selectel API u tiffamiljarizza ruħek mal-eżempji, ejja ngħaddu għal eżempji prattiċi.

Eżempju tal-ħolqien ta' server b'diska lokali

Ejja nħarsu lejn eżempju ta 'ħolqien ta' proġett, utent bi rwol u magna virtwali b'diska lokali: terraform-examples/examples/vpc/server_local_root_disk.

Fil-fajl vars.tf il-parametri kollha li se jintużaw meta ssejjaħ moduli huma deskritti. Xi wħud minnhom għandhom valuri awtomatiċi, pereżempju, is-server se jinħoloq fiż-żona ru-3a bil-konfigurazzjoni li ġejja:

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

Fil-fajl main.tf Il-fornitur Selectel huwa inizjalizzat:

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

Dan il-fajl fih ukoll il-valur default għaċ-ċavetta SSH li se tkun installata fuq is-server:

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

Jekk meħtieġ, tista' tispeċifika ċavetta pubblika differenti. Iċ-ċavetta m'għandhiex għalfejn tiġi speċifikata bħala mogħdija tal-fajl; tista 'wkoll iżżid il-valur bħala string.

Aktar f'dan il-fajl il-moduli huma mnedija project_with_user и server_local_root_disk, li jimmaniġġjaw ir-riżorsi meħtieġa.

Ejja nħarsu lejn dawn il-moduli f'aktar dettall.

Ħolqien ta 'proġett u utent bi rwol

L-ewwel modulu joħloq proġett u utent bi rwol f'dak il-proġett: terraform-examples/moduli/vpc/project_with_user.

L-utent maħluq ikun jista' jidħol f'OpenStack u jamministra r-riżorsi tiegħu. Il-modulu huwa sempliċi u jamministra biss tliet entitajiet:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Ħolqien ta 'server virtwali b'diska lokali

It-tieni modulu jittratta l-ġestjoni ta 'oġġetti OpenStack, li huma meħtieġa biex jinħoloq server b'diska lokali.

Għandek tagħti attenzjoni għal xi wħud mill-argumenti li huma speċifikati f'dan il-modulu għar-riżors openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

argument injora_bidliet jippermettilek tinjora l-bidliet fl-attributi id għall-immaġni użata biex tinħoloq il-magna virtwali. Fis-servizz VPC, il-biċċa l-kbira tal-immaġini pubbliċi jiġu aġġornati awtomatikament darba fil-ġimgħa u fl-istess ħin tagħhom id jinbidel ukoll. Dan huwa dovut għall-partikolaritajiet tal-komponent OpenStack - Glance, li fih l-immaġini huma meqjusa bħala entitajiet immutabbli.

Jekk qed toħloq jew timmodifika server eżistenti jew disk li għandu bħala argument image_id użati id immaġni pubblika, imbagħad wara li dik l-immaġni tiġi aġġornata, it-tħaddim tal-manifest Terraform mill-ġdid se jirrikreja s-server jew id-disk. Bl-użu ta' argument injora_bidliet jippermettilek tevita sitwazzjoni bħal din.

Nota: argument injora_bidliet deher f'Terraform żmien twil ilu: iġbed#2525.

argument ignore_resize_confirmation meħtieġa biex tibdel id-daqs tad-disk lokali, cores, jew memorja tas-server. Tibdil bħal dan isir permezz tal-komponent OpenStack Nova billi tuża talba resize. Default Nova wara talba resize ipoġġi s-server fi stat verify_resize u jistenna għal konferma addizzjonali mill-utent. Madankollu, din l-imġieba tista 'tinbidel sabiex Nova ma tistennax għal azzjonijiet addizzjonali mill-utent.

L-argument speċifikat jippermetti lil Terraform li ma jistenna l-istatus verify_resize għas-server u tkun ippreparata biex is-server ikun fi stat attiv wara li jbiddel il-parametri tiegħu. L-argument huwa disponibbli mill-verżjoni 1.10.0 tal-fornitur OpenStack Terraform: iġbed#422.

Ħolqien tar-Riżorsi

Qabel ma tmexxi l-manifesti, jekk jogħġbok innota li fl-eżempju tagħna, żewġ fornituri differenti huma mnedija, u l-fornitur OpenStack jiddependi fuq ir-riżorsi tal-fornitur Selectel, peress li mingħajr ma jinħoloq utent fil-proġett, huwa impossibbli li timmaniġġja l-oġġetti li jappartjenu għalih. . Sfortunatament, għall-istess raġuni ma nistgħux inmexxu l-kmand biss terraform japplikaw ġewwa l-eżempju tagħna. L-ewwel irridu nagħmlu japplikaw għall-modulu project_with_user u wara għal kull ħaġa oħra.

Nota: Din il-kwistjoni għadha mhix solvuta f'Terraform, tista 'ssegwi d-diskussjoni fuq Github fuq ħarġa#2430 и ħarġa#4149.

Biex toħloq riżorsi, mur fid-direttorju terraform-examples/examples/vpc/server_local_root_disk, il-kontenut tiegħu għandu jkun bħal dan:

$ ls
README.md	   main.tf		vars.tf

Aħna inizjalizzaw il-moduli bl-użu tal-kmand:

$ terraform init

L-output juri li Terraform tniżżel l-aħħar verżjonijiet tal-fornituri li juża u jiċċekkja l-moduli kollha deskritti fl-eżempju.

L-ewwel ejja napplikaw il-modulu project_with_user. Dan jeħtieġ li l-valuri jgħaddu manwalment għal varjabbli li ma ġewx issettjati:

  • sel_account bin-numru tal-kont Selectel tiegħek;
  • sel_token biċ-ċavetta tiegħek għal Selectel API;
  • user_password b'password għall-utent ta' OpenStack.

Il-valuri għall-ewwel żewġ varjabbli għandhom jittieħdu minn pannelli tal-kontroll.

Għall-aħħar varjabbli, tista 'toħroġ bi kwalunkwe password.

Biex tuża l-modulu għandek bżonn tissostitwixxi l-valuri SEL_AKCOUNT, SEL_TOKEN и USER_PASSWORD tmexxija tal-kmand:

$ 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

Wara li jmexxi l-kmand, Terraform se juri liema riżorsi trid toħloq u titlob konferma:

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

Ladarba l-proġett, l-utent u r-rwol ikunu nħolqu, tista’ tibda toħloq ir-riżorsi li jifdal:

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

Meta toħloq ir-riżorsi, oqgħod attent għall-output Terraform bl-indirizz IP estern fejn is-server maħluq ikun aċċessibbli:

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

Tista 'taħdem mal-magna virtwali maħluqa permezz ta' SSH billi tuża l-IP speċifikat.

Riżorsi Editjar

Minbarra l-ħolqien ta 'riżorsi permezz ta' Terraform, jistgħu wkoll jiġu modifikati.

Pereżempju, ejja nżidu n-numru ta 'qlub u memorja għas-server tagħna billi nibdlu l-valuri għall-parametri server_vcpus и server_ram_mb fil-fajl eżempji/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

Wara dan, aħna niċċekkjaw liema bidliet dan iwassal għall-użu tal-kmand li ġej:

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

Bħala riżultat, Terraform għamel bidla fir-riżorsi openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Jekk jogħġbok innota li dan se jinvolvi l-istartjar mill-ġdid tal-magna virtwali maħluqa.

Biex tapplika l-konfigurazzjoni tal-magna virtwali l-ġdida, uża l-kmand terraform japplikaw, li diġà nedejna qabel.

L-oġġetti kollha maħluqa se jintwerew fi Pannelli tal-kontroll VPC:

Fornitur Terraform Selectel

Fil-tagħna repożitorji ta' eżempju Tista 'tara wkoll manifesti għall-ħolqien ta' magni virtwali b'drives tan-netwerk.

Eżempju tal-ħolqien ta' cluster Kubernetes

Qabel ma ngħaddu għall-eżempju li jmiss, aħna ser inaddfu r-riżorsi li ħloqna qabel. Biex tagħmel dan fl-għerq tal-proġett terraform-examples/examples/vpc/server_local_root_disk Ejja nħaddmu l-kmand biex tħassar l-oġġetti 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

Imbagħad mexxi l-kmand biex tneħħi l-oġġetti 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

Fiż-żewġ każijiet, ser ikollok bżonn tikkonferma t-tħassir tal-oġġetti kollha:

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

L-eżempju li ġej jinsab fid-direttorju terraform-examples/examples/vpc/kubernetes_cluster.

Dan l-eżempju joħloq proġett, utent bi rwol fil-proġett, u jqajjem cluster wieħed ta' Kubernetes. Fil-fajl vars.tf tista 'tara valuri default, bħan-numru ta' nodi, il-karatteristiċi tagħhom, il-verżjoni Kubernetes, eċċ.

Biex noħolqu riżorsi simili għall-ewwel eżempju, l-ewwelnett se nibdew inizjalizzaw moduli u noħolqu riżorsi tal-moduli project_with_useru mbagħad toħloq kull ħaġa oħra:

$ 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

Se nittrasferixxu l-ħolqien u l-ġestjoni ta 'clusters ta' Kubernetes permezz tal-komponent OpenStack Magnum. Tista' ssir taf aktar dwar kif taħdem ma' cluster f'wieħed minn tagħna artikoli preċedentikif ukoll bażi ta’ għarfien.

Meta tħejji l-cluster, se jinħolqu diski u magni virtwali u se jiġu installati l-komponenti kollha meħtieġa. Il-preparazzjoni tieħu madwar 4 minuti, li matulhom Terraform se juri messaġġi bħal:

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

Ladarba l-installazzjoni tkun kompluta, Terraform se jindika li l-cluster huwa lest u juri l-ID tiegħu:

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

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

Biex timmaniġġja l-cluster Kubernetes maħluq permezz tal-utilità kubectl għandek bżonn tikseb il-fajl ta 'aċċess għall-cluster. Biex tagħmel dan, mur fil-proġett maħluq permezz ta’ Terraform fil-lista ta’ proġetti fil-kont tiegħek:

Fornitur Terraform Selectel

Sussegwentement, segwi l-link simili xxxxxx.selvpc.ruli jidher taħt l-isem tal-proġett:

Fornitur Terraform Selectel

Għal informazzjoni ta' login, uża l-isem tal-utent u l-password li ħloqt permezz ta' Terraform. Jekk ma qerqtx vars.tf jew main.tf għall-eżempju tagħna, l-utent ikollu l-isem tf_user. Trid tuża l-valur tal-varjabbli bħala l-password TF_VAR_user_password, li kien speċifikat fl-istartjar terraform japplikaw qabel.

Ġewwa l-proġett għandek bżonn tmur fit-tab Kubernetes:

Fornitur Terraform Selectel

Dan huwa fejn jinsab il-cluster maħluq permezz ta' Terraform. Niżżel il-fajl għal kubectl tista' fuq it-tab "Aċċess":

Fornitur Terraform Selectel

L-istruzzjonijiet tal-installazzjoni jinsabu fuq l-istess tab. kubectl u l-użu tal-downloaded config.yaml.

Wara t-tnedija kubectl u l-issettjar tal-varjabbli ambjentali KUBECONFIG tista' tuża 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

In-numru ta 'cluster nodes jista' jinbidel faċilment permezz ta 'Terraform.
Fil-fajl main.tf il-valur li ġej huwa speċifikat:

cluster_node_count = "${var.cluster_node_count}"

Dan il-valur huwa sostitwit minn vars.tf:

variable "cluster_node_count" {
default = 2
}

Tista' tibdel jew il-valur default fi vars.tf, jew speċifika l-valur meħtieġ direttament fi main.tf:

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

Biex tapplika l-bidliet, bħal fil-każ tal-ewwel eżempju, uża l-kmand terraform japplikaw:

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

Meta n-numru ta 'nodi jinbidel, il-cluster jibqa' disponibbli. Wara li żżid node permezz Terraform, tista 'tużah mingħajr konfigurazzjoni addizzjonali:

$ 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

Konklużjoni

F'dan l-artikolu sirna familjari mal-modi ewlenin kif taħdem magħhom "Sħaba privata virtwali" permezz Terraform. Inkunu ferħanin jekk tuża l-fornitur uffiċjali ta’ Selectel Terraform u tipprovdi feedback.

Kwalunkwe bug misjuba fil-fornitur Selectel Terraform jista 'jiġi rrappurtat permezz Kwistjonijiet Github.

Sors: www.habr.com

Żid kumment