Terraformi pakkuja Selectel

Terraformi pakkuja Selectel

Oleme Selecteliga töötamiseks käivitanud ametliku Terraformi pakkuja. See toode võimaldab kasutajatel täielikult rakendada ressursside haldust koodina kasutatava infrastruktuuri metoodika kaudu.

Pakkuja toetab praegu teenuseressursside haldust "Virtuaalne privaatpilv" (edaspidi VPC). Tulevikus plaanime lisada ressursihalduse ka teistele Selecteli pakutavatele teenustele.

Nagu te juba teate, on VPC teenus üles ehitatud OpenStackile. Kuna OpenStack aga ei paku avaliku pilve teenindamiseks natiivseid tööriistu, rakendasime puuduoleva funktsionaalsuse täiendavate API-de komplekti, mis lihtsustavad keerukate liitobjektide haldamist ja muudavad töö mugavamaks. Mõned OpenStackis saadaolevad funktsioonid on otseseks kasutamiseks suletud, kuid on saadaval meie API.

Selectel Terraformi pakkuja sisaldab nüüd võimalust hallata järgmisi VPC ressursse:

  • projektid ja nende kvoodid;
  • kasutajad, nende rollid ja märgid;
  • avalikud alamvõrgud, sealhulgas piirkondadevaheline ja VRRP;
  • tarkvara litsentsid.

Pakkuja kasutab VPC API-ga töötamiseks meie avalikku Go teeki. Nii raamatukogu kui ka pakkuja ise on avatud lähtekoodiga, nende arendamine toimub Githubis:

Teiste pilveressursside, näiteks virtuaalmasinate, ketaste, Kubernetese klastrite haldamiseks võite kasutada OpenStack Terraformi pakkujat. Mõlema teenusepakkuja ametlik dokumentatsioon on saadaval järgmistel linkidel:

Alustamine

Alustamiseks peate installima Terraformi (juhised ja lingid installipakettidele leiate aadressilt ametlikul kodulehel).

Töötamiseks vajab pakkuja Selectel API võtit, mis luuakse konto juhtpaneelid.

Selecteliga töötamiseks mõeldud manifestid luuakse kasutades Terraformi või valmis näidete komplekti, mis on saadaval meie Githubi hoidlas: terraform-näited.

Näidetega hoidla on jagatud kaheks kataloogiks:

  • moodulid, mis sisaldab väikeseid korduvkasutatavaid mooduleid, mis võtavad sisendiks parameetrite komplekti ja haldavad väikest kogumit ressursse;
  • näited, mis sisaldab näiteid omavahel ühendatud moodulite komplektist.

Pärast Terraformi installimist, Selectel API võtme loomist ja näidetega tutvumist liigume edasi praktiliste näidete juurde.

Näide kohaliku kettaga serveri loomisest

Vaatame projekti loomise näidet, rolliga kasutajat ja kohaliku kettaga virtuaalmasinat: terraform-examples/examples/vpc/server_local_root_disk.

Failis vars.tf kirjeldatakse kõiki parameetreid, mida moodulite kutsumisel kasutatakse. Mõnel neist on vaikeväärtused, näiteks luuakse server tsoonis ru-3a järgmise konfiguratsiooniga:

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

Failis main.tf Selecteli pakkuja initsialiseeritakse:

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

See fail sisaldab ka serverisse installitava SSH-võtme vaikeväärtust:

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

Vajadusel saate määrata teise avaliku võtme. Võtit ei pea määrama faili teena, väärtuse saab lisada ka stringina.

Edasi selles failis käivitatakse moodulid projekt_kasutajaga и server_local_root_disk, mis haldavad vajalikke ressursse.

Vaatame neid mooduleid üksikasjalikumalt.

Projekti ja rolliga kasutaja loomine

Esimene moodul loob projekti ja kasutaja, kellel on selles projektis roll: terraform-examples/modules/vpc/project_with_user.

Loodud kasutaja saab OpenStacki sisse logida ja selle ressursse hallata. Moodul on lihtne ja haldab ainult kolme olemit:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Virtuaalse serveri loomine kohaliku kettaga

Teine moodul tegeleb OpenStacki objektide haldamisega, mis on vajalikud kohaliku kettaga serveri loomiseks.

Peaksite pöörama tähelepanu mõnele selles moodulis antud ressursi argumendile openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

