Лансиравме официјален провајдер на Terraform за работа со Selectel. Овој производ им овозможува на корисниците целосно да го имплементираат управувањето со ресурсите преку методологијата Infrastructure-as-code.
Давателот моментално поддржува управување со ресурсите на услугите „Виртуелен приватен облак“ (во натамошниот текст VPC). Во иднина, планираме да додадеме управување со ресурси за други услуги што ги обезбедува Selectel.
Како што веќе знаете, услугата VPC е изградена на OpenStack. Сепак, поради фактот што OpenStack не обезбедува природни алатки за опслужување на јавниот облак, ја имплементиравме функционалноста што недостасува во збир на дополнителни API кои го поедноставуваат управувањето со сложените композитни објекти и ја прават работата поудобна. Дел од функционалноста достапна во OpenStack е затворена од директна употреба, но е достапна преку нашето API.
Провајдерот Selectel Terraform сега ја вклучува можноста за управување со следните VPC ресурси:
проекти и нивните квоти;
корисници, нивните улоги и токени;
јавни подмрежи, вклучувајќи крос-регионални и VRRP;
софтверски лиценци.
Давателот ја користи нашата јавна библиотека Go за да работи со VPC API. И библиотеката и самиот провајдер се со отворен код, нивниот развој се врши на Github:
За да управувате со други ресурси на облак, како што се виртуелни машини, дискови, кластери Kubernetes, можете да го користите провајдерот OpenStack Terraform. Официјалната документација за двата провајдери е достапна на следните линкови:
Манифестите за работа со Selectel се креираат со помош на Terraform или со користење на сет на готови примери кои се достапни во нашето складиште Github: тераформи-примери.
Складиштето со примери е поделено на два директориуми:
модули, кои содржат мали модули за повеќекратна употреба кои земаат сет на параметри како влез и управуваат со мал сет на ресурси;
примери, кој содржи примери на комплетен сет на меѓусебно поврзани модули.
Откако ќе го инсталирате Terraform, ќе создадете клуч Selectel API и ќе се запознаете со примерите, да преминеме на практични примери.
Во датотека vars.tf опишани се сите параметри кои ќе се користат при повикување модули. Некои од нив имаат стандардни вредности, на пример, серверот ќе се креира во зоната ру-3а со следнава конфигурација:
Доколку е потребно, можете да наведете друг јавен клуч. Клучот не мора да биде наведен како патека на датотеката; можете исто така да ја додадете вредноста како низа.
Понатаму во оваа датотека модулите се лансирани проект_со_корисник и server_local_root_disk, кои управуваат со потребните ресурси.
Аргумент игнорирај_промени ви овозможува да ги игнорирате промените на атрибутите 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 ќе покаже кои ресурси сака да ги создаде и ќе побара потврда:
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
Откако ќе се креираат проектот, корисникот и улогата, можете да започнете со создавање на преостанатите ресурси:
Можете да работите со креираната виртуелна машина преку SSH користејќи ја наведената IP адреса.
Уредување ресурси
Покрај создавањето ресурси преку Terraform, тие исто така може да се менуваат.
На пример, да го зголемиме бројот на јадра и меморија за нашиот сервер со менување на вредностите за параметрите server_vcpus и server_ram_mb во датотека примери/vpc/server_local_root_disk/main.tf:
Во нашата пример складишта Можете исто така да видите манифестации за создавање виртуелни машини со мрежни дискови.
Пример за создавање кластер Кубернетес
Пред да преминеме на следниот пример, ќе ги исчистиме ресурсите што ги создадовме претходно. За да го направите ова во коренот на проектот terraform-examples/examples/vpc/server_local_root_disk Ајде да ја извршиме командата за бришење на објекти на OpenStack:
Во двата случаи, ќе треба да го потврдите бришењето на сите објекти:
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
Овој пример создава проект, корисник со улога во проектот и подига еден Kubernetes кластер. Во датотека vars.tf можете да ги видите стандардните вредности, како што се бројот на јазли, нивните карактеристики, верзијата на Kubernetes итн.
За да создадеме ресурси слични на првиот пример, најпрво ќе започнеме со иницијализирање на модулите и создавање ресурси на модулите проект_со_корисника потоа креирајте сè друго:
Ќе го пренесеме создавањето и управувањето со кластерите на Kubernetes преку компонентата OpenStack Magnum. Можете да дознаете повеќе за тоа како да работите со кластер во еден од нашите претходни написи, како и во база на знаење.
При подготовка на кластерот, ќе се креираат дискови и виртуелни машини и ќе се инсталираат сите потребни компоненти. Подготовката трае околу 4 минути, за кое време Terraform ќе прикаже пораки како:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Откако ќе заврши инсталацијата, Terraform ќе покаже дека кластерот е подготвен и ќе го прикаже неговиот ID:
За управување со креираниот кластер Kubernetes преку алатката кубектел треба да ја добиете датотеката за пристап до кластерот. За да го направите ова, одете на проектот создаден преку Terraform во списокот со проекти во вашата сметка:
Следно, следете ја врската како xxxxxx.selvpc.ruшто се појавува под името на проектот:
За информации за најавување, користете ги корисничкото име и лозинката што сте ги создале преку Terraform. Ако не сте изневериле vars.tf или главен.tf на нашиот пример, корисникот ќе го има името tf_user. Мора да ја користите вредноста на променливата како лозинка TF_VAR_user_password, што беше наведено при стартување тераформи се применуваат порано
Внатре во проектот треба да отидете на јазичето Кубернети:
Ова е местото каде што се наоѓа кластерот создаден преку Terraform. Преземете ја датотеката за кубектел можете на табулаторот „Пристап“:
Упатствата за инсталација се наоѓаат на истото јазиче. кубектел и користење на преземеното config.yaml.
По лансирањето кубектел и поставување на променливата на околината KUBECONFIG можете да го користите Kubernetes:
Кога ќе се промени бројот на јазли, кластерот ќе остане достапен. Откако ќе додадете јазол преку 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.