Terraform provayderi Selectel

Terraform provayderi Selectel

Selectel ilə işləmək üçün rəsmi Terraform provayderini işə saldıq. Bu məhsul istifadəçilərə İnfrastruktur-kod metodologiyası vasitəsilə resursların idarə edilməsini tam şəkildə həyata keçirməyə imkan verir.

Provayder hazırda xidmət resurslarının idarə edilməsini dəstəkləyir "Virtual şəxsi bulud" (bundan sonra VPC adlandırılacaq). Gələcəkdə biz Selectel tərəfindən təqdim olunan digər xidmətlər üçün resurs idarəçiliyini əlavə etməyi planlaşdırırıq.

Artıq bildiyiniz kimi, VPC xidməti OpenStack üzərində qurulub. Bununla belə, OpenStack ictimai buludlara xidmət üçün yerli alətlər təqdim etmədiyinə görə, biz çatışmayan funksionallığı mürəkkəb kompozit obyektlərin idarə edilməsini sadələşdirən və işi daha rahat edən əlavə API-lər dəstində həyata keçirdik. OpenStack-də mövcud olan bəzi funksiyalar birbaşa istifadə edilə bilməz, lakin onlar vasitəsilə mövcuddur bizim API.

Selectel Terraform provayderinə indi aşağıdakı VPC resurslarını idarə etmək imkanı daxildir:

  • layihələr və onların kvotaları;
  • istifadəçilər, onların rolları və əlamətləri;
  • regional və VRRP daxil olmaqla ictimai alt şəbəkələr;
  • proqram lisenziyaları.

Provayder VPC API ilə işləmək üçün ictimai Go kitabxanamızdan istifadə edir. Həm kitabxana, həm də provayderin özü açıq mənbəlidir, onların inkişafı Github-da həyata keçirilir:

Virtual maşınlar, disklər, Kubernetes klasterləri kimi digər bulud resurslarını idarə etmək üçün OpenStack Terraform provayderindən istifadə edə bilərsiniz. Hər iki provayder üçün rəsmi sənədlər aşağıdakı linklərdə mövcuddur:

Başlarken

Başlamaq üçün siz Terraform-u quraşdırmalısınız (təlimatlar və quraşdırma paketlərinə keçidlər burada tapa bilərsiniz rəsmi sayt).

Fəaliyyət göstərmək üçün provayderdə yaradılmış Selectel API açarı tələb olunur hesab idarəetmə panelləri.

Selectel ilə işləmək üçün manifestlər Terraform istifadə edərək və ya Github depomuzda mövcud olan bir sıra hazır nümunələrdən istifadə etməklə yaradılır: terraform nümunələri.

Nümunələri olan depo iki qovluğa bölünür:

  • modulları, bir sıra parametrləri giriş kimi qəbul edən və kiçik resurslar dəstini idarə edən kiçik təkrar istifadə edilə bilən modulları ehtiva edir;
  • misal, bir-biri ilə əlaqəli modulların tam dəstinə dair nümunələri ehtiva edir.

Terraform-u quraşdırdıqdan, Selectel API açarı yaratdıqdan və nümunələrlə tanış olduqdan sonra praktik nümunələrə keçək.

Lokal disklə server yaratmağa nümunə

Layihənin, rolu olan istifadəçinin və yerli diski olan virtual maşının yaradılması nümunəsinə baxaq: terraform-nümunələr/nümunələr/vpc/server_local_root_disk.

Faylda vars.tf modulları çağırarkən istifadə ediləcək bütün parametrlər təsvir edilmişdir. Onlardan bəzilərinin standart dəyərləri var, məsələn, zonada server yaradılacaq ru-3a aşağıdakı konfiqurasiya ilə:

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

Faylda main.tf Selectel provayderi işə salınır:

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

Bu fayl həmçinin serverdə quraşdırılacaq SSH açarı üçün standart dəyəri ehtiva edir:

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