argument ignore_changes võimaldab ignoreerida atribuutide muudatusi id virtuaalse masina loomisel kasutatud pildi jaoks. VPC-teenuses uuendatakse enamikku avalikke pilte automaatselt kord nädalas ja samal ajal ka neid id samuti muutub. See on tingitud OpenStacki komponendi - Glance - iseärasustest, milles pilte peetakse muutumatuteks üksusteks.

Kui loote või muudate olemasolevat serverit või ketast, millel on argument pildi_id kasutatud id avalik pilt, siis pärast selle pildi värskendamist loob Terraformi manifesti uuesti käivitamine serveri või ketta uuesti. Argumendi kasutamine ignore_changes võimaldab teil sellist olukorda vältida.

Märkus: argument ignore_changes ilmus Terraformis üsna kaua aega tagasi: tõmba #2525.

argument ignore_resize_confirmation vaja kohaliku ketta, tuumade või serveri mälu edukaks muutmiseks. Sellised muudatused tehakse OpenStack Nova komponendi kaudu päringu abil resize. Vaikimisi Nova pärast päringut resize paneb serveri olekusse verify_resize ja ootab kasutajalt täiendavat kinnitust. Seda käitumist saab aga muuta nii, et Nova ei ootaks kasutajalt lisatoiminguid.

Määratud argument lubab Terraformil olekut mitte oodata verify_resize serveri jaoks ja olge valmis selleks, et server on pärast parameetrite muutmist aktiivses olekus. Argument on saadaval OpenStack Terraformi pakkuja versioonist 1.10.0: tõmba #422.

Ressursside loomine

Enne manifestide käivitamist pange tähele, et meie näites käivitatakse kaks erinevat pakkujat ja OpenStacki pakkuja sõltub Selecteli pakkuja ressurssidest, kuna ilma projektis kasutajat loomata pole võimalik sinna kuuluvaid objekte hallata. . Kahjuks ei saa me samal põhjusel lihtsalt käsku käivitada rakendada terravormi meie näite sees. Kõigepealt peame tegema kohaldada mooduli jaoks projekt_kasutajaga ja pärast seda kõike muud.

Märkus. Seda probleemi pole Terraformis veel lahendatud, saate jälgida Githubi arutelu aadressil number 2430 и number 4149.

Ressursside loomiseks minge kataloogi terraform-examples/examples/vpc/server_local_root_disk, peaks selle sisu olema järgmine:

$ ls
README.md	   main.tf		vars.tf

Moodulid lähtestatakse käsuga:

$ terraform init

Väljund näitab, et Terraform laadib alla enda kasutatavate pakkujate uusimad versioonid ja kontrollib kõiki näites kirjeldatud mooduleid.

Kõigepealt rakendame moodulit projekt_kasutajaga. See nõuab määramata muutujate väärtuste käsitsi edastamist:

  • sel_konto oma Selecteli kontonumbriga;
  • sel_token teie Selectel API võtmega;
  • kasutaja_parool OpenStacki kasutaja parooliga.

Kahe esimese muutuja väärtused tuleb võtta juhtpaneelid.

Viimase muutuja jaoks võite välja mõelda mis tahes parooli.

Mooduli kasutamiseks tuleb väärtused asendada SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD käsu käivitamine:

$ 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

Pärast käsu käivitamist näitab Terraform, milliseid ressursse ta soovib luua, ja küsib kinnitust:

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

Kui projekt, kasutaja ja roll on loodud, võite alustada ülejäänud ressursside loomist:

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

Ressursside loomisel pöörake tähelepanu Terraformi väljundile välise IP-aadressiga, kus loodud server on juurdepääsetav:

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

Loodud virtuaalmasinaga saate töötada SSH kaudu, kasutades määratud IP-d.

Ressursside redigeerimine

Lisaks Terraformi kaudu ressursside loomisele saab neid ka muuta.

Näiteks suurendame oma serveri tuumade ja mälu arvu, muutes parameetrite väärtusi server_vcpus и server_ram_mb failis näited/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

Pärast seda kontrollime järgmise käsu abil, milliseid muudatusi see kaasa toob:

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

Selle tulemusena tegi Terraform ressursimuudatuse openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Pange tähele, et see tähendab loodud virtuaalmasina taaskäivitamist.

