Selectel менен иштөө үчүн расмий Terraform провайдерин ишке киргиздик. Бул продукт колдонуучуларга инфраструктура катары код методологиясы аркылуу ресурстарды башкарууну толук ишке ашырууга мүмкүндүк берет.
Провайдер учурда кызмат ресурстарын башкарууну колдойт "Виртуалдык жеке булут" (мындан ары VPC деп аталат). Келечекте биз Selectel тарабынан сунушталган башка кызматтар үчүн ресурстарды башкарууну кошууну пландап жатабыз.
Белгилүү болгондой, VPC кызматы OpenStackте курулган. Бирок, OpenStack коомдук булутту тейлөө үчүн жергиликтүү инструменттер менен камсыз кылбагандыктан, биз татаал композиттик объекттерди башкарууну жөнөкөйлөткөн жана ишти ыңгайлуураак кылган кошумча API топтомунда жетишпеген функцияларды ишке ашырдык. OpenStack'те жеткиликтүү функциялардын айрымдары түздөн-түз колдонуудан жабылган, бирок алар аркылуу жеткиликтүү биздин API.
Selectel Terraform камсыздоочу азыр төмөнкү VPC ресурстарын башкаруу мүмкүнчүлүгүн камтыйт:
долбоорлор жана алардын квоталары;
колдонуучулар, алардын ролдору жана белгилери;
коомдук ички тармактар, анын ичинде аймактар аралык жана VRRP;
программалык камсыздоо лицензиялары.
Провайдер VPC API менен иштөө үчүн коомдук Go китепканабызды колдонот. Китепкана да, провайдердин өзү да ачык булак, аларды иштеп чыгуу Githubда ишке ашырылат:
Виртуалдык машиналар, дисктер, Kubernetes кластерлери сыяктуу башка булут ресурстарын башкаруу үчүн OpenStack Terraform провайдерин колдоно аласыз. Эки провайдерлердин расмий документтери төмөнкү шилтемелер боюнча жеткиликтүү:
Баштоо үчүн, сиз Terraformду орнотушуңуз керек (инструкцияларды жана орнотуу пакеттерине шилтемелерди даректен тапсаңыз болот расмий сайты).
Иштөө үчүн, провайдер XNUMX-жылы түзүлгөн Selectel API ачкычын талап кылат эсеп башкаруу панелдери.
Selectel менен иштөө үчүн манифесттер Terraform аркылуу же биздин Github репозиторийинде жеткиликтүү болгон даяр мисалдардын топтомун колдонуу менен түзүлөт: terraform-мисалдар.
Мисалдар менен репозиторий эки каталогго бөлүнөт:
модулдар, киргизүү катары параметрлердин топтомун кабыл алган жана ресурстардын кичинекей топтомун башкарган чакан кайталануучу модулдарды камтыган;
мисалдар, өз ара байланышкан модулдардын толук топтомунун мисалдарын камтыган.
Terraform орнотуп, Selectel API ачкычын түзүп, мисалдар менен таанышкандан кийин, практикалык мисалдарга өтөбүз.
Файлда vars.tf модулдарды чакырганда колдонула турган бардык параметрлер сүрөттөлгөн. Алардын айрымдарынын демейки маанилери бар, мисалы, зонада сервер түзүлөт ру-3а төмөнкү конфигурация менен:
Аргумент өзгөртүүлөр_эгер атрибуттарды өзгөртүүгө көңүл бурбай коюуга мүмкүндүк берет id виртуалдык машинаны түзүү үчүн колдонулган сүрөт үчүн. VPC кызматында көпчүлүк коомдук сүрөттөр жумасына бир жолу автоматтык түрдө жаңыртылып турат жана ошол эле учурда алардын id да өзгөрөт. Бул OpenStack компонентинин өзгөчөлүктөрү менен шартталган - Glance, мында сүрөттөр өзгөрүлгүс объекттер болуп эсептелет.
Эгерде сиз аргумент катары бар серверди же дискти түзүп же өзгөртүп жатсаңыз image_id колдонулган id коомдук сүрөт, андан кийин ал сүрөт жаңыртылгандан кийин, Terraform манифестин кайра иштетүү серверди же дискти кайра жаратат. Аргумент колдонуу өзгөртүүлөр_эгер мындай абалдан кутулууга мумкундук берет.
Эскертүү: аргумент өзгөртүүлөр_эгер бир топ убакыт мурун Terraform пайда болгон: тарт #2525.
Аргумент тастыктоону_өлчөмүн_өзгөртүү жергиликтүү дисктин, өзөктөрдүн же сервер эстутумунун өлчөмүн ийгиликтүү өзгөртүү үчүн керек. Мындай өзгөртүүлөр өтүнүчтү колдонуу менен OpenStack Nova компоненти аркылуу жүргүзүлөт өлчөмдү. Сурамдан кийин демейки Nova өлчөмдү серверди статуска коет текшерүү_өлчөмү жана колдонуучудан кошумча ырастоону күтөт. Бирок, бул жүрүм-турумду Nova колдонуучудан кошумча аракеттерди күтпөшү үчүн өзгөртсө болот.
Көрсөтүлгөн аргумент Терраформга статусту күтпөөгө мүмкүндүк берет текшерүү_өлчөмү сервер үчүн жана анын параметрлерин өзгөрткөндөн кийин сервер активдүү абалда болушуна даяр болуңуз. Аргумент OpenStack Terraform провайдеринин 1.10.0 версиясынан жеткиликтүү: тарт #422.
Ресурстарды түзүү
Манифесттерди иштетүүдөн мурун, биздин мисалда эки башка провайдер ишке киргизилгендигин жана OpenStack провайдери Selectel провайдеринин ресурстарына көз каранды экендигин эске алыңыз, анткени долбоордо колдонуучуну түзмөйүнчө, ага тиешелүү объекттерди башкаруу мүмкүн эмес. . Тилекке каршы, ошол эле себептен биз жөн эле буйрукту иштете албайбыз терраформа колдонулат биздин мисалда. Биз биринчи кылышыбыз керек колдонулат модулу үчүн долбоор_колдонуучу менен жана андан кийин бардык башка нерселер үчүн.
Эскертүү: Терраформда бул маселе чечиле элек, сиз Github боюнча талкууну ээрчисеңиз болот чыгарылыш №2430 и чыгарылыш №4149.
Буйрукту аткаргандан кийин, 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
Долбоор, колдонуучу жана ролу түзүлгөндөн кийин, сиз калган ресурстарды түзө баштасаңыз болот:
Сиз көрсөтүлгөн IP аркылуу SSH аркылуу түзүлгөн виртуалдык машина менен иштей аласыз.
Редакциялоо булактары
Terraform аркылуу ресурстарды түзүүдөн тышкары, алар да өзгөртүлүшү мүмкүн.
Мисалы, параметрлердин маанилерин өзгөртүү менен серверибиз үчүн өзөктөрдүн жана эс тутумдун санын көбөйтөлү server_vcpus и server_ram_mb файлда examples/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 кластерин утилита аркылуу башкаруу kubectl кластерге кирүү файлын алышыңыз керек. Бул үчүн, аккаунтуңуздагы долбоорлордун тизмесинде Terraform аркылуу түзүлгөн долбоорго өтүңүз:
Кийинки, лайк шилтемеге өтүңүз xxxxxx.selvpc.ruал долбоордун аталышынын астында пайда болот:
Кирүү маалыматы үчүн, Terraform аркылуу түзүлгөн колдонуучу атын жана паролду колдонуңуз. Эгер сиз алдабасаңыз vars.tf же main.tf биздин мисал үчүн, колдонуучунун аты болот tf_user. Сырсөз катары өзгөрмөнүн маанисин колдонушуңуз керек TF_VAR_user_password, бул ишке киргизүүдө көрсөтүлгөн терраформа колдонулат Буга чейин.
Долбоордун ичинде сиз өтмөккө өтүшүңүз керек Kubernetes:
Бул жерде Terraform аркылуу түзүлгөн кластер жайгашкан. үчүн файлды жүктөп алуу kubectl сиз "Кирүү" өтмөгүнөн:
Орнотуу көрсөтмөлөрү ошол эле өтмөктө жайгашкан. kubectl жана жүктөлгөн колдонуу config.yaml.
Ишке киргизилгенден кийин kubectl жана чөйрө өзгөрмөсүн орнотуу 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 маселелери.