Penyedia Terraform Selectel

Penyedia Terraform Selectel

Kami telah melancarkan penyedia Terraform rasmi untuk bekerjasama dengan Selectel. Produk ini membolehkan pengguna melaksanakan pengurusan sumber sepenuhnya melalui metodologi Infrastruktur-sebagai-kod.

Pembekal pada masa ini menyokong pengurusan sumber perkhidmatan "Awan peribadi maya" (selepas ini dirujuk sebagai VPC). Pada masa hadapan, kami merancang untuk menambah pengurusan sumber untuk perkhidmatan lain yang disediakan oleh Selectel.

Seperti yang anda sedia maklum, perkhidmatan VPC dibina pada OpenStack. Walau bagaimanapun, disebabkan fakta bahawa OpenStack tidak menyediakan alat asli untuk menyediakan awan awam, kami melaksanakan fungsi yang hilang dalam set API tambahan yang memudahkan pengurusan objek komposit kompleks dan menjadikan kerja lebih mudah. Beberapa fungsi yang tersedia dalam OpenStack ditutup daripada penggunaan langsung, tetapi tersedia melalui API kami.

Penyedia Selectel Terraform kini termasuk keupayaan untuk mengurus sumber VPC berikut:

  • projek dan kuota mereka;
  • pengguna, peranan dan token mereka;
  • subnet awam, termasuk merentas wilayah dan VRRP;
  • lesen perisian.

Pembekal menggunakan pustaka Go awam kami untuk bekerja dengan API VPC. Kedua-dua perpustakaan dan pembekal itu sendiri adalah sumber terbuka, pembangunan mereka dijalankan pada Github:

Untuk mengurus sumber awan lain, seperti mesin maya, cakera, kelompok Kubernetes, anda boleh menggunakan penyedia OpenStack Terraform. Dokumentasi rasmi untuk kedua-dua pembekal boleh didapati di pautan berikut:

Bermula

Untuk bermula, anda perlu memasang Terraform (arahan dan pautan ke pakej pemasangan boleh didapati di laman web rasmi).

Untuk beroperasi, pembekal memerlukan kunci API Selectel, yang dibuat dalam panel kawalan akaun.

Manifes untuk bekerja dengan Selectel dibuat menggunakan Terraform atau menggunakan set contoh siap sedia yang tersedia dalam repositori Github kami: terraform-contoh.

Repositori dengan contoh dibahagikan kepada dua direktori:

  • modul, mengandungi modul kecil boleh guna semula yang mengambil set parameter sebagai input dan mengurus set kecil sumber;
  • contoh, mengandungi contoh set lengkap modul yang saling berkaitan.

Selepas memasang Terraform, mencipta kunci API Selectel dan membiasakan diri dengan contoh, mari beralih kepada contoh praktikal.

Contoh mencipta pelayan dengan cakera tempatan

Mari lihat contoh mencipta projek, pengguna dengan peranan dan mesin maya dengan cakera tempatan: terraform-examples/examples/vpc/server_local_root_disk.

Dalam fail vars.tf semua parameter yang akan digunakan semasa memanggil modul diterangkan. Sebahagian daripada mereka mempunyai nilai lalai, sebagai contoh, pelayan akan dibuat dalam zon ru-3a dengan konfigurasi berikut:

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

Dalam fail utama.tf Pembekal Selectel dimulakan:

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

Fail ini juga mengandungi nilai lalai untuk kunci SSH yang akan dipasang pada pelayan:

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

Jika perlu, anda boleh menentukan kunci awam yang berbeza. Kunci tidak perlu ditentukan sebagai laluan fail; anda juga boleh menambah nilai sebagai rentetan.

Selanjutnya dalam fail ini modul dilancarkan projek_dengan_pengguna и server_local_root_disk, yang menguruskan sumber yang diperlukan.

Mari lihat modul ini dengan lebih terperinci.

Mencipta projek dan pengguna dengan peranan

Modul pertama mencipta projek dan pengguna dengan peranan dalam projek itu: terraform-examples/modules/vpc/project_with_user.

Pengguna yang dicipta akan dapat log masuk ke OpenStack dan mengurus sumbernya. Modul ini mudah dan menguruskan hanya tiga entiti:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Mencipta pelayan maya dengan cakera tempatan

Modul kedua berkaitan dengan mengurus objek OpenStack, yang diperlukan untuk mencipta pelayan dengan cakera setempat.

Anda harus memberi perhatian kepada beberapa hujah yang dinyatakan dalam modul ini untuk sumber openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

