Terraform үйлчилгээ үзүүлэгч Selectel

Terraform үйлчилгээ үзүүлэгч Selectel

Бид Selectel-тэй хамтран ажиллах албан ёсны Terraform үйлчилгээ үзүүлэгчийг ажиллууллаа. Энэхүү бүтээгдэхүүн нь хэрэглэгчдэд Infrastructure-as-code аргачлалаар нөөцийн удирдлагыг бүрэн хэрэгжүүлэх боломжийг олгодог.

Үйлчилгээ үзүүлэгч одоогоор үйлчилгээний нөөцийн менежментийг дэмждэг "Виртуал хувийн үүл" (цаашид 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-ийн онцлогтой холбоотой бөгөөд үүнд зургуудыг хувиршгүй объект гэж үздэг.

Хэрэв та аргументтай байгаа сервер эсвэл дискийг үүсгэж эсвэл өөрчилж байгаа бол зургийн_id ашиглаж байна id Нийтийн дүрс, дараа нь тэр зургийг шинэчилсэний дараа Terraform манифестийг дахин ажиллуулснаар сервер эсвэл дискийг дахин үүсгэх болно. Аргумент ашиглах өөрчлөлтийг үл тоомсорлох ийм нөхцөл байдлаас зайлсхийх боломжийг танд олгоно.

Жич: аргумент өөрчлөлтийг үл тоомсорлох Терраформ дээр нэлээд эрт гарч ирсэн: татах # 2525.

баталгаа Баталгаажуулалтыг үл тоомсорлох локал диск, цөм эсвэл серверийн санах ойн хэмжээг амжилттай өөрчлөхөд шаардлагатай. Ийм өөрчлөлтийг хүсэлтийг ашиглан OpenStack Nova бүрэлдэхүүнээр хийдэг хэмжээг. Хүсэлтийн дараа анхдагч Nova хэмжээг серверийг төлөвт оруулдаг баталгаажуулах_хэмжээг өөрчлөх мөн хэрэглэгчээс нэмэлт баталгаажуулалтыг хүлээж байна. Гэсэн хэдий ч Нова хэрэглэгчээс нэмэлт үйлдлийг хүлээхгүйн тулд энэ зан үйлийг өөрчилж болно.

Заасан аргумент нь Terraform-д статусыг хүлээхгүй байх боломжийг олгодог баталгаажуулах_хэмжээг өөрчлөх серверт зориулж, серверийн параметрүүдийг өөрчилсний дараа идэвхтэй байдалд бэлэн байгаарай. Аргументыг OpenStack Terraform үйлчилгээ үзүүлэгчийн 1.10.0 хувилбараас авах боломжтой: татах # 422.

Нөөцийг бий болгох

Манифестуудыг ажиллуулахын өмнө манай жишээн дээр хоёр өөр үйлчилгээ үзүүлэгч ажиллаж байгаа бөгөөд OpenStack үйлчилгээ үзүүлэгч нь Selectel үйлчилгээ үзүүлэгчийн нөөцөөс хамаардаг тул төсөлд хэрэглэгч үүсгэхгүйгээр түүнд хамаарах объектуудыг удирдах боломжгүй гэдгийг анхаарна уу. . Харамсалтай нь ижил шалтгаанаар бид тушаалыг ажиллуулж чадахгүй terraform хэрэглэнэ бидний жишээн дотор. Бид эхлээд хийх хэрэгтэй хэрэглэх модулийн хувьд төсөл_хэрэглэгчтэй үүний дараа бусад бүх зүйлд.

Тайлбар: Энэ асуудал Terraform дээр шийдэгдээгүй байгаа тул та Github дээрх хэлэлцүүлгийг дагаж болно дугаар 2430 и дугаар 4149.

Нөөц үүсгэхийн тулд лавлах руу очно уу terraform-examples/examples/vpc/server_local_root_disk, түүний агуулга дараах байдалтай байх ёстой.

$ ls
README.md	   main.tf		vars.tf

Бид дараах тушаалыг ашиглан модулиудыг эхлүүлнэ.

$ terraform init

Гаралтаас харахад Terraform нь ашигладаг үйлчилгээ үзүүлэгчийнхээ хамгийн сүүлийн хувилбарыг татаж аваад жишээнд тайлбарласан бүх модулийг шалгадаг.

Эхлээд модулийг ашиглая төсөл_хэрэглэгчтэй. Энэ нь тохируулаагүй хувьсагчдын утгыг гараар дамжуулахыг шаарддаг:

  • Sel_account өөрийн Selectel дансны дугаарын хамт;
  • sel_token Selectel API-ийн түлхүүрийн хамт;
  • хэрэглэгчийн_нууц үг 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-ээр үүсгэсэн виртуал машинтай ажиллах боломжтой.

Засварлах нөөц

Терраформоор дамжуулан нөөцийг бий болгохоос гадна тэдгээрийг өөрчлөх боломжтой.

Жишээлбэл, параметрийн утгыг өөрчлөх замаар серверийнхээ цөм болон санах ойн тоог нэмэгдүүлье. 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.

Энэ нь үүсгэсэн виртуал машиныг дахин ачаалахад хүргэнэ гэдгийг анхаарна уу.

Шинэ виртуал машины тохиргоог ашиглахын тулд командыг ашиглана уу terraform хэрэглэнэ, бид үүнийг өмнө нь эхлүүлсэн.

Бүх үүсгэсэн объектууд дотор харагдах болно 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.

Энэ жишээ нь төсөл, төсөлд үүрэг гүйцэтгэх хэрэглэгчийг үүсгэж, нэг Кубернетес кластерийг бий болгодог. Файлд 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

Бид OpenStack Magnum бүрэлдэхүүнээр дамжуулан Kubernetes кластеруудыг үүсгэх, удирдах ажлыг шилжүүлэх болно. Та манай нэгээс кластертай хэрхэн ажиллах талаар илүү ихийг олж мэдэх боломжтой өмнөх нийтлэлүүд, мөн түүнчлэн суурь мэдлэг.

Кластерийг бэлтгэх үед диск, виртуал машинууд бий болж, шаардлагатай бүх бүрэлдэхүүн хэсгүүдийг суулгана. Бэлтгэл нь 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

Дараа нь линкээр ороод like дарна уу xxxxxx.selvpc.ruЭнэ нь төслийн нэрний доор харагдана:

Terraform үйлчилгээ үзүүлэгч Selectel

Нэвтрэх мэдээлэл авахын тулд Terraform-ээр үүсгэсэн хэрэглэгчийн нэр, нууц үгээ ашиглана уу. Хэрэв та хуурч мэхэлж байгаагүй бол vars.tf буюу main.tf бидний жишээний хувьд хэрэглэгч нэртэй байх болно tf_user. Та хувьсагчийн утгыг нууц үг болгон ашиглах ёстой TF_VAR_хэрэглэгчийн_нууц үг, үүнийг эхлүүлэх үед тодорхойлсон terraform хэрэглэнэ эрт.

Төслийн дотор та таб руу очих хэрэгтэй 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

Эхний жишээн дээрх шиг өөрчлөлтийг хэрэглэхийн тулд командыг ашиглана уу terraform хэрэглэнэ:

$ 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

сэтгэгдэл нэмэх