Провайдери Terraform Selectel

Провайдери Terraform Selectel

Мо провайдери расмии Terraform-ро барои кор бо Selectel оғоз кардем. Ин маҳсулот ба корбарон имкон медиҳад, ки тавассути методологияи Infrastructure-as-code идоракунии захираҳоро пурра татбиқ кунанд.

Провайдер ҳоло идоракунии захираҳои хидматро дастгирӣ мекунад "Абри хусусии виртуалӣ" (минбаъд VPC номида мешавад). Дар оянда мо нақша дорем, ки идоракунии захираҳоро барои хидматҳои дигари Selectel илова кунем.

Тавре ки шумо аллакай медонед, хидмати VPC дар OpenStack сохта шудааст. Бо вуҷуди ин, аз сабаби он, ки OpenStack асбобҳои ватаниро барои хидматрасонии абрҳои ҷамъиятӣ таъмин намекунад, мо функсияҳои нопадидро дар маҷмӯи API-ҳои иловагӣ татбиқ кардем, ки идоракунии объектҳои мураккаби мураккабро осонтар мекунанд ва корро осонтар мекунанд. Баъзе аз функсияҳое, ки дар OpenStack дастрасанд, аз истифодаи мустақим бастаанд, аммо тавассути он дастрасанд API-и мо.

Провайдери Selectel Terraform ҳоло қобилияти идоракунии захираҳои VPC-и зеринро дар бар мегирад:

  • лоиҳаҳо ва квотаҳои онҳо;
  • истифодабарандагон, нақшҳо ва аломатҳои онҳо;
  • зершабакаҳои ҷамъиятӣ, аз ҷумла байниминтақавӣ ва VRRP;
  • иҷозатномаҳои нармафзор.

Провайдер китобхонаи ҷамъиятии Go-и моро барои кор бо VPC API истифода мебарад. Ҳам китобхона ва ҳам худи провайдер манбаи кушода мебошанд, таҳияи онҳо дар Github амалӣ карда мешавад:

Барои идора кардани дигар захираҳои абрӣ, аз қабили мошинҳои виртуалӣ, дискҳо, кластерҳои Kubernetes, шумо метавонед провайдери OpenStack Terraform-ро истифода баред. Ҳуҷҷатҳои расмӣ барои ҳарду провайдерҳо дар истиноди зерин дастрасанд:

саршавӣ

Барои оғоз кардан, шумо бояд Terraform-ро насб кунед (дастурҳо ва истинодҳо ба бастаҳои насбкуниро дар сомонаи расмӣ).

Барои кор кардан, провайдер калиди Selectel API-ро талаб мекунад, ки дар он сохта шудааст панелҳои идоракунии ҳисоб.

Манифестҳо барои кор бо Selectel бо истифода аз Terraform ё бо истифода аз маҷмӯи намунаҳои тайёр, ки дар анбори Github-и мо мавҷуданд, сохта мешаванд: терраформ-намунахо.

Анбор бо мисолҳо ба ду директория тақсим мешавад:

  • модулҳои, дорои модулҳои хурди дубора истифодашаванда, ки маҷмӯи параметрҳоро ҳамчун вуруд қабул мекунанд ва маҷмӯи хурди захираҳоро идора мекунанд;
  • мисолҳо, дорои намунаҳои маҷмӯи пурраи модулҳои ба ҳам пайваст.

Пас аз насби Terraform, сохтани калиди API Selectel ва шиносоӣ бо мисолҳо, биёед ба мисолҳои амалӣ гузарем.

Намунаи сохтани сервер бо диски маҳаллӣ

Биёед мисоли эҷоди лоиҳа, корбар бо нақш ва мошини виртуалӣ бо диски локалӣ бубинем: terraform-намунаҳо/мисолҳо/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 аз корбар амалҳои иловагиро интизор нашавад.

Далели муайяншуда ба Terraform имкон медиҳад, ки вазъиятро интизор нашавад санҷидани_ҳаҷм барои сервер ва омода бошед, ки сервер пас аз тағир додани параметрҳои он дар ҳолати фаъол бошад. Далел аз версияи 1.10.0 провайдери OpenStack Terraform дастрас аст: кашед # 422.

Эҷоди захираҳо

Пеш аз иҷро кардани манифестҳо, лутфан қайд кунед, ки дар мисоли мо ду провайдери гуногун ба кор андохта мешаванд ва провайдери OpenStack аз захираҳои провайдери Selectel вобаста аст, зеро бидуни эҷоди корбар дар лоиҳа идора кардани объектҳои ба он тааллуқдошта ғайриимкон аст. . Мутаассифона, бо ҳамин сабаб мо наметавонем танҳо фармонро иҷро кунем терраформа истифода бурда мешавад дар дохили мисоли мо. Мо бояд аввал кор кунем истифода баред барои модул лоиҳа_бо_корбар ва баъд аз он барои ҳама чизи дигар.

Эзоҳ: Ин масъала ҳанӯз дар Terraform ҳал нашудааст, шумо метавонед муҳокимаро дар Github пайгирӣ кунед нашри № 2430 и нашри № 4149.

Барои эҷод кардани захираҳо, ба директория гузаред terraform-намунаҳо/мисолҳо/vpc/server_local_root_disk, мазмуни он бояд чунин бошад:

$ ls
README.md	   main.tf		vars.tf

Мо модулҳоро бо истифода аз фармон оғоз мекунем:

$ terraform init

Натиҷа нишон медиҳад, ки Terraform версияҳои охирини провайдерҳои истифодашавандаро зеркашӣ мекунад ва ҳамаи модулҳои дар мисол тавсифшударо месанҷад.

Аввалан, биёед модулро истифода барем лоиҳа_бо_корбар. Ин ба таври дастӣ интиқол додани арзишҳо барои тағирёбандаҳоеро талаб мекунад, ки танзим нашудаанд:

  • sel_count бо рақами ҳисоби Selectel шумо;
  • sel_token бо калиди худ барои API Selectel;
  • 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

Ҳангоми эҷоди захираҳо, ба баромади Terraform бо суроғаи IP-и беруна диққат диҳед, ки дар он сервери сохташуда дастрас хоҳад буд:

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

Шумо метавонед бо мошини виртуалии сохташуда тавассути SSH бо истифода аз IP-и муайяншуда кор кунед.

Сарчашмаҳои таҳрир

Илова ба эҷоди захираҳо тавассути 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-намунаҳо/мисолҳо/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-намунаҳо/мисолҳо/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 тавассути утилита кубектл шумо бояд файли дастрасии кластерро гиред. Барои ин, ба лоиҳаи тавассути Terraform сохташуда дар рӯйхати лоиҳаҳо дар ҳисоби худ гузаред:

Провайдери Terraform Selectel

Баъдан, ба истиноди лайк пайравӣ кунед xxxxxx.selvpc.ruки дар зери номи лоиҳа пайдо мешавад:

Провайдери Terraform Selectel

Барои маълумоти воридшавӣ, номи корбар ва паролеро, ки тавассути Terraform сохтаед, истифода баред. Агар шумо фиреб надидаед vars.tf ё main.tf барои мисоли мо, корбар ном дорад tf_user. Шумо бояд арзиши тағирёбандаро ҳамчун парол истифода баред TF_VAR_user_password, ки ҳангоми оғозёбӣ муайян карда шудааст терраформа истифода бурда мешавад пештар.

Дар дохили лоиҳа шумо бояд ба ҷадвал равед Кубернитель:

Провайдери 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.

Манбаъ: will.com

Илова Эзоҳ