Терраформ провајдер Селецтел

Терраформ провајдер Селецтел

Покренули смо званичног Терраформ провајдера за рад са Селецтел-ом. Овај производ омогућава корисницима да у потпуности имплементирају управљање ресурсима кроз методологију Инфраструцтуре-ас-цоде.

Провајдер тренутно подржава управљање ресурсима услуге „Виртуелни приватни облак“ (у даљем тексту ВПЦ). У будућности планирамо да додамо управљање ресурсима за друге услуге које пружа Селецтел.

Као што већ знате, ВПЦ сервис је изграђен на ОпенСтацк-у. Међутим, због чињенице да ОпенСтацк не пружа изворне алате за опслуживање јавног облака, имплементирали смо недостајућу функционалност у скуп додатних АПИ-ја који поједностављују управљање сложеним сложеним објектима и чине рад практичнијим. Неке функције доступне у ОпенСтацк-у су затворене за директну употребу, али су доступне преко наш АПИ.

Селецтел Терраформ добављач сада укључује могућност управљања следећим ВПЦ ресурсима:

  • пројекти и њихове квоте;
  • корисници, њихове улоге и токени;
  • јавне подмреже, укључујући међурегионалне и ВРРП;
  • софтверске лиценце.

Провајдер користи нашу јавну Го библиотеку за рад са ВПЦ АПИ-јем. И библиотека и сам провајдер су отвореног кода, њихов развој се врши на Гитхубу:

Да бисте управљали другим ресурсима у облаку, као што су виртуелне машине, дискови, Кубернетес кластери, можете користити ОпенСтацк Терраформ провајдера. Званична документација за оба провајдера доступна је на следећим линковима:

Први кораци

Да бисте започели, потребно је да инсталирате Терраформ (упутства и везе до инсталационих пакета могу се наћи на званични сајт).

За рад, провајдеру је потребан Селецтел АПИ кључ, који је креиран у контролне табле налога.

Манифести за рад са Селецтел-ом се креирају помоћу Терраформ-а или помоћу скупа готових примера који су доступни у нашем Гитхуб репозиторијуму: терраформ-примери.

Репозиторијум са примерима је подељен у два директоријума:

  • модули, који садржи мале модуле за вишекратну употребу који узимају скуп параметара као улаз и управљају малим скупом ресурса;
  • примери, који садржи примере комплетног скупа међусобно повезаних модула.

Након што инсталирате Терраформ, креирате Селецтел АПИ кључ и упознате се са примерима, пређимо на практичне примере.

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

Погледајмо пример креирања пројекта, корисника са улогом и виртуелне машине са локалним диском: терраформ-екамплес/екамплес/впц/сервер_лоцал_роот_диск.

У фајлу варс.тф описани су сви параметри који ће се користити приликом позивања модула. Неки од њих имају подразумеване вредности, на пример, сервер ће бити креиран у зони ру-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"
}

У фајлу маин.тф Селецтел провајдер је иницијализован:

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

Ова датотека такође садржи подразумевану вредност за ССХ кључ који ће бити инсталиран на серверу:

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

Ако је потребно, можете одредити други јавни кључ. Кључ не мора да буде наведен као путања до датотеке; такође можете додати вредност као стринг.

Даље у овој датотеци модули се покрећу пројецт_витх_усер и сервер_лоцал_роот_диск, који управљају потребним ресурсима.

Погледајмо ове модуле детаљније.

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

Први модул креира пројекат и корисника са улогом у том пројекту: терраформ-екамплес/модулес/впц/пројецт_витх_усер.

Креирани корисник ће моћи да се пријави на ОпенСтацк и управља својим ресурсима. Модул је једноставан и управља само са три ентитета:

  • селецтел_впц_пројецт_в2,
  • селецтел_впц_усер_в2,
  • селецтел_впц_роле_в2.

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

Други модул се бави управљањем ОпенСтацк објектима, који су неопходни за креирање сервера са локалним диском.

Требало би да обратите пажњу на неке од аргумената који су наведени у овом модулу за ресурс опенстацк_цомпуте_инстанце_в2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Расправа игноре_цхангес омогућава вам да игноришете промене атрибута id за слику која се користи за креирање виртуелне машине. У ВПЦ сервису, већина јавних слика се ажурира аутоматски једном недељно иу исто време id такође мења. Ово је због посебности компоненте ОпенСтацк - Гланце, у којој се слике сматрају непроменљивим ентитетима.

Ако креирате или мењате постојећи сервер или диск који има као аргумент имаге_ид употребљен id јавна слика, онда након што се та слика ажурира, поновно покретање Терраформ манифеста ће поново креирати сервер или диск. Користећи аргумент игноре_цхангес омогућава вам да избегнете такву ситуацију.

Напомена: аргумент игноре_цхангес појавио се у Терраформу доста давно: пулл#2525.

Расправа игноре_ресизе_цонфирматион потребно за успешно промену величине локалног диска, језгара или меморије сервера. Такве промене се врше преко ОпенСтацк Нова компоненте помоћу захтева ресизе. Подразумевана Нова након захтева ресизе ставља сервер у статус верифи_ресизе и чека додатну потврду корисника. Међутим, ово понашање се може променити тако да Нова не чека додатне радње корисника.

