Mpanome Terraform Selectel

Mpanome Terraform Selectel

Nanangana mpamatsy Terraform ofisialy izahay hiara-miasa amin'i Selectel. Ity vokatra ity dia ahafahan'ny mpampiasa mampihatra tanteraka ny fitantanana ny loharanon-karena amin'ny alàlan'ny fomba fiasa Infrastructure-as-code.

Ny mpamatsy amin'izao fotoana izao dia manohana ny fitantanana ny loharanon'asa "Rahona tsy miankina virtoaly" (antsoina hoe VPC avy eo). Amin'ny ho avy, mikasa ny hanampy fitantanana loharanon-karena ho an'ny serivisy hafa omen'ny Selectel izahay.

Araka ny efa fantatrao, ny serivisy VPC dia naorina amin'ny OpenStack. Na izany aza, noho ny zava-misy fa ny OpenStack dia tsy manome fitaovana teratany amin'ny fanompoana ny rahona ho an'ny daholobe, dia nampiharina ny fampiasa tsy hita ao anatin'ny andiana API fanampiny izay manatsotra ny fitantanana ireo zavatra composite be pitsiny sy mahatonga ny asa ho mora kokoa. Ny sasany amin'ireo fiasa misy ao amin'ny OpenStack dia mihidy amin'ny fampiasana mivantana, fa azo alaina amin'ny alàlan'ny ny API.

Ny mpamatsy Selectel Terraform izao dia ahitana ny fahafahana mitantana ireto loharano VPC manaraka ireto:

  • tetikasa sy ny fetrany;
  • mpampiasa, ny anjara asany sy ny famantarana;
  • subnets ho an'ny daholobe, anisan'izany ny faritra midadasika sy VRRP;
  • lisansa rindrambaiko.

Mampiasa ny tranomboky Go ho an'ny daholobe ny mpamatsy mba hiasa miaraka amin'ny VPC API. Na ny trano famakiam-boky na ny mpamatsy dia loharano misokatra, ny fampivoarana azy ireo dia atao amin'ny Github:

Raha mitantana loharanon-drahona hafa, toy ny milina virtoaly, kapila, kluster Kubernetes, dia azonao ampiasaina ny mpamatsy OpenStack Terraform. Ny antontan-taratasy ofisialy ho an'ny mpamatsy roa dia azo alaina amin'ireto rohy manaraka ireto:

fanombohana

