Terraform szolgáltató Selectel

Terraform szolgáltató Selectel

A Selectellel együttműködve hivatalos Terraform szolgáltatót indítottunk. Ez a termék lehetővé teszi a felhasználók számára, hogy az Infrastructure-as-code módszertanon keresztül teljes mértékben megvalósítsák az erőforrás-kezelést.

A szolgáltató jelenleg támogatja a szolgáltatási erőforrás-kezelést "Virtuális privát felhő" (a továbbiakban: VPC). A jövőben azt tervezzük, hogy a Selectel által nyújtott egyéb szolgáltatásokhoz is hozzáadjuk az erőforrás-kezelést.

Mint már tudja, a VPC szolgáltatás az OpenStackre épül. Tekintettel azonban arra, hogy az OpenStack nem biztosít natív eszközöket a nyilvános felhő kiszolgálásához, a hiányzó funkcionalitást egy sor további API-ban implementáltuk, amelyek leegyszerűsítik az összetett összetett objektumok kezelését és kényelmesebbé teszik a munkát. Az OpenStackben elérhető funkciók egy része le van zárva a közvetlen használattól, de elérhető API-nkat.

A Selectel Terraform szolgáltató mostantól a következő VPC-erőforrások kezelését is lehetővé teszi:

  • projektek és kvótáik;
  • felhasználók, szerepeik és tokenjeik;
  • nyilvános alhálózatok, beleértve a régiók közötti és a VRRP-t;
  • szoftver licencek.

A szolgáltató a nyilvános Go könyvtárunkat használja a VPC API-val való együttműködéshez. A könyvtár és maga a szolgáltató is nyílt forráskódú, fejlesztésük a Githubon történik:

Más felhő-erőforrások, például virtuális gépek, lemezek, Kubernetes-fürtök kezeléséhez használhatja az OpenStack Terraform szolgáltatót. Mindkét szolgáltató hivatalos dokumentációja az alábbi linkeken érhető el:

Az első lépések

A kezdéshez telepítenie kell a Terraformot (az utasításokat és a telepítőcsomagokra mutató hivatkozásokat a következő címen találja: hivatalos honlapján).

A működéshez a szolgáltatónak Selectel API-kulcsra van szüksége, amely itt jön létre fiókvezérlő panelek.

A Selectellel való munkavégzéshez szükséges manifesztek a Terraform segítségével vagy a Github-tárhelyünkben elérhető kész példák segítségével készülnek: terraform-példák.

A példákat tartalmazó tárház két könyvtárra oszlik:

  • modulok, amely kisméretű újrafelhasználható modulokat tartalmaz, amelyek bemenetként egy sor paramétert vesznek fel, és egy kis erőforráskészletet kezelnek;
  • példák, amely példákat tartalmaz az összekapcsolt modulok teljes készletére.

A Terraform telepítése, a Selectel API kulcs létrehozása és a példák megismerése után térjünk át a gyakorlati példákra.

Példa szerver létrehozására helyi lemezzel

Nézzünk egy példát egy projekt, egy szerepkörrel rendelkező felhasználó és egy helyi lemezzel rendelkező virtuális gép létrehozására: terraform-examples/examples/vpc/server_local_root_disk.

Fájlban vars.tf A modulok hívásakor használt összes paraméter le van írva. Némelyikük alapértelmezett értékkel rendelkezik, például a szerver a zónában jön létre ru-3a a következő konfigurációval:

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

Fájlban fő.tf A Selectel szolgáltató inicializálva van:

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

Ez a fájl tartalmazza a kiszolgálóra telepítendő SSH-kulcs alapértelmezett értékét is:

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

Ha szükséges, megadhat egy másik nyilvános kulcsot. A kulcsot nem kell fájlútvonalként megadni, az értéket karakterláncként is hozzáadhatja.

A továbbiakban ebben a fájlban a modulok elindulnak projekt_felhasználóval и szerver_local_root_disk, amelyek a szükséges erőforrásokat kezelik.

Nézzük meg ezeket a modulokat részletesebben.

Projekt és szerepkörrel rendelkező felhasználó létrehozása

Az első modul létrehoz egy projektet és egy felhasználót a projektben szerepkörrel: terraform-examples/modules/vpc/project_with_user.

A létrehozott felhasználó bejelentkezhet az OpenStackbe, és kezelheti annak erőforrásait. A modul egyszerű, és csak három entitást kezel:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Virtuális szerver létrehozása helyi lemezzel

A második modul az OpenStack objektumok kezelésével foglalkozik, amelyek szükségesek egy helyi lemezzel rendelkező szerver létrehozásához.

Figyelnie kell néhány olyan argumentumra, amelyek ebben a modulban az erőforráshoz vannak megadva openstack_compute_példány_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

