Selectel компаниясымен жұмыс істеу үшін біз ресми Terraform провайдерін іске қостық. Бұл өнім пайдаланушыларға «Инфраструктура-код» әдіснамасы арқылы ресурстарды басқаруды толығымен жүзеге асыруға мүмкіндік береді.
Қазіргі уақытта провайдер қызмет ресурстарын басқаруды қолдайды «Виртуалды жеке бұлт» (бұдан әрі - VPC). Болашақта біз Selectel ұсынатын басқа қызметтер үшін ресурстарды басқаруды қосуды жоспарлап отырмыз.
Өздеріңіз білетіндей, VPC қызметі OpenStack-те құрылған. Дегенмен, OpenStack жалпы бұлтқа қызмет көрсетуге арналған жергілікті құралдарды қамтамасыз етпейтіндіктен, біз күрделі композиттік нысандарды басқаруды жеңілдететін және жұмысты ыңғайлы ететін қосымша API жиынтығында жетіспейтін функционалдылықты енгіздік. OpenStack-те қол жетімді кейбір функциялар тікелей пайдаланудан жабылған, бірақ олар арқылы қол жетімді біздің API.
Selectel Terraform провайдері енді келесі VPC ресурстарын басқару мүмкіндігін қамтиды:
жобалар және олардың квоталары;
пайдаланушылар, олардың рөлдері мен белгілері;
жалпыға ортақ ішкі желілер, соның ішінде аймақаралық және VRRP;
бағдарламалық қамтамасыз ету лицензиялары.
Провайдер VPC API интерфейсімен жұмыс істеу үшін жалпы Go кітапханасын пайдаланады. Кітапхана да, провайдердің өзі де ашық бастапқы болып табылады, олардың дамуы Github-да жүзеге асырылады:
Виртуалды машиналар, дискілер, Kubernetes кластерлері сияқты басқа бұлттық ресурстарды басқару үшін OpenStack Terraform провайдерін пайдалануға болады. Екі провайдер үшін де ресми құжаттама келесі сілтемелерде қолжетімді:
Selectel бағдарламасымен жұмыс істеуге арналған манифесттер Terraform көмегімен немесе Github репозиторийінде қол жетімді дайын мысалдар жиынтығын пайдалану арқылы жасалады: терраформ-мысалдар.
Мысалдар бар репозиторий екі каталогқа бөлінген:
модульдер, кіріс ретінде параметрлер жинағын қабылдайтын және ресурстардың шағын жиынтығын басқаратын шағын қайта пайдалануға болатын модульдерді қамтитын;
мысалдар, өзара байланысты модульдердің толық жиынтығының мысалдарын қамтитын.
Terraform орнатқаннан кейін, Selectel API кілтін жасап, мысалдармен танысқаннан кейін практикалық мысалдарға көшейік.
Файлда vars.tf модульдерді шақыру кезінде қолданылатын барлық параметрлер сипатталған. Олардың кейбіреулерінде әдепкі мәндер бар, мысалы, сервер аймақта жасалады ru-3a келесі конфигурациямен:
дәлел өзгерістерді_елемеу атрибут өзгерістерін елемеуге мүмкіндік береді id виртуалды машинаны жасау үшін пайдаланылатын кескін үшін. VPC қызметінде көпшілікке арналған кескіндердің көпшілігі аптасына бір рет автоматты түрде жаңартылады және сонымен бірге олардың id да өзгереді. Бұл OpenStack компонентінің ерекшеліктеріне байланысты - Glance, онда кескіндер өзгермейтін нысандар болып саналады.
Аргумент ретінде бар серверді немесе дискіні жасап немесе өзгертіп жатсаңыз image_id пайдаланылады id жалпыға ортақ кескін, содан кейін сол кескін жаңартылғаннан кейін Terraform манифестін іске қосу серверді немесе дискіні қайта жасайды. Аргумент қолдану өзгерістерді_елемеу мұндай жағдайдан аулақ болуға мүмкіндік береді.
Ескерту: аргумент өзгерістерді_елемеу Терраформда көп уақыт бұрын пайда болды: №2525 тартыңыз.
дәлел елемеу_өлшемді_растау жергілікті дискінің, ядролардың немесе сервер жадысының өлшемін сәтті өзгерту үшін қажет. Мұндай өзгертулер OpenStack Nova компоненті арқылы сұрау арқылы жасалады өлшемін өзгерту. Сұраудан кейін әдепкі Nova өлшемін өзгерту серверді күйге қояды өлшемін_өлшеу және пайдаланушыдан қосымша растауды күтеді. Дегенмен, бұл әрекетті Nova пайдаланушыдан қосымша әрекеттерді күтпеу үшін өзгертуге болады.
Көрсетілген аргумент Terraform-қа күйді күтпеуге мүмкіндік береді өлшемін_өлшеу сервер үшін және оның параметрлерін өзгерткеннен кейін сервер белсенді күйде болуы үшін дайын болыңыз. Аргумент 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 файлда мысалдар/vpc/server_local_root_disk/main.tf:
Екі жағдайда да барлық нысандардың жойылуын растау қажет:
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 кластердің дайын екенін көрсетеді және оның идентификаторын көрсетеді:
Құрылған Kubernetes кластерін қызметтік бағдарлама арқылы басқару үшін кубектл кластерге кіру файлын алу керек. Ол үшін тіркелгіңіздегі жобалар тізімінде Terraform арқылы жасалған жобаға өтіңіз:
Әрі қарай лайкты басып өтіңіз xxxxxx.selvpc.ruол жоба атауының астында пайда болады:
Жүйеге кіру ақпараты үшін Terraform арқылы жасалған пайдаланушы аты мен құпия сөзді пайдаланыңыз. Егер сіз алдамаған болсаңыз vars.tf немесе main.tf біздің мысал үшін пайдаланушының аты болады tf_user. Құпия сөз ретінде айнымалының мәнін пайдалану керек TF_VAR_user_password, ол іске қосу кезінде көрсетілген терраформа қолданылады ертерек.
Жобаның ішінде сіз қойындыға өтуіңіз керек Kubernetes:
Бұл жерде 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 мәселелері.