Clase 4: Creación de una instancia desde el CLI
Conceptos previos
- Imagen: Plantilla cloud con un sistema operativo con la configuración mínima para poder operar adecuadamente dentro de una nube de infraestructura.
- Instancia: Servidor virtual que se ejecuta dentro de la nube de infraestructura y que se basa en una imagen, de hecho una instancia es inicialmente un clon de una imagen.
- Tipo de instancia o sabor: Define las características de la instancia, como el número de cores virtuales (vCPU), cantidad de memoria RAM o tamaño del disco duro del sistema operativo.
- IP fija: Dirección IP interna de la instancia y que se define en el momento de la creación de la instancia. La dirección IP fija se utiliza para la comunicación interna de la instancia y su valor no varía durante la vida de la instancia, de ahí que reciba el nombre de IP fija.
- IP flotante: Dirección IP que se asigna a una instancia después de crearla y que se utiliza para la comunicación desde el exterior. No todas las instancias tienen por qué tener una IP flotante.
- Grupo de Seguridad (Cortafuegos): Conjunto de reglas de iptables que actúan como cortafuegos a nivel de la instancia.
Gestión de instancias con OpenStack client
Para crear una instancia podemos ejecutar:
openstack server create --flavor m1.normal \
--image "Debian 13 Trixie" \
--security-group default \
--key-name clave_jdmr \
--network "Red de josedom" \
instancia_prueba
Para trabajar con IP flotantes, podemos ejecutar las siguientes instrucciones:
- Para ver las IP flotantes reservadas:
openstack floating ip list. - Para solicitar otra ip flotante:
openstack floating ip create ext-net. - Para asignar una ip flotante a nuestra instancia:
openstack server add floating ip instancia_prueba 172.22.201.111 - Quitar IP flotante de una instancia:
openstack server remove floating ip instancia_prueba 72.22.201.111
Gestión de la instancia
Los comandos más importantes son:
- Listar todas las instancias:
openstack server list. - Ver información detallada de la instancia:
openstack server show instancia_prueba. - Iniciar la instancia (si está detenida):
openstack server start instancia_prueba. - Detener la instancia:
openstack server stop instancia_prueba. - Reiniciar la instancia (soft reboot):
openstack server reboot instancia_prueba. - Reinicio forzado (hard reboot):
openstack server reboot --hard instancia_prueba. - Suspender la instancia:
openstack server suspend instancia_prueba. - Reanudar una instancia suspendida:
openstack server resume instancia_prueba. - Poner la instancia en hibernación:
openstack server shelve instancia_prueba. - Reactivar una instancia hibernada:
openstack server unshelve instancia_prueba. - Eliminar la instancia:
openstack server delete instancia_prueba.
Configuración de instancias con cloud-init
cloud-init: cloud instance initialization**, es un programa que permite realizar la configuración de la instancia al crearse a partir de una imagen. Es el estándar de facto en nube pública o privada, está desarrollado en python y es un proyecto liderado por Canonical.
El paquete cloud-init está instalado habitualmente en las imágenes para IaaS. Documentación cloud-init.
Una instancia que se inicia o reinicia, puede obtener diferentes tipos de datos, en función del origen de estos:
- Metadatos: Obtenidos del servidor de metadatos del proveedor de nube (típicamente a través de dirección de enlace local
http://169.254.169.254). Incluye las características propias de la instancia: nombre, configuración de red, tamaño de los discos, etc. - Datos de usuario (opcional): Datos adicionales de configuración que proporciona el usuario de la instancia (user-data).
- Datos del proveedor (opcional): Datos adicionales de configuración proporcionados por el proveedor (vendor-data).
Veamos un ejemplo de un script cloud-config guardado en un fichero cloud-config.yaml:
#cloud-config
# Actualiza los paquetes
package_update: true
package_upgrade: true
# Instala el paquete apache2
packages:
- apache2
# Configura el hostname y el fqdn
fqdn: maquina.example.org
hostname: maquina
manage_etc_hosts: true
# Crear dos usuarios, configura el acceso por sudo y añade clave pública ssh
users:
- name: debian
sudo: ALL=(ALL) NOPASSWD:ALL
groups: users, admin
shell: /bin/bash
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCmjoVIoZCx4QFXvljqozXGqxxlSvO7V2aizqyPgMfGqnyl0J9YXo6zrcWYwyWMnMdRdwYZgHqfiiFCUn2QDm6ZuzC4Lcx0K3ZwO2lgL4XaATykVLneHR1ib6RNroFcClN69cxWsdwQW6dpjpiBDXf8m6/qxVP3EHwUTsP8XaOV7WkcCAqfYAMvpWLISqYme6e+6ZGJUIPkDTxavu5JTagDLwY+py1WB53eoDWsG99gmvyit2O1Eo+jRWN+mgRHIxJTrFtLS6o4iWeshPZ6LvCZ/Pum12Oj4B4bjGSHzrKjHZgTwhVJ/LDq3v71/PP4zaI3gVB9ZalemSxqomgbTlnT jose@debian
# Cambia las contraseña a los usuarios creados
chpasswd:
expire: False
users:
- name: debian
password: asdasd
type: text
- name: root
password: password
type: text
Usando la línea de comandos, se indica el fichero de configuración en el parámetro --user-data:
openstack server create --flavor m1.normal \
--image "Debian 13 Trixie" \
--security-group default \
--key-name clave_jdmr \
--network "Red de josedom" \
--user-data cloud-config.yaml
instancia_prueba
IMPORTANTE: Si conectamos una instancia a una red sin DHCP, no tendrá direccionamiento y no podrá conectarse al servidor de metadatos, por lo que no se podrá configurar con cloud-init. En este caso debemos usar otra estrategia: guardar el fichero cloud-config.yaml en un CDROM para que lo lea la instancia, para ello en la creación de la instancia usaremos el parámetro: --config-drive True.
Ejercicio
- Crea una instancias Linux, con las siguientes características configuradas con cloud-init:
- Al iniciarse se deben actualizar los paquetes.
- Se debe instalar Apache2.
- Se debe crear un usuario (con tu nombre) y contraseña.
- Se debe configurar el fqdn a maquina1.example.org.
- Muestra tus ips flotantes. Solicita una nueva y asígnala a la instancia.
- Accede por ssh a la instancia que has creado.
- Para la instancia, arrancala de nuevo y finalmente elimínala.
Snapshot de instancias
En OpenStack, las instantáneas de instancias se gestionan principalmente desde Nova (Compute). Cuando haces un snapshot de una instancia:
- Nova detiene brevemente la VM (o sincroniza el disco en caliente si lo permite).
- Crea una imagen nueva en Glance con el contenido del disco raíz.
Es decir: el snapshot es una imagen en Glance, no una copia “incremental” ni un backup directo de los volúmenes.
- Para crea una instantánea de una instancia:
openstack server image create --name snapshot-instancia instancia_prueba - Para ver la instantánea creada:
openstack image list.- En la columna
Statusverásactivecuando esté lista para usar.
- En la columna
- Ver detalles de un snapshot:
openstack image show snapshot-instancia - Eliminar un snapshot:
openstack image delete snapshot-instancia
Si queremos crear una nueva instancia a partir de un snapshot:
openstack server create --flavor m1.normal \
--image "snapshot-instancia" \
--security-group default \
--network "Red de josedom" \
instancia_prueba2
Ejercicio
- Crea una instantánea de la máquina que has creado.
- Crea una nueva máquina a partir de la instantánea y comprueba que tiene la misma configuración (apache2, usuario,…).