Penyedia Terraform Selectel

Penyedia Terraform Selectel

Kami telah meluncurkan penyedia Terraform resmi untuk bekerja dengan Selectel. Produk ini memungkinkan pengguna untuk sepenuhnya menerapkan manajemen sumber daya melalui metodologi Infrastruktur sebagai kode.

Penyedia saat ini mendukung manajemen sumber daya layanan "Awan pribadi virtual" (selanjutnya disebut sebagai VPC). Kedepannya, kami berencana menambahkan pengelolaan sumber daya untuk layanan lain yang disediakan oleh Selectel.

Seperti yang sudah Anda ketahui, layanan VPC dibangun di OpenStack. Namun, karena OpenStack tidak menyediakan alat asli untuk melayani cloud publik, kami mengimplementasikan fungsionalitas yang hilang dalam serangkaian API tambahan yang menyederhanakan pengelolaan objek komposit kompleks dan membuat pekerjaan lebih nyaman. Beberapa fungsi yang tersedia di OpenStack ditutup dari penggunaan langsung, namun tersedia melalui API kami.

Penyedia Selectel Terraform kini menyertakan kemampuan untuk mengelola sumber daya VPC berikut:

  • proyek dan kuotanya;
  • pengguna, peran dan token mereka;
  • subnet publik, termasuk lintas regional dan VRRP;
  • lisensi perangkat lunak.

Penyedia menggunakan perpustakaan Go publik kami untuk bekerja dengan VPC API. Baik perpustakaan maupun penyedianya sendiri adalah sumber terbuka, pengembangannya dilakukan di Github:

Untuk mengelola sumber daya cloud lainnya, seperti mesin virtual, disk, cluster Kubernetes, Anda dapat menggunakan penyedia OpenStack Terraform. Dokumentasi resmi untuk kedua penyedia tersedia di tautan berikut:

Memulai

Untuk memulai, Anda perlu menginstal Terraform (instruksi dan tautan ke paket instalasi dapat ditemukan di situs resmi).

Untuk beroperasi, penyedia memerlukan kunci API Selectel, yang dibuat di panel kontrol akun.

Manifes untuk bekerja dengan Selectel dibuat menggunakan Terraform atau menggunakan serangkaian contoh siap pakai yang tersedia di repositori Github kami: contoh terraform.

Repositori dengan contoh dibagi menjadi dua direktori:

  • modul, berisi modul kecil yang dapat digunakan kembali yang mengambil sekumpulan parameter sebagai masukan dan mengelola sejumlah kecil sumber daya;
  • contoh, berisi contoh satu set lengkap modul yang saling berhubungan.

Setelah menginstal Terraform, membuat kunci API Selectel, dan memahami contoh-contohnya, mari beralih ke contoh praktis.

Contoh pembuatan server dengan disk lokal

Mari kita lihat contoh pembuatan proyek, pengguna dengan peran, dan mesin virtual dengan disk lokal: terraform-examples/examples/vpc/server_local_root_disk.

Dalam file vars.tf semua parameter yang akan digunakan saat memanggil modul dijelaskan. Beberapa di antaranya memiliki nilai default, misalnya server akan dibuat di zona tersebut 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 file utama.tf Penyedia Selectel diinisialisasi:

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

File ini juga berisi nilai default untuk kunci SSH yang akan dipasang di server:

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

Jika perlu, Anda dapat menentukan kunci publik lain. Kuncinya tidak harus ditentukan sebagai jalur file; Anda juga dapat menambahkan nilai sebagai string.

Selanjutnya dalam file ini modul diluncurkan proyek_dengan_pengguna и server_local_root_disk, yang mengelola sumber daya yang diperlukan.

Mari kita lihat modul-modul ini lebih detail.

Membuat proyek dan pengguna dengan peran

Modul pertama membuat proyek dan pengguna dengan peran dalam proyek tersebut: terraform-examples/modules/vpc/project_with_user.

Pengguna yang dibuat akan dapat masuk ke OpenStack dan mengelola sumber dayanya. Modul ini sederhana dan hanya mengelola tiga entitas:

  • pilihel_vpc_project_v2,
  • pilihel_vpc_user_v2,
  • pilihel_vpc_role_v2.

Membuat server virtual dengan disk lokal

Modul kedua berkaitan dengan pengelolaan objek OpenStack, yang diperlukan untuk membuat server dengan disk lokal.

