Terraform провайдері Selectel

Terraform провайдері Selectel

Selectel компаниясымен жұмыс істеу үшін біз ресми Terraform провайдерін іске қостық. Бұл өнім пайдаланушыларға «Инфраструктура-код» әдіснамасы арқылы ресурстарды басқаруды толығымен жүзеге асыруға мүмкіндік береді.

Қазіргі уақытта провайдер қызмет ресурстарын басқаруды қолдайды «Виртуалды жеке бұлт» (бұдан әрі - VPC). Болашақта біз Selectel ұсынатын басқа қызметтер үшін ресурстарды басқаруды қосуды жоспарлап отырмыз.

Өздеріңіз білетіндей, VPC қызметі OpenStack-те құрылған. Дегенмен, OpenStack жалпы бұлтқа қызмет көрсетуге арналған жергілікті құралдарды қамтамасыз етпейтіндіктен, біз күрделі композиттік нысандарды басқаруды жеңілдететін және жұмысты ыңғайлы ететін қосымша API жиынтығында жетіспейтін функционалдылықты енгіздік. OpenStack-те қол жетімді кейбір функциялар тікелей пайдаланудан жабылған, бірақ олар арқылы қол жетімді біздің API.

Selectel Terraform провайдері енді келесі VPC ресурстарын басқару мүмкіндігін қамтиды:

  • жобалар және олардың квоталары;
  • пайдаланушылар, олардың рөлдері мен белгілері;
  • жалпыға ортақ ішкі желілер, соның ішінде аймақаралық және VRRP;
  • бағдарламалық қамтамасыз ету лицензиялары.

Провайдер VPC API интерфейсімен жұмыс істеу үшін жалпы Go кітапханасын пайдаланады. Кітапхана да, провайдердің өзі де ашық бастапқы болып табылады, олардың дамуы Github-да жүзеге асырылады:

Виртуалды машиналар, дискілер, Kubernetes кластерлері сияқты басқа бұлттық ресурстарды басқару үшін OpenStack Terraform провайдерін пайдалануға болады. Екі провайдер үшін де ресми құжаттама келесі сілтемелерде қолжетімді:

Жұмысты бастау

Бастау үшін сізге Terraform орнату қажет (нұсқауларды және орнату пакеттеріне сілтемелерді мына жерден табуға болады ресми сайт).

Жұмыс істеу үшін провайдер ішінде жасалған Selectel API кілтін қажет етеді есептік жазбаны басқару панельдері.

Selectel бағдарламасымен жұмыс істеуге арналған манифесттер Terraform көмегімен немесе Github репозиторийінде қол жетімді дайын мысалдар жиынтығын пайдалану арқылы жасалады: терраформ-мысалдар.

Мысалдар бар репозиторий екі каталогқа бөлінген:

  • модульдер, кіріс ретінде параметрлер жинағын қабылдайтын және ресурстардың шағын жиынтығын басқаратын шағын қайта пайдалануға болатын модульдерді қамтитын;
  • мысалдар, өзара байланысты модульдердің толық жиынтығының мысалдарын қамтитын.

Terraform орнатқаннан кейін, Selectel API кілтін жасап, мысалдармен танысқаннан кейін практикалық мысалдарға көшейік.

Жергілікті дискімен сервер құрудың мысалы

Жобаны, рөлі бар пайдаланушыны және жергілікті дискі бар виртуалды машинаны құру мысалын қарастырайық: terraform-examples/examples/vpc/server_local_root_disk.

Файлда vars.tf модульдерді шақыру кезінде қолданылатын барлық параметрлер сипатталған. Олардың кейбіреулерінде әдепкі мәндер бар, мысалы, сервер аймақта жасалады ru-3a келесі конфигурациямен:

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

Файлда main.tf Selectel провайдері инициализацияланған:

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

Бұл файлда серверде орнатылатын SSH кілтінің әдепкі мәні де бар:

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

