Selectel Penyedia Terraform



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

Saat ini, penyedia mendukung manajemen sumber daya layanan Virtual Private Cloud (selanjutnya disebut sebagai VPC). Di masa depan, kami berencana untuk menambahkannya ke manajemen sumber daya layanan lain yang disediakan oleh Selectel.

Seperti yang sudah Anda ketahui, layanan VPC didasarkan pada OpenStack. Namun, karena OpenStack tidak menyediakan alat asli untuk melayani cloud publik, kami telah mengimplementasikan fungsionalitas yang hilang dalam satu set API tambahan yang menyederhanakan pengelolaan objek komposit kompleks dan membuat pekerjaan lebih nyaman. Bagian dari fungsi yang tersedia di OpenStack ditutup dari penggunaan langsung, tetapi dapat diakses melalui API kami .

Penyedia Selectel Terraform sekarang menyediakan kemampuan untuk mengelola sumber daya VPC berikut:

  • proyek dan kuota mereka;
  • 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 dan penyedia itu sendiri adalah open-source, mereka sedang dikembangkan di Github:


Untuk mengelola sumber daya cloud lainnya, seperti mesin virtual, disk, kluster 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 web resmi ).

Agar berfungsi, penyedia memerlukan kunci Selectel API, yang dibuat di panel kontrol untuk akun .

Manifestasi untuk bekerja dengan Selectel dibuat menggunakan Terraform atau menggunakan sekumpulan contoh siap pakai yang tersedia di repositori Github kami: terraform-example .

Repositori dengan contoh-contoh dibagi menjadi dua direktori:

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

Setelah menginstal Terraform, membuat kunci API Selectel dan membiasakan diri dengan contoh, kami beralih ke contoh praktis.

Contoh membuat server dengan disk lokal


Pertimbangkan contoh membuat proyek, pengguna dengan peran dan mesin virtual dengan disk lokal: terraform-contoh / contoh / vpc / server_local_root_disk .

File vars.tf menjelaskan semua parameter yang akan digunakan saat memanggil modul. Beberapa dari mereka memiliki nilai default, misalnya, server akan dibuat di zona 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 main.tf , penyedia Selectel diinisialisasi:

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

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

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

Jika perlu, Anda dapat menentukan kunci publik yang berbeda. Kunci tidak harus ditentukan sebagai jalur ke file, Anda juga dapat menambahkan nilai sebagai string.

Selanjutnya dalam file ini modul project_with_user dan server_local_root_disk diluncurkan, yang mengelola sumber daya yang diperlukan.

Kami akan menganalisis modul-modul ini secara lebih rinci.

Membuat proyek dan pengguna dengan peran


Modul pertama membuat proyek dan pengguna dengan peran dalam proyek ini: terraform-example / 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:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Membuat server virtual dengan disk lokal


Modul kedua mengelola 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_in2 :

 resource "openstack_compute_instance_v2" "instance_1" { ... lifecycle { ignore_changes = ["image_id"] } vendor_options { ignore_resize_confirmation = true } } 

Argumen ign_changes memungkinkan Anda untuk mengabaikan perubahan atribut id untuk gambar yang digunakan untuk membuat mesin virtual. Dalam layanan VPC, sebagian besar gambar publik diperbarui secara otomatis seminggu sekali, dan id mereka juga berubah. Ini karena fitur komponen OpenStack - Glance, di mana gambar dianggap sebagai entitas yang tidak dapat diubah.

Jika server atau disk yang ada dibuat atau dimodifikasi yang menggunakan id gambar publik sebagai argumen image_id , maka setelah gambar ini diperbarui, memulai ulang manifes Terraform akan membuat ulang server atau disk. Menggunakan argumen ign_changes menghindari situasi ini.

Catatan: argumen ign_changes muncul di Terraform sejak lama: pull # 2525 .

Argumen ign_resize_confirmation diperlukan untuk berhasil mengubah ukuran disk lokal, inti, atau memori server. Perubahan tersebut dilakukan melalui komponen OpenStack Nova menggunakan permintaan ukuran . Secara default, Nova setelah permintaan pengubahan ukuran menempatkan server ke status verifikasi_resize dan menunggu konfirmasi tambahan dari pengguna. Namun, perilaku ini dapat diubah sehingga Nova tidak menunggu tindakan tambahan dari pengguna.

Argumen yang ditentukan memungkinkan Terraform untuk tidak menunggu status verifikasi_resize untuk server dan bersiap untuk server berada dalam status aktif setelah mengubah parameternya. Argumen ini tersedia dari versi 1.10.0 dari penyedia OpenStack Terraform: pull # 422 .

Penciptaan sumber daya


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

Catatan: masalah ini belum diselesaikan di Terraform, Anda dapat mengikuti diskusi tentang Github di edisi # 2430 dan edisi # 4149 .

Untuk membuat sumber daya, kita akan pergi ke direktori terraform -amples /amples / vpc / server_local_root_disk , isinya harus seperti ini:

 $ ls README.md main.tf vars.tf 

