Hem llançat un proveïdor oficial de Terraform per treballar amb Selectel. Aquest producte permet als usuaris implementar completament la gestió de recursos mitjançant la metodologia Infraestructura com a codi.
Actualment, el proveïdor admet la gestió de recursos del servei "Núvol privat virtual" (d'ara endavant, VPC). En el futur, tenim previst afegir la gestió de recursos per a altres serveis que ofereix Selectel.
Com ja sabeu, el servei VPC es basa en OpenStack. Tanmateix, a causa del fet que OpenStack no proporciona eines natives per donar servei al núvol públic, hem implementat la funcionalitat que faltava en un conjunt d'API addicionals que simplifiquen la gestió d'objectes compostos complexos i fan que el treball sigui més còmode. Algunes de les funcionalitats disponibles a OpenStack estan tancades per a l'ús directe, però estan disponibles mitjançant la nostra API.
El proveïdor de Selectel Terraform ara inclou la capacitat de gestionar els recursos VPC següents:
projectes i les seves quotes;
usuaris, els seus rols i fitxes;
subxarxes públiques, incloses les interregionals i VRRP;
llicències de programari.
El proveïdor utilitza la nostra biblioteca pública de Go per treballar amb l'API VPC. Tant la biblioteca com el propi proveïdor són de codi obert, el seu desenvolupament es realitza a Github:
Per gestionar altres recursos al núvol, com ara màquines virtuals, discs, clústers de Kubernetes, podeu utilitzar el proveïdor d'OpenStack Terraform. La documentació oficial d'ambdós proveïdors està disponible als enllaços següents:
Els manifests per treballar amb Selectel es creen amb Terraform o amb un conjunt d'exemples ja fets que estan disponibles al nostre repositori de Github: terraforma-exemples.
El repositori amb exemples es divideix en dos directoris:
mòduls, que conté petits mòduls reutilitzables que prenen un conjunt de paràmetres com a entrada i gestionen un petit conjunt de recursos;
exemples, que conté exemples d'un conjunt complet de mòduls interconnectats.
Després d'instal·lar Terraform, crear una clau API de Selectel i familiaritzar-se amb els exemples, passem a exemples pràctics.
Un exemple de creació d'un servidor amb un disc local
A l'arxiu vars.tf Es descriuen tots els paràmetres que s'utilitzaran en cridar mòduls. Alguns d'ells tenen valors per defecte, per exemple, el servidor es crearà a la zona ru-3a amb la configuració següent:
Argument ignora_canvis us permet ignorar els canvis d'atributs id per a la imatge utilitzada per crear la màquina virtual. Al servei VPC, la majoria d'imatges públiques s'actualitzen automàticament un cop a la setmana i al mateix temps id també canvia. Això es deu a les peculiaritats del component OpenStack - Glance, en què les imatges es consideren entitats immutables.
Si esteu creant o modificant un servidor o disc existent que té com a argument image_id usat id imatge pública, després que aquesta imatge s'actualitzi, tornar a executar el manifest Terraform recrearà el servidor o el disc. Utilitzant un argument ignora_canvis permet evitar una situació així.
Nota: argument ignora_canvis va aparèixer a Terraform fa força temps: tirar #2525.
Argument ignore_resize_confirmation necessari per canviar la mida del disc local, els nuclis o la memòria del servidor. Aquests canvis es fan mitjançant el component OpenStack Nova mitjançant una sol·licitud canviar la mida de. Nova per defecte després de la sol·licitud canviar la mida de posa el servidor en estat verificar_redimensionar i espera una confirmació addicional de l'usuari. Tanmateix, aquest comportament es pot canviar perquè Nova no esperi accions addicionals de l'usuari.
L'argument especificat permet a Terraform no esperar l'estat verificar_redimensionar per al servidor i estar preparat perquè el servidor estigui en un estat actiu després de canviar els seus paràmetres. L'argument està disponible a la versió 1.10.0 del proveïdor d'OpenStack Terraform: tirar #422.
Creació de Recursos
Abans d'executar els manifests, tingueu en compte que en el nostre exemple s'inicien dos proveïdors diferents, i el proveïdor d'OpenStack depèn dels recursos del proveïdor de Selectel, ja que sense crear un usuari al projecte és impossible gestionar els objectes que li pertanyen. . Malauradament, pel mateix motiu no podem executar l'ordre aplicar terraform dins del nostre exemple. Primer hem de fer aplicar per al mòdul projecte_amb_usuari i després per a tota la resta.
Nota: aquest problema encara no s'ha resolt a Terraform, podeu seguir la discussió a Github a número 2430 и número 4149.
Després d'executar l'ordre, Terraform mostrarà quins recursos vol crear i demanarà confirmació:
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
Un cop creat el projecte, l'usuari i el rol, podeu començar a crear els recursos restants:
Podeu treballar amb la màquina virtual creada mitjançant SSH mitjançant la IP especificada.
Recursos d'edició
A més de crear recursos mitjançant Terraform, també es poden modificar.
Per exemple, augmentem el nombre de nuclis i memòria per al nostre servidor canviant els valors dels paràmetres server_vcpus и server_ram_mb a l'arxiu exemples/vpc/server_local_root_disk/main.tf:
En la nostra repositoris d'exemple També podeu veure manifests per crear màquines virtuals amb unitats de xarxa.
Exemple de creació d'un clúster de Kubernetes
Abans de passar al següent exemple, netejarem els recursos que hem creat anteriorment. Per fer-ho a l'arrel del projecte terraform-examples/examples/vpc/server_local_root_disk Executem l'ordre per eliminar objectes d'OpenStack:
En ambdós casos, haureu de confirmar la supressió de tots els objectes:
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
Aquest exemple crea un projecte, un usuari amb una funció al projecte i genera un clúster de Kubernetes. A l'arxiu vars.tf podeu veure els valors per defecte, com ara el nombre de nodes, les seves característiques, la versió de Kubernetes, etc.
Per crear recursos semblants al primer exemple, primer de tot començarem a inicialitzar mòduls i crear recursos de mòduls projecte_amb_usuarii després crear tota la resta:
Transferirem la creació i gestió de clústers Kubernetes a través del component OpenStack Magnum. Podeu obtenir més informació sobre com treballar amb un clúster en un dels nostres articles anteriorsaixí com a Base de coneixements.
En preparar el clúster, es crearan discs i màquines virtuals i s'instal·laran tots els components necessaris. La preparació triga uns 4 minuts, temps durant els quals Terraform mostrarà missatges com:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Un cop finalitzada la instal·lació, Terraform indicarà que el clúster està preparat i mostrarà el seu ID:
Per gestionar el clúster de Kubernetes creat mitjançant la utilitat kubectl heu d'obtenir el fitxer d'accés al clúster. Per fer-ho, aneu al projecte creat mitjançant Terraform a la llista de projectes del vostre compte:
A continuació, seguiu l'enllaç m'agrada xxxxxx.selvpc.ruque apareix sota el nom del projecte:
Per obtenir informació d'inici de sessió, utilitzeu el nom d'usuari i la contrasenya que heu creat mitjançant Terraform. Si no has enganyat vars.tf o principal.tf per al nostre exemple, l'usuari tindrà el nom tf_usuari. Heu d'utilitzar el valor de la variable com a contrasenya TF_VAR_contrasenya_usuari, que es va especificar a l'inici aplicar terraform abans.
Dins del projecte cal anar a la pestanya Kubernetes:
Aquí és on es troba el clúster creat mitjançant Terraform. Descarregar fitxer per kubectl podeu a la pestanya "Accés":
Les instruccions d'instal·lació es troben a la mateixa pestanya. kubectl i ús del descarregat config.yaml.
Després del llançament kubectl i establir la variable d'entorn KUBECONFIG podeu utilitzar Kubernetes:
Quan canviï el nombre de nodes, el clúster romandrà disponible. Després d'afegir un node mitjançant Terraform, podeu utilitzar-lo sense configuració addicional:
$ 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
Conclusió
En aquest article ens vam familiaritzar amb les principals maneres de treballar "Núvol privat virtual" a través de Terraform. Estarem encantats si utilitzeu el proveïdor oficial de Selectel Terraform i proporcioneu comentaris.
Qualsevol error que es trobi al proveïdor de Selectel Terraform es pot informar mitjançant Problemes de Github.