Terraformin tarjoaja Selectel

Terraformin tarjoaja Selectel

Olemme käynnistäneet virallisen Terraform-toimittajan työskentelemään Selectelin kanssa. Tämän tuotteen avulla käyttäjät voivat toteuttaa resurssienhallinnan täysin Infrastructure-as-code -menetelmän avulla.

Palveluntarjoaja tukee tällä hetkellä palveluresurssien hallintaa "Virtuaalinen yksityinen pilvi" (jäljempänä VPC). Tulevaisuudessa aiomme lisätä resurssienhallinnan muihin Selectelin tarjoamiin palveluihin.

Kuten jo tiedät, VPC-palvelu on rakennettu OpenStackille. Koska OpenStack ei kuitenkaan tarjoa natiivityökaluja julkisen pilven palvelemiseen, toteutimme puuttuvat toiminnot joukossa lisäsovellusliittymiä, jotka yksinkertaistavat monimutkaisten yhdistelmäobjektien hallintaa ja tekevät työstä mukavampaa. Osa OpenStackissa saatavilla olevista toiminnoista on suljettu suoralta käytöltä, mutta ne ovat käytettävissä meidän API.

Selectel Terraform -toimittaja sisältää nyt mahdollisuuden hallita seuraavia VPC-resursseja:

  • hankkeet ja niiden kiintiöt;
  • käyttäjät, heidän roolinsa ja tunnuksensa;
  • julkiset aliverkot, mukaan lukien alueiden välinen ja VRRP;
  • ohjelmistolisenssit.

Palveluntarjoaja käyttää julkista Go-kirjastoamme työskennelläkseen VPC API:n kanssa. Sekä kirjasto että itse palveluntarjoaja ovat avoimen lähdekoodin, niiden kehitys tapahtuu Githubissa:

Voit hallita muita pilviresursseja, kuten virtuaalikoneita, levyjä, Kubernetes-klustereita, käyttämällä OpenStack Terraform -toimittajaa. Molempien palveluntarjoajien viralliset asiakirjat ovat saatavilla seuraavista linkeistä:

Aloittaminen

Aloittaaksesi sinun on asennettava Terraform (ohjeet ja linkit asennuspaketteihin löytyvät osoitteesta virallisilla verkkosivuilla).

Palveluntarjoaja tarvitsee toimiakseen Selectel API -avaimen, joka luodaan sisään tilin ohjauspaneelit.

Manifestit Selectelin kanssa työskentelyä varten luodaan Terraformilla tai käyttämällä valmiita esimerkkejä, jotka ovat saatavilla Github-arkistossamme: terraform-esimerkkejä.

Esimerkkejä sisältävä arkisto on jaettu kahteen hakemistoon:

  • moduulit, joka sisältää pieniä uudelleenkäytettäviä moduuleja, jotka ottavat syötteeksi joukon parametreja ja hallitsevat pientä joukkoa resursseja;
  • Esimerkit, joka sisältää esimerkkejä täydellisestä sarjasta toisiinsa yhdistettyjä moduuleja.

Kun olet asentanut Terraformin, luonut Selectel API -avaimen ja tutustunut esimerkkeihin, siirrytään käytännön esimerkkeihin.

Esimerkki palvelimen luomisesta paikallisella levyllä

Katsotaanpa esimerkkiä projektin luomisesta, käyttäjästä roolilla ja virtuaalikoneesta paikallisella levyllä: terraform-examples/examples/vpc/server_local_root_disk.

Tiedostossa vars.tf kaikki parametrit, joita käytetään kutsuttaessa moduuleja, on kuvattu. Joillakin niistä on oletusarvot, esimerkiksi palvelin luodaan vyöhykkeelle ru-3a seuraavalla kokoonpanolla:

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

Tiedostossa main.tf Selectel-palveluntarjoaja alustetaan:

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

Tämä tiedosto sisältää myös oletusarvon SSH-avaimelle, joka asennetaan palvelimelle:

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

Tarvittaessa voit määrittää toisen julkisen avaimen. Avainta ei tarvitse määrittää tiedostopoluksi, voit lisätä arvon myös merkkijonona.

Lisäksi tässä tiedostossa moduulit käynnistetään projekti_käyttäjän kanssa и server_local_root_disk, jotka hallitsevat tarvittavia resursseja.

Katsotaanpa näitä moduuleja tarkemmin.

Projektin ja käyttäjän luominen roolilla

Ensimmäinen moduuli luo projektin ja käyttäjän, jolla on rooli kyseisessä projektissa: terraform-examples/modules/vpc/project_with_user.

Luotu käyttäjä voi kirjautua sisään OpenStackiin ja hallita sen resursseja. Moduuli on yksinkertainen ja hallitsee vain kolmea kokonaisuutta:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Virtuaalipalvelimen luominen paikallisella levyllä

Toinen moduuli käsittelee OpenStack-objektien hallintaa, joita tarvitaan palvelimen luomiseen paikallisella levyllä.

