Ofruesi Terraform Selectel

Ofruesi Terraform Selectel

Ne kemi krijuar një ofrues zyrtar Terraform për të punuar me Selectel. Ky produkt i lejon përdoruesit të zbatojnë plotësisht menaxhimin e burimeve përmes metodologjisë Infrastruktura-si-kod.

Ofruesi aktualisht mbështet menaxhimin e burimeve të shërbimit "Reja private virtuale" (më tej referuar si VPC). Në të ardhmen, ne planifikojmë të shtojmë menaxhimin e burimeve për shërbime të tjera të ofruara nga Selectel.

Siç e dini tashmë, shërbimi VPC është ndërtuar në OpenStack. Sidoqoftë, për shkak të faktit se OpenStack nuk ofron mjete vendase për të shërbyer në renë publike, ne kemi implementuar funksionalitetin që mungon në një grup API-sh shtesë që thjeshtojnë menaxhimin e objekteve komplekse të përbërë dhe e bëjnë punën më të përshtatshme. Disa nga funksionalitetet e disponueshme në OpenStack janë të mbyllura nga përdorimi i drejtpërdrejtë, por janë të disponueshëm përmes API-ja jonë.

Ofruesi Selectel Terraform tani përfshin aftësinë për të menaxhuar burimet e mëposhtme të VPC:

  • projektet dhe kuotat e tyre;
  • përdoruesit, rolet dhe shenjat e tyre;
  • nënrrjetet publike, duke përfshirë ndër-rajonale dhe VRRP;
  • licencat e softuerit.

Ofruesi përdor bibliotekën tonë publike Go për të punuar me VPC API. Si biblioteka ashtu edhe vetë ofruesi janë me burim të hapur, zhvillimi i tyre kryhet në Github:

Për të menaxhuar burime të tjera cloud, si makina virtuale, disqe, grupime Kubernetes, mund të përdorni ofruesin OpenStack Terraform. Dokumentacioni zyrtar për të dy ofruesit është i disponueshëm në lidhjet e mëposhtme:

Si T'ia Fillohet

Për të filluar, duhet të instaloni Terraform (udhëzimet dhe lidhjet me paketat e instalimit mund të gjenden në faqen zyrtare të internetit).

Për të funksionuar, ofruesi kërkon një çelës Selectel API, i cili krijohet në panelet e kontrollit të llogarisë.

Manifestet për të punuar me Selectel krijohen duke përdorur Terraform ose duke përdorur një grup shembujsh të gatshëm që janë të disponueshëm në depon tonë të Github: terraform-shembuj.

Depoja me shembuj është e ndarë në dy drejtori:

  • Modulet, që përmban module të vogla të ripërdorshme që marrin një sërë parametrash si hyrje dhe menaxhojnë një grup të vogël burimesh;
  • shembuj, që përmban shembuj të një grupi të plotë modulesh të ndërlidhura.

Pas instalimit të Terraform, krijimit të një çelësi Selectel API dhe njohjes me shembujt, le të kalojmë në shembuj praktikë.

Një shembull i krijimit të një serveri me një disk lokal

Le të shohim një shembull të krijimit të një projekti, një përdorues me një rol dhe një makinë virtuale me një disk lokal: terraform-examples/examples/vpc/server_local_root_disk.

Në dosje vars.tf janë përshkruar të gjithë parametrat që do të përdoren gjatë thirrjes së moduleve. Disa prej tyre kanë vlera të paracaktuara, për shembull, serveri do të krijohet në zonë ru-3a me konfigurimin e mëposhtëm:

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

Në dosje kryesore.tf Ofruesi Selectel është inicializuar:

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

Ky skedar gjithashtu përmban vlerën e paracaktuar për çelësin SSH që do të instalohet në server:

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

Nëse është e nevojshme, mund të specifikoni një çelës publik tjetër. Çelësi nuk duhet të specifikohet si një shteg skedari; ju gjithashtu mund ta shtoni vlerën si një varg.

Më tej në këtë skedar lansohen modulet projekti_me_përdoruesin и server_local_root_disk, të cilat menaxhojnë burimet e nevojshme.

Le t'i shikojmë këto module në më shumë detaje.

Krijimi i një projekti dhe një përdoruesi me një rol

Moduli i parë krijon një projekt dhe një përdorues me një rol në atë projekt: terraform-examples/modules/vpc/project_with_user.

Përdoruesi i krijuar do të jetë në gjendje të hyjë në OpenStack dhe të menaxhojë burimet e tij. Moduli është i thjeshtë dhe menaxhon vetëm tre entitete:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Krijimi i një serveri virtual me disk lokal

Moduli i dytë merret me menaxhimin e objekteve OpenStack, të cilat janë të nevojshme për të krijuar një server me një disk lokal.

