Am lansat un furnizor oficial Terraform pentru a lucra cu Selectel. Acest produs permite utilizatorilor să implementeze pe deplin gestionarea resurselor prin metodologia Infrastructure-as-code.
Furnizorul acceptă în prezent gestionarea resurselor de servicii „Cloud privat virtual” (denumit în continuare VPC). În viitor, intenționăm să adăugăm managementul resurselor pentru alte servicii furnizate de Selectel.
După cum știți deja, serviciul VPC este construit pe OpenStack. Cu toate acestea, datorită faptului că OpenStack nu oferă instrumente native pentru deservirea cloud-ului public, am implementat funcționalitatea lipsă într-un set de API-uri suplimentare care simplifică gestionarea obiectelor compozite complexe și fac munca mai convenabilă. Unele dintre funcționalitățile disponibile în OpenStack sunt închise de la utilizarea directă, dar sunt disponibile prin API-ul nostru.
Furnizorul Selectel Terraform include acum capacitatea de a gestiona următoarele resurse VPC:
proiecte și cotele acestora;
utilizatorii, rolurile și simbolurile acestora;
subrețele publice, inclusiv interregionale și VRRP;
licențe software.
Furnizorul folosește biblioteca noastră publică Go pentru a lucra cu API-ul VPC. Atât biblioteca, cât și furnizorul în sine sunt open-source, dezvoltarea lor se realizează pe Github:
Pentru a gestiona alte resurse cloud, cum ar fi mașini virtuale, discuri, clustere Kubernetes, puteți utiliza furnizorul OpenStack Terraform. Documentația oficială pentru ambii furnizori este disponibilă la următoarele link-uri:
Manifestele pentru lucrul cu Selectel sunt create folosind Terraform sau folosind un set de exemple gata făcute care sunt disponibile în depozitul nostru Github: terraform-exemple.
Depozitul cu exemple este împărțit în două directoare:
module, care conțin module mici reutilizabile care preiau un set de parametri ca intrare și gestionează un set mic de resurse;
exemple, care conține exemple de un set complet de module interconectate.
După instalarea Terraform, crearea unei chei API Selectel și familiarizarea cu exemplele, să trecem la exemple practice.
Un exemplu de creare a unui server cu un disc local
În dosar vars.tf sunt descriși toți parametrii care vor fi utilizați la apelarea modulelor. Unele dintre ele au valori implicite, de exemplu, serverul va fi creat în zonă ru-3a cu următoarea configurație:
Argument ignore_changes vă permite să ignorați modificările atributelor id pentru imaginea folosită la crearea mașinii virtuale. În serviciul VPC, majoritatea imaginilor publice sunt actualizate automat o dată pe săptămână și în același timp și id se schimba de asemenea. Acest lucru se datorează particularităților componentei OpenStack - Glance, în care imaginile sunt considerate entități imuabile.
Dacă creați sau modificați un server sau un disc existent care are ca argument imagine_id utilizat id imagine publică, apoi după ce acea imagine este actualizată, rularea manifestului Terraform din nou va recrea serverul sau discul. Folosind un argument ignore_changes vă permite să evitați o astfel de situație.
Notă: argument ignore_changes a apărut în Terraform cu mult timp în urmă: trage#2525.
Argument ignore_resize_confirmation necesare pentru a redimensiona cu succes discul local, nucleele sau memoria serverului. Astfel de modificări se fac prin componenta OpenStack Nova folosind o solicitare redimensiona. Nova implicită după solicitare redimensiona pune serverul în stare verify_resize și așteaptă o confirmare suplimentară din partea utilizatorului. Cu toate acestea, acest comportament poate fi modificat, astfel încât Nova să nu aștepte acțiuni suplimentare din partea utilizatorului.
Argumentul specificat permite Terraform să nu aștepte starea verify_resize pentru server și fiți pregătiți pentru ca serverul să fie într-o stare activă după modificarea parametrilor acestuia. Argumentul este disponibil din versiunea 1.10.0 a furnizorului OpenStack Terraform: trage#422.
Crearea resurselor
Înainte de a rula manifestele, vă rugăm să rețineți că în exemplul nostru sunt lansați doi furnizori diferiți, iar furnizorul OpenStack depinde de resursele furnizorului Selectel, deoarece fără a crea un utilizator în proiect este imposibil să gestionați obiectele care îi aparțin. . Din păcate, din același motiv, nu putem rula comanda se aplică terraform în exemplul nostru. Mai întâi trebuie să facem aplica pentru modul proiect_cu_utilizator iar după aceea pentru orice altceva.
Notă: Această problemă nu este încă rezolvată în Terraform, puteți urmări discuția pe Github la problema #2430 и problema #4149.
După rularea comenzii, Terraform va arăta ce resurse dorește să creeze și va cere confirmarea:
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
Odată ce proiectul, utilizatorul și rolul au fost create, puteți începe să creați resursele rămase:
Puteți lucra cu mașina virtuală creată prin SSH folosind IP-ul specificat.
Editarea resurselor
Pe lângă crearea de resurse prin Terraform, acestea pot fi și modificate.
De exemplu, să creștem numărul de nuclee și memorie pentru serverul nostru prin modificarea valorilor parametrilor server_vcpus и server_ram_mb în dosar exemple/vpc/server_local_root_disk/main.tf:
În nostru exemple de depozite De asemenea, puteți vedea manifeste pentru crearea de mașini virtuale cu unități de rețea.
Exemplu de creare a unui cluster Kubernetes
Înainte de a trece la următorul exemplu, vom curăța resursele pe care le-am creat mai devreme. Pentru a face acest lucru în rădăcina proiectului terraform-examples/examples/vpc/server_local_root_disk Să rulăm comanda pentru a șterge obiectele OpenStack:
În ambele cazuri, va trebui să confirmați ștergerea tuturor obiectelor:
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
Acest exemplu creează un proiect, un utilizator cu rol în proiect și generează un cluster Kubernetes. În dosar vars.tf puteți vedea valorile implicite, cum ar fi numărul de noduri, caracteristicile acestora, versiunea Kubernetes etc.
Pentru a crea resurse similare cu primul exemplu, în primul rând vom începe inițializarea modulelor și crearea resurselor modulelor proiect_cu_utilizatorși apoi creând orice altceva:
Vom transfera crearea și gestionarea clusterelor Kubernetes prin componenta OpenStack Magnum. Puteți afla mai multe despre cum să lucrați cu un cluster într-unul dintre noi articolele anterioareprecum și bază de cunoștințe.
La pregătirea clusterului, vor fi create discuri și mașini virtuale și vor fi instalate toate componentele necesare. Pregătirea durează aproximativ 4 minute, timp în care Terraform va afișa mesaje precum:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Odată ce instalarea este finalizată, Terraform va indica faptul că clusterul este gata și va afișa ID-ul său:
Pentru a gestiona clusterul Kubernetes creat prin utilitar kubectl trebuie să obțineți fișierul de acces la cluster. Pentru a face acest lucru, accesați proiectul creat prin Terraform în lista de proiecte din contul dvs.:
Apoi, urmați linkul like xxxxxx.selvpc.rucare apare sub numele proiectului:
Pentru informații de conectare, utilizați numele de utilizator și parola pe care le-ați creat prin Terraform. Dacă nu ai înșelat vars.tf sau principal.tf pentru exemplul nostru, utilizatorul va avea numele tf_user. Trebuie să utilizați valoarea variabilei ca parolă TF_VAR_parola_utilizator, care a fost specificat la pornire se aplică terraform mai devreme.
În interiorul proiectului, trebuie să accesați fila Kubernetes:
Aici se află clusterul creat prin Terraform. Descărcați fișierul pentru kubectl puteți în fila „Acces”:
Instrucțiunile de instalare se află pe aceeași filă. kubectl și utilizarea celor descărcate config.yaml.
După lansare kubectl și setarea variabilei de mediu KUBECONFIG poți folosi Kubernetes:
Când numărul de noduri se modifică, clusterul va rămâne disponibil. După ce adăugați un nod prin Terraform, îl puteți utiliza fără configurare suplimentară:
$ 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
Concluzie
În acest articol ne-am familiarizat cu principalele modalități de a lucra „Cloud privat virtual” prin Terraform. Vom fi bucuroși dacă utilizați furnizorul oficial Terraform Selectel și oferiți feedback.
Orice erori găsite în furnizorul Selectel Terraform pot fi raportate prin Probleme Github.