Terraform մատակարար Selectel

Terraform մատակարար Selectel

Մենք գործարկել ենք Terraform-ի պաշտոնական մատակարարը՝ Selectel-ի հետ աշխատելու համար: Այս արտադրանքը թույլ է տալիս օգտատերերին ամբողջությամբ իրականացնել ռեսուրսների կառավարում Ենթակառուցվածք-որպես կոդ մեթոդոլոգիայի միջոցով:

Մատակարարը ներկայումս աջակցում է ծառայությունների ռեսուրսների կառավարմանը «Վիրտուալ մասնավոր ամպ» (այսուհետ՝ VPC): Ապագայում մենք նախատեսում ենք ավելացնել ռեսուրսների կառավարումը Selectel-ի կողմից մատուցվող այլ ծառայությունների համար:

Ինչպես արդեն գիտեք, VPC ծառայությունը կառուցված է OpenStack-ի վրա: Այնուամենայնիվ, հաշվի առնելով այն հանգամանքը, որ OpenStack-ը չի տրամադրում հանրային ամպի սպասարկման բնիկ գործիքներ, մենք ներդրեցինք բացակայող գործառույթը լրացուցիչ API-ների մի շարքում, որոնք հեշտացնում են բարդ կոմպոզիտային օբյեկտների կառավարումը և աշխատանքն ավելի հարմարավետ դարձնում: OpenStack-ում հասանելի որոշ գործառույթներ փակված են ուղղակի օգտագործման պատճառով, բայց հասանելի են միջոցով մեր API-ն.

Selectel Terraform մատակարարն այժմ ներառում է հետևյալ VPC ռեսուրսները կառավարելու հնարավորությունը.

  • նախագծերը և դրանց քվոտաները;
  • օգտվողները, նրանց դերերը և նշանները;
  • հանրային ենթացանցեր, ներառյալ միջտարածաշրջանային և VRRP;
  • ծրագրային ապահովման լիցենզիաներ.

Մատակարարն օգտագործում է մեր հանրային Go գրադարանը՝ VPC API-ի հետ աշխատելու համար: Ե՛վ գրադարանը, և՛ մատակարարն ինքնին բաց կոդ են, դրանց զարգացումն իրականացվում է Github-ում.

Այլ ամպային ռեսուրսները կառավարելու համար, ինչպիսիք են վիրտուալ մեքենաները, սկավառակները, Kubernetes կլաստերները, կարող եք օգտագործել OpenStack Terraform մատակարարը: Երկու մատակարարների պաշտոնական փաստաթղթերը հասանելի են հետևյալ հղումներով.

Ինչից սկսել

Սկսելու համար հարկավոր է տեղադրել Terraform-ը (տեղադրման փաթեթների ցուցումները և հղումները կարող եք գտնել այստեղ պաշտոնական կայքը).

Գործելու համար մատակարարին անհրաժեշտ է Selectel API բանալի, որը ստեղծվել է հաշվի կառավարման վահանակներ.

Selectel-ի հետ աշխատելու մանիֆեստները ստեղծվում են Terraform-ի միջոցով կամ օգտագործելով պատրաստի օրինակների մի շարք, որոնք հասանելի են մեր Github պահեստում. terraform-օրինակներ.

Օրինակներով պահեստը բաժանված է երկու գրացուցակի.

  • մոդուլներ, որը պարունակում է փոքր բազմակի օգտագործման մոդուլներ, որոնք ընդունում են մի շարք պարամետրեր որպես մուտքագրում և կառավարում են ռեսուրսների փոքր փաթեթը.
  • օրինակներ, որը պարունակում է փոխկապակցված մոդուլների ամբողջական փաթեթի օրինակներ:

Terraform-ը տեղադրելուց, Selectel API բանալի ստեղծելուց և օրինակներին ծանոթանալուց հետո անցնենք գործնական օրինակներին։

Տեղական սկավառակով սերվեր ստեղծելու օրինակ

Դիտարկենք նախագիծ, դեր ունեցող օգտատեր և տեղական սկավառակով վիրտուալ մեքենա ստեղծելու օրինակ. terraform-examples/examples/vpc/server_local_root_disk.

Ֆայլում vars.tf նկարագրված են բոլոր պարամետրերը, որոնք կօգտագործվեն մոդուլներ կանչելիս: Նրանցից ոմանք ունեն լռելյայն արժեքներ, օրինակ՝ սերվերը կստեղծվի գոտում ru-3a հետևյալ կոնֆիգուրացիայով.

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

Ֆայլում հիմնական.tf Selectel մատակարարը սկզբնավորվում է.

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

