
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 .