Biz Selectel bilan ishlash uchun rasmiy Terraform provayderini ishga tushirdik. Ushbu mahsulot foydalanuvchilarga Infrastruktura-kod metodologiyasi orqali resurslarni boshqarishni to'liq amalga oshirish imkonini beradi.
Provayder hozirda xizmat resurslarini boshqarishni qo'llab-quvvatlaydi "Virtual shaxsiy bulut" (keyingi o'rinlarda VPC deb yuritiladi). Kelajakda biz Selectel tomonidan taqdim etiladigan boshqa xizmatlar uchun resurslarni boshqarishni qo'shishni rejalashtirmoqdamiz.
Ma'lumki, VPC xizmati OpenStack-da qurilgan. Biroq, OpenStack umumiy bulutga xizmat ko'rsatish uchun mahalliy vositalarni taqdim etmaganligi sababli, biz murakkab kompozit ob'ektlarni boshqarishni soddalashtiradigan va ishni yanada qulayroq qiladigan qo'shimcha API to'plamida etishmayotgan funksiyalarni amalga oshirdik. OpenStack-da mavjud bo'lgan ba'zi funksiyalar to'g'ridan-to'g'ri foydalanishdan yopilgan, ammo ular orqali mavjud bizning API.
Selectel Terraform provayderi endi quyidagi VPC resurslarini boshqarish imkoniyatini o'z ichiga oladi:
loyihalar va ularning kvotalari;
foydalanuvchilar, ularning rollari va tokenlari;
umumiy quyi tarmoqlar, shu jumladan mintaqalararo va VRRP;
dasturiy ta'minot litsenziyalari.
Provayder VPC API bilan ishlash uchun ommaviy Go kutubxonamizdan foydalanadi. Kutubxona ham, provayderning o'zi ham ochiq manba bo'lib, ularning rivojlanishi Github-da amalga oshiriladi:
Virtual mashinalar, disklar, Kubernetes klasterlari kabi boshqa bulut resurslarini boshqarish uchun siz OpenStack Terraform provayderidan foydalanishingiz mumkin. Ikkala provayder uchun rasmiy hujjatlar quyidagi havolalarda mavjud:
Selectel bilan ishlash uchun manifestlar Terraform yordamida yoki Github omborimizda mavjud bo'lgan tayyor misollar to'plami yordamida yaratiladi: terraform-misollar.
Misollar bilan ombor ikkita katalogga bo'lingan:
modullar, parametrlar to'plamini kirish sifatida qabul qiladigan va kichik resurslar to'plamini boshqaradigan kichik qayta foydalanish mumkin bo'lgan modullarni o'z ichiga oladi;
misollar, o'zaro bog'langan modullarning to'liq to'plamining misollarini o'z ichiga oladi.
Terraformni o'rnatgandan so'ng, Selectel API kalitini yaratib, misollar bilan tanishib chiqqach, amaliy misollarga o'tamiz.
Fayl ichida vars.tf modullarni chaqirishda foydalaniladigan barcha parametrlar tasvirlangan. Ulardan ba'zilari standart qiymatlarga ega, masalan, server zonada yaratiladi ru-3a quyidagi konfiguratsiya bilan:
Agar kerak bo'lsa, siz boshqa ochiq kalitni belgilashingiz mumkin. Kalit fayl yo'li sifatida ko'rsatilishi shart emas; siz qiymatni satr sifatida ham qo'shishingiz mumkin.
Keyinchalik ushbu faylda modullar ishga tushiriladi loyiha_foydalanuvchi bilan и server_local_root_disk, zarur resurslarni boshqaradigan.
Keling, ushbu modullarni batafsil ko'rib chiqaylik.
dalil o'zgarishlarni hisobga olmang atribut o'zgarishlarini e'tiborsiz qoldirish imkonini beradi id virtual mashinani yaratish uchun ishlatiladigan tasvir uchun. VPC xizmatida ko'pchilik ommaviy tasvirlar haftada bir marta va shu bilan birga avtomatik ravishda yangilanadi id ham o'zgaradi. Bu OpenStack komponentining o'ziga xos xususiyatlari bilan bog'liq - Glance, unda tasvirlar o'zgarmas ob'ektlar hisoblanadi.
Agar siz argument sifatida mavjud server yoki diskni yaratayotgan yoki o'zgartirayotgan bo'lsangiz image_id ishlatiladi id Ommaviy tasvir, keyin ushbu tasvir yangilangandan so'ng, Terraform manifestini qayta ishga tushirish server yoki diskni qayta yaratadi. Argumentdan foydalanish o'zgarishlarni hisobga olmang bunday vaziyatdan qochish imkonini beradi.
Eslatma: argument o'zgarishlarni hisobga olmang Terraformda juda uzoq vaqt oldin paydo bo'lgan: torting # 2525.
dalil o'lchamini_tasdiqlashni e'tiborsiz qoldiring mahalliy disk, yadrolar yoki server xotirasi hajmini muvaffaqiyatli o'zgartirish uchun kerak. Bunday o'zgarishlar OpenStack Nova komponenti orqali so'rov yordamida amalga oshiriladi o'lchamlarini. So'rovdan keyin standart Nova o'lchamlarini serverni holatga keltiradi verify_resize va foydalanuvchidan qo'shimcha tasdiqlashni kutadi. Biroq, bu xatti-harakat Nova foydalanuvchidan qo'shimcha harakatlarni kutmasligi uchun o'zgartirilishi mumkin.
Belgilangan argument Terraformga holatni kutmaslikka imkon beradi verify_resize server uchun va uning parametrlarini o'zgartirgandan so'ng server faol holatda bo'lishiga tayyor bo'ling. Argument OpenStack Terraform provayderining 1.10.0 versiyasida mavjud: torting # 422.
Resurslarni yaratish
Manifestlarni ishga tushirishdan oldin, shuni yodda tutingki, bizning misolimizda ikki xil provayder ishga tushirilgan va OpenStack provayderi Selectel provayderining resurslariga bog'liq, chunki loyihada foydalanuvchi yaratmasdan unga tegishli ob'ektlarni boshqarish mumkin emas. . Afsuski, xuddi shu sababga ko'ra biz shunchaki buyruqni bajara olmaymiz terraform qo'llaniladi bizning misolimizda. Biz birinchi navbatda qilishimiz kerak amal qiling modul uchun loyiha_foydalanuvchi bilan va bundan keyin hamma narsa uchun.
Eslatma: Bu muammo hali Terraform-da hal etilmagan, siz Github-dagi muhokamani quyidagi manzilda kuzatib borishingiz mumkin № 2430-son и № 4149-son.
Chiqish shuni ko'rsatadiki, Terraform o'zi foydalanadigan provayderlarning so'nggi versiyalarini yuklab oladi va misolda tasvirlangan barcha modullarni tekshiradi.
Avval modulni qo'llaymiz loyiha_foydalanuvchi bilan. Bu o'rnatilmagan o'zgaruvchilar uchun qiymatlarni qo'lda o'tkazishni talab qiladi:
sel_hisob Selectel hisob raqamingiz bilan;
sel_token Selectel API uchun kalitingiz bilan;
user_password OpenStack foydalanuvchisi uchun parol bilan.
Birinchi ikkita o'zgaruvchining qiymatlari dan olinishi kerak boshqaruv panellari.
Oxirgi o'zgaruvchi uchun siz har qanday parolni topishingiz mumkin.
Moduldan foydalanish uchun qiymatlarni almashtirish kerak SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD buyruqni bajarish:
Buyruqni ishga tushirgandan so'ng, Terraform qanday resurslarni yaratmoqchi ekanligini ko'rsatadi va tasdiqlashni so'raydi:
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
Loyiha, foydalanuvchi va rol yaratilgandan so'ng, qolgan resurslarni yaratishni boshlashingiz mumkin:
Belgilangan IP-dan foydalangan holda SSH orqali yaratilgan virtual mashina bilan ishlashingiz mumkin.
Resurslarni tahrirlash
Terraform orqali resurslarni yaratishdan tashqari, ular ham o'zgartirilishi mumkin.
Masalan, parametrlar qiymatlarini o'zgartirish orqali serverimiz uchun yadro va xotira sonini ko'paytiraylik. server_vcpus и server_ram_mb faylda misollar/vpc/server_local_root_disk/main.tf:
Bizning misol omborlari Shuningdek, siz tarmoq drayverlari bilan virtual mashinalarni yaratish uchun manifestlarni ko'rishingiz mumkin.
Kubernetes klasterini yaratish misoli
Keyingi misolga o'tishdan oldin biz avval yaratilgan resurslarni tozalaymiz. Buni loyihaning ildizida qilish uchun terraform-misollar/misollar/vpc/server_local_root_disk Keling, OpenStack ob'ektlarini o'chirish buyrug'ini bajaramiz:
Ikkala holatda ham barcha ob'ektlarni o'chirishni tasdiqlashingiz kerak bo'ladi:
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
Ushbu misol loyihani, loyihada roli bo'lgan foydalanuvchini yaratadi va bitta Kubernetes klasterini ko'taradi. Fayl ichida vars.tf siz standart qiymatlarni ko'rishingiz mumkin, masalan, tugunlar soni, ularning xususiyatlari, Kubernetes versiyasi va boshqalar.
Birinchi misolga o'xshash resurslarni yaratish uchun birinchi navbatda modullarni ishga tushirishni va modul resurslarini yaratishni boshlaymiz loyiha_foydalanuvchi bilanva keyin hamma narsani yarating:
Biz Kubernetes klasterlarini yaratish va boshqarishni OpenStack Magnum komponenti orqali o'tkazamiz. Klaster bilan qanday ishlash haqida ko'proq ma'lumotni bizning birida topishingiz mumkin oldingi maqolalar, shuningdek bilimlar bazasi.
Klasterni tayyorlashda disklar va virtual mashinalar yaratiladi va barcha kerakli komponentlar o'rnatiladi. Tayyorgarlik taxminan 4 daqiqa davom etadi, bu vaqt ichida Terraform quyidagi xabarlarni ko'rsatadi:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
O'rnatish tugallangach, Terraform klaster tayyorligini bildiradi va uning identifikatorini ko'rsatadi:
Yaratilgan Kubernetes klasterini yordamchi dastur orqali boshqarish kubectl klasterga kirish faylini olishingiz kerak. Buning uchun hisobingizdagi loyihalar ro'yxatida Terraform orqali yaratilgan loyihaga o'ting:
Keyin, kabi havolaga o'ting xxxxxx.selvpc.ruloyiha nomi ostida ko'rsatiladi:
Kirish ma'lumoti uchun Terraform orqali yaratgan foydalanuvchi nomi va paroldan foydalaning. Agar aldamagan bo'lsangiz vars.tf yoki main.tf bizning misolimiz uchun foydalanuvchi ismga ega bo'ladi tf_user. Parol sifatida o'zgaruvchining qiymatini ishlatishingiz kerak TF_VAR_user_parol, bu ishga tushirishda ko'rsatilgan terraform qo'llaniladi avvalroq.
Loyihaning ichida siz yorliqga o'tishingiz kerak Kubernetes:
Bu erda Terraform orqali yaratilgan klaster joylashgan. uchun faylni yuklab olish kubectl "Kirish" yorlig'ida:
O'rnatish bo'yicha ko'rsatmalar xuddi shu yorliqda joylashgan. kubectl va yuklab olinganlardan foydalanish config.yaml.
Ishga tushgandan keyin kubectl va muhit o'zgaruvchisini o'rnatish KUBECONFIG Kubernetes-dan foydalanishingiz mumkin:
Tugunlar soni o'zgarganda, klaster mavjud bo'lib qoladi. Terraform orqali tugunni qo'shgandan so'ng, uni qo'shimcha konfiguratsiyasiz ishlatishingiz mumkin:
$ 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
xulosa
Ushbu maqolada biz ishlashning asosiy usullari bilan tanishdik "Virtual shaxsiy bulut" Terraform orqali. Rasmiy Selectel Terraform provayderidan foydalansangiz va fikr-mulohaza bildirsangiz xursand bo'lamiz.
Selectel Terraform provayderida topilgan har qanday xatoliklar haqida xabar berish mumkin Github muammolari.