Anda harus memperhatikan beberapa argumen yang ditentukan dalam modul ini untuk sumber daya openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argumen abaikan_perubahan memungkinkan Anda mengabaikan perubahan atribut id untuk gambar yang digunakan untuk membuat mesin virtual. Di layanan VPC, sebagian besar gambar publik diperbarui secara otomatis seminggu sekali dan pada saat yang sama id juga berubah. Hal ini disebabkan oleh kekhasan komponen OpenStack - Glance, di mana gambar dianggap sebagai entitas yang tidak dapat diubah.

Jika Anda membuat atau memodifikasi server atau disk yang ada sebagai argumen gambar_id bekas id gambar publik, kemudian setelah gambar tersebut diperbarui, menjalankan manifes Terraform lagi akan membuat ulang server atau disk. Menggunakan argumen abaikan_perubahan memungkinkan Anda menghindari situasi seperti itu.

Catatan: argumen abaikan_perubahan muncul di Terraform beberapa waktu yang lalu: tarik#2525.

Argumen abaikan_resize_confirmation diperlukan agar berhasil mengubah ukuran disk lokal, inti, atau memori server. Perubahan tersebut dilakukan melalui komponen OpenStack Nova menggunakan permintaan mengubah ukuran. Default Nova setelah permintaan mengubah ukuran menempatkan server ke status verifikasi_resize dan menunggu konfirmasi tambahan dari pengguna. Namun perilaku tersebut dapat diubah agar Nova tidak menunggu tindakan tambahan dari pengguna.

Argumen yang ditentukan memungkinkan Terraform untuk tidak menunggu status verifikasi_resize untuk server dan bersiaplah untuk server dalam status aktif setelah mengubah parameternya. Argumennya tersedia dari penyedia OpenStack Terraform versi 1.10.0: tarik#422.

Menciptakan Sumber Daya

Sebelum menjalankan manifes, harap dicatat bahwa dalam contoh kami, dua penyedia berbeda diluncurkan, dan penyedia OpenStack bergantung pada sumber daya penyedia Selectel, karena tanpa membuat pengguna dalam proyek, tidak mungkin untuk mengelola objek miliknya. . Sayangnya, untuk alasan yang sama kita tidak bisa menjalankan perintah begitu saja terraform berlaku di dalam contoh kita. Pertama-tama kita perlu melakukannya menerapkan untuk modul proyek_dengan_pengguna dan setelah itu untuk yang lainnya.

Catatan: Masalah ini belum terselesaikan di Terraform, Anda dapat mengikuti diskusi di Github di edisi#2430 и edisi#4149.

Untuk membuat sumber daya, buka direktori terraform-examples/examples/vpc/server_local_root_disk, isinya harus seperti ini:

$ ls
README.md	   main.tf		vars.tf

Kami menginisialisasi modul menggunakan perintah:

$ terraform init

Outputnya menunjukkan bahwa Terraform mengunduh versi terbaru dari penyedia yang digunakannya dan memeriksa semua modul yang dijelaskan dalam contoh.

Pertama mari kita terapkan modulnya proyek_dengan_pengguna. Ini memerlukan penyampaian nilai secara manual untuk variabel yang belum disetel:

  • sel_akun dengan nomor akun Selectel Anda;
  • sel_token dengan kunci Anda untuk Selectel API;
  • kata sandi_pengguna dengan kata sandi untuk pengguna OpenStack.

Nilai untuk dua variabel pertama harus diambil panel kontrol.

Untuk variabel terakhir, Anda dapat membuat kata sandi apa pun.

Untuk menggunakan modul, Anda perlu mengganti nilainya SEL_AKUN, SEL_TOKEN и USER_PASSWORD menjalankan perintah:

$ 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

Setelah menjalankan perintah, Terraform akan menampilkan sumber daya apa yang ingin dibuat dan meminta 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

Setelah proyek, pengguna, dan peran dibuat, Anda dapat mulai membuat sumber daya yang tersisa:

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

Saat membuat sumber daya, perhatikan output Terraform dengan alamat IP eksternal tempat server yang dibuat dapat diakses:

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

Anda dapat bekerja dengan mesin virtual yang dibuat melalui SSH menggunakan IP yang ditentukan.

Mengedit Sumber Daya

Selain membuat sumber daya melalui Terraform, sumber daya juga dapat dimodifikasi.

Misalnya, mari tingkatkan jumlah inti dan memori untuk server kita dengan mengubah nilai parameternya server_vcpus и server_ram_mb dalam file 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

Setelah ini, kami memeriksa perubahan apa yang akan terjadi dengan menggunakan perintah berikut:

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