Kami menginisialisasi modul menggunakan perintah:

 $ terraform init 

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

Pertama, terapkan modul project_with_user . Dalam hal ini, Anda perlu mentransfer nilai untuk variabel yang belum ditetapkan secara manual:

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

Nilai untuk dua variabel pertama harus diambil dari panel kontrol .

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

Untuk menggunakan modul, perlu untuk mengganti nilai SEL_ACCOUNT , SEL_TOKEN dan USER_PASSWORD dengan 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, itu akan menunjukkan sumber daya apa yang ingin dibuat dan akan membutuhkan 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 di mana server yang dibuat dapat diakses:

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

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

Pengeditan sumber daya


Selain menciptakan sumber daya melalui Terraform, mereka juga dapat dimodifikasi.

Sebagai contoh, tambah jumlah core dan memori untuk server kami dengan mengubah nilai untuk parameter server_vcpus dan server_ram_mb dalam contoh / file 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 itu, kami memeriksa perubahan apa yang akan menyebabkan penggunaan perintah 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 pada sumber daya openstack_compute_instance_v2 dan openstack_compute_flavor_v2 .

Harap dicatat bahwa ini akan menghasilkan reboot mesin virtual yang dibuat.

Untuk menerapkan konfigurasi mesin virtual baru, gunakan perintah terraform apply , yang sudah kita jalankan sebelumnya.

Semua objek yang dibuat akan ditampilkan di panel kontrol VPC :



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

Contoh Kubernetes Cluster


Sebelum melanjutkan ke contoh berikutnya, kami akan menghapus sumber yang dibuat sebelumnya. Untuk melakukan ini, di root proyek terraform-contoh / contoh / vpc / server_local_root_disk, 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 

Selanjutnya, jalankan perintah Selectel VPC API Object Cleanup:

 $ 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, Anda harus 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 adalah dalam direktori terraform -amples /amples / vpc / kubernetes_cluster .

Contoh ini membuat proyek, pengguna dengan peran dalam proyek, dan memunculkan satu cluster Kubernetes. Di file vars.tf , Anda dapat melihat nilai default, seperti jumlah node, karakteristiknya, versi Kubernetes, dan lainnya.

Untuk membuat sumber daya, mirip dengan contoh pertama, hal pertama yang akan kita lakukan adalah menginisialisasi modul dan membuat sumber daya modul project_with_user , dan kemudian membuat sisanya:

 $ 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 meneruskan pembuatan dan pengelolaan kluster Kubernetes melalui komponen OpenStack Magnum. Anda dapat mempelajari lebih lanjut tentang cara bekerja dengan cluster di salah satu artikel kami sebelumnya , serta di basis pengetahuan .

Selama persiapan cluster, disk, mesin virtual akan dibuat dan semua komponen yang diperlukan akan diinstal. Persiapan memakan waktu sekitar 4 menit, di mana Terraform akan menampilkan pesan-pesan dari formulir:

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

Setelah instalasi selesai, Terraform akan memberi tahu Anda bahwa cluster sudah siap dan menampilkan pengenalnya:

 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 harus mendapatkan file akses cluster. Untuk melakukan ini, buka proyek yang dibuat melalui Terraform dalam daftar proyek di akun Anda:



Selanjutnya, ikuti tautan dari form xxxxxx.selvpc.ru , yang ditampilkan di bawah nama proyek:



Gunakan nama pengguna dan kata sandi yang dibuat melalui Terraform sebagai informasi login. Jika Anda tidak mengubah vars.tf atau main.tf untuk contoh kami, maka pengguna akan memiliki nama tf_user . Sebagai kata sandi, gunakan nilai variabel TF_VAR_user_password , yang ditentukan saat terraform berlaku dijalankan sebelumnya.

Di dalam proyek, Anda harus pergi ke tab Kubernetes :



Berikut ini adalah cluster yang dibuat melalui Terraform. Anda dapat mengunduh file untuk kubectl pada tab β€œAccess”:



Tab yang sama berisi instruksi untuk menginstal kubectl dan menggunakan config.yaml yang diunduh.

Setelah memulai kubectl dan mengatur variabel lingkungan KUBECONFIG, Anda dapat 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 

Jumlah node cluster mudah diubah melalui Terraform.
Nilai berikut ditentukan dalam file main.tf :

 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 menentukan nilai yang diperlukan langsung di main.tf :

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

Untuk menerapkan perubahan, seperti pada contoh pertama, gunakan perintah terraform apply :

 $ 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 simpul 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, kami belajar tentang cara dasar untuk bekerja dengan "Virtual Private Cloud" melalui Terraform. Kami akan senang jika Anda menggunakan Selectel penyedia Terraform resmi dan memberikan umpan balik.

Semua bug yang ditemukan dari penyedia Terraform Selectel dapat dilaporkan melalui Masalah Github .

Source: https://habr.com/ru/post/id445162/


All Articles