Hemos lanzado un proveedor oficial de Terraform para trabajar con Selectel. Este producto permite a los usuarios implementar completamente la gestión de recursos a través de la metodología de infraestructura como código.
El proveedor actualmente admite la gestión de recursos del servicio. "Nube privada virtual" (en adelante denominado VPC). En el futuro, planeamos agregar gestión de recursos para otros servicios proporcionados por Selectel.
Como ya sabe, el servicio VPC se basa en OpenStack. Sin embargo, debido a que OpenStack no proporciona herramientas nativas para dar servicio a la nube pública, implementamos la funcionalidad faltante en un conjunto de API adicionales que simplifican la gestión de objetos compuestos complejos y hacen que el trabajo sea más conveniente. Algunas de las funciones disponibles en OpenStack no se pueden utilizar directamente, pero están disponibles a través de nuestra API.
El proveedor Selectel Terraform ahora incluye la capacidad de gestionar los siguientes recursos de VPC:
proyectos y sus cuotas;
usuarios, sus roles y tokens;
subredes públicas, incluidas interregionales y VRRP;
licencias de software.
El proveedor utiliza nuestra biblioteca pública Go para trabajar con la API de VPC. Tanto la biblioteca como el propio proveedor son de código abierto, su desarrollo se realiza en Github:
Para administrar otros recursos de la nube, como máquinas virtuales, discos y clústeres de Kubernetes, puede utilizar el proveedor OpenStack Terraform. La documentación oficial de ambos proveedores está disponible en los siguientes enlaces:
Los manifiestos para trabajar con Selectel se crean usando Terraform o usando un conjunto de ejemplos listos para usar que están disponibles en nuestro repositorio de Github: ejemplos-de-terraforma.
El repositorio con ejemplos se divide en dos directorios:
módulos, que contiene pequeños módulos reutilizables que toman un conjunto de parámetros como entrada y administran un pequeño conjunto de recursos;
ejemplos, que contiene ejemplos de un conjunto completo de módulos interconectados.
Después de instalar Terraform, crear una clave API de Selectel y familiarizarse con los ejemplos, pasemos a ejemplos prácticos.
Un ejemplo de creación de un servidor con un disco local.
En archivo vars.tf Se describen todos los parámetros que se utilizarán al llamar a los módulos. Algunos de ellos tienen valores predeterminados, por ejemplo, el servidor se creará en la zona ru-3a con la siguiente configuración:
Si es necesario, puede especificar una clave pública diferente. No es necesario especificar la clave como una ruta de archivo; también puede agregar el valor como una cadena.
Más adelante en este archivo se lanzan los módulos. proyecto_con_usuario и disco_raíz_local_servidor, que gestionan los recursos necesarios.
Argumento ignorar_cambios le permite ignorar los cambios de atributos id para la imagen utilizada para crear la máquina virtual. En el servicio VPC, la mayoría de las imágenes públicas se actualizan automáticamente una vez por semana y al mismo tiempo su id también cambia. Esto se debe a las peculiaridades del componente OpenStack, Glance, en el que las imágenes se consideran entidades inmutables.
Si está creando o modificando un servidor o disco existente que tiene como argumento id_imagen utilizado id imagen pública, luego de actualizar esa imagen, ejecutar nuevamente el manifiesto de Terraform recreará el servidor o el disco. Usando un argumento ignorar_cambios le permite evitar tal situación.
Nota: argumento ignorar_cambios apareció en Terraform hace bastante tiempo: tirar#2525.
Argumento ignorar_redimensionar_confirmación necesario para cambiar correctamente el tamaño del disco local, los núcleos o la memoria del servidor. Dichos cambios se realizan a través del componente OpenStack Nova mediante una solicitud. cambiar el tamaño. Nova predeterminada después de la solicitud cambiar el tamaño pone el servidor en estado verificar_redimensionar y espera confirmación adicional del usuario. Sin embargo, este comportamiento se puede cambiar para que Nova no espere acciones adicionales por parte del usuario.
El argumento especificado permite a Terraform no esperar el estado. verificar_redimensionar para el servidor y esté preparado para que el servidor esté en estado activo después de cambiar sus parámetros. El argumento está disponible en la versión 1.10.0 del proveedor OpenStack Terraform: tirar#422.
Creando recursos
Antes de ejecutar los manifiestos, tenga en cuenta que en nuestro ejemplo se inician dos proveedores diferentes y el proveedor OpenStack depende de los recursos del proveedor Selectel, ya que sin crear un usuario en el proyecto es imposible administrar los objetos que le pertenecen. . Desafortunadamente, por la misma razón no podemos simplemente ejecutar el comando aplicar terraforma dentro de nuestro ejemplo. primero tenemos que hacer aplicar para módulo proyecto_con_usuario y después para todo lo demás.
Nota: Este problema aún no se ha resuelto en Terraform; puede seguir la discusión en Github en número 2430 и número 4149.
Después de ejecutar el comando, Terraform mostrará qué recursos desea crear y solicitará 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
Una vez creado el proyecto, usuario y rol, puedes comenzar a crear los recursos restantes:
Puede trabajar con la máquina virtual creada a través de SSH utilizando la IP especificada.
Edición de recursos
Además de crear recursos a través de Terraform, también se pueden modificar.
Por ejemplo, aumentemos la cantidad de núcleos y memoria de nuestro servidor cambiando los valores de los parámetros. servidor_vcpus и servidor_ram_mb en archivo ejemplos/vpc/server_local_root_disk/main.tf:
En nuestro repositorios de ejemplo También puede ver manifiestos para crear máquinas virtuales con unidades de red.
Ejemplo de creación de un clúster de Kubernetes
Antes de pasar al siguiente ejemplo, limpiaremos los recursos que creamos anteriormente. Para hacer esto en la raíz del proyecto. ejemplos-terraform/ejemplos/vpc/server_local_root_disk Ejecutemos el comando para eliminar objetos OpenStack:
En ambos casos, deberás confirmar la eliminación de todos los objetos:
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 ejemplo crea un proyecto, un usuario con un rol en el proyecto y genera un clúster de Kubernetes. En archivo vars.tf puedes ver valores predeterminados, como el número de nodos, sus características, versión de Kubernetes, etc.
Para crear recursos similares al primer ejemplo, primero comenzaremos a inicializar módulos y a crear recursos de módulos. proyecto_con_usuarioy luego creando todo lo demás:
Transferiremos la creación y gestión de clusters de Kubernetes a través del componente OpenStack Magnum. Puede obtener más información sobre cómo trabajar con un clúster en uno de nuestros articulos anterioresy así en base de conocimientos.
Al preparar el clúster, se crearán discos y máquinas virtuales y se instalarán todos los componentes necesarios. La preparación tarda unos 4 minutos, tiempo durante el cual Terraform mostrará mensajes como:
module.kubernetes_cluster.openstack_containerinfra_cluster_v1.cluster_1: Still creating... (3m0s elapsed)
Una vez que se complete la instalación, Terraform indicará que el clúster está listo y mostrará su ID:
Para administrar el clúster de Kubernetes creado a través de la utilidad kubectl necesita obtener el archivo de acceso al clúster. Para hacer esto, vaya al proyecto creado a través de Terraform en la lista de proyectos de su cuenta:
A continuación, siga el enlace como xxxxxx.selvpc.ruque aparece debajo del nombre del proyecto:
Para obtener información de inicio de sesión, utilice el nombre de usuario y la contraseña que creó a través de Terraform. Si no has hecho trampa vars.tf o principal.tf para nuestro ejemplo, el usuario tendrá el nombre tf_usuario. Debes utilizar el valor de la variable como contraseña. TF_VAR_usuario_contraseña, que se especificó al inicio aplicar terraforma antes
Dentro del proyecto debes ir a la pestaña. Kubernetes:
Aquí es donde se encuentra el clúster creado mediante Terraform. Descargar archivo para kubectl Puedes hacerlo en la pestaña “Acceso”:
Las instrucciones de instalación se encuentran en la misma pestaña. kubectl y uso de la descarga configuración.yaml.
Después de iniciar el kubectl y estableciendo la variable de entorno KUBECONFIG puedes usar Kubernetes:
Cuando cambie la cantidad de nodos, el clúster permanecerá disponible. Después de agregar un nodo a través de Terraform, puedes usarlo sin 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
En este artículo nos familiarizamos con las principales formas de trabajar con "Nube privada virtual" vía Terraform. Estaremos encantados de que utilice el proveedor oficial Selectel Terraform y nos proporcione sus comentarios.
Cualquier error encontrado en el proveedor Selectel Terraform se puede informar a través de Problemas de Github.