Ang tighatag sa Terraform nga Selectel

Ang tighatag sa Terraform nga Selectel

Naglunsad kami usa ka opisyal nga tighatag sa Terraform aron magtrabaho kauban ang Selectel. Kini nga produkto nagtugot sa mga tiggamit sa hingpit nga pagpatuman sa pagdumala sa kapanguhaan pinaagi sa Infrastructure-as-code methodology.

Gisuportahan karon sa provider ang pagdumala sa kapanguhaan sa serbisyo "Virtual pribadong panganod" (pagkahuman niini gitawag nga VPC). Sa umaabot, nagplano kami nga idugang ang pagdumala sa kapanguhaan alang sa ubang mga serbisyo nga gihatag sa Selectel.

Sama sa nahibal-an na nimo, ang serbisyo sa VPC gitukod sa OpenStack. Bisan pa, tungod sa kamatuoran nga ang OpenStack wala maghatag mga lumad nga himan alang sa pagserbisyo sa publiko nga panganod, gipatuman namon ang nawala nga pagpaandar sa usa ka set sa dugang nga mga API nga nagpasimple sa pagdumala sa komplikado nga mga butang nga gisagol ug gihimo nga labi ka kombenyente ang trabaho. Ang pipila sa mga gamit nga magamit sa OpenStack sirado gikan sa direkta nga paggamit, apan magamit pinaagi sa atong API.

Ang Selectel Terraform provider karon naglakip sa abilidad sa pagdumala sa mosunod nga VPC resources:

  • mga proyekto ug ang ilang mga quota;
  • tiggamit, ilang mga tahas ug mga token;
  • publiko nga mga subnet, lakip ang cross-regional ug VRRP;
  • mga lisensya sa software.

Gigamit sa provider ang among public Go library aron magtrabaho uban ang VPC API. Ang librarya ug ang provider mismo bukas nga gigikanan, ang ilang pag-uswag gihimo sa Github:

Aron madumala ang ubang mga kapanguhaan sa panganod, sama sa mga virtual machine, disk, Kubernetes clusters, mahimo nimong gamiton ang OpenStack Terraform provider. Ang opisyal nga dokumentasyon para sa duha ka mga provider anaa sa mosunod nga mga link:

Pagsugod

Aron makasugod, kinahanglan nimo nga i-install ang Terraform (mga panudlo ug mga link sa mga pakete sa pag-install makita sa opisyal nga website).

Sa pag-operate, ang provider nanginahanglan usa ka Selectel API key, nga gihimo sa mga panel sa pagkontrol sa account.

Ang mga manipesto alang sa pagtrabaho kauban ang Selectel gihimo gamit ang Terraform o gamit ang usa ka set sa andam nga gihimo nga mga pananglitan nga magamit sa among Github repository: terraform-mga pananglitan.

Ang repository nga adunay mga pananglitan gibahin sa duha ka mga direktoryo:

  • Modules, nga adunay gamay nga magamit pag-usab nga mga module nga nagkuha usa ka set sa mga parameter ingon input ug pagdumala sa usa ka gamay nga hugpong sa mga kapanguhaan;
  • mga ehemplo, nga adunay mga pananglitan sa usa ka kompleto nga hugpong sa mga interconnected modules.

Human ma-install ang Terraform, maghimo usa ka Selectel API key ug pamilyar ang imong kaugalingon sa mga pananglitan, magpadayon kita sa praktikal nga mga pananglitan.

Usa ka pananglitan sa paghimo sa usa ka server nga adunay lokal nga disk

Atong tan-awon ang usa ka pananglitan sa paghimo sa usa ka proyekto, usa ka user nga adunay papel ug usa ka virtual nga makina nga adunay lokal nga disk: terraform-examples/examples/vpc/server_local_root_disk.

Sa file vars.tf ang tanan nga mga parameter nga gamiton sa pagtawag sa mga module gihulagway. Ang uban niini adunay mga default nga kantidad, pananglitan, ang server himuon sa sona ru-3a uban sa mosunod nga configuration:

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

Sa file main.tf Ang Selectel provider gisugdan:

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

