Lanzamos un provedor oficial de Terraform para traballar con Selectel. Este produto permite aos usuarios implementar plenamente a xestión de recursos mediante a metodoloxía Infraestrutura como código.
O provedor actualmente admite a xestión de recursos do servizo "Nube privada virtual" (en diante VPC). No futuro, pensamos engadir a xestión de recursos para outros servizos ofrecidos por Selectel.
Como xa sabes, o servizo VPC está construído en OpenStack. Non obstante, debido ao feito de que OpenStack non ofrece ferramentas nativas para atender a nube pública, implementamos a funcionalidade que faltaba nun conxunto de API adicionais que simplifican a xestión de obxectos compostos complexos e fan que o traballo sexa máis cómodo. Algunhas das funcións dispoñibles en OpenStack están pechadas polo uso directo, pero están dispoñibles a través nosa API.
O provedor de Selectel Terraform agora inclúe a capacidade de xestionar os seguintes recursos VPC:
proxectos e as súas cotas;
usuarios, os seus roles e tokens;
subredes públicas, incluíndo interrexionais e VRRP;
licenzas de software.
O provedor usa a nosa biblioteca pública de Go para traballar coa API de VPC. Tanto a biblioteca como o propio provedor son de código aberto, o seu desenvolvemento realízase en Github:
Para xestionar outros recursos na nube, como máquinas virtuais, discos, clústeres de Kubernetes, pode usar o provedor de OpenStack Terraform. A documentación oficial de ambos provedores está dispoñible nas seguintes ligazóns:
Os manifestos para traballar con Selectel créanse usando Terraform ou usando un conxunto de exemplos preparados que están dispoñibles no noso repositorio de Github: terraforma-exemplos.
O repositorio con exemplos está dividido en dous directorios:
módulos, que contén pequenos módulos reutilizables que toman un conxunto de parámetros como entrada e xestionan un pequeno conxunto de recursos;
exemplos, que contén exemplos dun conxunto completo de módulos interconectados.
Despois de instalar Terraform, crear unha clave de API de Selectel e familiarizarse cos exemplos, pasemos a exemplos prácticos.
Un exemplo de creación dun servidor cun disco local
En arquivo vars.tf descríbense todos os parámetros que se utilizarán ao chamar aos módulos. Algúns deles teñen valores predeterminados, por exemplo, o servidor crearase na zona ru-3a coa seguinte configuración:
Se é necesario, pode especificar unha chave pública diferente. A chave non ten que especificarse como ruta do ficheiro; tamén pode engadir o valor como cadea.
Máis adiante neste ficheiro lánzanse os módulos proxecto_con_usuario и disco_raíz_local_servidor, que xestionan os recursos necesarios.
argumento ignorar_cambios permítelle ignorar os cambios de atributos id para a imaxe utilizada para crear a máquina virtual. No servizo VPC, a maioría das imaxes públicas actualízanse automaticamente unha vez á semana e ao mesmo tempo as súas id tamén cambia. Isto débese ás peculiaridades do compoñente OpenStack - Glance, no que as imaxes son consideradas entidades inmutables.
Se está a crear ou modificar un servidor ou disco existente que ten como argumento imaxe_id se usa id imaxe pública, despois de que esa imaxe se actualice, executar de novo o manifesto de Terraform recreará o servidor ou o disco. Usando un argumento ignorar_cambios permite evitar tal situación.
Nota: argumento ignorar_cambios apareceu en Terraform hai moito tempo: tirar #2525.
argumento ignore_resize_confirmation necesario para redimensionar correctamente o disco local, os núcleos ou a memoria do servidor. Estes cambios realízanse a través do compoñente OpenStack Nova mediante unha solicitude redimensionar. Nova predeterminada despois da solicitude redimensionar pon o servidor en estado verificar_redimensionar e agarda unha confirmación adicional do usuario. Non obstante, este comportamento pódese cambiar para que Nova non espere por accións adicionais do usuario.
O argumento especificado permite que Terraform non agarde o estado verificar_redimensionar para o servidor e estar preparado para que o servidor estea en estado activo despois de cambiar os seus parámetros. O argumento está dispoñible desde a versión 1.10.0 do fornecedor OpenStack Terraform: tirar #422.
Creación de Recursos
Antes de executar os manifestos, teña en conta que no noso exemplo lánzanse dous provedores diferentes, e o provedor OpenStack depende dos recursos do provedor Selectel, xa que sen crear un usuario no proxecto é imposible xestionar os obxectos que lle pertencen. . Desafortunadamente, polo mesmo motivo non podemos simplemente executar o comando aplicar terraform dentro do noso exemplo. Primeiro temos que facelo aplicar para módulo proxecto_con_usuario e despois para todo o demais.
Nota: Este problema aínda non está resolto en Terraform, podes seguir a discusión en Github en número 2430 и número 4149.
Despois de executar o comando, Terraform mostrará que recursos quere crear e pedirá confirmación:
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
Unha vez creado o proxecto, usuario e rol, podes comezar a crear os recursos restantes:
Podes traballar coa máquina virtual creada a través de SSH usando a IP especificada.
Recursos de edición
Ademais de crear recursos a través de Terraform, tamén se poden modificar.
Por exemplo, imos aumentar o número de núcleos e memoria para o noso servidor cambiando os valores dos parámetros server_vcpus и server_ram_mb en arquivo exemplos/vpc/server_local_root_disk/main.tf:
No noso repositorios de exemplo Tamén podes ver manifestos para crear máquinas virtuais con unidades de rede.
Exemplo de creación dun clúster de Kubernetes
Antes de pasar ao seguinte exemplo, limparemos os recursos que creamos anteriormente. Para facelo na raíz do proxecto terraform-examples/examples/vpc/server_local_root_disk Imos executar o comando para eliminar obxectos de OpenStack:
En ambos os casos, terás que confirmar a eliminación de todos os obxectos:
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
Este exemplo crea un proxecto, un usuario cunha función no proxecto e crea un clúster de Kubernetes. En arquivo vars.tf podes ver os valores predeterminados, como o número de nodos, as súas características, a versión de Kubernetes, etc.
Para crear recursos similares ao primeiro exemplo, en primeiro lugar comezaremos a inicializar módulos e a crear recursos de módulo proxecto_con_usuarioe despois creando todo o demais:
Transferiremos a creación e xestión de clústeres de Kubernetes a través do compoñente OpenStack Magnum. Podes obter máis información sobre como traballar cun clúster nun dos nosos artigos anterioresasí como base de coñecemento.
Ao preparar o clúster, crearanse discos e máquinas virtuais e instalaranse todos os compoñentes necesarios. A preparación leva uns 4 minutos, tempo durante o cal Terraform mostrará mensaxes como:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Unha vez completada a instalación, Terraform indicará que o clúster está listo e mostrará o seu ID:
Para xestionar o clúster de Kubernetes creado a través da utilidade kubectl cómpre obter o ficheiro de acceso ao clúster. Para iso, vai ao proxecto creado a través de Terraform na lista de proxectos da túa conta:
A continuación, segue a ligazón Gústame xxxxxx.selvpc.ruque aparece debaixo do nome do proxecto:
Para obter información de inicio de sesión, use o nome de usuario e o contrasinal que creou a través de Terraform. Se non enganou vars.tf ou principal.tf para o noso exemplo, o usuario terá o nome tf_usuario. Debe usar o valor da variable como contrasinal TF_VAR_contrasinal_usuario, que se especificou no inicio aplicar terraform antes.
Dentro do proxecto cómpre ir á pestana Kubernetes:
Aquí é onde se atopa o clúster creado a través de Terraform. Descargar arquivo para kubectl podes na pestana "Acceso":
As instrucións de instalación están situadas na mesma pestana. kubectl e uso do descargado config.yaml.
Despois do lanzamento kubectl e establecer a variable de ambiente KUBECONFIG podes usar Kubernetes:
Cando cambie o número de nós, o clúster permanecerá dispoñible. Despois de engadir un nodo a través de Terraform, podes usalo sen configuración adicional:
$ 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ón
Neste artigo coñecemos as principais formas de traballar "Nube privada virtual" vía Terraform. Estaremos encantados de usar o provedor oficial de Selectel Terraform e proporcionar comentarios.
Calquera erro atopado no provedor Selectel Terraform pódese informar a través de Problemas de Github.