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ду орнотушуңуз керек (инструкцияларды жана орнотуу пакеттерине шилтемелерди даректен тапсаңыз болот расмий сайты).

Иштөө үчүн, провайдер XNUMX-жылы түзүлгөн Selectel API ачкычын талап кылат эсеп башкаруу панелдери.

Selectel менен иштөө үчүн манифесттер Terraform аркылуу же биздин Github репозиторийинде жеткиликтүү болгон даяр мисалдардын топтомун колдонуу менен түзүлөт: terraform-мисалдар.

Мисалдар менен репозиторий эки каталогго бөлүнөт:

  • модулдар, киргизүү катары параметрлердин топтомун кабыл алган жана ресурстардын кичинекей топтомун башкарган чакан кайталануучу модулдарды камтыган;
  • мисалдар, өз ара байланышкан модулдардын толук топтомунун мисалдарын камтыган.

Terraform орнотуп, Selectel API ачкычын түзүп, мисалдар менен таанышкандан кийин, практикалык мисалдарга өтөбүз.

Жергиликтүү диск менен серверди түзүүнүн мисалы

Келгиле, долбоорду, ролу бар колдонуучуну жана локалдык диск менен виртуалдык машинаны түзүүнүн мисалын карап көрөлү: terraform-examples/examples/vpc/server_local_root_disk.

Файлда vars.tf модулдарды чакырганда колдонула турган бардык параметрлер сүрөттөлгөн. Алардын айрымдарынын демейки маанилери бар, мисалы, зонада сервер түзүлөт ру-3а төмөнкү конфигурация менен:

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 манифестин кайра иштетүү серверди же дискти кайра жаратат. Аргумент колдонуу өзгөртүүлөр_эгер мындай абалдан кутулууга мумкундук берет.

Эскертүү: аргумент өзгөртүүлөр_эгер бир топ убакыт мурун Terraform пайда болгон: тарт #2525.

Аргумент тастыктоону_өлчөмүн_өзгөртүү жергиликтүү дисктин, өзөктөрдүн же сервер эстутумунун өлчөмүн ийгиликтүү өзгөртүү үчүн керек. Мындай өзгөртүүлөр өтүнүчтү колдонуу менен OpenStack Nova компоненти аркылуу жүргүзүлөт өлчөмдү. Сурамдан кийин демейки Nova өлчөмдү серверди статуска коет текшерүү_өлчөмү жана колдонуучудан кошумча ырастоону күтөт. Бирок, бул жүрүм-турумду Nova колдонуучудан кошумча аракеттерди күтпөшү үчүн өзгөртсө болот.

Көрсөтүлгөн аргумент Терраформга статусту күтпөөгө мүмкүндүк берет текшерүү_өлчөмү сервер үчүн жана анын параметрлерин өзгөрткөндөн кийин сервер активдүү абалда болушуна даяр болуңуз. Аргумент 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 файлда examples/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 кластер даяр экенин көрсөтүп, анын ID көрсөтөт:

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 кластерин утилита аркылуу башкаруу kubectl кластерге кирүү файлын алышыңыз керек. Бул үчүн, аккаунтуңуздагы долбоорлордун тизмесинде Terraform аркылуу түзүлгөн долбоорго өтүңүз:

Terraform камсыздоочу Selectel

Кийинки, лайк шилтемеге өтүңүз xxxxxx.selvpc.ruал долбоордун аталышынын астында пайда болот:

Terraform камсыздоочу Selectel

Кирүү маалыматы үчүн, Terraform аркылуу түзүлгөн колдонуучу атын жана паролду колдонуңуз. Эгер сиз алдабасаңыз vars.tf же main.tf биздин мисал үчүн, колдонуучунун аты болот tf_user. Сырсөз катары өзгөрмөнүн маанисин колдонушуңуз керек TF_VAR_user_password, бул ишке киргизүүдө көрсөтүлгөн терраформа колдонулат Буга чейин.

Долбоордун ичинде сиз өтмөккө өтүшүңүз керек Kubernetes:

Terraform камсыздоочу Selectel

Бул жерде Terraform аркылуу түзүлгөн кластер жайгашкан. үчүн файлды жүктөп алуу kubectl сиз "Кирүү" өтмөгүнөн:

Terraform камсыздоочу Selectel

Орнотуу көрсөтмөлөрү ошол эле өтмөктө жайгашкан. kubectl жана жүктөлгөн колдонуу config.yaml.

Ишке киргизилгенден кийин kubectl жана чөйрө өзгөрмөсүн орнотуу 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 маселелери.

Source: www.habr.com

Комментарий кошуу