Այս ֆայլը պարունակում է նաև լռելյայն արժեքը SSH բանալիի համար, որը կտեղադրվի սերվերում.

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

Անհրաժեշտության դեպքում կարող եք նշել այլ հանրային բանալի: Բանալին պարտադիր չէ, որ նշվի որպես ֆայլի ուղի, կարող եք նաև արժեքը ավելացնել որպես տող:

Հետագայում այս ֆայլում մոդուլները գործարկվում են նախագիծ_օգտագործողի հետ и server_local_root_disk, որոնք տնօրինում են անհրաժեշտ ռեսուրսները։

Եկեք նայենք այս մոդուլներին ավելի մանրամասն:

Նախագծի և դերով օգտվողի ստեղծում

Առաջին մոդուլը ստեղծում է նախագիծ և օգտատեր, որն իր դերն ունի այդ նախագծում. terraform-examples/modules/vpc/project_with_user.

Ստեղծված օգտվողը կկարողանա մուտք գործել OpenStack և կառավարել իր ռեսուրսները: Մոդուլը պարզ է և կառավարում է միայն երեք միավոր.

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Վիրտուալ սերվերի ստեղծում տեղական սկավառակով

Երկրորդ մոդուլը վերաբերում է OpenStack օբյեկտների կառավարմանը, որոնք անհրաժեշտ են լոկալ սկավառակով սերվեր ստեղծելու համար։

Դուք պետք է ուշադրություն դարձնեք որոշ փաստարկների վրա, որոնք նշված են այս մոդուլում ռեսուրսի համար openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

փաստարկ անտեսել_փոփոխությունները թույլ է տալիս անտեսել հատկանիշի փոփոխությունները id վիրտուալ մեքենայի ստեղծման համար օգտագործվող պատկերի համար: VPC ծառայությունում հանրային պատկերների մեծ մասը ինքնաբերաբար թարմացվում է շաբաթը մեկ անգամ և միևնույն ժամանակ id նույնպես փոխվում է. Դա պայմանավորված է OpenStack բաղադրիչի՝ Glance-ի առանձնահատկություններով, որում պատկերները համարվում են անփոփոխ սուբյեկտներ։

Եթե ​​դուք ստեղծում կամ փոփոխում եք գոյություն ունեցող սերվեր կամ սկավառակ, որն ունի որպես փաստարկ image_id օգտագործվում է id հանրային պատկերը, այնուհետև այդ պատկերը թարմացնելուց հետո Terraform մանիֆեստը նորից գործարկելով՝ կվերստեղծվի սերվերը կամ սկավառակը: Օգտագործելով փաստարկ անտեսել_փոփոխությունները թույլ է տալիս խուսափել նման իրավիճակից:

Նշում. փաստարկ անտեսել_փոփոխությունները հայտնվել է Terraform-ում բավականին վաղուց. քաշեք # 2525.

փաստարկ ignore_resize_confirmation անհրաժեշտ է տեղական սկավառակի, միջուկների կամ սերվերի հիշողության չափը հաջողությամբ փոխելու համար: Նման փոփոխությունները կատարվում են OpenStack Nova բաղադրիչի միջոցով՝ օգտագործելով հարցումը չափափոխել. Լռելյայն Nova հարցումից հետո չափափոխել սերվերը դնում է կարգավիճակի verify_resize և սպասում է օգտագործողի կողմից լրացուցիչ հաստատմանը: Այնուամենայնիվ, այս վարքագիծը կարող է փոխվել, որպեսզի Nova-ն չսպասի օգտատիրոջ լրացուցիչ գործողությունների:

Նշված փաստարկը թույլ է տալիս Terraform-ին չսպասել կարգավիճակին verify_resize սերվերի համար և պատրաստ եղեք, որ սերվերը իր պարամետրերը փոխելուց հետո լինի ակտիվ կարգավիճակում: Փաստարկը հասանելի է OpenStack Terraform մատակարարի 1.10.0 տարբերակից. քաշեք # 422.

Ռեսուրսների ստեղծում

Նախքան մանիֆեստները գործարկելը, խնդրում ենք նկատի ունենալ, որ մեր օրինակում գործարկվում են երկու տարբեր մատակարարներ, և OpenStack մատակարարը կախված է Selectel մատակարարի ռեսուրսներից, քանի որ առանց նախագծում օգտվող ստեղծելու անհնար է կառավարել նրան պատկանող օբյեկտները։ . Ցավոք, նույն պատճառով մենք չենք կարող պարզապես գործարկել հրամանը terraform կիրառել մեր օրինակի ներսում: Մենք նախ պետք է անենք կիրառել մոդուլի համար նախագիծ_օգտագործողի հետ և դրանից հետո մնացած ամեն ինչի համար:

