Avemu lanciatu u fornitore ufficiale di Terraform per travaglià cù Selectel. Stu pruduttu permette à l'utilizatori di implementà cumplettamente a gestione di e risorse attraversu a metodulugia Infrastruttura cum'è codice (infrastruttura cum'è codice).
U fornitore sustene attualmente a gestione di risorse di serviziu "Nuvola privata virtuale" (in seguitu VPC). In u futuru, avemu pensatu à aghjunghje a gestione di risorse di altri servizii furniti da Selectel.
Comu sapete digià, u serviziu VPC hè custruitu nantu à OpenStack. Tuttavia, a causa di u fattu chì OpenStack ùn furnisce micca strumenti nativi per serve u nuvulu publicu, avemu implementatu a funziunalità mancante in un inseme di API supplementari chì simplificanu a gestione di l'uggetti cumposti cumplessi è facenu u travagliu più convenientu. Parte di e funziunalità dispunibule in OpenStack hè chjusu da l'usu direttu, ma hè dispunibule attraversu a nostra API.
U fornitore Selectel Terraform hà avà a capacità di gestisce e seguenti risorse VPC:
prughjetti è e so quote;
utilizatori, i so rolli è tokens;
subnets publichi, cumpresi trans-regionale è VRRP;
licenze di software.
U fornitore usa a nostra biblioteca publica Go per travaglià cù l'API VPC. Sia a biblioteca è u fornitore stessu sò open-source, sò sviluppati in Github:
Per gestisce u restu di e risorse di nuvola, cum'è macchine virtuali, dischi, clusters Kubernetes, pudete aduprà u fornitore OpenStack Terraform. A documentazione ufficiale per i dui fornituri hè dispunibule à i seguenti ligami:
Manifesti per travaglià cù Selectel sò creati cù Terraform o cù un inseme di esempi pronti chì sò dispunibili in u nostru repository Github: terraform-esempii.
U repository cù esempi hè divisu in dui cartulari:
moduli, chì cuntenenu picculi moduli reutilizabili chì piglianu un inseme di parametri cum'è input è gestiscenu un picculu settore di risorse;
esempi, chì cuntene esempi di un inseme cumpletu di moduli interconnessi.
Dopu avè installatu Terraform, creendu una chjave API Selectel, è rivedendu l'esempii, andemu à l'esempii pratichi.
Esempiu di creazione di un servitore cù un discu locale
In u schedariu vars.tf tutti i paràmetri chì seranu utilizati quandu chjamanu i moduli sò descritti. Certi di elli anu valori predeterminati, per esempiu, u servitore serà creatu in a zona fr-3a cù a seguente cunfigurazione:
Se necessariu, pudete specificà una chjave publica diversa. A chjave ùn deve esse specificatu cum'è una strada à u schedariu, pudete ancu aghjunghje u valore cum'è una stringa.
In più in stu schedariu i moduli sò lanciati prughjettu_cù_utilizatori и server_local_root_diskchì gestisce e risorse necessarie.
argumentu ignore_changes permette di ignorà u cambiamentu di l'attributu id per l'imagine utilizata per creà a macchina virtuale. In u serviziu VPC, a maiò parte di l'imaghjini publichi sò aghjurnati automaticamente una volta à settimana è à u stessu tempu sò id cambia ancu. Questu hè dovutu à e peculiarità di l'operazione di u cumpunente OpenStack - Glance, in quale l'imaghjini sò cunsiderate entità immutable.
Se crea o mudifica un servitore o discu esistenti chì hà cum'è argumentu image_id si usa id l'imagine publica, dopu chì l'imaghjina hè aghjurnata, eseguisce u manifestu Terraform di novu ricreà u servitore o u discu. Utilizà un argumentu ignore_changes evita una tale situazione.
nota : argumentu ignore_changes apparsu in Terraform assai tempu fà: tira #2525.
argumentu ignore_resize_confirmation necessariu per ridimensionà u discu locale, core, o memoria di u servitore. Tali cambiamenti sò fatti attraversu u cumpunente OpenStack Nova utilizendu a dumanda resize. Default Nova nantu à dumanda resize mette u servitore in statu verifica_resize è aspetta una cunferma supplementaria da l'utilizatore. Tuttavia, stu cumpurtamentu pò esse cambiatu in modu chì Nova ùn deve micca aspittà chì l'utilizatore per piglià azzioni supplementari.
L'argumentu specificatu permette à Terraform di ùn aspittà micca u statutu verifica_resize per u servitore è esse preparatu per u fattu chì u servitore serà in statu attivu dopu avè cambiatu i so paràmetri. L'argumentu hè dispunibule da a versione 1.10.0 di u fornitore OpenStack Terraform: tira #422.
Creazione di risorse
Prima di lancià i manifesti, deve esse nutatu chì in u nostru esempiu sò lanciati dui fornituri diffirenti, è u fornitore OpenStack dipende da e risorse di u fornitore Selectel, postu chì senza creà un utilizatore in u prugettu, hè impussibile di gestisce l'oggetti chì appartene à ellu. . Sfurtunatamente, per a stessa ragione, ùn pudemu micca solu eseguisce u cumandamentu terraform applica in u nostru esempiu. Avemu bisognu di fà prima applicà per u modulu prughjettu_cù_utilizatori è dopu per tuttu u restu.
Nota: U prublema informatu ùn hè ancu risolta in Terraform, pudete seguità a discussione nantu à Github à prublema #2430 и prublema #4149.
Dopu avè eseguitu u cumandamentu, Terraform mostrarà quale risorse vole creà è richiede cunferma:
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
Una volta chì u prughjettu, l'utilizatore è u rolu sò creati, pudete inizià à creà u restu di e risorse:
Pudete travaglià cù a macchina virtuale creata via SSH utilizendu l'IP specificatu.
Risorse di editazione
In più di creà risorse attraversu Terraform, ponu ancu esse mudificate.
Per esempiu, aumentemu u numeru di core è memoria per u nostru servitore cambiendu i valori per i paràmetri server_vcpus и server_ram_mb in u schedariu esempi/vpc/server_local_root_disk/main.tf:
In u nostru repository di esempiu Pudete ancu vede manifesti per creà macchine virtuali cù unità di rete.
Un esempiu di creazione di un cluster Kubernetes
Prima di passà à l'esempiu prossimu, pulizzeremu e risorse chì avemu creatu prima. Per fà questu, in a radica di u prugettu terraform-examples/examples/vpc/server_local_root_disk eseguite u cumandimu per sguassà l'oggetti OpenStack:
In i dui casi, avete bisognu di cunfirmà l'eliminazione di tutti l'uggetti:
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
Questu esempiu crea un prughjettu, un utilizatore cù un rolu in u prugettu, è cresce un cluster Kubernetes. In u schedariu vars.tf pudete vede i valori predeterminati, cum'è u numeru di nodi, e so caratteristiche, a versione Kubernetes, è più.
Per creà risorse, simile à u primu esempiu, prima di tuttu, cuminciamu l'inizializazione di moduli è a creazione di risorse di moduli prughjettu_cù_utilizatorie poi creendu tuttu u restu:
Trasferemu a creazione è a gestione di clusters Kubernetes attraversu u cumpunente OpenStack Magnum. Pudete amparà più nantu à cumu travaglià cù un cluster in unu di i nostri articuli precedenticum'è basa di cunniscenza.
Quandu preparanu u cluster, i dischi, i machini virtuali seranu creati è tutti i cumpunenti necessarii seranu stallati. A preparazione dura circa 4 minuti, durante u quale Terraform mostrarà missaghji cum'è:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Dopu chì a stallazione hè cumpleta, Terraform informarà chì u cluster hè prontu è mostra u so ID:
Per gestisce u cluster Kubernetes creatu attraversu l'utilità kubectl avete bisognu di ottene u schedariu d'accessu à u cluster. Per fà questu, andate à u prughjettu creatu via Terraform in a lista di prughjetti in u vostru contu:
Dopu seguitate u ligame xxxxxx.selvpc.ru, chì hè visualizatu sottu u nome di u prugettu:
Aduprate u nome d'utilizatore è a password chì sò stati creati attraversu Terraform cum'è l'infurmazioni di login. Se ùn avete micca cambiatu vars.tf o principale.tf per u nostru esempiu, l'utilizatore averà u nome tf_user. U valore di a variabile deve esse utilizatu cum'è password TF_VAR_user_password, chì hè stata specificata à l'iniziu terraform applica nanzu.
Dentru u prugettu, vi tocca à andà à a tabulazione Kubernetes:
Eccu un cluster creatu attraversu Terraform. Scaricate u schedariu per kubectl Pudete nantu à a tabulazione "Access":
Questa tabulazione cuntene struzzioni di installazione. kubectl è aduprà u scaricatu config.yaml.
Dopu u lanciu kubectl è stabilisce a variabile di l'ambiente KUBECONFIG Pudete aduprà Kubernetes:
Se u numeru di nodi cambia, u cluster resterà dispunibule. Dopu avè aghjustatu un node via Terraform, pudete aduprà senza cunfigurazione supplementu:
$ 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
cunchiusioni
In questu articulu, avemu cunnisciutu i modi principali di travaglià "Nuvola privata virtuale" via Terraform. Saremu felici se utilizate u fornitore ufficiale di Selectel Terraform è furnisce feedback.
Tutti i bug trovati di u fornitore Selectel Terraform ponu esse signalati via Problemi di Github.