Mtoa huduma wa Terraform Selectel

Mtoa huduma wa Terraform Selectel

Tumezindua mtoa huduma rasmi wa Terraform kufanya kazi na Selectel. Bidhaa hii huruhusu watumiaji kutekeleza kikamilifu usimamizi wa rasilimali kupitia mbinu ya Miundombinu kama kanuni.

Mtoa huduma kwa sasa anaunga mkono usimamizi wa rasilimali za huduma "Wingu la kibinafsi la kweli" (hapa itajulikana kama VPC). Katika siku zijazo, tunapanga kuongeza usimamizi wa rasilimali kwa huduma zingine zinazotolewa na Selectel.

Kama unavyojua tayari, huduma ya VPC imejengwa kwenye OpenStack. Hata hivyo, kutokana na ukweli kwamba OpenStack haitoi zana asili za kuhudumia wingu la umma, tulitekeleza utendakazi unaokosekana katika seti ya API za ziada zinazorahisisha usimamizi wa vitu changamano na kufanya kazi iwe rahisi zaidi. Baadhi ya utendaji unaopatikana katika OpenStack umefungwa kutokana na matumizi ya moja kwa moja, lakini unapatikana kupitia API yetu.

Mtoa huduma wa Selectel Terraform sasa anajumuisha uwezo wa kudhibiti rasilimali zifuatazo za VPC:

  • miradi na upendeleo wao;
  • watumiaji, majukumu yao na ishara;
  • subnets za umma, ikiwa ni pamoja na kanda na VRRP;
  • leseni za programu.

Mtoa huduma hutumia maktaba yetu ya Go ya umma kufanya kazi na API ya VPC. Maktaba na mtoaji mwenyewe ni chanzo-wazi, maendeleo yao yanafanywa kwenye Github:

Ili kudhibiti rasilimali zingine za wingu, kama vile mashine pepe, diski, vikundi vya Kubernetes, unaweza kutumia mtoa huduma wa OpenStack Terraform. Nyaraka rasmi kwa watoa huduma wote wawili zinapatikana katika viungo vifuatavyo:

Anza

Ili kuanza, unahitaji kusakinisha Terraform (maelekezo na viungo vya vifurushi vya ufungaji vinaweza kupatikana tovuti rasmi).

Ili kufanya kazi, mtoaji anahitaji kitufe cha Selectel API, ambacho kimeundwa ndani paneli za kudhibiti akaunti.

Maonyesho ya kufanya kazi na Selectel huundwa kwa kutumia Terraform au kwa kutumia seti ya mifano iliyotengenezwa tayari ambayo inapatikana katika hazina yetu ya Github: terraform-mifano.

Hifadhi iliyo na mifano imegawanywa katika saraka mbili:

  • modules, iliyo na moduli ndogo zinazoweza kutumika tena ambazo huchukua seti ya vigezo kama pembejeo na kudhibiti seti ndogo ya rasilimali;
  • mifano, iliyo na mifano ya seti kamili ya moduli zilizounganishwa.

Baada ya kufunga Terraform, kuunda ufunguo wa API ya Selectel na kujitambulisha na mifano, hebu tuendelee kwenye mifano ya vitendo.

Mfano wa kuunda seva na diski ya ndani

Wacha tuangalie mfano wa kuunda mradi, mtumiaji aliye na jukumu na mashine ya kawaida na diski ya ndani: terraform-examples/examples/vpc/server_local_root_disk.

Katika faili vars.tf vigezo vyote ambavyo vitatumika wakati moduli za kupiga simu zinaelezewa. Baadhi yao wana maadili ya msingi, kwa mfano, seva itaundwa katika ukanda ru-3a na usanidi ufuatao:

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

Katika faili kuu.tf Mtoa huduma wa Selectel ameanzishwa:

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

Faili hii pia ina thamani chaguo-msingi ya kitufe cha SSH ambacho kitasakinishwa kwenye seva:

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

