Mir hunn en offiziellen Terraform Provider lancéiert fir mat Selectel ze schaffen. Dëst Produkt erlaabt d'Benotzer d'Ressourceverwaltung voll duerch d'Infrastructure-as-code Methodik ëmzesetzen.
De Provider ënnerstëtzt de Moment Service Ressource Management "Virtuell privat Wollek" (nachfolgend als VPC bezeechent). An Zukunft plangen mir d'Ressourceverwaltung fir aner Servicer vun Selectel ze addéieren.
Wéi Dir scho wësst, ass de VPC Service op OpenStack gebaut. Wéi och ëmmer, wéinst der Tatsaach datt OpenStack keng gebierteg Tools ubitt fir d'ëffentlech Cloud ze servéieren, hu mir déi fehlend Funktionalitéit an enger Rei vun zousätzlech APIen ëmgesat, déi d'Gestioun vu komplexe Kompositobjekte vereinfachen an d'Aarbecht méi bequem maachen. E puer vun der Funktionalitéit, déi am OpenStack verfügbar ass, ass vun der direkter Benotzung zou, awer ass verfügbar duerch eis API.
De Selectel Terraform Provider enthält elo d'Fäegkeet fir déi folgend VPC Ressourcen ze managen:
Projeten an hir Quoten;
Benotzer, hir Rollen an Tokens;
ëffentlech Subnets, dorënner cross-regional a VRRP;
Software Lizenzen.
De Provider benotzt eis ëffentlech Go-Bibliothéik fir mat der VPC API ze schaffen. Souwuel d'Bibliothéik wéi och de Provider selwer sinn Open-Source, hir Entwécklung gëtt op Github duerchgefouert:
Fir aner Cloud Ressourcen ze managen, wéi virtuell Maschinnen, Disken, Kubernetes Cluster, kënnt Dir den OpenStack Terraform Provider benotzen. Offiziell Dokumentatioun fir béid Ubidder ass op de folgende Linken verfügbar:
Fir unzefänken, musst Dir Terraform installéieren (Instruktioune a Linken op Installatiounspakete kënnen op offizieller Websäit).
Fir ze bedreiwen erfuerdert de Fournisseur e Selectel API Schlëssel, deen erstallt gëtt Kont Kontroll Brieder.
Manifestatiounen fir mat Selectel ze schaffen ginn erstallt mat Terraform oder mat enger Rei vu fäerdege Beispiller déi an eisem Github Repository verfügbar sinn: terraform-Beispiller.
De Repository mat Beispiller ass an zwee Verzeichnisser opgedeelt:
Moduler, déi kleng reusable Moduler enthalen déi e Set vu Parameteren als Input huelen an e klenge Set vu Ressourcen verwalten;
Beispiller, mat Beispiller vun engem komplette Set vu verbonne Moduler.
Nodeems Dir Terraform installéiert hutt, e Selectel API Schlëssel erstallt an Iech mat de Beispiller vertraut hutt, loosst eis op praktesch Beispiller weidergoen.
E Beispill fir e Server mat enger lokaler Disk ze kreéieren
Am Dossier vars.tf all Parameteren déi benotzt ginn wann Moduler Opruff sinn beschriwwen. E puer vun hinnen hunn Standardwäerter, zum Beispill gëtt de Server an der Zone erstallt ru-3a mat der folgender Konfiguratioun:
Wann néideg, kënnt Dir en anere ëffentleche Schlëssel uginn. De Schlëssel muss net als Dateiwee spezifizéiert ginn; Dir kënnt och de Wäert als String derbäisetzen.
Weider an dësem Fichier ginn d'Module lancéiert project_with_user и server_local_root_disk, déi déi néideg Ressourcen verwalten.
Argument ignore_changes erlaabt Iech Attributer Ännerungen ze ignoréieren id fir d'Bild benotzt fir déi virtuell Maschinn ze kreéieren. Am VPC Service ginn déi meescht ëffentlech Biller automatesch eemol d'Woch aktualiséiert a gläichzäiteg hir id och Ännerungen. Dëst ass wéinst de Besonderheeten vun der OpenStack Komponent - Bléck, an deem Biller als onverännerbar Entitéite ugesi ginn.
Wann Dir en existente Server oder Disk erstellt oder ännert deen als Argument ass image_id benotzt gëtt id ëffentlecht Bild, dann nodeems dat Bild aktualiséiert ass, de Terraform Manifest erëm auszeféieren wäert de Server oder den Disk nei erstellen. Mat engem Argument ignore_changes erlaabt Iech esou eng Situatioun ze vermeiden.
Notiz: Argument ignore_changes ass viru laanger Zäit an Terraform opgetaucht: zitt #2525.
Argument ignore_resize_confirmation néideg fir d'Gréisst vun der lokaler Disk, Cores oder Server Memory erfollegräich z'änneren. Esou Ännerungen ginn duerch d'OpenStack Nova Komponent mat enger Ufro gemaach resize. Standard Nova no Ufro resize setzt de Server an de Status verify_size a waart op zousätzlech Bestätegung vum Benotzer. Allerdéngs kann dëst Verhalen geännert ginn sou datt Nova net op zousätzlech Handlungen vum Benotzer waart.
De spezifizéierte Argument erlaabt Terraform net op de Status ze waarden verify_size fir de Server a virbereet ginn fir de Server an engem aktive Status ze sinn nodeems se seng Parameteren geännert hunn. D'Argument ass verfügbar vun der Versioun 1.10.0 vum OpenStack Terraform Provider: zitt #422.
Schafen Ressourcen
Ier Dir d'Manifester leeft, bemierkt w.e.g. datt an eisem Beispill zwee verschidde Fournisseuren lancéiert ginn, an den OpenStack Provider hänkt vun de Ressourcen vum Selectel Provider of, well ouni e Benotzer am Projet ze kreéieren ass et onméiglech d'Objeten ze managen, déi derzou gehéieren. . Leider, aus dem selwechte Grond kënne mir net nëmmen de Kommando ausféieren terraform gëllen an eisem Beispill. Mir mussen als éischt maachen zoutrëfft fir Modul project_with_user an duerno fir alles anescht.
Notiz: Dëst Thema ass nach net an Terraform geléist, Dir kënnt d'Diskussioun op Github verfollegen Thema #2430 и Thema #4149.
D'Ausgab weist datt Terraform déi lescht Versioune vun de Fournisseuren eroflueden déi se benotzt a kontrolléiert all d'Moduler, déi am Beispill beschriwwe ginn.
Loosst eis als éischt de Modul applizéieren project_with_user. Dëst erfuerdert manuell Wäerter fir Variabelen déi net agestallt goufen:
sel_account mat Ärer Selectel Kontosnummer;
sel_token mat Ärem Schlëssel fir Selectel API;
user_password mat engem Passwuert fir den OpenStack Benotzer.
D'Wäerter fir déi éischt zwou Variabelen mussen aus geholl ginn Kontroll Brieder.
Fir déi lescht Variabel kënnt Dir mat all Passwuert kommen.
Fir de Modul ze benotzen, musst Dir d'Wäerter ersetzen SEL_ACCOUNT, SEL_TOKEN и USER_PASSWORD de Kommando ausféieren:
Nodeems Dir de Kommando ausgeführt hutt, weist Terraform wéi eng Ressourcen et wëllt erstellen a froen no Bestätegung:
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
Wann de Projet, de Benotzer an d'Roll erstallt sinn, kënnt Dir ufänken déi verbleiwen Ressourcen ze kreéieren:
Dir kënnt mat der erstallt virtueller Maschinn iwwer SSH mat der spezifizéierter IP schaffen.
Redaktioun Ressourcen
Zousätzlech fir Ressourcen duerch Terraform ze kreéieren, kënnen se och geännert ginn.
Zum Beispill, loosst eis d'Zuel vu Kären an Erënnerung fir eise Server erhéijen andeems d'Wäerter fir d'Parameteren änneren server_vcpus и server_ram_mb am Fichier Beispiller/vpc/server_local_root_disk/main.tf:
An eiser Beispill Repositories Dir kënnt och Manifestatiounen gesinn fir virtuell Maschinnen mat Netzwierkfueren ze kreéieren.
Beispill fir e Kubernetes Cluster ze kreéieren
Ier mer op dat nächst Beispill weidergoen, botzen mir d'Ressourcen déi mir virdru erstallt hunn. Fir dëst an der Wuerzel vum Projet ze maachen terraform-examples/examples/vpc/server_local_root_disk Loosst eis de Kommando ausféieren fir OpenStack Objekter ze läschen:
A béide Fäll musst Dir d'Läsche vun all Objekter bestätegen:
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
Dëst Beispill erstellt e Projet, e Benotzer mat enger Roll am Projet, an erhéicht ee Kubernetes Cluster. Am Dossier vars.tf Dir kënnt Standardwäerter gesinn, wéi d'Zuel vun den Noden, hir Charakteristiken, d'Kubernetes Versioun, etc.
Fir Ressourcen ähnlech wéi dat éischt Beispill ze kreéieren, fänken mir als éischt un Moduler ze initialiséieren an Modulressourcen ze kreéieren project_with_useran dann alles anescht erstellen:
Mir wäerten d'Schafung a Gestioun vu Kubernetes Cluster iwwer d'OpenStack Magnum Komponent transferéieren. Dir kënnt méi gewuer ginn wéi Dir mat engem Cluster schafft an engem vun eisen virdrun Artikelenwéi och an Wëssen Basis.
Wann Dir de Cluster virbereet, ginn Disken a virtuelle Maschinnen erstallt an all néideg Komponente ginn installéiert. D'Virbereedung dauert ongeféier 4 Minutten, während där Zäit Terraform Messagen wéi:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Wann d'Installatioun fäerdeg ass, weist Terraform un datt de Stärekoup prett ass a weist seng ID:
Fir de geschafene Kubernetes Cluster duerch den Utility ze managen kubectl Dir musst de Cluster Zougangsdatei kréien. Fir dëst ze maachen, gitt op de Projet erstallt duerch Terraform an der Lëscht vun de Projeten op Ärem Kont:
Nächst, befollegt de Link wéi xxxxxx.selvpc.rudéi ënner dem Projet Numm erschéngt:
Fir Umeldungsinformatioune benotzt de Benotzernumm a Passwuert dat Dir iwwer Terraform erstallt hutt. Wann Dir net fuddelen hutt vars.tf oder main.tf fir eist Beispill wäert de Benotzer den Numm hunn tf_user. Dir musst de Wäert vun der Variabel als Passwuert benotzen TF_VAR_user_password, déi beim Startup spezifizéiert gouf terraform gëllen fréier.
Am Projet musst Dir op d'Tab goen Kubernetes:
Dëst ass wou de Cluster erstallt iwwer Terraform läit. Download Datei fir kubectl Dir kënnt op der Tab "Zougang":
Installatiounsinstruktiounen sinn op der selwechter Tab. kubectl a Gebrauch vun der erofgeluede config.yaml.
Nom Start kubectl a setzen d'Ëmweltvariabel KUBECONFIG Dir kënnt Kubernetes benotzen:
Wann d'Zuel vun den Noden ännert, bleift de Cluster verfügbar. Nodeems Dir en Node iwwer Terraform bäigefüügt hutt, kënnt Dir et ouni zousätzlech Konfiguratioun benotzen:
$ 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
Konklusioun
An dësem Artikel hu mir mat den Haapt Weeër vertraut ze schaffen "Virtuell privat Wollek" iwwer Terraform. Mir wäerte frou sinn wann Dir den offiziellen Selectel Terraform Provider benotzt a Feedback gitt.
All Bugs, déi am Selectel Terraform Provider fonnt goufen, kënnen iwwer gemellt ginn Github Problemer.