Ju duhet t'i kushtoni vëmendje disa prej argumenteve që janë specifikuar në këtë modul për burimin openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Argument injoroj_ndryshimet ju lejon të injoroni ndryshimet e atributeve id për imazhin e përdorur për të krijuar makinën virtuale. Në shërbimin VPC, shumica e imazheve publike përditësohen automatikisht një herë në javë dhe në të njëjtën kohë të tyre id gjithashtu ndryshon. Kjo është për shkak të veçorive të komponentit OpenStack - Glance, në të cilin imazhet konsiderohen entitete të pandryshueshme.

Nëse jeni duke krijuar ose modifikuar një server ose disk ekzistues që ka si argument image_id përdoret id imazh publik, më pas pasi ai imazh të përditësohet, ekzekutimi përsëri i manifestit Terraform do të rikrijojë serverin ose diskun. Duke përdorur një argument injoroj_ndryshimet ju lejon të shmangni një situatë të tillë.

Shënim: argument injoroj_ndryshimet u shfaq në Terraform shumë kohë më parë: tërheq #2525.

Argument ignore_resize_confirmation nevojiten për të ndryshuar me sukses madhësinë e diskut lokal, bërthamave ose kujtesës së serverit. Ndryshime të tilla bëhen përmes komponentit OpenStack Nova duke përdorur një kërkesë resize. Nova e paracaktuar pas kërkesës resize e vendos serverin në status verifiko_rimasën dhe pret për konfirmim shtesë nga përdoruesi. Sidoqoftë, kjo sjellje mund të ndryshohet në mënyrë që Nova të mos presë veprime shtesë nga përdoruesi.

Argumenti i specifikuar lejon Terraform të mos presë për statusin verifiko_rimasën për serverin dhe përgatituni që serveri të jetë në status aktiv pas ndryshimit të parametrave të tij. Argumenti është i disponueshëm nga versioni 1.10.0 i ofruesit të OpenStack Terraform: tërheq #422.

Krijimi i Burimeve

Para se të ekzekutoni manifestet, ju lutemi vini re se në shembullin tonë lëshohen dy ofrues të ndryshëm dhe ofruesi OpenStack varet nga burimet e ofruesit Selectel, pasi pa krijuar një përdorues në projekt, është e pamundur të menaxhoni objektet që i përkasin atij. . Fatkeqësisht, për të njëjtën arsye nuk mund të ekzekutojmë komandën terraform aplikohen brenda shembullit tonë. Së pari duhet të bëjmë zbatohen për modul projekti_me_përdoruesin dhe pas kësaj për gjithçka tjetër.

Shënim: Kjo çështje nuk është zgjidhur ende në Terraform, mund të ndiqni diskutimin në Github në numri #2430 и numri #4149.

Për të krijuar burime, shkoni te drejtoria terraform-examples/examples/vpc/server_local_root_disk, përmbajtja e tij duhet të jetë si kjo:

$ ls
README.md	   main.tf		vars.tf

Ne inicializojmë modulet duke përdorur komandën:

$ terraform init

Dalja tregon se Terraform shkarkon versionet më të fundit të ofruesve që përdor dhe kontrollon të gjitha modulet e përshkruara në shembull.

Fillimisht le të aplikojmë modulin projekti_me_përdoruesin. Kjo kërkon kalimin manual të vlerave për variablat që nuk janë vendosur:

  • sel_account me numrin e llogarisë tuaj Selectel;
  • sel_token me çelësin tuaj për Selectel API;
  • fjalëkalimi_përdorues me një fjalëkalim për përdoruesin e OpenStack.

Vlerat për dy variablat e para duhet të merren nga panelet e kontrollit.

Për variablin e fundit, mund të gjeni çdo fjalëkalim.

Për të përdorur modulin, duhet të zëvendësoni vlerat SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD ekzekutimi i komandës:

$ 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

Pas ekzekutimit të komandës, Terraform do të tregojë se cilat burime dëshiron të krijojë dhe do të kërkojë konfirmim:

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

Pasi të jenë krijuar projekti, përdoruesi dhe roli, mund të filloni të krijoni burimet e mbetura:

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

Kur krijoni burime, kushtojini vëmendje daljes Terraform me adresën IP të jashtme ku serveri i krijuar do të jetë i aksesueshëm:

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

Ju mund të punoni me makinën virtuale të krijuar përmes SSH duke përdorur IP-në e specifikuar.

Redaktimi i burimeve

Përveç krijimit të burimeve përmes Terraform, ato gjithashtu mund të modifikohen.

Për shembull, le të rrisim numrin e bërthamave dhe memories për serverin tonë duke ndryshuar vlerat për parametrat server_vcpus и server_ram_mb në dosje shembuj/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

Pas kësaj, ne kontrollojmë se çfarë ndryshimesh do të çojë kjo në përdorimin e komandës së mëposhtme:

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

Si rezultat, Terraform bëri një ndryshim të burimeve openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Ju lutemi vini re se kjo do të sjellë rindezjen e makinës virtuale të krijuar.

