Panyadia Terraform Selectel

Panyadia Terraform Selectel

Kami parantos ngaluncurkeun panyadia Terraform resmi pikeun damel sareng Selectel. Produk ieu ngamungkinkeun pamaké pikeun pinuh nerapkeun manajemén sumberdaya ngaliwatan metodologi Infrastruktur-sakumaha-kode.

Panyadia ayeuna ngadukung manajemén sumberdaya jasa "Awan pribadi virtual" (satuluyna disebut VPC). Dina mangsa nu bakal datang, urang rencanana pikeun nambahkeun manajemén sumberdaya pikeun layanan séjén disadiakeun ku Selectel.

Sakumaha anjeun parantos terang, jasa VPC diwangun dina OpenStack. Nanging, kusabab kanyataan yén OpenStack henteu nyayogikeun alat-alat asli pikeun ngaladénan awan umum, kami ngalaksanakeun fungsionalitas anu leungit dina sakumpulan API tambahan anu nyederhanakeun manajemén objék komposit rumit sareng ngajantenkeun padamelan langkung saé. Sababaraha pungsionalitas sadia dina OpenStack ditutup tina pamakéan langsung, tapi geus sadia ngaliwatan API urang.

Panyadia Selectel Terraform ayeuna kalebet kamampuan pikeun ngatur sumber VPC ieu:

  • proyék jeung kuota maranéhanana;
  • pamaké, kalungguhan jeung tokens maranéhanana;
  • subnets umum, kaasup cross-régional jeung VRRP;
  • lisénsi software.

Panyadia ngagunakeun perpustakaan Go umum urang pikeun dianggo sareng API VPC. Duanana perpustakaan sareng panyadia sorangan open-source, pamekaranna dilaksanakeun dina Github:

Pikeun ngatur sumber awan anu sanés, sapertos mesin virtual, disk, klaster Kubernetes, anjeun tiasa nganggo panyadia OpenStack Terraform. Dokuméntasi resmi pikeun duanana panyadia sayogi dina tautan ieu:

Ngalalanyahan

Pikeun ngamimitian, anjeun kedah pasang Terraform (parentah sareng tautan kana bungkusan pamasangan tiasa dipendakan di ramatloka resmi).

Pikeun beroperasi, panyadia merlukeun konci API Selectel, nu dijieun dina panels kontrol akun.

Manifestasi pikeun gawé bareng Selectel didamel nganggo Terraform atanapi nganggo sakumpulan conto siap-siap anu sayogi dina gudang Github kami: terraform-conto.

Repository sareng conto dibagi kana dua diréktori:

  • modul, ngandung modul reusable leutik nu nyandak sakumpulan parameter salaku input jeung ngatur susunan leutik sumberdaya;
  • conto, ngandung conto set lengkep modul interconnected.

Saatos masang Terraform, nyiptakeun konci API Selectel sareng familiarize diri sareng conto, hayu urang teraskeun kana conto praktis.

Conto nyieun server sareng disk lokal

Hayu urang tingali conto nyieun proyék, pamaké kalawan peran sarta mesin virtual kalawan disk lokal: terraform-conto/conto/vpc/server_local_root_disk.

Dina file vars.tf Sadaya parameter anu bakal dianggo nalika nelepon modul dijelaskeun. Sababaraha di antarana boga nilai standar, contona, server bakal dijieun dina zone nu ru-3a kalawan konfigurasi handap:

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

Dina file utama.tf Panyadia Selectel diinisialisasi:

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

Berkas ieu ogé ngandung nilai standar pikeun konci SSH anu bakal dipasang dina server:

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

Upami diperlukeun, Anjeun bisa nangtukeun hiji konci publik béda. Koncina henteu kedah ditetepkeun salaku jalur file; anjeun ogé tiasa nambihan nilai salaku senar.

Salajengna dina file ieu modul dibuka project_with_user и server_local_root_disk, nu ngatur sumberdaya diperlukeun.

Hayu urang nempo modul ieu dina leuwih jéntré.

Nyiptakeun proyék sareng pangguna anu ngagaduhan peran

Modul munggaran nyiptakeun proyék sareng pangguna anu ngagaduhan peran dina proyék éta: terraform-conto / modul / vpc / project_with_user.

Pangguna anu diciptakeun bakal tiasa asup ka OpenStack sareng ngatur sumber dayana. Modulna saderhana sareng ngan ukur ngatur tilu éntitas:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Nyiptakeun server virtual nganggo disk lokal

Modul kadua ngurus ngatur objék OpenStack, nu diperlukeun pikeun nyieun server kalawan disk lokal.

Anjeun kedah nengetan sababaraha argumen anu dijelaskeun dina modul ieu pikeun sumber openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argumen ignore_changes ngidinan Anjeun pikeun malire parobahan atribut id pikeun gambar dipaké pikeun nyieun mesin virtual. Dina ladenan VPC, paling gambar umum diropéa otomatis saminggu sakali sarta dina waktos anu sareng aranjeunna id ogé robah. Ieu disababkeun ku peculiarities komponén OpenStack - Glance, dimana gambar dianggap éntitas immutable.