Նշում. Terraform-ում այս խնդիրը դեռ լուծված չէ, կարող եք հետևել Github-ի քննարկմանը թողարկում #2430 и թողարկում #4149.

Ռեսուրսներ ստեղծելու համար անցեք գրացուցակ terraform-examples/examples/vpc/server_local_root_disk, դրա բովանդակությունը պետք է լինի այսպիսին.

$ ls
README.md	   main.tf		vars.tf

Մենք նախաստորագրում ենք մոդուլները՝ օգտագործելով հրամանը.

$ terraform init

Արդյունքը ցույց է տալիս, որ Terraform-ը ներբեռնում է իր օգտագործած մատակարարների վերջին տարբերակները և ստուգում է օրինակում նկարագրված բոլոր մոդուլները:

Նախ կիրառենք մոդուլը նախագիծ_օգտագործողի հետ. Սա պահանջում է ձեռքով արժեքներ փոխանցել այն փոփոխականների համար, որոնք սահմանված չեն.

  • sel_account Ձեր Selectel հաշվի համարով;
  • sel_token Selectel API-ի ձեր բանալիով;
  • user_password OpenStack օգտվողի գաղտնաբառով:

Առաջին երկու փոփոխականների արժեքները պետք է վերցվեն կառավարման վահանակներ.

Վերջին փոփոխականի համար կարող եք գտնել ցանկացած գաղտնաբառ:

Մոդուլն օգտագործելու համար անհրաժեշտ է փոխարինել արժեքները SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD գործարկել հրամանը.

$ 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

Հրամանը գործարկելուց հետո Terraform-ը ցույց կտա, թե ինչ ռեսուրսներ է ուզում ստեղծել և հաստատում կխնդրի.

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

Երբ նախագիծը, օգտվողը և դերը ստեղծվեն, կարող եք սկսել մնացած ռեսուրսների ստեղծումը.

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

Ռեսուրսներ ստեղծելիս ուշադրություն դարձրեք Terraform ելքին արտաքին IP հասցեով, որտեղ ստեղծված սերվերը հասանելի կլինի.

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

Ստեղծված վիրտուալ մեքենայի հետ կարող եք աշխատել SSH-ի միջոցով՝ օգտագործելով նշված IP-ն:

Ռեսուրսների խմբագրում

Terraform-ի միջոցով ռեսուրսներ ստեղծելուց բացի, դրանք կարող են նաև փոփոխվել:

Օրինակ, եկեք մեծացնենք մեր սերվերի միջուկների և հիշողության քանակը՝ փոխելով պարամետրերի արժեքները server_vcpus и server_ram_mb ֆայլում օրինակներ/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

Դրանից հետո մենք ստուգում ենք, թե դա ինչ փոփոխություններ կհանգեցնի հետևյալ հրամանի օգտագործմանը.

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

Արդյունքում Terraform-ը ռեսուրսների փոփոխություն կատարեց openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Խնդրում ենք նկատի ունենալ, որ դա կհանգեցնի ստեղծված վիրտուալ մեքենայի վերագործարկմանը:

Նոր վիրտուալ մեքենայի կոնֆիգուրացիան կիրառելու համար օգտագործեք հրամանը terraform կիրառել, որը մենք արդեն գործարկել ենք ավելի վաղ։

Բոլոր ստեղծված օբյեկտները կցուցադրվեն VPC կառավարման վահանակներ:

Terraform մատակարար Selectel

Մեր օրինակ պահեստարաններ Կարող եք նաև տեսնել ցանցային կրիչներով վիրտուալ մեքենաներ ստեղծելու մանիֆեստներ:

Kubernetes կլաստերի ստեղծման օրինակ

Նախքան հաջորդ օրինակին անցնելը, մենք կմաքրենք ավելի վաղ ստեղծված ռեսուրսները: Դա անելու համար նախագծի արմատում terraform-examples/examples/vpc/server_local_root_disk Եկեք գործարկենք 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

Այնուհետև գործարկեք հրամանը՝ 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

Երկու դեպքում էլ ձեզ հարկավոր է հաստատել բոլոր օբյեկտների ջնջումը.

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

Հետևյալ օրինակը գրացուցակում է terraform-examples/examples/vpc/kubernetes_cluster.

Այս օրինակը ստեղծում է նախագիծ, նախագծում դեր ունեցող օգտվող և բարձրացնում է մեկ Kubernetes կլաստեր: Ֆայլում vars.tf դուք կարող եք տեսնել լռելյայն արժեքներ, ինչպիսիք են հանգույցների քանակը, դրանց բնութագրերը, Kubernetes տարբերակը և այլն:

Առաջին օրինակին նման ռեսուրսներ ստեղծելու համար նախ կսկսենք մոդուլների սկզբնավորումը և մոդուլային ռեսուրսների ստեղծումը նախագիծ_օգտագործողի հետև հետո ստեղծել մնացած ամեն ինչ.

$ 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

Մենք կտեղափոխենք Kubernetes կլաստերների ստեղծումն ու կառավարումը OpenStack Magnum բաղադրիչի միջոցով: Կլաստերի հետ աշխատելու մասին ավելին կարող եք իմանալ մեր կայքերից մեկում նախորդ հոդվածներըինչպես նաեւ գիտելիքների բազա.

Կլաստերը պատրաստելիս կստեղծվեն սկավառակներ և վիրտուալ մեքենաներ և կտեղադրվեն բոլոր անհրաժեշտ բաղադրիչները։ Նախապատրաստումը տևում է մոտ 4 րոպե, որի ընթացքում Terraform-ը կցուցադրի այնպիսի հաղորդագրություններ, ինչպիսիք են.

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

Տեղադրումն ավարտվելուց հետո Terraform-ը ցույց կտա, որ կլաստերը պատրաստ է և կցուցադրի իր 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.

Ստեղծված Kubernetes կլաստերը կոմունալ ծրագրի միջոցով կառավարելու համար կուբեկտլ դուք պետք է ստանաք կլաստերի մուտքի ֆայլը: Դա անելու համար անցեք Terraform-ի միջոցով ստեղծված նախագիծ ձեր հաշվում գտնվող նախագծերի ցանկում.

Terraform մատակարար Selectel

Հաջորդը, հետևեք հղմանը, ինչպես xxxxxx.selvpc.ruորը հայտնվում է նախագծի անվան տակ.

Terraform մատակարար Selectel

Մուտք գործելու տեղեկությունների համար օգտագործեք օգտվողի անունը և գաղտնաբառը, որոնք ստեղծել եք Terraform-ի միջոցով: Եթե ​​դուք չեք խաբել vars.tf կամ հիմնական.tf մեր օրինակի համար օգտագործողը կունենա անունը tf_user. Որպես գաղտնաբառ պետք է օգտագործեք փոփոխականի արժեքը TF_VAR_user_password, որը նշվել է գործարկման ժամանակ terraform կիրառել ավելի վաղ:

Նախագծի ներսում դուք պետք է գնաք ներդիր Կուբերնետես:

Terraform մատակարար Selectel

Այստեղ է գտնվում Terraform-ի միջոցով ստեղծված կլաստերը: Ներբեռնեք ֆայլը կուբեկտլ «Մուտք» ներդիրում կարող եք.

Terraform մատակարար Selectel

Տեղադրման հրահանգները գտնվում են նույն ներդիրում: կուբեկտլ և ներբեռնվածի օգտագործումը config.yaml.

Գործարկումից հետո կուբեկտլ և սահմանելով շրջակա միջավայրի փոփոխականը KUBECONFIG Դուք կարող եք օգտագործել 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

Կլաստերային հանգույցների թիվը հեշտությամբ կարելի է փոխել Terraform-ի միջոցով:
Ֆայլում հիմնական.tf նշված է հետևյալ արժեքը.

cluster_node_count = "${var.cluster_node_count}"

Այս արժեքը փոխարինվում է vars.tf:

variable "cluster_node_count" {
default = 2
}

Դուք կարող եք փոխել կամ լռելյայն արժեքը vars.tf, կամ ուղղակիորեն նշեք պահանջվող արժեքը հիմնական.tf:

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

Փոփոխությունները կիրառելու համար, ինչպես առաջին օրինակի դեպքում, օգտագործեք հրամանը terraform կիրառել:

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

Երբ հանգույցների թիվը փոխվի, կլաստերը հասանելի կմնա: Terraform-ի միջոցով հանգույց ավելացնելուց հետո այն կարող եք օգտագործել առանց լրացուցիչ կազմաձևման.

$ 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

Ամփոփում

Այս հոդվածում մենք ծանոթացանք աշխատանքի հիմնական ուղիներին «Վիրտուալ մասնավոր ամպ» Terraform-ի միջոցով: Մենք ուրախ կլինենք, եթե օգտվեք Selectel Terraform-ի պաշտոնական մատակարարից և տրամադրեք հետադարձ կապ:

Selectel Terraform պրովայդերում հայտնաբերված ցանկացած սխալ կարող է հաղորդվել միջոցով Github-ի խնդիրներ.

Source: www.habr.com

Добавить комментарий