hujah abaikan_perubahan membolehkan anda mengabaikan perubahan atribut id untuk imej yang digunakan untuk mencipta mesin maya. Dalam perkhidmatan VPC, kebanyakan imej awam dikemas kini secara automatik sekali seminggu dan pada masa yang sama imejnya id juga berubah. Ini disebabkan oleh keistimewaan komponen OpenStack - Glance, di mana imej dianggap sebagai entiti tidak berubah.

Jika anda mencipta atau mengubah suai pelayan atau cakera sedia ada yang mempunyai sebagai hujah id_gambar digunakan id imej awam, kemudian selepas imej itu dikemas kini, menjalankan manifes Terraform sekali lagi akan mencipta semula pelayan atau cakera. Menggunakan hujah abaikan_perubahan membolehkan anda mengelakkan situasi sedemikian.

Nota: hujah abaikan_perubahan muncul dalam Terraform agak lama dahulu: tarik#2525.

hujah abaikan_ubah saiz_pengesahan diperlukan untuk berjaya mengubah saiz cakera tempatan, teras atau memori pelayan. Perubahan sedemikian dibuat melalui komponen OpenStack Nova menggunakan permintaan mengubah saiz. Nova lalai selepas permintaan mengubah saiz meletakkan pelayan ke dalam status verify_resize dan menunggu pengesahan tambahan daripada pengguna. Walau bagaimanapun, tingkah laku ini boleh diubah supaya Nova tidak menunggu tindakan tambahan daripada pengguna.

Argumen yang ditentukan membenarkan Terraform untuk tidak menunggu status verify_resize untuk pelayan dan bersedia untuk pelayan berada dalam status aktif selepas menukar parameternya. Hujah tersedia daripada versi 1.10.0 penyedia OpenStack Terraform: tarik#422.

Mencipta Sumber

Sebelum menjalankan manifes, sila ambil perhatian bahawa dalam contoh kami, dua pembekal berbeza dilancarkan dan pembekal OpenStack bergantung pada sumber pembekal Selectel, kerana tanpa membuat pengguna dalam projek, adalah mustahil untuk mengurus objek kepunyaannya. . Malangnya, atas sebab yang sama kita tidak boleh menjalankan arahan sahaja terraform terpakai dalam contoh kita. Pertama kita perlu lakukan memohon untuk modul projek_dengan_pengguna dan selepas itu untuk segala-galanya.

Nota: Isu ini belum diselesaikan dalam Terraform, anda boleh mengikuti perbincangan di Github di isu #2430 и isu #4149.

Untuk mencipta sumber, pergi ke direktori terraform-examples/examples/vpc/server_local_root_disk, kandungannya hendaklah seperti ini:

$ ls
README.md	   main.tf		vars.tf

Kami memulakan modul menggunakan arahan:

$ terraform init

Output menunjukkan bahawa Terraform memuat turun versi terkini penyedia yang digunakan dan menyemak semua modul yang diterangkan dalam contoh.

Mula-mula mari kita gunakan modul projek_dengan_pengguna. Ini memerlukan nilai lulus secara manual untuk pembolehubah yang belum ditetapkan:

  • akaun_sel dengan nombor akaun Selectel anda;
  • sel_token dengan kunci anda untuk Selectel API;
  • kata laluan_pengguna dengan kata laluan untuk pengguna OpenStack.

Nilai untuk dua pembolehubah pertama mesti diambil daripada panel kawalan.

Untuk pembolehubah terakhir, anda boleh membuat sebarang kata laluan.

Untuk menggunakan modul anda perlu menggantikan nilai SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD menjalankan arahan:

$ 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

Selepas menjalankan arahan, Terraform akan menunjukkan sumber yang ingin dicipta dan meminta pengesahan:

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

Setelah projek, pengguna dan peranan telah dibuat, anda boleh mula mencipta sumber yang tinggal:

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

Apabila mencipta sumber, beri perhatian kepada output Terraform dengan alamat IP luaran di mana pelayan yang dibuat akan boleh diakses:

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

Anda boleh bekerja dengan mesin maya yang dicipta melalui SSH menggunakan IP yang ditentukan.

Mengedit Sumber

Selain mencipta sumber melalui Terraform, ia juga boleh diubah suai.

Sebagai contoh, mari kita tingkatkan bilangan teras dan memori untuk pelayan kami dengan menukar nilai untuk parameter pelayan_vcpus и pelayan_ram_mb dalam fail contoh/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

Selepas ini, kami menyemak perubahan yang akan membawa kepada menggunakan arahan berikut:

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

Akibatnya, Terraform membuat perubahan sumber openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Sila ambil perhatian bahawa ini akan memerlukan but semula mesin maya yang dibuat.