Қажет болса, басқа ашық кілтті көрсетуге болады. Кілтті файл жолы ретінде көрсету міндетті емес; мәнді жол ретінде қосуға болады.

Әрі қарай бұл файлда модульдер іске қосылады жоба_пайдаланушымен и server_local_root_disk, қажетті ресурстарды басқаратын.

Осы модульдерді толығырақ қарастырайық.

Жобаны және рөлі бар пайдаланушыны құру

Бірінші модуль жобаны және сол жобада рөлі бар пайдаланушыны жасайды: terraform-examples/modules/vpc/project_with_user.

Жасалған пайдаланушы OpenStack жүйесіне кіріп, оның ресурстарын басқара алады. Модуль қарапайым және тек үш нысанды басқарады:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Жергілікті дискімен виртуалды сервер құру

Екінші модуль жергілікті дискімен сервер құру үшін қажет OpenStack нысандарын басқарумен айналысады.

Ресурс үшін осы модульде көрсетілген кейбір аргументтерге назар аудару керек openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

дәлел өзгерістерді_елемеу атрибут өзгерістерін елемеуге мүмкіндік береді 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-examples/examples/vpc/server_local_root_disk, оның мазмұны келесідей болуы керек:

$ ls
README.md	   main.tf		vars.tf

Біз модульдерді пәрмен арқылы инициализациялаймыз:

$ terraform init

Шығару Terraform өзі пайдаланатын провайдерлердің соңғы нұсқаларын жүктеп алатынын және мысалда сипатталған барлық модульдерді тексеретінін көрсетеді.

Алдымен модульді қолданайық жоба_пайдаланушымен. Бұл орнатылмаған айнымалылар үшін мәндерді қолмен беруді талап етеді:

  • sel_count Selectel шот нөмірімен;
  • sel_token Selectel API кілтімен;
  • user_password OpenStack пайдаланушысы үшін құпия сөзбен.

Алғашқы екі айнымалының мәндері мынадан алынуы керек басқару панельдері.

Соңғы айнымалы үшін сіз кез келген құпия сөзді таба аласыз.

Модульді пайдалану үшін мәндерді ауыстыру қажет SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD пәрменді орындау:

$ 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

Пәрменді іске қосқаннан кейін 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

Жоба, пайдаланушы және рөл жасалғаннан кейін қалған ресурстарды жасауға кірісуге болады:

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

Ресурстарды жасаған кезде, жасалған сервер қол жетімді болатын сыртқы IP мекенжайы бар Terraform шығысына назар аударыңыз:

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

Көрсетілген IP арқылы SSH арқылы жасалған виртуалды машинамен жұмыс істеуге болады.

Өңдеу ресурстары

Terraform арқылы ресурстарды жасаудан басқа, оларды өзгертуге болады.

Мысалы, параметрлердің мәндерін өзгерту арқылы серверіміз үшін ядролар мен жад санын көбейтейік server_vcpus и server_ram_mb файлда мысалдар/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

Осыдан кейін біз келесі пәрменді пайдаланудың қандай өзгерістерге әкелетінін тексереміз:

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

Нәтижесінде Terraform ресурсқа өзгеріс енгізді openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Бұл жасалған виртуалды машинаны қайта жүктеуді қажет ететінін ескеріңіз.

Жаңа виртуалды машина конфигурациясын қолдану үшін пәрменді пайдаланыңыз терраформа қолданылады, біз оны бұрын іске қосқан болатынбыз.

Барлық жасалған нысандар ішінде көрсетіледі VPC басқару тақталары:

Terraform провайдері Selectel

Біздің мысал репозиторийлері Сондай-ақ, желілік дискілері бар виртуалды машиналарды жасауға арналған манифесттерді көруге болады.

Kubernetes кластерін құру мысалы

Келесі мысалға көшпес бұрын, біз бұрын жасаған ресурстарды тазалаймыз. Мұны жобаның түбірінде орындау үшін terraform-examples/examples/vpc/server_local_root_disk OpenStack нысандарын жою пәрменін орындаймыз:

