Пуснахме официален доставчик на 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 са описани всички параметри, които ще се използват при извикване на модули. Някои от тях имат стойности по подразбиране, например сървърът ще бъде създаден в зоната ru-3a със следната конфигурация:
Ако е необходимо, можете да посочите различен публичен ключ. Ключът не трябва да бъде посочен като път към файл; можете също да добавите стойността като низ.
По-нататък в този файл се стартират модулите проект_с_потребител и сървър_локален_основен_диск, които управляват необходимите ресурси.
аргумент ignore_changes ви позволява да игнорирате промените в атрибутите id за изображението, използвано за създаване на виртуалната машина. В услугата VPC повечето публични изображения се актуализират автоматично веднъж седмично и в същото време техните id също се променя. Това се дължи на особеностите на компонента OpenStack - Glance, в който изображенията се считат за неизменни обекти.
Ако създавате или модифицирате съществуващ сървър или диск, който има като аргумент image_id употребяван id публично изображение, след като това изображение бъде актуализирано, повторното стартиране на манифеста на Terraform ще пресъздаде сървъра или диска. Използване на аргумент ignore_changes ви позволява да избегнете подобна ситуация.
Забележка: аргумент ignore_changes се появи в Terraform доста отдавна: изтегляне#2525.
аргумент ignore_resize_confirmation необходими за успешно преоразмеряване на локален диск, ядра или сървърна памет. Такива промени се правят чрез компонента OpenStack Nova с помощта на заявка преоразмерите. Нова по подразбиране след заявка преоразмерите поставя сървъра в състояние verify_resize и чака допълнително потвърждение от потребителя. Това поведение обаче може да бъде променено, така че Nova да не чака допълнителни действия от потребителя.
Посоченият аргумент позволява на Terraform да не чака статуса verify_resize за сървъра и бъдете подготвени сървърът да бъде в активен статус след промяна на параметрите му. Аргументът е достъпен от версия 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 във файл examples/vpc/server_local_root_disk/main.tf:
В нашата примерни хранилища Можете също да видите манифести за създаване на виртуални машини с мрежови устройства.
Пример за създаване на Kubernetes клъстер
Преди да преминем към следващия пример, ще изчистим ресурсите, които създадохме по-рано. За да направите това в корена на проекта 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 клъстер чрез помощната програма kubectl трябва да получите файла за достъп до клъстера. За да направите това, отидете на проекта, създаден чрез Terraform в списъка с проекти във вашия акаунт:
След това следвайте връзката като xxxxxx.selvpc.ruкоето се появява под името на проекта:
За информация за влизане използвайте потребителското име и паролата, които сте създали чрез Terraform. Ако не сте изневерявали vars.tf или main.tf за нашия пример потребителят ще има името tf_user. Трябва да използвате стойността на променливата като парола TF_VAR_user_password, който е зададен при стартиране прилагане на тераформа по-рано.
Вътре в проекта трябва да отидете в раздела Kubernetes:
Това е мястото, където се намира клъстерът, създаден чрез Terraform. Изтегляне на файл за kubectl можете в раздела „Достъп“:
Инструкциите за инсталиране се намират в същия раздел. kubectl и използване на изтеглените config.yaml.
След старта kubectl и настройка на променливата на средата 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. Ще се радваме, ако използвате официалния доставчик на Selectel Terraform и предоставите обратна връзка.
Всички грешки, открити в доставчика на Selectel Terraform, могат да бъдат докладвани чрез Проблеми с Github.