Terraform verskaffer Selectel

Terraform verskaffer Selectel

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:

Aan die slag

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

Kom ons kyk na 'n voorbeeld van die skep van 'n projek, 'n gebruiker met 'n rol en 'n virtuele masjien met 'n plaaslike skyf: terraform-voorbeelde/voorbeelde/vpc/bediener_plaaslike_wortelskyf.

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:

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

In lêer hoof.tf Die Selectel-verskaffer word geïnisialiseer:

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

Hierdie lêer bevat ook die verstekwaarde vir die SSH-sleutel wat op die bediener geïnstalleer sal word:

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

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.

Kom ons kyk in meer detail na hierdie modules.

Die skep van 'n projek en 'n gebruiker met 'n rol

Die eerste module skep 'n projek en 'n gebruiker met 'n rol in daardie projek: terraform-voorbeelde/modules/vpc/projek_met_gebruiker.

Die geskepte gebruiker sal by OpenStack kan aanmeld en sy hulpbronne kan bestuur. Die module is eenvoudig en bestuur slegs drie entiteite:

  • selectel_vpc_project_v2,
  • selectel_vpc_user_v2,
  • selectel_vpc_role_v2.

Skep 'n virtuele bediener met plaaslike skyf

Die tweede module handel oor die bestuur van OpenStack-voorwerpe, wat nodig is om 'n bediener met 'n plaaslike skyf te skep.

Jy moet aandag gee aan sommige van die argumente wat in hierdie module vir die hulpbron gespesifiseer word openstack_compute_instance_v2:

resource "openstack_compute_instance_v2" "instance_1" {
  ...

  lifecycle {
    ignore_changes = ["image_id"]
  }

  vendor_options {
    ignore_resize_confirmation = true
  }
}

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.

Om hulpbronne te skep, gaan na die gids terraform-voorbeelde/voorbeelde/vpc/bediener_plaaslike_wortelskyf, die inhoud daarvan moet soos volg wees:

$ ls
README.md	   main.tf		vars.tf

Ons inisialiseer die modules met die opdrag:

$ terraform init

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:

$ 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

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:

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

Wanneer u hulpbronne skep, let op die Terraform-uitset met die eksterne IP-adres waar die geskepte bediener toeganklik sal wees:

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

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:

-  server_vcpus        = "${var.server_vcpus}"
-  server_ram_mb       = "${var.server_ram_mb}"
+  server_vcpus        = 8
+  server_ram_mb       = 10240

Hierna kyk ons ​​watter veranderinge dit sal lei tot die gebruik van die volgende opdrag:

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

As gevolg hiervan het Terraform 'n hulpbronverandering aangebring openstack_compute_instance_v2 и openstack_compute_flavor_v2.

Neem asseblief kennis dat dit die herlaai van die geskepde virtuele masjien sal behels.

Gebruik die opdrag om die nuwe virtuele masjienkonfigurasie toe te pas terraform toepas, wat ons reeds vroeër van stapel gestuur het.

Alle geskepte voorwerpe sal in vertoon word VPC-beheerpanele:

Terraform verskaffer Selectel

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:

$ 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

Voer dan die opdrag uit om Selectel VPC API-voorwerpe uit te vee:

$ 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

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

Die volgende voorbeeld is in die gids terraform-voorbeelde/voorbeelde/vpc/kubernetes_cluster.

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:

$ 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

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:

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

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

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:

Terraform verskaffer Selectel

Volgende, volg die skakel soos xxxxxx.selvpc.ruwat onder die projeknaam verskyn:

Terraform verskaffer Selectel

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:

Terraform verskaffer Selectel

Dit is waar die groep wat via Terraform geskep is geleë is. Laai lêer af vir kubectl jy kan op die "Toegang"-oortjie:

Terraform verskaffer Selectel

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:

$ 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

Die aantal cluster nodusse kan maklik verander word via Terraform.
In lêer hoof.tf die volgende waarde word gespesifiseer:

cluster_node_count = "${var.cluster_node_count}"

Hierdie waarde word vervang vanaf vars.tf:

variable "cluster_node_count" {
default = 2
}

Jy kan óf die verstekwaarde verander in vars.tf, of spesifiseer die vereiste waarde direk in hoof.tf:

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

Om die veranderinge toe te pas, soos in die geval van die eerste voorbeeld, gebruik die opdrag terraform toepas:

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

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.

Bron: will.com

Voeg 'n opmerking