Lazım gələrsə, başqa bir açıq açar təyin edə bilərsiniz. Açarın fayl yolu kimi göstərilməsinə ehtiyac yoxdur; siz həmçinin dəyəri sətir kimi əlavə edə bilərsiniz.

Daha sonra bu faylda modullar işə salınır layihə_istifadəçi ilə и server_local_root_disk, zəruri resursları idarə edən.

Bu modulları daha ətraflı nəzərdən keçirək.

Layihənin və rolu olan istifadəçinin yaradılması

Birinci modul layihə və həmin layihədə rolu olan istifadəçi yaradır: terraform-examples/modules/vpc/project_with_user.

Yaradılmış istifadəçi OpenStack-ə daxil ola və onun resurslarını idarə edə biləcək. Modul sadədir və yalnız üç obyekti idarə edir:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Lokal disklə virtual serverin yaradılması

İkinci modul yerli disklə server yaratmaq üçün zəruri olan OpenStack obyektlərinin idarə edilməsi ilə məşğul olur.

Resurs üçün bu modulda göstərilən bəzi arqumentlərə diqqət yetirməlisiniz openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

arqument dəyişiklikləri görməyin atribut dəyişikliklərinə məhəl qoymamağa imkan verir id virtual maşın yaratmaq üçün istifadə olunan təsvir üçün. VPC xidmətində əksər ictimai şəkillər həftədə bir dəfə avtomatik olaraq yenilənir və eyni zamanda onların id də dəyişir. Bu, təsvirlərin dəyişməz obyektlər hesab edildiyi OpenStack komponentinin - Glance-in xüsusiyyətləri ilə bağlıdır.

Arqument kimi mövcud olan server və ya diski yaradır və ya dəyişdirirsinizsə image_id işlənmiş id ictimai şəkil, sonra həmin şəkil yeniləndikdən sonra Terraform manifestini yenidən işə salmaq server və ya diski yenidən yaradacaq. Arqumentdən istifadə dəyişiklikləri görməyin belə bir vəziyyətdən qaçmağa imkan verir.

Qeyd: mübahisə dəyişiklikləri görməyin olduqca uzun müddət əvvəl Terraformda ortaya çıxdı: çəkin # 2525.

arqument Təsdiqini nəzərə alma yerli diskin, nüvələrin və ya server yaddaşının ölçüsünü uğurla dəyişmək üçün lazımdır. Bu cür dəyişikliklər sorğudan istifadə edərək OpenStack Nova komponenti vasitəsilə edilir boyutlandır. Tələbdən sonra standart Nova boyutlandır serveri vəziyyətə gətirir doğrulayın_ölçüsünü və istifadəçidən əlavə təsdiq gözləyir. Bununla belə, bu davranış dəyişdirilə bilər ki, Nova istifadəçidən əlavə hərəkətlər gözləməsin.

Göstərilən arqument Terraforma statusu gözləməməyə imkan verir doğrulayın_ölçüsünü server üçün və parametrlərini dəyişdirdikdən sonra serverin aktiv vəziyyətdə olmasına hazır olun. Arqument OpenStack Terraform provayderinin 1.10.0 versiyasında mövcuddur: çəkin # 422.

Resursların yaradılması

Manifestləri işə salmazdan əvvəl nəzərə alın ki, nümunəmizdə iki fərqli provayder işə salınıb və OpenStack provayderi Selectel provayderinin resurslarından asılıdır, çünki layihədə istifadəçi yaratmadan ona məxsus obyektləri idarə etmək mümkün deyil. . Təəssüf ki, eyni səbəbdən biz sadəcə əmri icra edə bilmirik terraform tətbiq olunur nümunəmiz daxilində. Əvvəlcə etməliyik müraciət edin modul üçün layihə_istifadəçi ilə və bundan sonra hər şey üçün.

Qeyd: Bu məsələ Terraform-da hələ həll olunmayıb, Github-da müzakirəni izləyə bilərsiniz buraxılış № 2430 и buraxılış № 4149.