Sinun tulee kiinnittää huomiota joihinkin argumentteihin, jotka on määritetty tässä moduulissa resurssille openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

perustelu ignore_changes voit jättää huomioimatta määritteiden muutokset id virtuaalikoneen luomiseen käytetylle kuvalle. VPC-palvelussa useimmat julkiset kuvat päivittyvät automaattisesti kerran viikossa ja samalla niiden id myös muuttuu. Tämä johtuu OpenStack-komponentin - Glancen - erityispiirteistä, joissa kuvia pidetään muuttumattomina kokonaisuuksina.

Jos luot tai muokkaat olemassa olevaa palvelinta tai levyä, jolla on argumentti kuvan_tunnus käytetty id julkinen kuva, sitten kun kuva on päivitetty, Terraform-luettelon suorittaminen uudelleen luo palvelimen tai levyn uudelleen. Käyttämällä argumenttia ignore_changes avulla voit välttää tällaisen tilanteen.

Huomautus: argumentti ignore_changes ilmestyi Terraformissa aika kauan sitten: vedä #2525.

perustelu ignore_resize_confirmation tarvitaan paikallisen levyn, ytimien tai palvelimen muistin koon muuttamiseen. Tällaiset muutokset tehdään OpenStack Nova -komponentin kautta pyynnöstä kokoa. Oletus Nova pyynnöstä kokoa asettaa palvelimen tilaan verify_resize ja odottaa lisävahvistusta käyttäjältä. Tätä toimintaa voidaan kuitenkin muuttaa niin, että Nova ei odota käyttäjän lisätoimia.

Määritetty argumentti sallii Terraformin olla odottamatta tilaa verify_resize palvelimelle ja valmistaudu siihen, että palvelin on aktiivisessa tilassa parametrien muuttamisen jälkeen. Argumentti on saatavilla OpenStack Terraform -toimittajan versiosta 1.10.0: vedä #422.

Resurssien luominen

Huomioi ennen manifestien suorittamista, että esimerkissämme käynnistetään kaksi eri palveluntarjoajaa ja OpenStack-toimittaja riippuu Selectel-palveluntarjoajan resursseista, koska ilman käyttäjän luomista projektiin on mahdotonta hallita siihen kuuluvia objekteja. . Valitettavasti samasta syystä emme voi vain suorittaa komentoa terraformia sovelletaan esimerkkimme sisällä. Meidän on ensin tehtävä käyttää moduulia varten projekti_käyttäjän kanssa ja sen jälkeen kaikkeen muuhun.

Huomautus: Tätä ongelmaa ei ole vielä ratkaistu Terraformissa, voit seurata keskustelua Githubissa osoitteessa ongelma nro 2430 и ongelma nro 4149.

Luo resurssit siirtymällä hakemistoon terraform-examples/examples/vpc/server_local_root_disk, sen sisällön pitäisi olla seuraava:

$ ls
README.md	   main.tf		vars.tf

Alustamme moduulit komennolla:

$ terraform init

Tulos osoittaa, että Terraform lataa käyttämiensä palveluntarjoajien uusimmat versiot ja tarkistaa kaikki esimerkissä kuvatut moduulit.

Ensin otetaan käyttöön moduuli projekti_käyttäjän kanssa. Tämä edellyttää arvojen manuaalista välittämistä muuttujille, joita ei ole asetettu:

  • sel_account Selectel-tilinumerollasi;
  • sel_token Selectel API:n avaimella;
  • käyttäjän salasana OpenStack-käyttäjän salasanalla.

Kahden ensimmäisen muuttujan arvot on otettava ohjauspaneelit.

Viimeiselle muuttujalle voit keksiä minkä tahansa salasanan.

Moduulia käyttääksesi arvot on vaihdettava SEL_ACCOUNT, SEL_TOKEN и KÄYTTÄJÄN SALASANA komennon suorittaminen:

$ 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

Komennon suorittamisen jälkeen Terraform näyttää, mitä resursseja se haluaa luoda ja pyytää vahvistusta:

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

Kun projekti, käyttäjä ja rooli on luotu, voit aloittaa jäljellä olevien resurssien luomisen:

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

Kun luot resursseja, kiinnitä huomiota Terraform-lähtöön ulkoisella IP-osoitteella, jossa luotu palvelin on käytettävissä:

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

Voit työskennellä luodun virtuaalikoneen kanssa SSH:n kautta käyttämällä määritettyä IP-osoitetta.

Resurssien muokkaaminen

Sen lisäksi, että resursseja luodaan Terraformin kautta, niitä voidaan myös muokata.

Lisätään esimerkiksi palvelimemme ytimien ja muistin määrää muuttamalla parametrien arvoja server_vcpus и server_ram_mb tiedostossa 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

Tämän jälkeen tarkistamme, mihin muutoksiin tämä johtaa seuraavalla komennolla:

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

Tämän seurauksena Terraform teki resurssimuutoksen openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Huomaa, että tämä edellyttää luodun virtuaalikoneen uudelleenkäynnistystä.

