Terraform provayderi Selectel

Terraform provayderi Selectel

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:

Ishga kirishish

Ishni boshlash uchun siz Terraformni o'rnatishingiz kerak (ko'rsatmalar va o'rnatish paketlariga havolalar rasmiy veb-sayti).

Ishlash uchun provayderda yaratilgan Selectel API kaliti talab qilinadi hisobni boshqarish panellari.

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.

Mahalliy disk bilan server yaratishga misol

Keling, loyihani, rolli foydalanuvchini va mahalliy diskli virtual mashinani yaratish misolini ko'rib chiqaylik: terraform-misollar/misollar/vpc/server_local_root_disk.

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:

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

Fayl ichida main.tf Selectel provayder ishga tushirildi:

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

Ushbu fayl serverga o'rnatiladigan SSH kalitining standart qiymatini ham o'z ichiga oladi:

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

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.

Loyiha va rolli foydalanuvchi yaratish

Birinchi modul loyihani va ushbu loyihada roli bo'lgan foydalanuvchini yaratadi: terraform-examples/modules/vpc/project_with_user.

Yaratilgan foydalanuvchi OpenStack-ga kirishi va uning resurslarini boshqarishi mumkin bo'ladi. Modul oddiy va faqat uchta ob'ektni boshqaradi:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Mahalliy disk bilan virtual server yaratish

Ikkinchi modul mahalliy disk bilan server yaratish uchun zarur bo'lgan OpenStack ob'ektlarini boshqarish bilan shug'ullanadi.

Resurs uchun ushbu modulda ko'rsatilgan ba'zi argumentlarga e'tibor berishingiz kerak openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

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.

Resurslarni yaratish uchun katalogga o'ting terraform-misollar/misollar/vpc/server_local_root_disk, uning mazmuni quyidagicha bo'lishi kerak:

$ ls
README.md	   main.tf		vars.tf

Biz modullarni buyruq yordamida ishga tushiramiz:

$ terraform init

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:

$ 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

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:

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

Resurslarni yaratishda, yaratilgan serverga kirish mumkin bo'lgan tashqi IP manzilli Terraform chiqishiga e'tibor bering:

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

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:

-  server_vcpus        = "${var.server_vcpus}"
-  server_ram_mb       = "${var.server_ram_mb}"
+  server_vcpus        = 8
+  server_ram_mb       = 10240

Shundan so'ng, biz quyidagi buyruq yordamida qanday o'zgarishlarga olib kelishini tekshiramiz:

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

Natijada, Terraform resursni o'zgartirdi openstack_compute_instance_v2 и openstack_compute_flavor_v2.

E'tibor bering, bu yaratilgan virtual mashinani qayta ishga tushirishni talab qiladi.

Yangi virtual mashina konfiguratsiyasini qo'llash uchun buyruqdan foydalaning terraform qo'llaniladi, biz allaqachon ishga tushirganmiz.

Barcha yaratilgan ob'ektlar ichida ko'rsatiladi VPC boshqaruv panellari:

Terraform provayderi Selectel

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:

$ 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

Keyin Selectel VPC API obyektlarini tozalash uchun buyruqni bajaring:

$ 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

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

Quyidagi misol katalogda terraform-misollar/misollar/vpc/kubernetes_cluster.

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:

$ 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

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:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Creation complete after 4m20s (ID: 3c8...)

Apply complete! Resources: 6 added, 0 changed, 0 destroyed.

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:

Terraform provayderi Selectel

Keyin, kabi havolaga o'ting xxxxxx.selvpc.ruloyiha nomi ostida ko'rsatiladi:

Terraform provayderi Selectel

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:

Terraform provayderi Selectel

Bu erda Terraform orqali yaratilgan klaster joylashgan. uchun faylni yuklab olish kubectl "Kirish" yorlig'ida:

Terraform provayderi Selectel

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:

$ 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

Klaster tugunlari sonini Terraform orqali osongina o'zgartirish mumkin.
Fayl ichida main.tf quyidagi qiymat belgilanadi:

cluster_node_count = "${var.cluster_node_count}"

Bu qiymat dan almashtiriladi vars.tf:

variable "cluster_node_count" {
default = 2
}

Siz standart qiymatni o'zgartirishingiz mumkin vars.tf, yoki to'g'ridan-to'g'ri ichida kerakli qiymatni belgilang main.tf:

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

Birinchi misoldagi kabi o'zgarishlarni qo'llash uchun buyruqdan foydalaning terraform qo'llaniladi:

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

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.

Manba: www.habr.com

a Izoh qo'shish