Resurs yaratmaq üçün kataloqa keçin terraform-nümunələr/nümunələr/vpc/server_local_root_disk, onun məzmunu belə olmalıdır:

$ ls
README.md	   main.tf		vars.tf

Komandanı istifadə edərək modulları işə salırıq:

$ terraform init

Nəticə göstərir ki, Terraform istifadə etdiyi provayderlərin ən son versiyalarını yükləyir və nümunədə təsvir olunan bütün modulları yoxlayır.

Əvvəlcə modulu tətbiq edək layihə_istifadəçi ilə. Bunun üçün təyin olunmamış dəyişənlər üçün dəyərlərin əl ilə ötürülməsi tələb olunur:

  • sel_hesab Selectel hesab nömrənizlə;
  • sel_token Selectel API üçün açarınızla;
  • user_parol OpenStack istifadəçisi üçün parol ilə.

İlk iki dəyişən üçün dəyərlər götürülməlidir idarəetmə panelləri.

Son dəyişən üçün hər hansı bir parol tapa bilərsiniz.

Moduldan istifadə etmək üçün dəyərləri əvəz etməlisiniz SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD əmri işlədir:

$ 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

Komandanı işə saldıqdan sonra Terraform hansı resursları yaratmaq istədiyini göstərəcək və təsdiq tələb edəcək:

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

Layihə, istifadəçi və rol yaradıldıqdan sonra qalan resursları yaratmağa başlaya bilərsiniz:

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

Resurs yaratarkən, yaradılan serverin əlçatan olacağı xarici IP ünvanı ilə Terraform çıxışına diqqət yetirin:

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

Göstərilən IP-dən istifadə edərək SSH vasitəsilə yaradılmış virtual maşınla işləyə bilərsiniz.

Redaktə Resursları

Terraform vasitəsilə resurslar yaratmaqla yanaşı, onlar da dəyişdirilə bilər.

Məsələn, parametrlərin dəyərlərini dəyişdirərək serverimiz üçün nüvələrin və yaddaşın sayını artıraq. server_vcpus и server_ram_mb faylda misallar/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

Bundan sonra aşağıdakı əmrdən istifadə edərək bunun hansı dəyişikliklərə səbəb olacağını yoxlayırıq:

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

Nəticədə Terraform resurs dəyişikliyi etdi openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Nəzərə alın ki, bu, yaradılmış virtual maşının yenidən başlamasını tələb edəcək.

Yeni virtual maşın konfiqurasiyasını tətbiq etmək üçün əmrdən istifadə edin terraform tətbiq olunur, biz artıq əvvəllər başlamışıq.

Bütün yaradılan obyektlər ekranda görünəcək VPC idarəetmə panelləri:

Terraform provayderi Selectel

В нашем nümunə depoları Siz həmçinin şəbəkə sürücüləri ilə virtual maşınlar yaratmaq üçün manifestləri görə bilərsiniz.

Kubernetes klasterinin yaradılması nümunəsi

Növbəti nümunəyə keçməzdən əvvəl əvvəllər yaratdığımız resursları təmizləyəcəyik. Bunu layihənin kökündə etmək üçün terraform-nümunələr/nümunələr/vpc/server_local_root_disk OpenStack obyektlərini silmək üçün əmri yerinə yetirək:

$ 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

Sonra Selectel VPC API obyektlərini təmizləmək üçün əmri yerinə yetirin:

$ 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

Hər iki halda, bütün obyektlərin silinməsini təsdiqləməlisiniz:

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

Aşağıdakı nümunə kataloqdadır terraform-nümunələr/nümunələr/vpc/kubernetes_cluster.

Bu nümunə bir layihə, layihədə rolu olan bir istifadəçi yaradır və bir Kubernetes klasterini artırır. Faylda vars.tf qovşaqların sayı, onların xüsusiyyətləri, Kubernetes versiyası və s. kimi standart dəyərləri görə bilərsiniz.