Uue virtuaalmasina konfiguratsiooni rakendamiseks kasutage käsku rakendada terravormi, mille oleme juba varem käivitanud.

Kõik loodud objektid kuvatakse VPC juhtpaneelid:

Terraformi pakkuja Selectel

Meie näidishoidlad Näete ka manifeste võrgudraividega virtuaalmasinate loomiseks.

Näide Kubernetese klastri loomisest

Enne järgmise näite juurde liikumist puhastame varem loodud ressursid. Selleks projekti juurtes terraform-examples/examples/vpc/server_local_root_disk Käivitame käsu OpenStacki objektide kustutamiseks:

$ 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

Seejärel käivitage käsk Selectel VPC API objektide tühjendamiseks:

$ 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

Mõlemal juhul peate kinnitama kõigi objektide kustutamise:

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

Järgmine näide on kataloogis terraform-examples/examples/vpc/kubernetes_cluster.

See näide loob projekti, kasutaja, kellel on projektis roll, ja loob ühe Kubernetese klastri. Failis vars.tf näete vaikeväärtusi, nagu sõlmede arv, nende omadused, Kubernetese versioon jne.

Esimese näitega sarnaste ressursside loomiseks alustame kõigepealt moodulite lähtestamisega ja mooduliressursside loomisega projekt_kasutajagaja seejärel luua kõik 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

Kubernetese klastrite loomise ja haldamise viime üle OpenStack Magnumi komponendi kaudu. Klastriga töötamise kohta leiate lisateavet ühest meie juhendist varasemad artiklid, samuti aastal teadmistepagas.

Klastri ettevalmistamisel luuakse kettad ja virtuaalmasinad ning paigaldatakse kõik vajalikud komponendid. Ettevalmistus võtab aega umbes 4 minutit, selle aja jooksul kuvab Terraform selliseid sõnumeid nagu:

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

Kui installimine on lõppenud, annab Terraform märku, et klaster on valmis, ja kuvab selle ID:

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

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

Loodud Kubernetese klastri haldamiseks utiliidi kaudu kubectl peate hankima klastri juurdepääsufaili. Selleks minge oma konto projektide loendis Terraformi kaudu loodud projekti juurde:

Terraformi pakkuja Selectel

Järgmisena järgige linki like xxxxxx.selvpc.rumis kuvatakse projekti nime all:

Terraformi pakkuja Selectel

Sisselogimisteabe saamiseks kasutage Terraformi kaudu loodud kasutajanime ja parooli. Kui sa pole petnud vars.tf või main.tf meie näite puhul on kasutajal nimi tf_user. Paroolina peate kasutama muutuja väärtust TF_VAR_user_password, mis määrati käivitamisel rakendada terravormi varem.

Projekti sees peate minema vahekaardile Kubernetes:

Terraformi pakkuja Selectel

Siin asub Terraformi kaudu loodud klaster. Laadige fail alla kubectl vahekaardil „Juurdepääs” saate:

Terraformi pakkuja Selectel

Paigaldusjuhised asuvad samal vahekaardil. kubectl ja allalaaditu kasutamine config.yaml.

Pärast käivitamist kubectl ja keskkonnamuutuja seadmine KUBECONFIG saate kasutada 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

Klastri sõlmede arvu saab hõlpsasti muuta Terraformi kaudu.
Failis main.tf määratakse järgmine väärtus:

cluster_node_count = "${var.cluster_node_count}"

See väärtus asendatakse väärtusega vars.tf:

variable "cluster_node_count" {
default = 2
}

Saate muuta kas vaikeväärtust vars.tfvõi määrake vajalik väärtus otse main.tf:

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

Muudatuste rakendamiseks, nagu esimese näite puhul, kasutage käsku rakendada terravormi:

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

Kui sõlmede arv muutub, jääb klaster kättesaadavaks. Pärast sõlme lisamist Terraformi kaudu saate seda kasutada ilma täiendava konfiguratsioonita:

$ 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

Järeldus

Selles artiklis tutvusime peamiste tööviisidega "Virtuaalne privaatpilv" Terraformi kaudu. Meil on hea meel, kui kasutate ametlikku Selectel Terraformi pakkujat ja annate tagasisidet.

Kõigist Selectel Terraformi pakkuja leitud vigadest saab teatada Githubi probleemid.

Allikas: www.habr.com

Lisa kommentaar