Kini nga file naglangkob usab sa default nga kantidad alang sa SSH nga yawe nga i-install sa server:

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

Kung gikinahanglan, mahimo nimong itakda ang lain nga yawe sa publiko. Ang yawe dili kinahanglan nga ipiho ingon usa ka agianan sa file; mahimo usab nimo idugang ang kantidad ingon usa ka hilo.

Dugang pa niini nga file ang mga modules gilunsad project_with_user и server_local_root_disk, nga nagdumala sa gikinahanglan nga mga kapanguhaan.

Atong tan-awon kini nga mga module sa mas detalyado.

Paghimo og proyekto ug user nga adunay papel

Ang unang module nagmugna og proyekto ug usa ka user nga adunay papel sa maong proyekto: terraform-examples/modules/vpc/project_with_user.

Ang gibuhat nga tiggamit makahimo sa pag-log in sa OpenStack ug pagdumala sa mga kapanguhaan niini. Ang module yano ug nagdumala lamang sa tulo ka entidad:

  • pilia ang_vpc_proyekto_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Paghimo usa ka virtual server nga adunay lokal nga disk

Ang ikaduha nga module naghisgot sa pagdumala sa mga butang sa OpenStack, nga gikinahanglan aron makahimo og server nga adunay lokal nga disk.

Kinahanglan nimong hatagan ug pagtagad ang pipila ka mga argumento nga gipiho niini nga module alang sa kapanguhaan openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

argumento ibaliwala_kausaban nagtugot kanimo sa pagbaliwala sa mga kausaban sa hiyas id alang sa imahe nga gigamit sa paghimo sa virtual machine. Sa serbisyo sa VPC, kadaghanan sa publiko nga mga imahe awtomatikong gi-update kausa sa usa ka semana ug sa parehas nga oras ang ilang id nagbag-o usab. Kini tungod sa mga peculiarities sa OpenStack component - Glance, diin ang mga hulagway giisip nga dili mausab nga mga entidad.

Kung ikaw nagmugna o nag-usab sa usa ka kasamtangan nga server o disk nga adunay usa ka argumento image_id gigamit id publiko nga imahe, unya pagkahuman nga ma-update ang imahe, ang pagpadagan sa Terraform manifest pag-usab maghimo pag-usab sa server o disk. Paggamit ug argumento ibaliwala_kausaban nagtugot kanimo sa paglikay sa ingon nga sitwasyon.

Nota: argumento ibaliwala_kausaban nagpakita sa Terraform dugay na ang milabay: pagbira#2525.

argumento ibaliwala_resize_kumpirmasyon gikinahanglan aron malampuson nga mabag-o ang gidak-on sa lokal nga disk, mga core, o memorya sa server. Ang ingon nga mga pagbag-o gihimo pinaagi sa sangkap sa OpenStack Nova gamit ang usa ka hangyo resize. Default nga Nova human sa hangyo resize nagbutang sa server sa status verify_resize ug naghulat alang sa dugang nga kumpirmasyon gikan sa tiggamit. Bisan pa, kini nga pamatasan mahimong mabag-o aron ang Nova dili maghulat alang sa dugang nga mga aksyon gikan sa tiggamit.

Ang espesipikong argumento nagtugot sa Terraform nga dili maghulat sa status verify_resize alang sa server ug pag-andam alang sa server nga naa sa usa ka aktibo nga kahimtang pagkahuman sa pagbag-o sa mga parameter niini. Ang argumento anaa gikan sa bersyon 1.10.0 sa OpenStack Terraform provider: pagbira#422.

Paghimo og mga Kapanguhaan

Sa wala pa ipadagan ang mga manifests, palihug timan-i nga sa among panig-ingnan, duha ka lain-laing mga provider ang gilusad, ug ang OpenStack provider nagdepende sa mga kahinguhaan sa Selectel provider, tungod kay walay paghimo og user sa proyekto, imposible ang pagdumala sa mga butang nga iya niini. . Ikasubo, tungod sa parehas nga hinungdan dili ra naton mahimo ang mando magamit ang terraform sulod sa atong ehemplo. Kinahanglan una natong buhaton magamit alang sa module project_with_user ug pagkahuman niana alang sa tanan nga uban pa.