Ikiwa ni lazima, unaweza kutaja ufunguo tofauti wa umma. Ufunguo sio lazima ubainishwe kama njia ya faili; unaweza pia kuongeza thamani kama kamba.

Zaidi katika faili hii moduli zinazinduliwa mradi_na_mtumiaji ΠΈ diski_ya_mzizi_ya_seva, ambayo inasimamia rasilimali zinazohitajika.

Wacha tuangalie moduli hizi kwa undani zaidi.

Kuunda mradi na mtumiaji aliye na jukumu

Moduli ya kwanza huunda mradi na mtumiaji aliye na jukumu katika mradi huo: terraform-examples/modules/vpc/project_with_user.

Mtumiaji aliyeundwa ataweza kuingia kwenye OpenStack na kudhibiti rasilimali zake. Moduli ni rahisi na inasimamia vyombo vitatu tu:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Kuunda seva pepe na diski ya ndani

Moduli ya pili inahusika na kusimamia vitu vya OpenStack, ambavyo ni muhimu kuunda seva na diski ya ndani.

Unapaswa kuzingatia baadhi ya hoja ambazo zimeainishwa katika moduli hii kwa rasilimali openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

hoja kupuuza_mabadiliko hukuruhusu kupuuza mabadiliko ya sifa id kwa picha iliyotumika kuunda mashine pepe. Katika huduma ya VPC, picha nyingi za umma husasishwa kiotomatiki mara moja kwa wiki na wakati huo huo wao id pia mabadiliko. Hii ni kwa sababu ya upekee wa sehemu ya OpenStack - Glance, ambayo picha huchukuliwa kuwa vyombo visivyoweza kubadilika.

Ikiwa unaunda au kurekebisha seva iliyopo au diski ambayo ina hoja kitambulisho_cha_picha hutumiwa id picha ya umma, kisha baada ya picha hiyo kusasishwa, kuendesha faili ya maelezo ya Terraform tena kutaunda upya seva au diski. Kwa kutumia hoja kupuuza_mabadiliko inakuwezesha kuepuka hali hiyo.

Kumbuka: hoja kupuuza_mabadiliko ilionekana katika Terraform muda mrefu uliopita: vuta#2525.

hoja puuza_resize_uthibitisho inahitajika kubadilisha ukubwa wa diski ya ndani, cores, au kumbukumbu ya seva. Mabadiliko kama haya hufanywa kupitia sehemu ya OpenStack Nova kwa kutumia ombi resize. Nova chaguomsingi baada ya ombi resize huweka seva katika hali thibitisha_resize na inasubiri uthibitisho wa ziada kutoka kwa mtumiaji. Walakini, tabia hii inaweza kubadilishwa ili Nova isingojee vitendo vya ziada kutoka kwa mtumiaji.

Hoja iliyobainishwa inaruhusu Terraform kutosubiri hali thibitisha_resize kwa seva na uwe tayari kwa seva kuwa katika hali amilifu baada ya kubadilisha vigezo vyake. Hoja inapatikana kutoka toleo la 1.10.0 la mtoaji wa OpenStack Terraform: vuta#422.

Kutengeneza Rasilimali

Kabla ya kuendesha maonyesho, tafadhali kumbuka kuwa katika mfano wetu, watoa huduma wawili tofauti huzinduliwa, na mtoaji wa OpenStack hutegemea rasilimali za mtoaji wa Selectel, kwani bila kuunda mtumiaji katika mradi huo, haiwezekani kusimamia vitu vyake. . Kwa bahati mbaya, kwa sababu hiyo hiyo hatuwezi tu kuendesha amri terraform inatumika ndani ya mfano wetu. Tunahitaji kufanya kwanza tumia kwa moduli mradi_na_mtumiaji na baada ya hayo kwa kila kitu kingine.

Kumbuka: Suala hili bado halijatatuliwa katika Terraform, unaweza kufuata mjadala kwenye Github saa toleo #2430 ΠΈ toleo #4149.