$ 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

Содан кейін Selectel VPC API нысандарын тазалау пәрменін іске қосыңыз:

$ 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

Екі жағдайда да барлық нысандардың жойылуын растау қажет:

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

Келесі мысал каталогта terraform-examples/examples/vpc/kubernetes_cluster.

Бұл мысал жобаны, жобада рөлі бар пайдаланушыны жасайды және бір Kubernetes кластерін көтереді. Файлда vars.tf түйіндер саны, олардың сипаттамалары, Kubernetes нұсқасы және т.б. сияқты әдепкі мәндерді көре аласыз.

Бірінші мысалға ұқсас ресурстарды жасау үшін ең алдымен модульдерді инициализациялауды және модуль ресурстарын құруды бастаймыз жоба_пайдаланушыменсодан кейін қалғанның бәрін жасайды:

$ 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

Біз Kubernetes кластерлерін құру мен басқаруды OpenStack Magnum компоненті арқылы тасымалдаймыз. Кластермен қалай жұмыс істеу керектігі туралы толығырақ ақпаратты біздің бірімізден біле аласыз алдыңғы мақалалар, сонымен қатар білім базасы.

Кластерді дайындау кезінде дискілер мен виртуалды машиналар жасалады және барлық қажетті компоненттер орнатылады. Дайындық шамамен 4 минутты алады, осы уақыт ішінде Terraform келесі хабарламаларды көрсетеді:

module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)

Орнату аяқталғаннан кейін Terraform кластердің дайын екенін көрсетеді және оның идентификаторын көрсетеді:

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

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

Құрылған Kubernetes кластерін қызметтік бағдарлама арқылы басқару үшін кубектл кластерге кіру файлын алу керек. Ол үшін тіркелгіңіздегі жобалар тізімінде Terraform арқылы жасалған жобаға өтіңіз:

Terraform провайдері Selectel

Әрі қарай лайкты басып өтіңіз xxxxxx.selvpc.ruол жоба атауының астында пайда болады:

Terraform провайдері Selectel

Жүйеге кіру ақпараты үшін Terraform арқылы жасалған пайдаланушы аты мен құпия сөзді пайдаланыңыз. Егер сіз алдамаған болсаңыз vars.tf немесе main.tf біздің мысал үшін пайдаланушының аты болады tf_user. Құпия сөз ретінде айнымалының мәнін пайдалану керек TF_VAR_user_password, ол іске қосу кезінде көрсетілген терраформа қолданылады ертерек.

Жобаның ішінде сіз қойындыға өтуіңіз керек Kubernetes:

Terraform провайдері Selectel

Бұл жерде Terraform арқылы жасалған кластер орналасқан. үшін файлды жүктеп алыңыз кубектл «Кіру» қойындысында:

Terraform провайдері Selectel

Орнату нұсқаулары сол қойындыда орналасқан. кубектл және жүктеп алынғандарды пайдалану config.yaml.

Іске қосылғаннан кейін кубектл және орта айнымалысын орнату KUBECONFIG Kubernetes пайдалана аласыз:

$ 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

Кластер түйіндерінің санын Terraform арқылы оңай өзгертуге болады.
Файлда main.tf келесі мән көрсетіледі:

cluster_node_count = "${var.cluster_node_count}"

Бұл мән келесіден ауыстырылады vars.tf:

variable "cluster_node_count" {
default = 2
}

ішінде әдепкі мәнді өзгертуге болады vars.tf, немесе қажетті мәнді тікелей ішінде көрсетіңіз main.tf:

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

Бірінші мысалдағыдай өзгертулерді қолдану үшін пәрменді пайдаланыңыз терраформа қолданылады:

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

Түйіндердің саны өзгерген кезде кластер қолжетімді болып қалады. 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 мәселелері.

Ақпарат көзі: www.habr.com

пікір қалдыру