Upami anjeun nyiptakeun atanapi ngarobih server atanapi disk anu tos aya anu gaduh argumen id_gambar digunakeun id gambar publik, lajeng sanggeus éta gambar diropéa, ngajalankeun Terraform manifest deui bakal nyieun deui server atawa disk. Ngagunakeun argumen ignore_changes ngidinan Anjeun pikeun nyingkahan kaayaan kitu.

Catetan: argumen ignore_changes mucunghul dina Terraform rada lila pisan: tarik#2525.

Argumen ignore_resize_confirmation diperlukeun pikeun hasil ngarobah ukuran disk lokal, cores, atawa memori server. Parobihan sapertos kitu dilakukeun ngalangkungan komponén OpenStack Nova nganggo pamundut ngatur ukuran. Default Nova sanggeus pamundut ngatur ukuran nempatkeun server kana status verify_resize sarta ngantosan konfirmasi tambahan ti pamaké. Nanging, kabiasaan ieu tiasa dirobih supados Nova henteu ngantosan tindakan tambahan ti pangguna.

Argumen anu ditangtukeun ngamungkinkeun Terraform henteu ngantosan statusna verify_resize pikeun server jeung jadi disiapkeun keur server dina status aktip sanggeus ngarobah parameter na. Argumenna sayogi tina vérsi 1.10.0 panyadia OpenStack Terraform: tarik#422.

Nyiptakeun Sumberdaya

Sateuacan ngajalankeun manifes, perhatikeun yén dina conto urang, dua panyadia anu béda diluncurkeun, sareng panyadia OpenStack gumantung kana sumber daya panyadia Selectel, sabab tanpa nyiptakeun pangguna dina proyék éta, mustahil pikeun ngatur objék anu aya. . Hanjakal, pikeun alesan anu sarua urang teu bisa ngan ngajalankeun paréntah terraform nerapkeun di jero conto urang. Urang kedah ngalakukeun heula ngalamar pikeun modul project_with_user sarta sanggeus éta pikeun sagalana sejenna.

Catetan: Masalah ieu henteu acan direngsekeun dina Terraform, anjeun tiasa ngiringan diskusi ngeunaan Github di kaluaran #2430 и kaluaran #4149.

Pikeun nyieun sumberdaya, buka diréktori terraform-conto/conto/vpc/server_local_root_disk, eusina kedah sapertos kieu:

$ ls
README.md	   main.tf		vars.tf

Urang initialize modul ngagunakeun paréntah:

$ terraform init

Kaluaran nunjukkeun yén Terraform ngaunduh vérsi panganyarna tina panyadia anu dianggo sareng mariksa sadaya modul anu dijelaskeun dina conto.

Mimitina hayu urang nerapkeun modul project_with_user. Ieu merlukeun nilai ngalirkeun sacara manual pikeun variabel anu teu acan disetel:

  • akun_sel kalayan nomer akun Selectel anjeun;
  • sel_token kalawan konci Anjeun pikeun Selectel API;
  • pamaké_sandi kalawan sandi pikeun pamaké OpenStack.

Nilai pikeun dua variabel kahiji kudu dicokot tina panel kontrol.

Pikeun variabel anu terakhir, anjeun tiasa ngadamel sandi naon waé.

Pikeun ngagunakeun modul anjeun kudu ngaganti nilai SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD ngajalankeun paréntah:

$ 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

Saatos ngajalankeun paréntah, Terraform bakal nunjukkeun sumber daya naon anu badé didamel sareng naroskeun konfirmasi:

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

Sakali proyék, pangguna sareng peran parantos didamel, anjeun tiasa ngamimitian nyiptakeun sumber daya sésana:

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

Nalika nyiptakeun sumber daya, perhatoskeun kaluaran Terraform kalayan alamat IP éksternal dimana server anu diciptakeun tiasa diaksés:

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

Anjeun tiasa damel sareng mesin virtual anu diciptakeun via SSH nganggo IP anu ditangtukeun.

Sumberdaya Edit

Salian nyieun sumberdaya ngaliwatan Terraform, maranéhna ogé bisa dirobah.

Salaku conto, hayu urang ningkatkeun jumlah inti sareng mémori pikeun server kami ku cara ngarobih nilai pikeun parameter. server_vcpus и server_ram_mb dina file conto / 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

Sanggeus ieu, urang pariksa parobahan naon ieu bakal ngakibatkeun ngagunakeun paréntah di handap:

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

Hasilna, Terraform nyieun parobahan sumberdaya openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Perhatikeun yén ieu bakal merlukeun rebooting mesin virtual dijieun.