Ili kuunda rasilimali, nenda kwenye saraka terraform-examples/examples/vpc/server_local_root_disk, yaliyomo yake yanapaswa kuwa kama hii:

$ ls
README.md	   main.tf		vars.tf

Tunaanzisha moduli kwa kutumia amri:

$ terraform init

Matokeo yanaonyesha kuwa Terraform inapakua matoleo ya hivi punde ya watoa huduma inaowatumia na kukagua moduli zote zilizoelezwa kwenye mfano.

Kwanza hebu tutumie moduli mradi_na_mtumiaji. Hii inahitaji kupitisha maadili kwa vigeu ambavyo havijawekwa:

  • akaunti_ya_uzazi na nambari yako ya akaunti ya Selectel;
  • ishara_ya_uzazi na ufunguo wako wa Selectel API;
  • nenosiri_la mtumiaji na nenosiri la mtumiaji wa OpenStack.

Thamani za vigezo viwili vya kwanza lazima zichukuliwe kutoka paneli za kudhibiti.

Kwa tofauti ya mwisho, unaweza kuja na nenosiri lolote.

Ili kutumia moduli unahitaji kubadilisha maadili SEL_ACCOUNT, SEL_TOKEN ΠΈ USER_PASSWORD kuendesha amri:

$ 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

Baada ya kutekeleza amri, Terraform itaonyesha ni rasilimali gani inataka kuunda na kuuliza uthibitisho:

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

Mara mradi, mtumiaji na jukumu vimeundwa, unaweza kuanza kuunda rasilimali zilizobaki:

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

Wakati wa kuunda rasilimali, makini na pato la Terraform na anwani ya IP ya nje ambapo seva iliyoundwa itapatikana:

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

Unaweza kufanya kazi na mashine iliyoundwa iliyoundwa kupitia SSH kwa kutumia IP maalum.

Rasilimali za Kuhariri

Mbali na kuunda rasilimali kupitia Terraform, zinaweza pia kubadilishwa.

Kwa mfano, wacha tuongeze idadi ya alama na kumbukumbu kwa seva yetu kwa kubadilisha maadili ya vigezo. seva_vcpus ΠΈ seva_ram_mb katika faili mifano/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

Baada ya hayo, tunaangalia ni mabadiliko gani ambayo yatasababisha kutumia amri ifuatayo:

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

Kama matokeo, Terraform ilifanya mabadiliko ya rasilimali openstack_compute_instance_v2 ΠΈ openstack_compute_flavor_v2.

Tafadhali kumbuka kuwa hii itajumuisha kuwasha tena mashine pepe iliyoundwa.

Ili kutumia usanidi mpya wa mashine pepe, tumia amri terraform inatumika, ambayo tayari tumezindua mapema.

Vitu vyote vilivyoundwa vitaonyeshwa ndani Paneli za kudhibiti VPC:

Mtoa huduma wa Terraform Selectel

Katika yetu mfano hazina Unaweza pia kuona maonyesho ya kuunda mashine pepe zilizo na viendeshi vya mtandao.

Mfano wa kuunda nguzo ya Kubernetes

Kabla ya kuendelea na mfano unaofuata, tutasafisha rasilimali tulizounda awali. Ili kufanya hivyo katika mzizi wa mradi terraform-examples/examples/vpc/server_local_root_disk Wacha tuendeshe amri ya kufuta vitu vya 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

Kisha endesha amri ya kufuta vitu vya 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

Katika visa vyote viwili, utahitaji kudhibiti ufutaji wa vitu vyote:

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

Mfano ufuatao uko kwenye saraka terraform-examples/examples/vpc/kubernetes_cluster.

Mfano huu huunda mradi, mtumiaji aliye na jukumu katika mradi, na huinua nguzo moja ya Kubernetes. Katika faili vars.tf unaweza kuona maadili chaguo-msingi, kama vile idadi ya nodi, sifa zao, toleo la Kubernetes, n.k.