Käytä komentoa ottaaksesi käyttöön uuden virtuaalikoneen kokoonpanon terraformia sovelletaan, jonka olemme jo käynnistäneet aiemmin.

Kaikki luodut objektit näytetään VPC ohjauspaneelit:

Terraformin tarjoaja Selectel

Meidän esimerkkivarastot Voit myös nähdä luettelot virtuaalikoneiden luomisesta verkkoasemilla.

Esimerkki Kubernetes-klusterin luomisesta

Ennen kuin siirrymme seuraavaan esimerkkiin, puhdistamme aiemmin luomamme resurssit. Voit tehdä tämän projektin juurella terraform-examples/examples/vpc/server_local_root_disk Suoritetaan komento OpenStack-objektien poistamiseksi:

$ 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

Suorita sitten komento poistaaksesi Selectel VPC API -objektit:

$ 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

Molemmissa tapauksissa sinun on vahvistettava kaikkien objektien poistaminen:

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

Seuraava esimerkki on hakemistossa terraform-examples/examples/vpc/kubernetes_cluster.

Tämä esimerkki luo projektin, käyttäjän, jolla on rooli projektissa, ja nostaa yhden Kubernetes-klusterin. Tiedostossa vars.tf näet oletusarvot, kuten solmujen lukumäärän, niiden ominaisuudet, Kubernetes-version jne.

Ensimmäisen esimerkin kaltaisten resurssien luomiseksi aloitamme ensin moduulien alustamisen ja moduuliresurssien luomisen projekti_käyttäjän kanssaja sitten luodaan kaikki muu:

$ 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

Siirrämme Kubernetes-klusterien luomisen ja hallinnan OpenStack Magnum -komponentin kautta. Saat lisätietoja klusterin kanssa työskentelystä yhdessä meidän aikaisemmat artikkelit, samoin kuin tietopohja.

Klusteria valmisteltaessa luodaan levyt ja virtuaalikoneet ja asennetaan kaikki tarvittavat komponentit. Valmistelu kestää noin 4 minuuttia, jonka aikana Terraform näyttää viestejä, kuten:

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

Kun asennus on valmis, Terraform ilmoittaa, että klusteri on valmis ja näyttää sen tunnuksen:

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

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

Luodun Kubernetes-klusterin hallinta apuohjelman kautta kubectl sinun on hankittava klusterin käyttöoikeustiedosto. Voit tehdä tämän siirtymällä Terraformin kautta luotuun projektiin tilisi projektiluettelosta:

Terraformin tarjoaja Selectel

Seuraavaksi tykkää linkistä xxxxxx.selvpc.rujoka näkyy projektin nimen alla:

Terraformin tarjoaja Selectel

Käytä sisäänkirjautumistietojen saamiseksi Terraformin kautta luomaasi käyttäjätunnusta ja salasanaa. Jos et ole pettänyt vars.tf tai main.tf esimerkissämme käyttäjällä on nimi tf_user. Salasanana on käytettävä muuttujan arvoa TF_VAR_user_password, joka määritettiin käynnistyksen yhteydessä terraformia sovelletaan aikaisemmin.

Projektin sisällä sinun on siirryttävä välilehteen Kubernetes:

Terraformin tarjoaja Selectel

Tässä sijaitsee Terraformin kautta luotu klusteri. Lataa tiedosto kohteelle kubectl "Pääsy"-välilehdellä voit:

Terraformin tarjoaja Selectel

Asennusohjeet ovat samalla välilehdellä. kubectl ja ladatun käytön config.yaml.

Käynnistyksen jälkeen kubectl ja ympäristömuuttujan asettaminen KUBECONFIG voit käyttää 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

Klusterisolmujen määrää voidaan helposti muuttaa Terraformin kautta.
Tiedostossa main.tf seuraava arvo on määritetty:

cluster_node_count = "${var.cluster_node_count}"

Tämä arvo korvataan arvolla vars.tf:

variable "cluster_node_count" {
default = 2
}

Voit muuttaa joko oletusarvoa vars.tftai määritä vaadittu arvo suoraan main.tf:

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

Ota muutokset käyttöön, kuten ensimmäisessä esimerkissä, käytä komentoa terraformia sovelletaan:

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

Kun solmujen määrä muuttuu, klusteri pysyy käytettävissä. Kun olet lisännyt solmun Terraformin kautta, voit käyttää sitä ilman lisämäärityksiä:

$ 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

Johtopäätös

Tässä artikkelissa tutustuimme tärkeimpiin tapoihin työskennellä "Virtuaalinen yksityinen pilvi" Terraformin kautta. Olemme iloisia, jos käytät virallista Terraform-toimittaja Selecteliä ja annat palautetta.

Kaikki Selectel Terraform -palveluntarjoajalta löydetyt viat voidaan ilmoittaa kautta Github-ongelmat.

Lähde: will.com

Lisää kommentti