Մենք գործարկել ենք Terraform-ի պաշտոնական մատակարարը՝ Selectel-ի հետ աշխատելու համար: Այս արտադրանքը թույլ է տալիս օգտատերերին ամբողջությամբ իրականացնել ռեսուրսների կառավարում Ենթակառուցվածք-որպես կոդ մեթոդոլոգիայի միջոցով:
Մատակարարը ներկայումս աջակցում է ծառայությունների ռեսուրսների կառավարմանը «Վիրտուալ մասնավոր ամպ» (այսուհետ՝ VPC): Ապագայում մենք նախատեսում ենք ավելացնել ռեսուրսների կառավարումը Selectel-ի կողմից մատուցվող այլ ծառայությունների համար:
Ինչպես արդեն գիտեք, VPC ծառայությունը կառուցված է OpenStack-ի վրա: Այնուամենայնիվ, հաշվի առնելով այն հանգամանքը, որ OpenStack-ը չի տրամադրում հանրային ամպի սպասարկման բնիկ գործիքներ, մենք ներդրեցինք բացակայող գործառույթը լրացուցիչ API-ների մի շարքում, որոնք հեշտացնում են բարդ կոմպոզիտային օբյեկտների կառավարումը և աշխատանքն ավելի հարմարավետ դարձնում: OpenStack-ում հասանելի որոշ գործառույթներ փակված են ուղղակի օգտագործման պատճառով, բայց հասանելի են միջոցով մեր API-ն.
Selectel Terraform մատակարարն այժմ ներառում է հետևյալ VPC ռեսուրսները կառավարելու հնարավորությունը.
նախագծերը և դրանց քվոտաները;
օգտվողները, նրանց դերերը և նշանները;
հանրային ենթացանցեր, ներառյալ միջտարածաշրջանային և VRRP;
ծրագրային ապահովման լիցենզիաներ.
Մատակարարն օգտագործում է մեր հանրային Go գրադարանը՝ VPC API-ի հետ աշխատելու համար: Ե՛վ գրադարանը, և՛ մատակարարն ինքնին բաց կոդ են, դրանց զարգացումն իրականացվում է Github-ում.
Այլ ամպային ռեսուրսները կառավարելու համար, ինչպիսիք են վիրտուալ մեքենաները, սկավառակները, Kubernetes կլաստերները, կարող եք օգտագործել OpenStack Terraform մատակարարը: Երկու մատակարարների պաշտոնական փաստաթղթերը հասանելի են հետևյալ հղումներով.
Selectel-ի հետ աշխատելու մանիֆեստները ստեղծվում են Terraform-ի միջոցով կամ օգտագործելով պատրաստի օրինակների մի շարք, որոնք հասանելի են մեր Github պահեստում. terraform-օրինակներ.
Օրինակներով պահեստը բաժանված է երկու գրացուցակի.
մոդուլներ, որը պարունակում է փոքր բազմակի օգտագործման մոդուլներ, որոնք ընդունում են մի շարք պարամետրեր որպես մուտքագրում և կառավարում են ռեսուրսների փոքր փաթեթը.
օրինակներ, որը պարունակում է փոխկապակցված մոդուլների ամբողջական փաթեթի օրինակներ:
Terraform-ը տեղադրելուց, Selectel API բանալի ստեղծելուց և օրինակներին ծանոթանալուց հետո անցնենք գործնական օրինակներին։
Ֆայլում vars.tf նկարագրված են բոլոր պարամետրերը, որոնք կօգտագործվեն մոդուլներ կանչելիս: Նրանցից ոմանք ունեն լռելյայն արժեքներ, օրինակ՝ սերվերը կստեղծվի գոտում ru-3a հետևյալ կոնֆիգուրացիայով.
փաստարկ անտեսել_փոփոխությունները թույլ է տալիս անտեսել հատկանիշի փոփոխությունները 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 init
Արդյունքը ցույց է տալիս, որ Terraform-ը ներբեռնում է իր օգտագործած մատակարարների վերջին տարբերակները և ստուգում է օրինակում նկարագրված բոլոր մոդուլները:
Նախ կիրառենք մոդուլը նախագիծ_օգտագործողի հետ. Սա պահանջում է ձեռքով արժեքներ փոխանցել այն փոփոխականների համար, որոնք սահմանված չեն.
Հրամանը գործարկելուց հետո 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
Երբ նախագիծը, օգտվողը և դերը ստեղծվեն, կարող եք սկսել մնացած ռեսուրսների ստեղծումը.
Ստեղծված վիրտուալ մեքենայի հետ կարող եք աշխատել SSH-ի միջոցով՝ օգտագործելով նշված IP-ն:
Ռեսուրսների խմբագրում
Terraform-ի միջոցով ռեսուրսներ ստեղծելուց բացի, դրանք կարող են նաև փոփոխվել:
Օրինակ, եկեք մեծացնենք մեր սերվերի միջուկների և հիշողության քանակը՝ փոխելով պարամետրերի արժեքները server_vcpus и server_ram_mb ֆայլում օրինակներ/vpc/server_local_root_disk/main.tf:
Մեր օրինակ պահեստարաններ Կարող եք նաև տեսնել ցանցային կրիչներով վիրտուալ մեքենաներ ստեղծելու մանիֆեստներ:
Kubernetes կլաստերի ստեղծման օրինակ
Նախքան հաջորդ օրինակին անցնելը, մենք կմաքրենք ավելի վաղ ստեղծված ռեսուրսները: Դա անելու համար նախագծի արմատում terraform-examples/examples/vpc/server_local_root_disk Եկեք գործարկենք OpenStack օբյեկտները ջնջելու հրամանը.
Երկու դեպքում էլ ձեզ հարկավոր է հաստատել բոլոր օբյեկտների ջնջումը.
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
Այս օրինակը ստեղծում է նախագիծ, նախագծում դեր ունեցող օգտվող և բարձրացնում է մեկ Kubernetes կլաստեր: Ֆայլում vars.tf դուք կարող եք տեսնել լռելյայն արժեքներ, ինչպիսիք են հանգույցների քանակը, դրանց բնութագրերը, Kubernetes տարբերակը և այլն:
Առաջին օրինակին նման ռեսուրսներ ստեղծելու համար նախ կսկսենք մոդուլների սկզբնավորումը և մոդուլային ռեսուրսների ստեղծումը նախագիծ_օգտագործողի հետև հետո ստեղծել մնացած ամեն ինչ.
Մենք կտեղափոխենք Kubernetes կլաստերների ստեղծումն ու կառավարումը OpenStack Magnum բաղադրիչի միջոցով: Կլաստերի հետ աշխատելու մասին ավելին կարող եք իմանալ մեր կայքերից մեկում նախորդ հոդվածներըինչպես նաեւ գիտելիքների բազա.
Կլաստերը պատրաստելիս կստեղծվեն սկավառակներ և վիրտուալ մեքենաներ և կտեղադրվեն բոլոր անհրաժեշտ բաղադրիչները։ Նախապատրաստումը տևում է մոտ 4 րոպե, որի ընթացքում Terraform-ը կցուցադրի այնպիսի հաղորդագրություններ, ինչպիսիք են.
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Տեղադրումն ավարտվելուց հետո Terraform-ը ցույց կտա, որ կլաստերը պատրաստ է և կցուցադրի իր ID-ն.
Ստեղծված Kubernetes կլաստերը կոմունալ ծրագրի միջոցով կառավարելու համար կուբեկտլ դուք պետք է ստանաք կլաստերի մուտքի ֆայլը: Դա անելու համար անցեք Terraform-ի միջոցով ստեղծված նախագիծ ձեր հաշվում գտնվող նախագծերի ցանկում.
Հաջորդը, հետևեք հղմանը, ինչպես xxxxxx.selvpc.ruորը հայտնվում է նախագծի անվան տակ.
Մուտք գործելու տեղեկությունների համար օգտագործեք օգտվողի անունը և գաղտնաբառը, որոնք ստեղծել եք Terraform-ի միջոցով: Եթե դուք չեք խաբել vars.tf կամ հիմնական.tf մեր օրինակի համար օգտագործողը կունենա անունը tf_user. Որպես գաղտնաբառ պետք է օգտագործեք փոփոխականի արժեքը TF_VAR_user_password, որը նշվել է գործարկման ժամանակ terraform կիրառել ավելի վաղ:
Նախագծի ներսում դուք պետք է գնաք ներդիր Կուբերնետես:
Այստեղ է գտնվում Terraform-ի միջոցով ստեղծված կլաստերը: Ներբեռնեք ֆայլը կուբեկտլ «Մուտք» ներդիրում կարող եք.
Տեղադրման հրահանգները գտնվում են նույն ներդիրում: կուբեկտլ և ներբեռնվածի օգտագործումը config.yaml.
Գործարկումից հետո կուբեկտլ և սահմանելով շրջակա միջավայրի փոփոխականը KUBECONFIG Դուք կարող եք օգտագործել Kubernetes:
Երբ հանգույցների թիվը փոխվի, կլաստերը հասանելի կմնա: 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-ի խնդիրներ.