panyedhiya Terraform Selectel

panyedhiya Terraform Selectel

Kita wis ngluncurake panyedhiya Terraform resmi kanggo nggarap Selectel. Produk iki ngidini pangguna ngetrapake manajemen sumber daya kanthi lengkap liwat metodologi Infrastruktur-minangka-kode.

Panyedhiya saiki ndhukung manajemen sumber daya layanan "Awan pribadi virtual" (sabanjuré diarani VPC). Ing mangsa ngarep, kita arep nambah manajemen sumber daya kanggo layanan liyane sing diwenehake dening Selectel.

Kaya sing wis dingerteni, layanan VPC dibangun ing OpenStack. Nanging, amarga kasunyatane OpenStack ora nyedhiyakake alat asli kanggo ngladeni awan umum, kita ngetrapake fungsi sing ilang ing sakumpulan API tambahan sing nyederhanakake manajemen obyek komposit sing kompleks lan nggawe karya luwih trep. Sawetara fungsi kasedhiya ing OpenStack ditutup saka nggunakake langsung, nanging kasedhiya liwat API kita.

Panyedhiya Selectel Terraform saiki kalebu kemampuan kanggo ngatur sumber daya VPC ing ngisor iki:

  • proyek lan kuota;
  • pangguna, peran lan token;
  • subnet umum, kalebu lintas-regional lan VRRP;
  • lisensi piranti lunak.

Panyedhiya nggunakake perpustakaan Go umum kanggo nggarap API VPC. Perpustakaan lan panyedhiya dhewe minangka sumber terbuka, pangembangane ditindakake ing Github:

Kanggo ngatur sumber daya maya liyane, kayata mesin virtual, disk, kluster Kubernetes, sampeyan bisa nggunakake panyedhiya OpenStack Terraform. Dokumentasi resmi kanggo loro panyedhiya kasedhiya ing tautan ing ngisor iki:

Miwiti

Kanggo miwiti, sampeyan kudu nginstal Terraform (instruksi lan pranala menyang paket instalasi bisa ditemokake ing situs resmi).

Kanggo operate, panyedhiya mbutuhake tombol API Selectel, sing digawe ing panel kontrol akun.

Manifes kanggo nggarap Selectel digawe nggunakake Terraform utawa nggunakake conto siap digawe sing kasedhiya ing repositori Github kita: terraform-conto.

Repositori kanthi conto dipérang dadi rong direktori:

  • modul, ngemot modul cilik sing bisa digunakake maneh sing njupuk set paramèter minangka input lan ngatur sumber daya cilik;
  • conto, ngemot conto pesawat lengkap modul interconnected.

Sawise nginstal Terraform, nggawe tombol API Selectel lan familiarize dhewe karo conto, ayo pindhah menyang conto praktis.

Conto nggawe server karo disk lokal

Ayo goleki conto nggawe proyek, pangguna kanthi peran lan mesin virtual kanthi disk lokal: terraform-conto/conto/vpc/server_local_root_disk.

Ing file vars.tf kabeh paramèter sing bakal digunakake nalika nelpon modul diterangake. Sawetara wong duwe nilai standar, contone, server bakal digawe ing zona ru-3a kanthi konfigurasi ing ngisor iki:

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

Ing file utama.tf Panyedhiya Selectel diwiwiti:

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

Berkas iki uga ngemot nilai standar kanggo kunci SSH sing bakal diinstal ing server:

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

Yen perlu, sampeyan bisa nemtokake kunci umum sing beda. Tombol ora kudu ditemtokake minangka path file; sampeyan uga bisa nambah nilai minangka senar.

Salajengipun ing file iki modul dibukak project_with_user и server_local_root_disk, sing ngatur sumber daya sing dibutuhake.

Ayo ndeleng modul iki kanthi luwih rinci.

Nggawe proyek lan pangguna kanthi peran

Modul pisanan nggawe proyek lan pangguna kanthi peran ing proyek kasebut: terraform-conto/modul/vpc/project_with_user.

Pangguna sing digawe bakal bisa mlebu menyang OpenStack lan ngatur sumber daya. Modul iki prasaja lan mung ngatur telung entitas:

  • pilih_vpc_project_v2,
  • pilih_vpc_user_v2,
  • pilih_vpc_role_v2.

Nggawe server virtual karo disk lokal

Modul kapindho ngurusi ngatur obyek OpenStack, sing perlu kanggo nggawe server karo disk lokal.