Mba hanombohana dia mila mametraka Terraform ianao (misy torolàlana sy rohy mankany amin'ny fonosana fametrahana tranonkala ofisialy).

Mba hiasa dia mila lakile Selectel API ny mpamatsy, izay noforonina ao kaonty fanaraha-maso tontonana.

Ny fanehoana ny fiaraha-miasa amin'ny Selectel dia noforonina amin'ny fampiasana Terraform na amin'ny fampiasana andiana ohatra efa vita izay hita ao amin'ny tahiry Github: terraform-ohatra.

Ny tahiry misy ohatra dia mizara roa:

  • Modules, misy môdely kely azo ampiasaina indray izay maka mari-pamantarana maromaro ho fampidirana sy mitantana loharanon-karena kely;
  • ohatra, misy ohatra amin'ny fitambarana môdôly mifamatotra.

Aorian'ny fametrahana ny Terraform, mamorona lakile Selectel API ary mahafantatra ireo ohatra, andao hiroso amin'ny ohatra azo ampiharina.

Ohatra iray amin'ny famoronana server miaraka amin'ny kapila eo an-toerana

Andeha hojerentsika ny ohatra iray amin'ny famoronana tetikasa, mpampiasa manana andraikitra ary milina virtoaly misy kapila eo an-toerana: terraform-examples/examples/vpc/server_local_root_disk.

Ao anaty rakitra vars.tf ny masontsivana rehetra izay ho ampiasaina amin'ny fiantsoana Modules dia voalaza. Ny sasany amin'izy ireo dia manana sanda default, ohatra, ny mpizara dia hoforonina ao amin'ny faritra ru-3a miaraka amin'ny configuration manaraka:

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

Ao anaty rakitra main.tf Ny mpamatsy Selectel dia natomboka:

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

Ity rakitra ity koa dia misy ny sandan'ny default ho an'ny fanalahidy SSH izay hapetraka ao amin'ny server:

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

Raha ilaina dia azonao atao ny mamaritra fanalahidin'ny daholobe hafa. Ny fanalahidy dia tsy voatery ho voatondro ho lalan-drakitra; azonao atao koa ny manampy ny sanda ho tady.

Amin'ity rakitra ity dia atomboka ny modules project_with_user и server_local_root_disk, izay mitantana ireo loharano ilaina.

Andeha hojerentsika amin'ny antsipiriany bebe kokoa ireo modules ireo.

Mamorona tetikasa sy mpampiasa manana andraikitra

Ny module voalohany dia mamorona tetikasa sy mpampiasa manana anjara amin'io tetikasa io: terraform-examples/modules/vpc/project_with_user.

Ny mpampiasa noforonina dia afaka miditra amin'ny OpenStack ary mitantana ny loharanony. Tsotra ilay module ary enti-mitantana telo ihany:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Mamorona mpizara virtoaly miaraka amin'ny kapila eo an-toerana

Ny maody faharoa dia mifandraika amin'ny fitantanana ireo zavatra OpenStack, izay ilaina amin'ny famoronana mpizara misy kapila eo an-toerana.

Tokony hojerenao ny sasany amin'ireo tohan-kevitra voalaza ato amin'ity module ity momba ny loharano openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

fandresen-dahatra ignore_changes mamela anao tsy hiraharaha ny fiovan'ny toetra id ho an'ny sary ampiasaina hamoronana ny milina virtoaly. Ao amin'ny serivisy VPC, ny ankamaroan'ny sary ho an'ny daholobe dia havaozina ho azy indray mandeha isan-kerinandro ary miaraka amin'izay koa ny azy id miova koa. Izany dia noho ny mampiavaka ny singa OpenStack - Glance, izay heverina ho singa tsy azo ovaina ny sary.

Raha mamorona na manova mpizara na kapila efa misy ianao izay manana tohan-kevitra image_id ampiasaina id sary ho an'ny daholobe, avy eo aorian'ny fanavaozana an'io sary io, ny fampandehanana indray ny Terraform manifest dia hamerina ny server na disk. Mampiasa hevitra ignore_changes mamela anao hisoroka toe-javatra toy izany.

Fanamarihana: argument ignore_changes niseho tao amin'ny Terraform efa hatry ny ela: misintona#2525.

fandresen-dahatra ignore_resize_confirmation ilaina mba hahombiazana hanova ny haben'ny kapila eo an-toerana, cores, na fahatsiarovana mpizara. Ny fanovana toy izany dia atao amin'ny alàlan'ny singa OpenStack Nova amin'ny fampiasana fangatahana hanova haben. Default Nova aorian'ny fangatahana hanova haben mametraka ny mpizara amin'ny sata verify_resize ary miandry fanamafisana fanampiny avy amin'ny mpampiasa. Na izany aza, azo ovaina io fihetsika io mba tsy hiandry hetsika fanampiny avy amin'ny mpampiasa i Nova.

Ny tohan-kevitra voafaritra dia mamela an'i Terraform tsy hiandry ny sata verify_resize ho an'ny mpizara ary miomàna ho amin'ny sata mavitrika ny mpizara rehefa avy nanova ny mari-pamantarana. Ny hevitra dia azo avy amin'ny version 1.10.0 an'ny OpenStack Terraform provider: misintona#422.

Mamorona loharanon-karena

Alohan'ny handefasana ny manifests, azafady mariho fa amin'ny ohatra asehontsika dia misy mpamatsy roa samy hafa natomboka, ary ny mpamatsy OpenStack dia miankina amin'ny loharanon'ny mpamatsy Selectel, satria raha tsy misy mpampiasa ao amin'ny tetikasa dia tsy azo atao ny mitantana ny zavatra misy azy. . Indrisy anefa fa noho io antony io ihany dia tsy afaka manatanteraka ny baiko fotsiny isika mihatra ny terraform ao anatintsika ohatra. Mila manao aloha isika mampihatra ho an'ny module project_with_user ary avy eo dia ho an'ny zavatra hafa rehetra.

Fanamarihana: Ity olana ity dia tsy mbola voavaha ao amin'ny Terraform, azonao atao ny manaraka ny fifanakalozan-kevitra ao amin'ny Github amin'ny laharana #2430 и laharana #4149.

Raha te hamorona loharano dia mandehana any amin'ny lahatahiry terraform-examples/examples/vpc/server_local_root_disk, tokony ho toy izao ny ao anatiny:

$ ls
README.md	   main.tf		vars.tf

Manomboka ny modules mampiasa ny baiko izahay:

$ terraform init

Ny vokatra dia mampiseho fa ny Terraform dia misintona ny kinova farany an'ny mpamatsy ampiasainy ary manamarina ny maody rehetra voalaza ao amin'ny ohatra.

Andao aloha hampihatra ny module project_with_user. Izany dia mitaky sanda mandalo amin'ny tanana ho an'ny variables izay tsy napetraka:

  • sel_kaonty miaraka amin'ny laharan'ny kaontinao Selectel;
  • sel_token miaraka amin'ny fanalahidinao ho an'ny Selectel API;
  • user_password miaraka amin'ny tenimiafina ho an'ny mpampiasa OpenStack.

Ny soatoavina ho an'ny fari-piainana roa voalohany dia tsy maintsy alaina tontonana fanaraha-maso.

Ho an'ny variana farany, azonao atao ny mamorona tenimiafina.

Mba hampiasana ny module dia mila manolo ny soatoavina ianao SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD mihazakazaka ny baiko:

$ 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

Aorian'ny fampandehanana ny baiko dia asehon'i Terraform izay loharano tiany hamoronana ary hangataka fanamafisana:

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

Raha vao noforonina ny tetikasa, ny mpampiasa ary ny anjara asany dia afaka manomboka mamorona ireo loharano sisa ianao:

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

Rehefa mamorona loharano dia tandremo ny vokatra Terraform miaraka amin'ny adiresy IP ivelany izay ahafahan'ny mpizara noforonina ho azo idirana:

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

Azonao atao ny miara-miasa amin'ny milina virtoaly noforonina amin'ny SSH amin'ny alàlan'ny IP voatondro.

Fanovana loharanon-karena

Ho fanampin'ny famoronana loharano amin'ny alàlan'ny Terraform dia azo ovaina ihany koa izy ireo.

Ohatra, andao hampitombo ny isan'ny cores sy ny fitadidiana ho an'ny mpizara amin'ny alàlan'ny fanovana ny soatoavina ho an'ny paramètre. server_vcpus и server_ram_mb anaty rakitra 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

Aorian'izay dia dinihintsika hoe inona no fiovana hitarika amin'ny fampiasana ity baiko manaraka ity:

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

Vokatr'izany dia nanao fanovana loharanon-karena i Terraform openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Azafady mariho fa izany dia mitaky famerenana ny milina virtoaly noforonina.

Mba hampiharana ny fikirakirana milina virtoaly vaovao dia ampiasao ny baiko mihatra ny terraform, izay efa natomboka teo aloha.

Ny zavatra noforonina rehetra dia haseho ao VPC fanaraha-maso:

Mpanome Terraform Selectel

Ao amintsika ohatra repository Azonao atao ihany koa ny mahita manifests amin'ny famoronana milina virtoaly miaraka amin'ny kapila tambajotra.

Ohatra amin'ny famoronana cluster Kubernetes

Alohan'ny hirosoana amin'ny ohatra manaraka dia hodiovintsika ireo loharano noforoninay teo aloha. Mba hanaovana izany ao amin'ny fototry ny tetikasa terraform-examples/examples/vpc/server_local_root_disk Andeha hojerentsika ny baiko hamafa ny zavatra 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

Avy eo, tanteraho ny baiko hanesorana ireo zavatra 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

Amin'ireo tranga roa ireo dia mila manamarina ny famafana ny zavatra rehetra ianao:

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

Ity ohatra manaraka ity dia ao amin'ny lahatahiry terraform-examples/examples/vpc/kubernetes_cluster.

Ity ohatra ity dia mamorona tetikasa, mpampiasa manana anjara amin'ny tetikasa, ary manangana cluster Kubernetes iray. Ao anaty rakitra vars.tf azonao jerena ny soatoavina mahazatra, toy ny isan'ny nodes, ny toetrany, ny dikan-teny Kubernetes, sns.

Mba hamoronana loharano mitovy amin'ny ohatra voalohany, voalohany indrindra dia hanomboka fanombohana modules isika ary hamorona loharano modules project_with_userary avy eo mamorona ny zavatra hafa rehetra:

$ 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

Hamindra ny famoronana sy ny fitantanana ny kluster Kubernetes amin'ny alàlan'ny singa OpenStack Magnum izahay. Azonao atao ny mahita bebe kokoa momba ny fomba fiasa miaraka amin'ny cluster ao amin'ny iray aminay lahatsoratra teo alohaary koa amin'ny fototra fahalalana.

Rehefa manomana ny cluster, dia hatsangana ny kapila sy milina virtoaly ary hapetraka ny singa ilaina rehetra. Maharitra 4 minitra eo ho eo ny fanomanana, mandritra izany fotoana izany dia haneho hafatra toy ny:

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

Rehefa vita ny fametrahana dia hanondro ny Terraform fa vonona ny cluster ary asehoy ny ID azy:

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

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

Hitantana ny kluster Kubernetes noforonina amin'ny alalan'ny fitaovana kubectl mila maka ny rakitra fidirana cluster ianao. Mba hanaovana izany, mandehana any amin'ny tetikasa noforonina tamin'ny alàlan'ny Terraform ao amin'ny lisitry ny tetikasa ao amin'ny kaontinao:

Mpanome Terraform Selectel

Manaraka, araho ny rohy toy ny xxxxxx.selvpc.ruizay miseho eo ambanin'ny anaran'ny tetikasa:

Mpanome Terraform Selectel

Raha mila fampahalalana momba ny fidirana, ampiasao ny solonanarana sy tenimiafina noforoninao tamin'ny alàlan'ny Terraform. Raha mbola tsy nisoloky ianao vars.tf na main.tf ohatra, ny mpampiasa dia hanana ny anarana tf_user. Tsy maintsy mampiasa ny sandan'ny fari-piainana ho tenimiafina ianao TF_VAR_user_password, izay nofaritana tamin'ny fanombohana mihatra ny terraform teo aloha.

Ao anatin'ilay tetikasa dia mila mandeha any amin'ny tabilao ianao Kubernetes:

Mpanome Terraform Selectel

Eto no misy ny cluster noforonina tamin'ny alàlan'ny Terraform. Misintona rakitra ho an'ny kubectl azonao atao ao amin'ny tabilao "Access":

Mpanome Terraform Selectel

Ny torolàlana fametrahana dia hita eo amin'ny tabilao mitovy. kubectl ary ny fampiasana ny alaina config.yaml.

Aorian'ny fandefasana kubectl ary mametraka ny fari-piainan'ny tontolo iainana KUBECONFIG azonao atao ny mampiasa 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

Ny isan'ny kluster node dia azo ovaina mora foana amin'ny alàlan'ny Terraform.
Ao anaty rakitra main.tf nofaritana ireto sanda manaraka ireto:

cluster_node_count = "${var.cluster_node_count}"

Io sanda io dia soloina amin'ny vars.tf:

variable "cluster_node_count" {
default = 2
}

Azonao atao ny manova ny sanda default amin'ny vars.tf, na mamaritra mivantana ny sanda ilaina amin'ny main.tf:

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

Mba hampiharana ny fanovana, toy ny tamin'ny ohatra voalohany, ampiasao ny baiko mihatra ny terraform:

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

Rehefa miova ny isan'ny nodes dia mbola ho hita ny cluster. Aorian'ny fampidirana node amin'ny alàlan'ny Terraform dia azonao ampiasaina tsy misy fanampim-panazavana fanampiny:

$ 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

famaranana

Ato amin'ity lahatsoratra ity isika dia nahafantatra ny tena fomba miasa miaraka "Rahona tsy miankina virtoaly" amin'ny alàlan'ny Terraform. Faly izahay raha mampiasa ny mpamatsy Selectel Terraform ofisialy ianao ary manome valiny.

Ny bibikely rehetra hita ao amin'ny mpamatsy Selectel Terraform dia azo taterina amin'ny alàlan'ny Olana Github.

Source: www.habr.com

Add a comment