Ons het 'n amptelike Terraform-verskaffer bekendgestel om met Selectel te werk. Hierdie produk stel gebruikers in staat om hulpbronbestuur ten volle te implementeer deur die Infrastruktuur-as-kode-metodologie.
Die verskaffer ondersteun tans dienshulpbronbestuur "Virtuele privaat wolk" (hierna verwys as VPC). In die toekoms beplan ons om hulpbronbestuur by te voeg vir ander dienste wat deur Selectel verskaf word.
Soos u reeds weet, is die VPC-diens op OpenStack gebou. As gevolg van die feit dat OpenStack egter nie inheemse gereedskap verskaf om die publieke wolk te bedien nie, het ons die ontbrekende funksionaliteit in 'n stel bykomende API's geïmplementeer wat die bestuur van komplekse saamgestelde voorwerpe vereenvoudig en die werk geriefliker maak. Sommige van die funksies wat in OpenStack beskikbaar is, is gesluit vir direkte gebruik, maar is beskikbaar deur ons API.
Die Selectel Terraform-verskaffer sluit nou die vermoë in om die volgende VPC-hulpbronne te bestuur:
projekte en hul kwotas;
gebruikers, hul rolle en tekens;
openbare subnette, insluitend kruisstreek- en VRRP;
sagteware lisensies.
Die verskaffer gebruik ons publieke Go-biblioteek om met die VPC API te werk. Beide die biblioteek en die verskaffer self is oopbron, hul ontwikkeling word op Github uitgevoer:
Om ander wolkbronne te bestuur, soos virtuele masjiene, skywe, Kubernetes-klusters, kan jy die OpenStack Terraform-verskaffer gebruik. Amptelike dokumentasie vir beide verskaffers is beskikbaar by die volgende skakels:
Om te begin, moet jy Terraform installeer (instruksies en skakels na installasiepakkette kan gevind word by amptelike webwerf).
Om te werk, benodig die verskaffer 'n Selectel API-sleutel, wat geskep word in rekeningbeheerpanele.
Manifeste vir die werk met Selectel word geskep met behulp van Terraform of met behulp van 'n stel gereedgemaakte voorbeelde wat beskikbaar is in ons Github-bewaarplek: terraform-voorbeelde.
Die bewaarplek met voorbeelde is in twee dopgehou verdeel:
modules, wat klein herbruikbare modules bevat wat 'n stel parameters as invoer neem en 'n klein stel hulpbronne bestuur;
voorbeelde, wat voorbeelde bevat van 'n volledige stel onderling gekoppelde modules.
Nadat ons Terraform geïnstalleer het, 'n Selectel API-sleutel geskep het en jouself vertroud gemaak het met die voorbeelde, kom ons gaan aan na praktiese voorbeelde.
'n Voorbeeld van die skep van 'n bediener met 'n plaaslike skyf
In lêer vars.tf alle parameters wat gebruik sal word wanneer modules opgeroep word, word beskryf. Sommige van hulle het verstekwaardes, byvoorbeeld, die bediener sal in die sone geskep word ru-3a met die volgende konfigurasie:
Indien nodig, kan jy 'n ander publieke sleutel spesifiseer. Die sleutel hoef nie as 'n lêerpad gespesifiseer te word nie; jy kan ook die waarde as 'n string byvoeg.
Verder in hierdie lêer word die modules geloods projek_met_gebruiker и bediener_plaaslike_wortelskyf, wat die nodige hulpbronne bestuur.
argument ignoreer_veranderinge laat jou toe om kenmerkveranderinge te ignoreer id vir die beeld wat gebruik word om die virtuele masjien te skep. In die VPC-diens word die meeste publieke beelde outomaties een keer per week opgedateer en terselfdertyd hul id ook verander. Dit is te danke aan die eienaardighede van die OpenStack-komponent - Glance, waarin beelde as onveranderlike entiteite beskou word.
As jy 'n bestaande bediener of skyf skep of wysig wat 'n argument het beeld_id word gebruik id publieke beeld, en nadat daardie beeld opgedateer is, sal die Terraform-manifes weer die bediener of skyf herskep. Gebruik 'n argument ignoreer_veranderinge laat jou toe om so 'n situasie te vermy.
Let wel: argument ignoreer_veranderinge het lank gelede in Terraform verskyn: trek#2525.
argument ignore_resize_confirmation nodig om die grootte van plaaslike skyf, kerns of bedienergeheue suksesvol te verander. Sulke veranderinge word gemaak deur die OpenStack Nova-komponent met behulp van 'n versoek grootte. Verstek Nova na versoek grootte plaas die bediener in status verifieer_grootte verander en wag vir bykomende bevestiging van die gebruiker. Hierdie gedrag kan egter verander word sodat Nova nie wag vir bykomende aksies van die gebruiker nie.
Die gespesifiseerde argument laat Terraform toe om nie vir die status te wag nie verifieer_grootte verander vir die bediener en wees voorbereid vir die bediener om in 'n aktiewe status te wees nadat sy parameters verander is. Die argument is beskikbaar vanaf weergawe 1.10.0 van die OpenStack Terraform-verskaffer: trek#422.
Die skep van hulpbronne
Voordat u die manifeste uitvoer, let asseblief daarop dat in ons voorbeeld twee verskillende verskaffers van stapel gestuur word, en die OpenStack-verskaffer hang af van die hulpbronne van die Selectel-verskaffer, aangesien dit onmoontlik is om die voorwerpe wat daaraan behoort te bestuur sonder om 'n gebruiker in die projek te skep. . Ongelukkig kan ons om dieselfde rede nie net die opdrag uitvoer nie terraform toepas binne ons voorbeeld. Ons moet eers doen aansoek doen vir module projek_met_gebruiker en daarna vir alles anders.
Let wel: Hierdie probleem is nog nie in Terraform opgelos nie, jy kan die bespreking op Github volg by uitgawe #2430 и uitgawe #4149.
Die uitset wys dat Terraform die nuutste weergawes van die verskaffers wat dit gebruik aflaai en al die modules wat in die voorbeeld beskryf word, nagaan.
Kom ons pas eers die module toe projek_met_gebruiker. Dit vereis dat waardes handmatig deurgee vir veranderlikes wat nie gestel is nie:
sel_rekening met jou Selectel-rekeningnommer;
sel_token met jou sleutel vir Selectel API;
gebruiker_wagwoord met 'n wagwoord vir die OpenStack-gebruiker.
Die waardes vir die eerste twee veranderlikes moet uit geneem word beheerpanele.
Vir die laaste veranderlike kan jy met enige wagwoord vorendag kom.
Om die module te gebruik moet jy die waardes vervang SEL_ACCOUNT, SEL_TOKEN и USER_WAGWOORD hardloop die opdrag:
Nadat die opdrag uitgevoer is, sal Terraform wys watter hulpbronne dit wil skep en vir bevestiging vra:
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
Sodra die projek, gebruiker en rol geskep is, kan jy die oorblywende hulpbronne begin skep:
U kan met die geskepde virtuele masjien werk via SSH deur die gespesifiseerde IP te gebruik.
Redigeer hulpbronne
Benewens die skep van hulpbronne deur Terraform, kan hulle ook gewysig word.
Kom ons verhoog byvoorbeeld die aantal kerns en geheue vir ons bediener deur die waardes vir die parameters te verander bediener_vcpus и bediener_ram_mb in lêer examples/vpc/server_local_root_disk/main.tf:
In ons voorbeeld bewaarplekke U kan ook manifeste sien vir die skep van virtuele masjiene met netwerkaandrywers.
Voorbeeld van die skep van 'n Kubernetes-kluster
Voordat ons na die volgende voorbeeld gaan, sal ons die hulpbronne wat ons vroeër geskep het, skoonmaak. Om dit in die wortel van die projek te doen terraform-voorbeelde/voorbeelde/vpc/bediener_plaaslike_wortelskyf Kom ons voer die opdrag uit om OpenStack-voorwerpe uit te vee:
In beide gevalle sal jy die verwydering van alle voorwerpe moet bevestig:
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
Hierdie voorbeeld skep 'n projek, 'n gebruiker met 'n rol in die projek, en skep een Kubernetes-kluster. In lêer vars.tf jy kan verstekwaardes sien, soos die aantal nodusse, hul kenmerke, Kubernetes-weergawe, ens.
Om hulpbronne soortgelyk aan die eerste voorbeeld te skep, sal ons eerstens begin om modules te inisialiseer en modulehulpbronne te skep projek_met_gebruikeren dan alles anders skep:
Ons sal die skepping en bestuur van Kubernetes-klusters deur die OpenStack Magnum-komponent oordra. Jy kan meer uitvind oor hoe om met 'n groepering te werk in een van ons vorige artikelssowel as kennis basis.
Wanneer die groep voorberei word, sal skywe en virtuele masjiene geskep word en alle nodige komponente sal geïnstalleer word. Voorbereiding neem ongeveer 4 minute, gedurende welke tyd Terraform boodskappe soos:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Sodra die installasie voltooi is, sal Terraform aandui dat die groep gereed is en sy ID vertoon:
Om die geskepde Kubernetes-kluster deur die hulpprogram te bestuur kubectl jy moet die groeptoegangslêer kry. Om dit te doen, gaan na die projek wat deur Terraform geskep is in die lys van projekte in jou rekening:
Volgende, volg die skakel soos xxxxxx.selvpc.ruwat onder die projeknaam verskyn:
Vir aanmeldinligting, gebruik die gebruikersnaam en wagwoord wat jy deur Terraform geskep het. As jy nie verneuk het nie vars.tf of hoof.tf vir ons voorbeeld sal die gebruiker die naam hê tf_gebruiker. Jy moet die waarde van die veranderlike as die wagwoord gebruik TF_VAR_user_password, wat by opstart gespesifiseer is terraform toepas vroeër.
Binne die projek moet jy na die oortjie gaan Kubernetes:
Dit is waar die groep wat via Terraform geskep is geleë is. Laai lêer af vir kubectl jy kan op die "Toegang"-oortjie:
Installasie-instruksies is op dieselfde oortjie geleë. kubectl en gebruik van die afgelaaide config.yaml.
Na die bekendstelling kubectl en die instelling van die omgewingsveranderlike KUBECONFIG jy kan Kubernetes gebruik:
Wanneer die aantal nodusse verander, sal die groep beskikbaar bly. Nadat u 'n nodus via Terraform bygevoeg het, kan u dit sonder bykomende konfigurasie gebruik:
$ 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
Gevolgtrekking
In hierdie artikel het ons kennis gemaak met die belangrikste maniere om mee te werk "Virtuele privaat wolk" via Terraform. Ons sal bly wees as jy die amptelike Selectel Terraform-verskaffer gebruik en terugvoer gee.
Enige foute wat in die Selectel Terraform-verskaffer gevind word, kan gerapporteer word via Github-kwessies.