Тераформски провајдер Selectel

Тераформски провајдер Selectel

Лансиравме официјален провајдер на Terraform за работа со Selectel. Овој производ им овозможува на корисниците целосно да го имплементираат управувањето со ресурсите преку методологијата Infrastructure-as-code.

Давателот моментално поддржува управување со ресурсите на услугите „Виртуелен приватен облак“ (во натамошниот текст VPC). Во иднина, планираме да додадеме управување со ресурси за други услуги што ги обезбедува Selectel.

Како што веќе знаете, услугата VPC е изградена на OpenStack. Сепак, поради фактот што OpenStack не обезбедува природни алатки за опслужување на јавниот облак, ја имплементиравме функционалноста што недостасува во збир на дополнителни API кои го поедноставуваат управувањето со сложените композитни објекти и ја прават работата поудобна. Дел од функционалноста достапна во OpenStack е затворена од директна употреба, но е достапна преку нашето API.

Провајдерот Selectel Terraform сега ја вклучува можноста за управување со следните VPC ресурси:

  • проекти и нивните квоти;
  • корисници, нивните улоги и токени;
  • јавни подмрежи, вклучувајќи крос-регионални и VRRP;
  • софтверски лиценци.

Давателот ја користи нашата јавна библиотека Go за да работи со VPC API. И библиотеката и самиот провајдер се со отворен код, нивниот развој се врши на Github:

За да управувате со други ресурси на облак, како што се виртуелни машини, дискови, кластери Kubernetes, можете да го користите провајдерот OpenStack Terraform. Официјалната документација за двата провајдери е достапна на следните линкови:

Getting Started

За да започнете, треба да инсталирате Terraform (инструкции и врски до инсталационите пакети може да се најдат на официјална веб-страница).

За да работи, давателот бара клуч Selectel API, кој е креиран во контролни панели за сметка.

Манифестите за работа со Selectel се креираат со помош на Terraform или со користење на сет на готови примери кои се достапни во нашето складиште Github: тераформи-примери.

Складиштето со примери е поделено на два директориуми:

  • модули, кои содржат мали модули за повеќекратна употреба кои земаат сет на параметри како влез и управуваат со мал сет на ресурси;
  • примери, кој содржи примери на комплетен сет на меѓусебно поврзани модули.

Откако ќе го инсталирате Terraform, ќе создадете клуч Selectel API и ќе се запознаете со примерите, да преминеме на практични примери.

Пример за создавање сервер со локален диск

Ајде да погледнеме пример за создавање проект, корисник со улога и виртуелна машина со локален диск: terraform-examples/examples/vpc/server_local_root_disk.

Во датотека vars.tf опишани се сите параметри кои ќе се користат при повикување модули. Некои од нив имаат стандардни вредности, на пример, серверот ќе се креира во зоната ру-3а со следнава конфигурација:

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

Во датотека главен.tf Провајдерот Selectel е иницијализиран:

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

Оваа датотека ја содржи и стандардната вредност за клучот SSH што ќе се инсталира на серверот:

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

Доколку е потребно, можете да наведете друг јавен клуч. Клучот не мора да биде наведен како патека на датотеката; можете исто така да ја додадете вредноста како низа.

Понатаму во оваа датотека модулите се лансирани проект_со_корисник и server_local_root_disk, кои управуваат со потребните ресурси.

Ајде да ги разгледаме овие модули подетално.

Креирање на проект и корисник со улога

Првиот модул создава проект и корисник со улога во тој проект: terraform-examples/modules/vpc/project_with_user.

Создадениот корисник ќе може да се најави на OpenStack и да управува со неговите ресурси. Модулот е едноставен и управува со само три ентитети:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Креирање виртуелен сервер со локален диск

Вториот модул се занимава со управување со објектите на OpenStack, кои се неопходни за создавање сервер со локален диск.