Ili kuunda rasilimali sawa na mfano wa kwanza, kwanza kabisa tutaanza kuanzisha moduli na kuunda rasilimali za moduli mradi_na_mtumiajina kisha kuunda kila kitu kingine:

$ 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

Tutahamisha uundaji na usimamizi wa vikundi vya Kubernetes kupitia kipengee cha OpenStack Magnum. Unaweza kujua zaidi juu ya jinsi ya kufanya kazi na nguzo katika moja ya yetu makala zilizopitavile vile msingi wa maarifa.

Wakati wa kuandaa nguzo, disks na mashine za virtual zitaundwa na vipengele vyote muhimu vitawekwa. Maandalizi huchukua kama dakika 4, wakati ambapo Terraform itaonyesha ujumbe kama vile:

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

Mara tu usakinishaji utakapokamilika, Terraform itaonyesha kuwa nguzo iko tayari na itaonyesha kitambulisho chake:

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

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

Kudhibiti nguzo iliyoundwa ya Kubernetes kupitia matumizi kubectl unahitaji kupata faili ya ufikiaji wa nguzo. Ili kufanya hivyo, nenda kwa mradi iliyoundwa kupitia Terraform katika orodha ya miradi katika akaunti yako:

Mtoa huduma wa Terraform Selectel

Ifuatayo, fuata kiungo kama xxxxx.selvpc.ruambayo inaonekana chini ya jina la mradi:

Mtoa huduma wa Terraform Selectel

Kwa habari ya kuingia, tumia jina la mtumiaji na nenosiri ulilounda kupitia Terraform. Ikiwa haujadanganya vars.tf au kuu.tf kwa mfano wetu, mtumiaji atakuwa na jina tf_mtumiaji. Lazima utumie thamani ya kutofautisha kama nenosiri Nenosiri_la_mtumiaji TF_VAR, ambayo ilibainishwa wakati wa kuanza terraform inatumika mapema.

Ndani ya mradi unahitaji kwenda kwenye kichupo Mabernet:

Mtoa huduma wa Terraform Selectel

Hapa ndipo nguzo iliyoundwa kupitia Terraform iko. Pakua faili ya kubectl unaweza kwenye kichupo cha "Ufikiaji":

Mtoa huduma wa Terraform Selectel

Maagizo ya ufungaji iko kwenye kichupo sawa. kubectl na matumizi ya iliyopakuliwa config.yaml.

Baada ya uzinduzi kubectl na kuweka mabadiliko ya mazingira KUBECONFIG unaweza kutumia 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

Idadi ya nodi za nguzo zinaweza kubadilishwa kwa urahisi kupitia Terraform.
Katika faili kuu.tf thamani ifuatayo imebainishwa:

cluster_node_count = "${var.cluster_node_count}"

Thamani hii inabadilishwa kutoka vars.tf:

variable "cluster_node_count" {
default = 2
}

Unaweza kubadilisha ama thamani chaguo-msingi katika vars.tf, au bainisha thamani inayohitajika moja kwa moja ndani kuu.tf:

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

Ili kutumia mabadiliko, kama ilivyo kwa mfano wa kwanza, tumia amri terraform inatumika:

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

Wakati idadi ya nodi inabadilika, nguzo itabaki inapatikana. Baada ya kuongeza nodi kupitia Terraform, unaweza kuitumia bila usanidi wa ziada:

$ 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

Hitimisho

Katika makala hii tulifahamiana na njia kuu za kufanya kazi nazo "Wingu la kibinafsi la kweli" kupitia Terraform. Tutafurahi ikiwa unatumia mtoa huduma rasmi wa Selectel Terraform na kutoa maoni.

Hitilafu zozote zinazopatikana katika mtoaji wa Selectel Terraform zinaweza kuripotiwa kupitia Masuala ya Github.

Chanzo: mapenzi.com

Kuongeza maoni