Birinci nümunəyə bənzər resurslar yaratmaq üçün ilk növbədə modulları işə salmağa və modul resurslarını yaratmağa başlayacağıq layihə_istifadəçi iləvə sonra hər şeyi yaradır:

$ 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

Kubernetes klasterlərinin yaradılması və idarə edilməsini OpenStack Magnum komponenti vasitəsilə ötürəcəyik. Klasterlə necə işləmək barədə ətraflı məlumatı bizim birində tapa bilərsiniz əvvəlki məqalələreləcə də bilik bazası.

Klaster hazırlanarkən disklər və virtual maşınlar yaradılacaq və bütün lazımi komponentlər quraşdırılacaq. Hazırlıq təxminən 4 dəqiqə çəkir və bu müddət ərzində Terraform aşağıdakı kimi mesajları göstərəcək:

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

Quraşdırma tamamlandıqdan sonra Terraform klasterin hazır olduğunu bildirəcək və ID-sini göstərəcək:

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

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

Yaradılmış Kubernetes klasterini yardım proqramı vasitəsilə idarə etmək kubectl klasterə giriş faylını əldə etməlisiniz. Bunun üçün hesabınızdakı layihələr siyahısında Terraform vasitəsilə yaradılmış layihəyə keçin:

Terraform provayderi Selectel

Sonra, like linkini izləyin xxxxxx.selvpc.rulayihə adının altında görünən:

Terraform provayderi Selectel

Giriş məlumatı üçün Terraform vasitəsilə yaratdığınız istifadəçi adı və paroldan istifadə edin. Aldatmamısansa vars.tf və ya main.tf bizim nümunəmiz üçün istifadəçi adı olacaq tf_user. Parol kimi dəyişənin dəyərindən istifadə etməlisiniz TF_VAR_user_parol, başlanğıcda müəyyən edilmişdir terraform tətbiq olunur əvvəllər.

Layihənin içərisində nişana keçməlisiniz Kubernetes:

Terraform provayderi Selectel

Terraform vasitəsilə yaradılmış klaster burada yerləşir. üçün faylı yükləyin kubectl "Giriş" sekmesinde edə bilərsiniz:

Terraform provayderi Selectel

Quraşdırma təlimatları eyni tabda yerləşir. kubectl və endirilənlərin istifadəsi config.yaml.

Başladıqdan sonra kubectl və mühit dəyişənini təyin edin KUBECONFIG Kubernetes-dən istifadə edə bilərsiniz:

$ 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

Klaster qovşaqlarının sayı Terraform vasitəsilə asanlıqla dəyişdirilə bilər.
Faylda main.tf aşağıdakı dəyər müəyyən edilir:

cluster_node_count = "${var.cluster_node_count}"

Bu dəyər ilə əvəz olunur vars.tf:

variable "cluster_node_count" {
default = 2
}

İstənilən standart dəyəri dəyişdirə bilərsiniz vars.tf, və ya tələb olunan dəyəri birbaşa daxil edin main.tf:

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

Dəyişiklikləri tətbiq etmək üçün, birinci nümunədə olduğu kimi, əmrdən istifadə edin terraform tətbiq olunur:

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

Düyünlərin sayı dəyişdikdə, klaster mövcud qalacaq. Terraform vasitəsilə node əlavə etdikdən sonra onu əlavə konfiqurasiya olmadan istifadə edə bilərsiniz:

$ 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

Nəticə

Bu yazıda biz işləməyin əsas yolları ilə tanış olduq "Virtual şəxsi bulud" Terraform vasitəsilə. Rəsmi Selectel Terraform provayderindən istifadə edib rəy bildirsəniz, şad olarıq.

Selectel Terraform provayderində aşkar edilən hər hansı səhvlər vasitəsilə bildirilə bilər Github Problemləri.

Mənbə: www.habr.com

Добавить комментарий