Треба да обрнете внимание на некои од аргументите што се наведени во овој модул за ресурсот openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Аргумент игнорирај_промени ви овозможува да ги игнорирате промените на атрибутите id за сликата што се користи за креирање на виртуелната машина. Во услугата VPC, повеќето јавни слики се ажурираат автоматски еднаш неделно, а во исто време и нивните id исто така се менува. Ова се должи на особеностите на компонентата OpenStack - Glance, во која сликите се сметаат за непроменливи ентитети.

Ако креирате или менувате постоечки сервер или диск што има како аргумент image_id користат id јавна слика, а потоа откако таа слика ќе се ажурира, повторното вклучување на манифестот Terraform ќе го рекреира серверот или дискот. Користење на аргумент игнорирај_промени ви овозможува да избегнете таква ситуација.

Забелешка: аргумент игнорирај_промени се појави во Terraform многу одамна: повлечете #2525.

Аргумент ignore_resize_confirmation потребни за успешно менување на големината на локалниот диск, јадра или меморија на серверот. Ваквите промени се прават преку компонентата OpenStack Nova користејќи барање менување на големината. Стандардна Nova по барање менување на големината го става серверот во статус verify_size и чека дополнителна потврда од корисникот. Сепак, ова однесување може да се промени за Nova да не чека дополнителни дејства од корисникот.

Наведениот аргумент му дозволува на Terraform да не чека за статусот verify_size за серверот и бидете подготвени серверот да биде во активен статус по промената на неговите параметри. Аргументот е достапен од верзијата 1.10.0 на провајдерот OpenStack Terraform: повлечете #422.

Создавање ресурси

Пред да ги стартувате манифестатите, забележете дека во нашиот пример се активираат два различни провајдери, а давателот на OpenStack зависи од ресурсите на давателот Selectel, бидејќи без создавање корисник во проектот, невозможно е да се управуваат со објектите што му припаѓаат . За жал, од истата причина не можеме само да ја извршиме командата тераформи се применуваат во нашиот пример. Прво треба да направиме се применуваат за модул проект_со_корисник а после тоа за се останато.

Забелешка: Овој проблем сè уште не е решен во Terraform, можете да ја следите дискусијата на Github на број 2430 и број 4149.

За да креирате ресурси, одете во директориумот terraform-examples/examples/vpc/server_local_root_disk, неговата содржина треба да биде вака:

$ ls
README.md	   main.tf		vars.tf

Ние ги иницијализираме модулите користејќи ја командата:

$ terraform init

Излезот покажува дека Terraform ги презема најновите верзии на провајдерите што ги користи и ги проверува сите модули опишани во примерот.

Прво да го примениме модулот проект_со_корисник. Ова бара рачно пренесување на вредности за променливи кои не се поставени:

  • sel_account со бројот на вашата сметка на Selectel;
  • sel_token со вашиот клуч за Selectel API;
  • user_password со лозинка за корисникот на OpenStack.

Вредностите за првите две променливи мора да се земат од контролни панели.

За последната променлива, можете да излезете со која било лозинка.

За да го користите модулот треба да ги замените вредностите SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD извршување на командата:

$ 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

Откако ќе ја извршите командата, Terraform ќе покаже кои ресурси сака да ги создаде и ќе побара потврда:

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

Откако ќе се креираат проектот, корисникот и улогата, можете да започнете со создавање на преостанатите ресурси:

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

Кога креирате ресурси, обрнете внимание на излезот Terraform со надворешната IP адреса каде што креираниот сервер ќе биде достапен:

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

Можете да работите со креираната виртуелна машина преку SSH користејќи ја наведената IP адреса.

Уредување ресурси

Покрај создавањето ресурси преку Terraform, тие исто така може да се менуваат.

На пример, да го зголемиме бројот на јадра и меморија за нашиот сервер со менување на вредностите за параметрите server_vcpus и server_ram_mb во датотека примери/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

После ова, проверуваме какви промени ќе доведат ова со користење на следнава команда:

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

Како резултат на тоа, Terraform направи промена на ресурсите openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Ве молиме имајте предвид дека ова ќе повлече рестартирање на креираната виртуелна машина.

За да ја примените новата конфигурација на виртуелната машина, користете ја командата тераформи се применуваат, кој веќе го лансиравме порано.