Érv ignore_changes lehetővé teszi az attribútumváltozások figyelmen kívül hagyását id a virtuális gép létrehozásához használt képhez. A VPC szolgáltatásban a legtöbb nyilvános kép hetente egyszer automatikusan frissül, és ezzel egy időben id is változik. Ez az OpenStack komponens - Glance - sajátosságaiból adódik, amelyben a képeket megváltoztathatatlan entitásoknak tekintik.

Ha olyan meglévő szervert vagy lemezt hoz létre vagy módosít, amely argumentumként szerepel image_id használt id nyilvános kép, majd a képfájl frissítése után a Terraform jegyzék újbóli futtatásával újra létrejön a szerver vagy a lemez. Érv használatával ignore_changes lehetővé teszi az ilyen helyzetek elkerülését.

Megjegyzés: érv ignore_changes elég régen jelent meg a Terraformban: pull#2525.

Érv ignore_resize_confirmation szükséges a helyi lemez, a magok vagy a szervermemória sikeres átméretezéséhez. Az ilyen módosítások az OpenStack Nova komponensen keresztül hajthatók végre kéréssel átméretezése. Az alapértelmezett Nova kérés után átméretezése állapotba helyezi a szervert verify_resize és további megerősítést vár a felhasználótól. Ez a viselkedés azonban megváltoztatható, hogy a Nova ne várjon további műveleteket a felhasználótól.

A megadott argumentum lehetővé teszi, hogy a Terraform ne várja meg az állapotot verify_resize a szerver számára, és készüljön fel arra, hogy a szerver a paramétereinek megváltoztatása után aktív állapotba kerül. Az argumentum az OpenStack Terraform szolgáltató 1.10.0-s verziójából érhető el: pull#422.

Erőforrások létrehozása

A manifesztek futtatása előtt vegye figyelembe, hogy példánkban két különböző szolgáltató indul el, és az OpenStack szolgáltató a Selectel szolgáltató erőforrásaitól függ, mivel felhasználó létrehozása nélkül a projektben lehetetlen kezelni a hozzá tartozó objektumokat. . Sajnos ugyanezen okból nem tudjuk csak úgy futtatni a parancsot terraform alkalmazni példánkban. Először meg kell tennünk alkalmaz modulhoz projekt_felhasználóval és utána minden másért.

Megjegyzés: Ez a probléma még nincs megoldva a Terraformban, a vitát a Githubon a következő címen követheti 2430. szám и 4149. szám.

Erőforrások létrehozásához lépjen a könyvtárba terraform-examples/examples/vpc/server_local_root_disk, a tartalma a következő legyen:

$ ls
README.md	   main.tf		vars.tf

A modulokat a következő paranccsal inicializáljuk:

$ terraform init

A kimenet azt mutatja, hogy a Terraform letölti az általa használt szolgáltatók legújabb verzióit, és ellenőrzi a példában leírt összes modult.

Először alkalmazzuk a modult projekt_felhasználóval. Ehhez kézzel kell átadni az értékeket a be nem állított változókhoz:

  • Sel_account Selectel számlaszámával;
  • sel_token a Selectel API kulcsával;
  • felhasználói jelszó az OpenStack felhasználó jelszavával.

Az első két változó értékét innen kell venni vezérlőpanelek.

Az utolsó változóhoz bármilyen jelszót megadhat.

A modul használatához ki kell cserélni az értékeket SEL_ACCOUNT, SEL_TOKEN и FELHASZNÁLÓI JELSZÓ a parancs futtatása:

$ 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

A parancs futtatása után a Terraform megmutatja, milyen erőforrásokat szeretne létrehozni, és megerősítést kér:

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

A projekt, a felhasználó és a szerepkör létrehozása után megkezdheti a fennmaradó erőforrások létrehozását:

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

Az erőforrások létrehozásakor ügyeljen a Terraform kimenetre a külső IP-címmel, ahol a létrehozott szerver elérhető lesz:

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

A létrehozott virtuális géppel SSH-n keresztül dolgozhat a megadott IP-cím használatával.

Erőforrások szerkesztése

Amellett, hogy erőforrásokat hoz létre a Terraformon keresztül, módosíthatók is.

Például növeljük a szerverünk magjainak és memóriájának számát a paraméterek értékeinek módosításával szerver_vcpus и szerver_ram_mb fájlban 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

Ezek után a következő paranccsal ellenőrizzük, hogy ez milyen változásokhoz vezet:

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

Ennek eredményeként a Terraform erőforrás-módosítást hajtott végre openstack_compute_példány_v2 и openstack_compute_flavor_v2.

Kérjük, vegye figyelembe, hogy ez a létrehozott virtuális gép újraindítását vonja maga után.