Sampeyan kudu nggatekake sawetara argumen sing ditemtokake ing modul iki kanggo sumber daya openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argumentasi ignore_changes ngidini sampeyan nglirwakake owah-owahan atribut id kanggo gambar sing digunakake kanggo nggawe mesin virtual. Ing layanan VPC, umume gambar umum dianyari kanthi otomatis sepisan seminggu lan ing wektu sing padha id uga owah-owahan. Iki amarga keanehan komponen OpenStack - Glance, ing ngendi gambar dianggep minangka entitas sing ora bisa diganti.

Yen sampeyan nggawe utawa ngowahi server utawa disk sing wis ana minangka argumen gambar_id digunakake dening id gambar umum, banjur sawise gambar kasebut dianyari, mbukak manifest Terraform maneh bakal nggawe maneh server utawa disk. Nggunakake argumentasi ignore_changes ngijini sampeyan kanggo supaya kahanan kuwi.

Cathetan: argumentasi ignore_changes muncul ing Terraform cukup suwe: narik #2525.

Argumentasi ignore_resize_confirmation dibutuhake supaya bisa ngowahi ukuran disk lokal, inti, utawa memori server. Owah-owahan kasebut ditindakake liwat komponen OpenStack Nova nggunakake panyuwunan ngowahi ukuran. Default Nova sawise request ngowahi ukuran nempatno server menyang status verifikasi_ukuran lan ngenteni konfirmasi tambahan saka pangguna. Nanging, prilaku iki bisa diganti supaya Nova ora ngenteni tumindak tambahan saka pangguna.

Argumentasi kasebut ngidini Terraform ora ngenteni status kasebut verifikasi_ukuran kanggo server lan disiapake kanggo server ing status aktif sawise ngganti paramèter. Argumentasi kasedhiya saka versi 1.10.0 saka panyedhiya OpenStack Terraform: narik #422.

Nggawe Sumber Daya

Sadurunge mbukak manifests, elinga yen ing conto kita, rong panyedhiya beda diluncurake, lan panyedhiya OpenStack gumantung saka sumber daya panyedhiya Selectel, amarga tanpa nggawe pangguna ing proyek kasebut, ora mungkin ngatur obyek kasebut. . Sayange, kanggo alesan sing padha, kita ora bisa mung mbukak printah terraform ditrapake ing conto kita. Pisanan kita kudu nindakake aplikasi kanggo modul project_with_user lan sawise iku kanggo kabeh liyane.

Cathetan: Masalah iki durung dirampungake ing Terraform, sampeyan bisa ngetutake diskusi ing Github ing Jeksa Agung bisa ngetokake #2430 и Jeksa Agung bisa ngetokake #4149.

Kanggo nggawe sumber daya, pindhah menyang direktori terraform-conto/conto/vpc/server_local_root_disk, isine kudu kaya mangkene:

$ ls
README.md	   main.tf		vars.tf

Kita miwiti modul nggunakake printah:

$ terraform init

Output nuduhake yen Terraform ndownload versi paling anyar saka panyedhiya sing digunakake lan mriksa kabeh modul sing diterangake ing conto kasebut.

Pisanan ayo ngetrapake modul kasebut project_with_user. Iki mbutuhake nilai kanthi manual kanggo variabel sing durung disetel:

  • akun_sel karo nomer akun Selectel;
  • sel_token karo kunci kanggo Selectel API;
  • panganggo_sandi karo sandhi kanggo pangguna OpenStack.

Nilai kanggo rong variabel pisanan kudu dijupuk saka panel kontrol.

Kanggo variabel pungkasan, sampeyan bisa nggawe tembung sandhi apa wae.

Kanggo nggunakake modul sampeyan kudu ngganti nilai SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD mlaku printah:

$ 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

Sawise mbukak perintah kasebut, Terraform bakal nuduhake sumber daya apa sing pengin digawe lan njaluk 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

Sawise proyek, pangguna lan peran wis digawe, sampeyan bisa miwiti nggawe sumber daya sing isih ana:

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

Nalika nggawe sumber daya, mbayar manungsa waé menyang output Terraform kanthi alamat IP eksternal ing ngendi server sing digawe bakal bisa diakses:

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

Sampeyan bisa nggarap mesin virtual sing digawe liwat SSH nggunakake IP sing ditemtokake.

Sumberdaya Suntingan

Saliyane nggawe sumber daya liwat Terraform, uga bisa diowahi.

Contone, ayo nambah jumlah intine lan memori kanggo server kita kanthi ngganti nilai kanggo paramèter. server_vcpus и server_ram_mb ing 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

Sawise iki, kita mriksa owah-owahan apa sing bakal ditindakake nggunakake perintah ing ngisor iki:

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

Akibaté, Terraform nggawe owah-owahan sumber daya openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Elinga yen iki bakal mbutuhake rebooting mesin virtual sing digawe.