Сите создадени објекти ќе бидат прикажани во VPC контролни панели:

Тераформски провајдер Selectel

Во нашата пример складишта Можете исто така да видите манифестации за создавање виртуелни машини со мрежни дискови.

Пример за создавање кластер Кубернетес

Пред да преминеме на следниот пример, ќе ги исчистиме ресурсите што ги создадовме претходно. За да го направите ова во коренот на проектот terraform-examples/examples/vpc/server_local_root_disk Ајде да ја извршиме командата за бришење на објекти на 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

Потоа извршете ја командата за да ги избришете објектите на 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

Во двата случаи, ќе треба да го потврдите бришењето на сите објекти:

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

Следниот пример е во директориумот terraform-examples/examples/vpc/kubernetes_cluster.

Овој пример создава проект, корисник со улога во проектот и подига еден Kubernetes кластер. Во датотека vars.tf можете да ги видите стандардните вредности, како што се бројот на јазли, нивните карактеристики, верзијата на Kubernetes итн.

За да создадеме ресурси слични на првиот пример, најпрво ќе започнеме со иницијализирање на модулите и создавање ресурси на модулите проект_со_корисника потоа креирајте сè друго:

$ 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 преку компонентата OpenStack Magnum. Можете да дознаете повеќе за тоа како да работите со кластер во еден од нашите претходни написи, како и во база на знаење.

При подготовка на кластерот, ќе се креираат дискови и виртуелни машини и ќе се инсталираат сите потребни компоненти. Подготовката трае околу 4 минути, за кое време Terraform ќе прикаже пораки како:

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

Откако ќе заврши инсталацијата, Terraform ќе покаже дека кластерот е подготвен и ќе го прикаже неговиот ID:

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

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

За управување со креираниот кластер Kubernetes преку алатката кубектел треба да ја добиете датотеката за пристап до кластерот. За да го направите ова, одете на проектот создаден преку Terraform во списокот со проекти во вашата сметка:

Тераформски провајдер Selectel

Следно, следете ја врската како xxxxxx.selvpc.ruшто се појавува под името на проектот:

Тераформски провајдер Selectel

За информации за најавување, користете ги корисничкото име и лозинката што сте ги создале преку Terraform. Ако не сте изневериле vars.tf или главен.tf на нашиот пример, корисникот ќе го има името tf_user. Мора да ја користите вредноста на променливата како лозинка TF_VAR_user_password, што беше наведено при стартување тераформи се применуваат порано

Внатре во проектот треба да отидете на јазичето Кубернети:

Тераформски провајдер Selectel

Ова е местото каде што се наоѓа кластерот создаден преку Terraform. Преземете ја датотеката за кубектел можете на табулаторот „Пристап“:

Тераформски провајдер Selectel

Упатствата за инсталација се наоѓаат на истото јазиче. кубектел и користење на преземеното config.yaml.

По лансирањето кубектел и поставување на променливата на околината KUBECONFIG можете да го користите 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

Бројот на кластерски јазли може лесно да се промени преку Terraform.
Во датотека главен.tf следнава вредност е наведена:

cluster_node_count = "${var.cluster_node_count}"

Оваа вредност е заменета од vars.tf:

variable "cluster_node_count" {
default = 2
}

Можете да ја промените или стандардната вредност во vars.tf, или наведете ја потребната вредност директно во главен.tf:

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

За да ги примените промените, како во случајот со првиот пример, користете ја командата тераформи се применуваат:

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

Кога ќе се промени бројот на јазли, кластерот ќе остане достапен. Откако ќе додадете јазол преку Terraform, можете да го користите без дополнителна конфигурација:

$ 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

Заклучок

Во оваа статија се запознавме со главните начини на работа „Виртуелен приватен облак“ преку Terraform. Ќе ни биде драго ако го користите официјалниот провајдер на Terraform Selectel и дадете повратни информации.

Сите грешки пронајдени во давателот на Selectel Terraform може да се пријават преку Проблеми со Github.

Извор: www.habr.com

Додадете коментар