Për të aplikuar konfigurimin e ri të makinës virtuale, përdorni komandën terraform aplikohen, të cilin tashmë e kemi lançuar më herët.

Të gjitha objektet e krijuara do të shfaqen në Panelet e kontrollit VPC:

Ofruesi Terraform Selectel

Në tonë shembuj të depove Ju gjithashtu mund të shihni manifeste për krijimin e makinave virtuale me disqe rrjeti.

Shembull i krijimit të një grupi Kubernetes

Përpara se të kalojmë te shembulli tjetër, ne do të pastrojmë burimet që krijuam më parë. Për ta bërë këtë në rrënjë të projektit terraform-examples/examples/vpc/server_local_root_disk Le të ekzekutojmë komandën për të fshirë objektet 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

Pastaj ekzekutoni komandën për të pastruar objektet 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

Në të dyja rastet, do t'ju duhet të konfirmoni fshirjen e të gjitha objekteve:

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

Shembulli i mëposhtëm është në drejtori terraform-examples/examples/vpc/kubernetes_cluster.

Ky shembull krijon një projekt, një përdorues me një rol në projekt dhe ngre një grup Kubernetes. Në dosje vars.tf mund të shihni vlerat e paracaktuara, të tilla si numri i nyjeve, karakteristikat e tyre, versioni Kubernetes, etj.

Për të krijuar burime të ngjashme me shembullin e parë, para së gjithash do të fillojmë të inicializojmë modulet dhe të krijojmë burime të moduleve projekti_me_përdoruesindhe më pas krijoni gjithçka tjetë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

Ne do të transferojmë krijimin dhe menaxhimin e grupimeve Kubernetes përmes komponentit OpenStack Magnum. Mund të mësoni më shumë se si të punoni me një grup në një nga tonat artikujt e mëparshëm, dhe kështu me radhë njohuri baze.

Gjatë përgatitjes së grupit, do të krijohen disqe dhe makina virtuale dhe do të instalohen të gjithë komponentët e nevojshëm. Përgatitja zgjat rreth 4 minuta, gjatë së cilës kohë Terraform do të shfaqë mesazhe si:

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

Pasi të përfundojë instalimi, Terraform do të tregojë se grupi është gati dhe do të shfaq ID-në e tij:

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

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

Për të menaxhuar grupin e krijuar Kubernetes përmes programit kubectl ju duhet të merrni skedarin e aksesit në grup. Për ta bërë këtë, shkoni te projekti i krijuar përmes Terraform në listën e projekteve në llogarinë tuaj:

Ofruesi Terraform Selectel

Më pas, ndiqni lidhjen si xxxxxx.selvpc.rui cili shfaqet poshtë emrit të projektit:

Ofruesi Terraform Selectel

Për informacionin e hyrjes, përdorni emrin e përdoruesit dhe fjalëkalimin që keni krijuar përmes Terraform. Nëse nuk keni mashtruar vars.tf ose kryesore.tf për shembullin tonë, përdoruesi do të ketë emrin tf_user. Ju duhet të përdorni vlerën e ndryshores si fjalëkalim TF_VAR_user_password, i cili u specifikua në fillim terraform aplikohen me heret

Brenda projektit duhet të shkoni te skeda Kubernetes:

Ofruesi Terraform Selectel

Këtu ndodhet grupi i krijuar nëpërmjet Terraform. Shkarkoni skedarin për kubectl mundeni në skedën "Qasja":

Ofruesi Terraform Selectel

Udhëzimet e instalimit gjenden në të njëjtën skedë. kubectl dhe përdorimin e të shkarkuarve konfigurim.yaml.

Pas nisjes kubectl dhe vendosja e ndryshores mjedisore KUBECONFIG mund të përdorni 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

Numri i nyjeve të grupimit mund të ndryshohet lehtësisht nëpërmjet Terraform.
Në dosje kryesore.tf është specifikuar vlera e mëposhtme:

cluster_node_count = "${var.cluster_node_count}"

Kjo vlerë zëvendësohet nga vars.tf:

variable "cluster_node_count" {
default = 2
}

Ju mund të ndryshoni vlerën e paracaktuar në vars.tf, ose specifikoni vlerën e kërkuar drejtpërdrejt në kryesore.tf:

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

Për të aplikuar ndryshimet, si në rastin e shembullit të parë, përdorni komandën terraform aplikohen:

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

Kur numri i nyjeve ndryshon, grupi do të mbetet i disponueshëm. Pasi të keni shtuar një nyje përmes Terraform, mund ta përdorni pa konfigurim shtesë:

$ 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

Përfundim

Në këtë artikull u njohëm me mënyrat kryesore për të punuar "Reja private virtuale" nëpërmjet Terraform. Do të jemi të lumtur nëse përdorni ofruesin zyrtar të Terraform Selectel dhe jepni komente.

Çdo defekt i gjetur në ofruesin Selectel Terraform mund të raportohet nëpërmjet Çështjet e Github.

Burimi: www.habr.com

Shto një koment