Pikeun nerapkeun konfigurasi mesin virtual anyar, nganggo paréntah terraform nerapkeun, anu kami parantos diluncurkeun sateuacana.

Sadaya objék anu diciptakeun bakal ditingalikeun dina panel kontrol VPC:

Panyadia Terraform Selectel

Di urang repositories conto Anjeun oge bisa ningali manifests pikeun nyieun mesin virtual kalawan drive jaringan.

Conto nyieun klaster Kubernetes

Sateuacan urang ngaléngkah ka conto salajengna, urang bakal ngabersihan sumber daya anu urang ciptakeun sateuacana. Jang ngalampahkeun ieu dina akar proyék terraform-conto/conto/vpc/server_local_root_disk Hayu urang ngajalankeun paréntah pikeun mupus objék 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

Teras jalankeun paréntah pikeun mupus objék API Selectel VPC:

$ 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

Dina dua kasus, anjeun kedah mastikeun ngahapus sadaya objék:

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

Conto di handap ieu aya dina diréktori terraform-conto/conto/vpc/kubernetes_cluster.

Conto ieu nyiptakeun proyék, pangguna anu ngagaduhan peran dina proyék, sareng ngangkat hiji klaster Kubernetes. Dina file vars.tf Anjeun tiasa ningali nilai standar, sapertos jumlah titik, karakteristikna, versi Kubernetes, jsb.

Pikeun nyiptakeun sumber anu sami sareng conto anu munggaran, mimitina urang bakal ngamimitian ngamimitian modul sareng nyiptakeun sumber modul project_with_userlajeng nyieun sagalana sejenna:

$ 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

Urang bakal nransper kreasi sarta manajemén klaster Kubernetes ngaliwatan komponén OpenStack Magnum. Anjeun tiasa mendakan langkung seueur ngeunaan cara damel sareng klaster dina salah sahiji kami artikel saméméhnaogé dasar pangaweruh.

Nalika nyiapkeun klaster, disk sareng mesin virtual bakal didamel sareng sadaya komponén anu diperyogikeun bakal dipasang. Persiapan nyokot ngeunaan 4 menit, salila waktu Terraform bakal nembongkeun pesen kawas:

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

Sakali pamasangan parantos réngsé, Terraform bakal nunjukkeun yén kluster parantos siap sareng nunjukkeun ID na:

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

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

Pikeun ngatur klaster Kubernetes nu dijieun ngaliwatan utiliti kubectl anjeun kedah kéngingkeun file aksés kluster. Jang ngalampahkeun ieu, buka proyék dijieun ngaliwatan Terraform dina daptar proyék di akun anjeun:

Panyadia Terraform Selectel

Salajengna, turutan link kawas xxxxxx.selvpc.runu nembongan di handap ngaran proyék:

Panyadia Terraform Selectel

Kanggo inpormasi login, paké nami pangguna sareng kecap konci anu anjeun damel ngalangkungan Terraform. Upami anjeun teu acan nipu vars.tf atawa utama.tf pikeun conto urang, pamaké bakal boga ngaran tf_user. Anjeun kedah nganggo nilai variabel salaku sandi TF_VAR_user_password, nu dieusian dina ngamimitian terraform nerapkeun tadi.

Di jero proyék anjeun kedah angkat ka tab Kubernetes:

Panyadia Terraform Selectel

Ieu dimana klaster dijieun via Terraform lokasina. Unduh file pikeun kubectl Anjeun tiasa dina tab "Aksés":

Panyadia Terraform Selectel

Parentah pamasangan aya dina tab anu sami. kubectl sarta pamakéan diundeur config.yaml.

Saatos peluncuran kubectl jeung netepkeun variabel lingkungan KUBECONFIG anjeun tiasa nganggo 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

Jumlah titik klaster bisa gampang dirobah via Terraform.
Dina file utama.tf nilai handap dieusian:

cluster_node_count = "${var.cluster_node_count}"

Nilai ieu diganti tina vars.tf:

variable "cluster_node_count" {
default = 2
}

Anjeun tiasa ngarobih nilai standar dina vars.tf, atawa nangtukeun nilai diperlukeun langsung dina utama.tf:

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

Pikeun nerapkeun parobihan, sapertos dina conto anu munggaran, paké paréntah terraform nerapkeun:

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

Nalika jumlah titik robah, kluster bakal tetep aya. Saatos nambihan titik via Terraform, anjeun tiasa nganggo éta tanpa konfigurasi tambahan:

$ 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

kacindekan

Dina artikel ieu kami geus acquainted jeung cara utama pikeun digawekeun ku "Awan pribadi virtual" via Terraform. Kami bakal bungah upami anjeun nganggo panyadia Selectel Terraform resmi sareng masihan tanggapan.

Sakur bug anu aya dina panyadia Selectel Terraform tiasa dilaporkeun via Masalah Github.

sumber: www.habr.com

Tambahkeun komentar