Наведени аргумент дозвољава Терраформу да не чека статус верифи_ресизе за сервер и будите спремни да сервер буде у активном статусу након промене својих параметара. Аргумент је доступан од верзије 1.10.0 ОпенСтацк Терраформ провајдера: пулл#422.

Креирање ресурса

Пре покретања манифеста, имајте на уму да су у нашем примеру покренута два различита провајдера, а ОпенСтацк провајдер зависи од ресурса Селецтел провајдера, пошто је без креирања корисника у пројекту немогуће управљати објектима који му припадају . Нажалост, из истог разлога не можемо само да покренемо команду терраформ примењују унутар нашег примера. Прво морамо да урадимо применити за модул пројецт_витх_усер а после тога и за све остало.

Напомена: Овај проблем још није решен у Терраформу, можете пратити дискусију на Гитхубу на иссуе#2430 и иссуе#4149.

Да бисте креирали ресурсе, идите у директоријум терраформ-екамплес/екамплес/впц/сервер_лоцал_роот_диск, његов садржај би требао бити овакав:

$ ls
README.md	   main.tf		vars.tf

Иницијализујемо модуле помоћу наредбе:

$ 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

Након покретања команде, Терраформ ће показати које ресурсе жели да креира и затражиће потврду:

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

Када креирате ресурсе, обратите пажњу на Терраформ излаз са спољном ИП адресом на којој ће креирани сервер бити доступан:

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

Можете да радите са креираном виртуелном машином преко ССХ користећи наведени ИП.

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

Поред стварања ресурса кроз Терраформ, они се такође могу модификовати.

На пример, повећајмо број језгара и меморије за наш сервер променом вредности за параметре сервер_вцпус и сервер_рам_мб у фајлу екамплес/впц/сервер_лоцал_роот_диск/маин.тф:

-  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

Као резултат тога, Терраформ је извршио промену ресурса опенстацк_цомпуте_инстанце_в2 и опенстацк_цомпуте_флавор_в2.

Имајте на уму да ће то подразумевати поновно покретање креиране виртуелне машине.

Да бисте применили нову конфигурацију виртуелне машине, користите команду терраформ примењују, који смо већ раније покренули.

Сви креирани објекти ће бити приказани у ВПЦ контролни панели:

Терраформ провајдер Селецтел

У нашем пример репозиторијума Такође можете видети манифесте за креирање виртуелних машина са мрежним дисковима.

Пример прављења Кубернетес кластера

Пре него што пређемо на следећи пример, очистићемо ресурсе које смо раније креирали. Да бисте то урадили у корену пројекта терраформ-екамплес/екамплес/впц/сервер_лоцал_роот_диск Покренимо команду за брисање ОпенСтацк објеката:

$ 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

Затим покрените команду да обришете Селецтел ВПЦ АПИ објекте:

$ 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 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

Пренећемо креирање и управљање Кубернетес кластерима преко ОпенСтацк Магнум компоненте. Више о томе како радити са кластером можете сазнати у једном од наших претходни чланци, као и у база знања.

Приликом припреме кластера биће креирани дискови и виртуелне машине и инсталиране све потребне компоненте. Припрема траје око 4 минута, а за то време Терраформ ће приказати поруке попут:

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

Када се инсталација заврши, Терраформ ће показати да је кластер спреман и приказати његов ИД:

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

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

Да бисте управљали креираним Кубернетес кластером преко услужног програма кубецтл потребно је да добијете датотеку за приступ кластеру. Да бисте то урадили, идите на пројекат креиран преко Терраформа на листи пројеката на вашем налогу:

Терраформ провајдер Селецтел

Затим пратите линк као кккккк.селвпц.рукоји се појављује испод назива пројекта:

Терраформ провајдер Селецтел

За информације за пријаву користите корисничко име и лозинку које сте креирали преко Терраформ-а. Ако ниси преварио варс.тф или маин.тф за наш пример, корисник ће имати име тф_усер. Морате користити вредност променљиве као лозинку ТФ_ВАР_усер_пассворд, што је наведено при покретању терраформ примењују раније.

Унутар пројекта морате да одете на картицу Кубернетес:

Терраформ провајдер Селецтел

Овде се налази кластер креиран преко Терраформа. Преузмите датотеку за кубецтл можете на картици „Приступ“:

Терраформ провајдер Селецтел

Упутства за инсталацију налазе се на истој картици. кубецтл и коришћење преузетог цонфиг.иамл.

Након лансирања кубецтл и подешавање променљиве окружења КУБЕЦОНФИГ можете користити Кубернетес:

$ 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

Број чворова кластера може се лако променити преко Терраформ-а.
У фајлу маин.тф наведена је следећа вредност:

cluster_node_count = "${var.cluster_node_count}"

Ова вредност се замењује са варс.тф:

variable "cluster_node_count" {
default = 2
}

Можете променити или подразумевану вредност у варс.тф, или наведите потребну вредност директно у маин.тф:

-  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

Када се број чворова промени, кластер ће остати доступан. Након додавања чвора преко Терраформа, можете га користити без додатне конфигурације:

$ 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

Закључак

У овом чланку смо се упознали са главним начинима рада „Виртуелни приватни облак“ преко Терраформа. Биће нам драго ако користите званичног Селецтел Терраформ провајдера и пружите повратне информације.

Све грешке пронађене у Селецтел Терраформ провајдеру могу се пријавити путем Гитхуб Иссуес.

Извор: ввв.хабр.цом

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