Hasilnya, Terraform melakukan perubahan sumber daya openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Harap dicatat bahwa ini memerlukan reboot mesin virtual yang dibuat.

Untuk menerapkan konfigurasi mesin virtual baru, gunakan perintah terraform berlaku, yang telah kami luncurkan sebelumnya.

Semua objek yang dibuat akan ditampilkan Panel kontrol VPC:

Penyedia Terraform Selectel

Di kami contoh repositori Anda juga dapat melihat manifes untuk membuat mesin virtual dengan drive jaringan.

Contoh pembuatan cluster Kubernetes

Sebelum kita melanjutkan ke contoh berikutnya, kita akan membersihkan sumber daya yang kita buat sebelumnya. Untuk melakukan hal ini di akar proyek terraform-examples/examples/vpc/server_local_root_disk Mari jalankan perintah untuk menghapus 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 perintah untuk menghapus 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 kasus tersebut, Anda perlu mengonfirmasi penghapusan 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 ada di direktori terraform-examples/examples/vpc/kubernetes_cluster.

Contoh ini membuat sebuah proyek, pengguna dengan peran dalam proyek tersebut, dan memunculkan satu cluster Kubernetes. Dalam berkas vars.tf Anda dapat melihat nilai default, seperti jumlah node, karakteristiknya, versi Kubernetes, dll.

Untuk membuat sumber daya yang mirip dengan contoh pertama, pertama-tama kita akan mulai menginisialisasi modul dan membuat sumber daya modul proyek_dengan_penggunadan kemudian membuat yang lainnya:

$ 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 mentransfer pembuatan dan pengelolaan cluster Kubernetes melalui komponen OpenStack Magnum. Anda dapat mengetahui lebih lanjut tentang cara bekerja dengan cluster di salah satu cluster kami artikel sebelumnya, begitu juga di dasar pengetahuan.

Saat menyiapkan cluster, disk dan mesin virtual akan dibuat dan semua komponen yang diperlukan akan diinstal. Persiapan memakan waktu sekitar 4 menit, selama itu Terraform akan menampilkan pesan seperti:

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

Setelah instalasi selesai, Terraform akan menunjukkan bahwa cluster sudah siap dan menampilkan ID-nya:

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 mengelola cluster Kubernetes yang dibuat melalui utilitas kubectl Anda perlu mendapatkan file akses cluster. Untuk melakukannya, buka proyek yang dibuat melalui Terraform di daftar proyek di akun Anda:

Penyedia Terraform Selectel

Selanjutnya, ikuti tautan seperti xxxxxx.selvpc.ruyang muncul di bawah nama proyek:

Penyedia Terraform Selectel

Untuk informasi login gunakan username dan password yang Anda buat melalui Terraform. Jika Anda belum curang vars.tf или utama.tf untuk contoh kita, pengguna akan memiliki nama tf_user. Anda harus menggunakan nilai variabel sebagai kata sandi TF_VAR_kata sandi_pengguna, yang ditentukan saat startup terraform berlaku sebelumnya.

Di dalam proyek Anda perlu membuka tab Kubernetes:

Penyedia Terraform Selectel

Di sinilah letak cluster yang dibuat melalui Terraform. Unduh file untuk kubectl Anda dapat melakukannya di tab "Akses":

Penyedia Terraform Selectel

Petunjuk instalasi ada di tab yang sama. kubectl dan penggunaan unduhan config.yaml.

Setelah peluncuran kubectl dan mengatur variabel lingkungan KUBECONFIG Anda dapat menggunakan Kubernet:

$ 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 node cluster dapat dengan mudah diubah melalui Terraform.
Dalam file utama.tf nilai berikut ditentukan:

cluster_node_count = "${var.cluster_node_count}"

Nilai ini diganti dari vars.tf:

variable "cluster_node_count" {
default = 2
}

Anda dapat mengubah nilai default di vars.tf, atau tentukan nilai yang diperlukan secara langsung utama.tf:

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

Untuk menerapkan perubahan, seperti contoh pertama, gunakan perintah terraform berlaku:

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

Ketika jumlah node berubah, cluster akan tetap tersedia. Setelah menambahkan node melalui Terraform, Anda dapat 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

Pada artikel ini kita berkenalan dengan cara-cara utama untuk bekerja "Awan pribadi virtual" melalui Terraform. Kami akan senang jika Anda menggunakan penyedia resmi Terraform Selectel dan memberikan masukan.

Setiap bug yang ditemukan di penyedia Selectel Terraform dapat dilaporkan melalui Masalah Github.

Sumber: www.habr.com

Tambah komentar