Mubo nga sulat: Kini nga isyu wala pa masulbad sa Terraform, mahimo nimong sundon ang panaghisgot sa Github sa isyu #2430 и isyu #4149.

Aron makahimo og mga kapanguhaan, adto sa direktoryo terraform-examples/examples/vpc/server_local_root_disk, ang mga sulod niini kinahanglan nga sama niini:

$ ls
README.md	   main.tf		vars.tf

Gisugdan namon ang mga module gamit ang command:

$ terraform init

Ang output nagpakita nga ang Terraform nag-download sa pinakabag-o nga bersyon sa mga provider nga gigamit niini ug nagsusi sa tanang modules nga gihulagway sa pananglitan.

Una atong gamiton ang module project_with_user. Nanginahanglan kini nga mano-mano nga pagpasa sa mga kantidad alang sa mga variable nga wala mabutang:

  • sel_account uban sa imong Selectel account number;
  • sel_token uban sa imong yawe alang sa Selectel API;
  • user_password nga adunay password alang sa OpenStack user.

Ang mga bili alang sa unang duha ka mga baryable kinahanglan nga gikuha gikan sa control panel.

Alang sa katapusan nga variable, mahimo ka makahimo og bisan unsang password.

Aron magamit ang module kinahanglan nimo nga ilisan ang mga kantidad SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD pagpadagan sa sugo:

$ 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

Pagkahuman sa pagpadagan sa mando, ipakita sa Terraform kung unsang mga kapanguhaan ang gusto nga himuon ug mangayo alang sa kumpirmasyon:

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

Kung nahimo na ang proyekto, user ug papel, mahimo ka magsugod sa paghimo sa nahabilin nga mga kapanguhaan:

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

Sa paghimo og mga kapanguhaan, hatagi'g pagtagad ang output sa Terraform nga adunay eksternal nga IP address diin ang gibuhat nga server mahimong ma-access:

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

Makatrabaho ka sa gibuhat nga virtual machine pinaagi sa SSH gamit ang piho nga IP.

Pag-edit sa mga Kapanguhaan

Agi og dugang sa paghimo og mga kapanguhaan pinaagi sa Terraform, mahimo usab kini nga usbon.

Pananglitan, atong dugangan ang gidaghanon sa mga cores ug memorya alang sa atong server pinaagi sa pag-usab sa mga bili alang sa mga parameter. server_vcpus и server_ram_mb sa file examples/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

Pagkahuman niini, among susihon kung unsang mga pagbag-o ang modala niini sa paggamit sa mosunud nga mando:

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

Ingon usa ka sangputanan, ang Terraform naghimo usa ka pagbag-o sa kapanguhaan openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Palihug timan-i nga kini maglakip sa pag-reboot sa gibuhat nga virtual machine.

Aron magamit ang bag-ong configuration sa virtual machine, gamita ang command magamit ang terraform, nga ato nang gilusad sa sayo pa.

Ang tanan nga gibuhat nga mga butang ipakita sa Mga control panel sa VPC:

Ang tighatag sa Terraform nga Selectel

Sa among pananglitan nga mga repositoryo Makita usab nimo ang mga manifest para sa paghimo og mga virtual machine nga adunay mga network drive.

Pananglitan sa paghimo og Kubernetes cluster

Sa dili pa kita mopadayon sa sunod nga pananglitan, atong limpyohan ang mga kapanguhaan nga atong gibuhat sa sayo pa. Sa pagbuhat niini sa gamut sa proyekto terraform-examples/examples/vpc/server_local_root_disk Atong padaganon ang sugo sa pagtangtang sa mga butang sa 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

Dayon padagana ang command aron malimpyohan ang Selectel VPC API nga mga butang:

$ 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

Sa duha ka mga kaso, kinahanglan nimo nga kumpirmahon ang pagtangtang sa tanan nga mga butang:

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

Ang mosunod nga pananglitan anaa sa direktoryo terraform-examples/examples/vpc/kubernetes_cluster.