Kanggo aplikasi konfigurasi mesin virtual anyar, nggunakake printah terraform ditrapake, sing wis diluncurake sadurunge.

Kabeh obyek sing digawe bakal ditampilake ing Panel kontrol VPC:

panyedhiya Terraform Selectel

Ing kita contone repositori Sampeyan uga bisa ndeleng manifests kanggo nggawe mesin virtual karo drive jaringan.

Conto nggawe kluster Kubernetes

Sadurunge nerusake menyang conto sabanjure, kita bakal ngresiki sumber daya sing digawe sadurunge. Kanggo nindakake iki ing ROOT saka project terraform-conto/conto/vpc/server_local_root_disk Ayo mbukak printah kanggo mbusak obyek 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

Banjur jalanake prentah kanggo mbusak objek 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

Ing kasus loro, sampeyan kudu konfirmasi pambusakan kabeh obyek:

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 ing ngisor iki ana ing direktori terraform-conto/conto/vpc/kubernetes_cluster.

Conto iki nggawe proyek, pangguna sing duwe peran ing proyek kasebut, lan ngunggahake siji kluster Kubernetes. Ing file vars.tf sampeyan bisa ndeleng nilai gawan, kayata nomer simpul, karakteristik, versi Kubernetes, etc.

Kanggo nggawe sumber daya sing padha karo conto pisanan, kita bakal miwiti miwiti modul lan nggawe sumber daya modul project_with_userbanjur nggawe kabeh liyane:

$ 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

Kita bakal nransfer nggawe lan ngatur kluster Kubernetes liwat komponen OpenStack Magnum. Sampeyan bisa ngerteni luwih akeh babagan cara nggarap kluster ing salah sawijining artikel sadurunge, uga ing basis kawruh.

Nalika nyiapake kluster, disk lan mesin virtual bakal digawe lan kabeh komponen sing dibutuhake bakal diinstal. Persiapan mbutuhake udakara 4 menit, sajrone wektu kasebut Terraform bakal nampilake pesen kaya:

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

Sawise instalasi rampung, Terraform bakal nuduhake manawa kluster wis siyap lan nampilake 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.

Kanggo ngatur kluster Kubernetes sing digawe liwat sarana kubectl sampeyan kudu njaluk file akses cluster. Kanggo nindakake iki, pindhah menyang proyek sing digawe liwat Terraform ing dhaptar proyek ing akun sampeyan:

panyedhiya Terraform Selectel

Sabanjure, tindakake link kaya xxxxxx.selvpc.rusing katon ing ngisor jeneng proyek:

panyedhiya Terraform Selectel

Kanggo informasi login, gunakake jeneng pangguna lan sandhi sing digawe liwat Terraform. Yen sampeyan durung ngapusi vars.tf utawa utama.tf contone, pangguna bakal duwe jeneng tf_user. Sampeyan kudu nggunakake nilai variabel minangka sandhi TF_VAR_user_password, sing ditemtokake nalika wiwitan terraform ditrapake sadurunge

Ing njero proyek sampeyan kudu pindhah menyang tab Kubernetes:

panyedhiya Terraform Selectel

Iki ngendi kluster digawe liwat Terraform dumunung. Download file kanggo kubectl sampeyan bisa ing tab "Akses":

panyedhiya Terraform Selectel

Instruksi instalasi dumunung ing tab sing padha. kubectl lan nggunakake diundhuh config.yaml.

Sawise diluncurake kubectl lan nyetel variabel lingkungan KUBECONFIG sampeyan bisa nggunakake 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 simpul kluster bisa gampang diganti liwat Terraform.
Ing file utama.tf nilai ing ngisor iki ditemtokake:

cluster_node_count = "${var.cluster_node_count}"

Nilai iki diganti saka vars.tf:

variable "cluster_node_count" {
default = 2
}

Sampeyan bisa ngganti nilai standar ing vars.tf, utawa nemtokake nilai sing dibutuhake langsung ing utama.tf:

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

Kanggo ngetrapake owah-owahan, kaya ing conto pisanan, gunakake perintah kasebut terraform ditrapake:

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

Nalika jumlah simpul diganti, kluster bakal tetep kasedhiya. Sawise nambahake simpul liwat Terraform, sampeyan bisa nggunakake 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

kesimpulan

Ing artikel iki, kita kenal karo cara utama kanggo nggarap "Awan pribadi virtual" liwat Terraform. Kita bakal bungah yen sampeyan nggunakake panyedhiya Selectel Terraform resmi lan menehi saran.

Sembarang kewan omo sing ditemokake ing panyedhiya Selectel Terraform bisa dilapurake liwat Masalah Github.

Source: www.habr.com

Add a comment