Untuk menggunakan konfigurasi mesin maya baharu, gunakan arahan terraform terpakai, yang telah kami lancarkan sebelum ini.

Semua objek yang dibuat akan dipaparkan dalam Panel kawalan VPC:

Penyedia Terraform Selectel

Dalam kami contoh repositori Anda juga boleh melihat manifes untuk mencipta mesin maya dengan pemacu rangkaian.

Contoh mencipta kluster Kubernetes

Sebelum kita beralih kepada contoh seterusnya, kita akan membersihkan sumber yang kita buat sebelum ini. Untuk melakukan ini dalam akar projek terraform-examples/examples/vpc/server_local_root_disk Mari jalankan arahan untuk memadam objek 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

Kemudian jalankan arahan untuk mengosongkan 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

Dalam kedua-dua kes, anda perlu mengesahkan pemadaman semua objek:

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

Contoh berikut adalah dalam direktori terraform-examples/examples/vpc/kubernetes_cluster.

Contoh ini mencipta projek, pengguna yang mempunyai peranan dalam projek dan menimbulkan satu gugusan Kubernetes. Dalam fail vars.tf anda boleh melihat nilai lalai, seperti bilangan nod, cirinya, versi Kubernetes, dsb.

Untuk mencipta sumber yang serupa dengan contoh pertama, pertama sekali kita akan mula memulakan modul dan mencipta sumber modul projek_dengan_penggunadan kemudian mencipta segala-galanya:

$ 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

Kami akan memindahkan penciptaan dan pengurusan kluster Kubernetes melalui komponen OpenStack Magnum. Anda boleh mengetahui lebih lanjut tentang cara bekerja dengan kluster dalam salah satu daripada kami artikel sebelumnya, serta dalam asas pengetahuan.

Semasa menyediakan kluster, cakera dan mesin maya akan dibuat dan semua komponen yang diperlukan akan dipasang. Penyediaan mengambil masa kira-kira 4 minit, di mana Terraform akan memaparkan mesej seperti:

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

Setelah pemasangan selesai, Terraform akan menunjukkan bahawa kluster sudah sedia dan memaparkan IDnya:

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

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

Untuk mengurus kelompok Kubernetes yang dibuat melalui utiliti kubectl anda perlu mendapatkan fail akses kluster. Untuk melakukan ini, pergi ke projek yang dibuat melalui Terraform dalam senarai projek dalam akaun anda:

Penyedia Terraform Selectel

Seterusnya, ikuti pautan seperti xxxxxx.selvpc.ruyang muncul di bawah nama projek:

Penyedia Terraform Selectel

Untuk maklumat log masuk, gunakan nama pengguna dan kata laluan yang anda buat melalui Terraform. Jika anda tidak menipu vars.tf atau utama.tf untuk contoh kami, pengguna akan mempunyai nama tf_user. Anda mesti menggunakan nilai pembolehubah sebagai kata laluan TF_VAR_user_password, yang dinyatakan pada permulaan terraform terpakai lebih awal.

Di dalam projek anda perlu pergi ke tab Kubernetes:

Penyedia Terraform Selectel

Di sinilah kluster yang dibuat melalui Terraform terletak. Muat turun fail untuk kubectl anda boleh pada tab "Akses":

Penyedia Terraform Selectel

Arahan pemasangan terletak pada tab yang sama. kubectl dan penggunaan yang dimuat turun config.yaml.

Selepas pelancaran kubectl dan menetapkan pembolehubah persekitaran KUBECONFIG anda boleh menggunakan 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

Bilangan nod kluster boleh ditukar dengan mudah melalui Terraform.
Dalam fail utama.tf nilai berikut dinyatakan:

cluster_node_count = "${var.cluster_node_count}"

Nilai ini digantikan daripada vars.tf:

variable "cluster_node_count" {
default = 2
}

Anda boleh menukar sama ada nilai lalai dalam vars.tf, atau nyatakan nilai yang diperlukan terus dalam utama.tf:

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

Untuk menggunakan perubahan, seperti dalam kes contoh pertama, gunakan arahan terraform terpakai:

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

Apabila bilangan nod berubah, kluster akan kekal tersedia. Selepas menambah nod melalui Terraform, anda boleh menggunakannya 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

Dalam artikel ini kami berkenalan dengan cara utama untuk bekerja "Awan peribadi maya" melalui Terraform. Kami akan gembira jika anda menggunakan pembekal Selectel Terraform rasmi dan memberikan maklum balas.

Sebarang pepijat yang ditemui dalam pembekal Selectel Terraform boleh dilaporkan melalui Isu Github.

Sumber: www.habr.com

Tambah komen