Az új virtuálisgép-konfiguráció alkalmazásához használja a parancsot terraform alkalmazni, amelyet már korábban elindítottunk.

Az összes létrehozott objektum megjelenik itt VPC vezérlőpanelek:

Terraform szolgáltató Selectel

A miénkben példatárak Megtekintheti a hálózati meghajtókkal rendelkező virtuális gépek létrehozásának jegyzékeit is.

Példa Kubernetes-fürt létrehozására

Mielőtt továbblépnénk a következő példára, megtisztítjuk a korábban létrehozott erőforrásokat. Ehhez a projekt gyökerében terraform-examples/examples/vpc/server_local_root_disk Futtassuk az OpenStack objektumok törlésére szolgáló parancsot:

$ 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

Ezután futtassa a parancsot a Selectel VPC API objektumok törléséhez:

$ 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

Mindkét esetben meg kell erősítenie az összes objektum törlését:

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

A következő példa a könyvtárban található terraform-examples/examples/vpc/kubernetes_cluster.

Ez a példa létrehoz egy projektet, a projektben szerepkörrel rendelkező felhasználót, és létrehoz egy Kubernetes-fürtöt. Fájlban vars.tf láthatja az alapértelmezett értékeket, például a csomópontok számát, jellemzőit, a Kubernetes verzióját stb.

Az első példához hasonló erőforrások létrehozásához először elkezdjük a modulok inicializálását és a modul erőforrások létrehozását projekt_felhasználóvalmajd létrehoz minden mást:

$ 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

A Kubernetes-fürtök létrehozását és kezelését az OpenStack Magnum összetevőn keresztül fogjuk átvinni. A fürtökkel való munkavégzésről többet megtudhat valamelyikünkben korábbi cikkek, valamint a Tudásbázis.

A fürt előkészítésekor lemezek és virtuális gépek jönnek létre, és minden szükséges összetevő telepítve lesz. Az előkészítés körülbelül 4 percet vesz igénybe, ezalatt a Terraform a következő üzeneteket jeleníti meg:

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

A telepítés befejezése után a Terraform jelzi, hogy a fürt készen áll, és megjeleníti az azonosítóját:

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

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

A létrehozott Kubernetes-fürt kezeléséhez a segédprogramon keresztül kubectl be kell szereznie a fürt hozzáférési fájlt. Ehhez lépjen a Terraformon keresztül létrehozott projektre a fiókjában található projektek listájában:

Terraform szolgáltató Selectel

Ezután kövesse a like linket xxxxxx.selvpc.ruamely a projekt neve alatt jelenik meg:

Terraform szolgáltató Selectel

A bejelentkezési adatokhoz használja a Terraformon keresztül létrehozott felhasználónevet és jelszót. Ha nem csaltál vars.tf vagy fő.tf példánkban a felhasználó neve lesz tf_user. Jelszóként a változó értékét kell használni TF_VAR_user_password, amelyet az indításkor adtunk meg terraform alkalmazni korábban.

A projekten belül a lapra kell lépnie Kubernetes:

Terraform szolgáltató Selectel

Itt található a Terraform segítségével létrehozott klaszter. Fájl letöltése ehhez kubectl a „Hozzáférés” lapon a következőket teheti:

Terraform szolgáltató Selectel

A telepítési utasítások ugyanazon a fülön találhatók. kubectl és a letöltöttek használata config.yaml.

Indítás után kubectl és a környezeti változó beállítása KUBECONFIG használhatja a Kuberneteset:

$ 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

A fürt csomópontok száma könnyen módosítható a Terraform segítségével.
Fájlban fő.tf a következő érték van megadva:

cluster_node_count = "${var.cluster_node_count}"

Ezt az értéket a következővel helyettesítjük: vars.tf:

variable "cluster_node_count" {
default = 2
}

Bármelyik alapértelmezett értéket módosíthatja vars.tf, vagy adja meg közvetlenül a kívánt értéket fő.tf:

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

A módosítások alkalmazásához, mint az első példa esetében, használja a parancsot terraform alkalmazni:

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

Ha a csomópontok száma megváltozik, a fürt elérhető marad. Miután hozzáadott egy csomópontot a Terraform segítségével, további konfiguráció nélkül használhatja:

$ 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

Következtetés

Ebben a cikkben megismerkedtünk a főbb munkamódszerekkel "Virtuális privát felhő" a Terraformon keresztül. Örülünk, ha a hivatalos Selectel Terraform szolgáltatót használja, és visszajelzést ad.

A Selectel Terraform szolgáltatóban talált hibákat a következőn keresztül lehet jelenteni Github problémák.

Forrás: will.com

Hozzászólás