Kini nga pananglitan nagmugna og proyekto, usa ka user nga adunay papel sa proyekto, ug nagpataas sa usa ka Kubernetes cluster. Sa file vars.tf makita nimo ang mga default nga kantidad, sama sa gidaghanon sa mga node, ilang mga kinaiya, bersyon sa Kubernetes, ug uban pa.

Aron makahimo og mga kapanguhaan nga susama sa unang pananglitan, una sa tanan magsugod kita sa pagsugod sa mga module ug paghimo sa mga kapanguhaan sa module project_with_userug dayon paghimo sa tanan nga uban pa:

$ 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

Ibalhin namo ang paghimo ug pagdumala sa mga cluster sa Kubernetes pinaagi sa component sa OpenStack Magnum. Mahibal-an nimo ang dugang kung giunsa ang pagtrabaho sa usa ka cluster sa usa sa among miaging mga artikuloingon man base sa kahibalo.

Kung nag-andam sa cluster, ang mga disk ug mga virtual nga makina himuon ug ang tanan nga kinahanglan nga mga sangkap i-install. Ang pag-andam nagkinahanglan og mga 4 ka minuto, diin ang Terraform magpakita sa mga mensahe sama sa:

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

Kung kompleto na ang pag-install, ipakita sa Terraform nga andam na ang cluster ug ipakita ang ID niini:

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

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

Aron madumala ang gibuhat nga Kubernetes cluster pinaagi sa utility kubectl kinahanglan nimo nga makuha ang cluster access file. Aron mahimo kini, adto sa proyekto nga gihimo pinaagi sa Terraform sa lista sa mga proyekto sa imong account:

Ang tighatag sa Terraform nga Selectel

Sunod, sunda ang link sama xxxxxx.selvpc.runga makita sa ubos sa ngalan sa proyekto:

Ang tighatag sa Terraform nga Selectel

Para sa impormasyon sa pag-login, gamita ang username ug password nga imong gibuhat pinaagi sa Terraform. Kung wala ka nanglimbong vars.tf o main.tf alang sa among panig-ingnan, ang tiggamit adunay ngalan tf_user. Kinahanglan nimong gamiton ang bili sa variable isip password TF_VAR_user_password, nga gipiho sa pagsugod magamit ang terraform ganina

Sa sulod sa proyekto kinahanglan nimo nga moadto sa tab Kubernetes:

Ang tighatag sa Terraform nga Selectel

Dinhi nahimutang ang cluster nga gihimo pinaagi sa Terraform. I-download ang file para sa kubectl mahimo nimo sa tab nga "Access":

Ang tighatag sa Terraform nga Selectel

Ang mga panudlo sa pag-install nahimutang sa parehas nga tab. kubectl ug paggamit sa na-download config.yaml.

Pagkahuman sa paglansad kubectl ug pag-set sa environment variable KUBECONFIG mahimo nimong gamiton ang 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

Ang gidaghanon sa mga cluster node daling mabag-o pinaagi sa Terraform.
Sa file main.tf ang mosunod nga bili gipiho:

cluster_node_count = "${var.cluster_node_count}"

Kini nga bili gipulihan gikan sa vars.tf:

variable "cluster_node_count" {
default = 2
}

Mahimo nimong usbon ang default nga kantidad sa vars.tf, o ipiho ang gikinahanglan nga bili direkta sa main.tf:

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

Aron magamit ang mga pagbag-o, sama sa kaso sa una nga pananglitan, gamita ang mando magamit ang terraform:

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

Kung ang gidaghanon sa mga node mausab, ang cluster magpabilin nga magamit. Human makadugang ug node pinaagi sa Terraform, mahimo nimo kining gamiton nga walay dugang nga configuration:

$ 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

konklusyon

Niini nga artikulo nahibal-an namon ang mga nag-unang paagi sa pagtrabaho "Virtual pribadong panganod" pinaagi sa Terraform. Malipay kami kung gamiton nimo ang opisyal nga provider sa Terraform nga Selectel ug maghatag feedback.

Ang bisan unsang mga bug nga makit-an sa Selectel Terraform provider mahimong i-report pinaagi sa Mga Isyu sa Github.

Source: www.habr.com

Idugang sa usa ka comment