Install OpenNebula KVM Node on Ubuntu 24.04
Install OpenNebula KVM Node on Ubuntu 24.04

Install OpenNebula KVM Node on Ubuntu 24.04

Hola a tod@s

En esta oportunidad veremos una plataforma de código abierto llamada OpenNebula. En este primer post veremos como instalar y configurar OpenNebula en un servidor Ubuntu 24.04.

OpenNebula tiene dos componentes principales:

  • OpenNebula Front-end: Este es el motor de administración que ejecuta los servicios de OpenNebula.
  • OpenNebula Hypervisor Nodes: Estos son los hipervisores que proporcionan los recursos que necesitan las máquinas virtuales o contenedores.

Este primer post se enfocara en la instalación y configuración inicial de OpenNebula Front-end.

Descripción general de OpenNebula

OpenNebula es una plataforma de código abierto potente, pero fácil de usar para crear y gestionar nubes empresariales y centros de datos virtualizados. Combina las tecnologías de virtualización existentes con funciones avanzadas para la tenencia múltiple, el aprovisionamiento automático y la elasticidad en entornos privados, híbridos y periféricos. Unifica la gestión de la infraestructura y las aplicaciones de TI, evitando la dependencia de un proveedor y reduciendo la complejidad, el consumo de recursos y los costes operativos.

Infraestructura y gestión de OpenNebula

Una infraestructura de OpenNebula se puede implementar en las instalaciones, en la nube, en el perímetro o en entornos híbridos y multinube. La virtualización se basa en el hipervisor de código abierto KVM, con soporte para LXC. Los recursos en la nube son orquestados por uno o más front-ends de OpenNebula. El front-end ejecuta e interactúa con componentes como Daemon, servicios e interfaces para proporcionar implementación, administración, orquestación y monitoreo de los recursos de infraestructura. Conserva el estado de la nube en una base de datos SQL designada. El sistema es modular y está diseñado para ser flexible. Ofrece numerosas posibilidades para desplegar la infraestructura, así como la propia capa de gestión, como el soporte para diferentes backends de bases de datos, sistemas de autenticación externos e integración con contabilidad, contracargos u otras plataformas.

Aplicaciones virtualizadas

OpenNebula puede administrar tanto máquinas virtuales individuales como servicios complejos de varios niveles compuestos por varias máquinas virtuales que requieren reglas de elasticidad sofisticadas y adaptabilidad dinámica. Los elementos de la infraestructura de OpenNebula, como máquinas virtuales, redes se crean a partir de imágenes y plantillas. Los usuarios pueden modificar las plantillas existentes o crear otras nuevas. Los administradores de la nube pueden compartir plantillas entre sus organizaciones, ya sea directamente o mediante un mercado corporativo privado. Además, OpenNebula Public Marketplace ofrece plantillas predefinidas y totalmente funcionales para descargar e implementar, incluso para aplicaciones de múltiples VM y dispositivos virtuales.

Aplicaciones en contenedores a través de Kubernetes

OpenNebula admite la implementación automatizada de clústeres de Kubernetes a través de un dispositivo virtual, OneKE, el motor de Kubernetes de OpenNebula. OneKE es una distribución de Kubernetes de nivel empresarial certificada por CNCF basada en SUSE Rancher RKE2. En su configuración básica comprende cuatro máquinas virtuales: el nodo maestro de Kubernetes, un nodo VNF, un nodo de almacenamiento y un nodo de trabajo. Se puede configurar como un clúster multimaestro para alta disponibilidad y escalar fácilmente para incluir más nodos de trabajo, ya sea antes de la implementación o dinámicamente durante la operación, mediante el uso de reglas de elasticidad. Incluye funciones como el equilibrio de carga MetalLB, los complementos CNI Multus y Cilium y el almacenamiento Longhorn. Está disponible como un dispositivo multi-VM en OpenNebula Marketplace, y se puede instalar en minutos usando Sunstone, la interfaz de usuario web de OpenNebula.

Componentes de OpenNebula

OpenNebula fue diseñado para adaptarse fácilmente a cualquier infraestructura y ampliarse fácilmente con nuevos componentes. El resultado es un sistema modular que puede implementar una variedad de arquitecturas en la nube e interactuar con múltiples servicios de centros de datos.

A continuación se enumeran los componentes principales de una instalación de OpenNebula.

  • OpenNebula Daemon  (oned): El OpenNebula Daemon es el servicio principal de la plataforma de gestión en la nube. Administra los nodos del clúster, las redes virtuales y los almacenamientos, los grupos, los usuarios y sus máquinas virtuales; y proporciona la API XML-RPC a otros servicios y usuarios finales.
  • Database: OpenNebula conserva el estado de la nube en una base de datos SQL seleccionada por el usuario. Este componente clave debe supervisarse y ajustarse para obtener el mejor rendimiento, siguiendo las prácticas recomendadas para el producto de base de datos en particular.
  • Scheduler: El programador de OpenNebula es responsable de planificar la implementación de máquinas virtuales pendientes en los nodos de hipervisor disponibles. Es un Daemon dedicado (mm_sched) instalado junto con el OpenNebula Daemon, pero se puede implementar de forma independiente en una máquina diferente.
  • Edge Cluster Provision: Este componente crea clústeres OpenNebula totalmente funcionales en la nube pública o en proveedores perimetrales. El módulo Provision integra Edge Clusters en su nube OpenNebula mediante el uso de estas tres tecnologías principales: Terraform, Ansible y OpenNebula Services.
  • Monitoring Subsystem: El subsistema de monitoreo se implementa como un Daemon dedicado (onemonitord) lanzado por el OpenNebula Daemon. Recopila información relevante para los hosts y las máquinas virtuales, como el estado del host, los indicadores básicos de rendimiento, el estado de la máquina virtual y el consumo de capacidad.
  • OneFlow: El servicio OneFlow organiza los servicios de varias máquinas virtuales como entidades únicas, definiendo dependencias y políticas de escalado automático para los componentes de la aplicación. Interactúa con el OpenNebula Daemon para administrar las máquinas virtuales (inicios, paradas) y se puede controlar a través de la GUI de Sunstone o a través de la CLI. Es un Daemon dedicado que se instala de forma predeterminada como parte de la instalación de front-end único, pero se puede implementar de forma independiente en una máquina diferente.
  • OneGate: El servidor OneGate permite a las máquinas virtuales extraer y enviar información desde/hacia OpenNebula, lo que permite a los usuarios y administradores recopilar métricas, detectar problemas en sus aplicaciones y activar reglas de elasticidad de OneFlow desde dentro de las máquinas virtuales. Es un Daemon dedicado que se instala de forma predeterminada como parte de la instalación de front-end único, pero se puede implementar de forma independiente en una máquina diferente.

Estas son las interfaces del sistema de OpenNebula:

  • Sunstone: La interfaz gráfica de usuario (WebUI) de próxima generación de OpenNebula destinada tanto a los usuarios finales como a los administradores para administrar fácilmente todos los recursos de OpenNebula y realizar operaciones típicas. Es un Daemon dedicado que se instala de forma predeterminada como parte de la instalación de front-end único, pero se puede implementar de forma independiente en una máquina diferente.
  • CLI: OpenNebula incluye un conjunto completo de herramientas de línea de comandos similares a Unix para interactuar con el sistema y sus diferentes componentes.
  • API XML-RPC: Esta es la interfaz principal de OpenNebula, a través de la cual puede controlar y administrar cualquier recurso de OpenNebula, incluidas máquinas virtuales, redes virtuales, imágenes, usuarios, hosts y clústeres.
  • OpenNebula Cloud API: OCA proporciona una forma simplificada y conveniente de interactuar con la API XML-RPC principal de OpenNebula, incluida la compatibilidad con Ruby, Java, Golang y Python.
  • OpenNebula OneFlow API: Este es un servicio RESTful para crear, controlar y monitorear servicios compuestos por Máquinas Virtuales interconectadas con dependencias de implementación entre ellas.

Las interacciones entre OpenNebula y la infraestructura subyacente en la nube son realizadas por controladores específicos. Cada uno aborda un área en particular:

  • Storage: Esta capa central de OpenNebula abstrae las operaciones de almacenamiento (por ejemplo, clonar o eliminar) implementadas por programas específicos, que pueden ser reemplazados o modificados para interactuar con backends de almacenamiento especiales y sistemas de archivos.
  • Virtualization: OpenNebula implementa interacciones con hipervisores mediante el uso de programas personalizados para arrancar, detener o migrar una máquina virtual. Esto le permite especializar cada operación de máquina virtual para realizar operaciones personalizadas.
  • Monitoring: La información de monitoreo también es recopilada por sondas externas. Puede agregar sondeos adicionales para incluir métricas de supervisión personalizadas que se pueden usar más adelante para asignar máquinas virtuales o con fines contables.
  • Authorization: OpenNebula también se puede configurar para usar un programa externo para autorizar y autenticar las solicitudes de los usuarios, lo que le permite implementar cualquier política de acceso a los recursos de la nube.
  • Networking: El hipervisor también está preparado con la configuración de red para cada máquina virtual.
  • Event Bus: Un bus de mensajes genérico donde OpenNebula publica eventos de recursos. El bus de mensajes se utiliza para sincronizar los servicios de OpenNebula, así como para integrar aplicaciones personalizadas.

La distribución principal de OpenNebula proporciona soporte completo para KVM, uno de los hipervisores más eficientes y ampliamente utilizados, así como para los contenedores del sistema LXC.

  • Virtualization and Cloud Management on KVM: Muchas empresas utilizan OpenNebula para gestionar la virtualización del centro de datos, consolidar los servidores e integrar los activos de TI existentes para la informática, el almacenamiento y las redes. En este modelo de implementación, OpenNebula se integra directamente con KVM y controla completamente los recursos virtuales y físicos, proporcionando funciones avanzadas para la gestión de la capacidad, la optimización de recursos, la alta disponibilidad y la continuidad del negocio. Algunas de estas implementaciones utilizan adicionalmente las funciones de gestión y aprovisionamiento en la nube de OpenNebula para federar centros de datos, implementar la expansión de la nube u ofrecer portales de autoservicio para los usuarios finales.
  • Containerization with LXC: Los contenedores tienen una huella de memoria mínima y evitan la degradación del rendimiento intensiva en proceso e inherente a la emulación de hardware. Puede tener una densidad muy alta de contenedores por nodo de virtualización y ejecutar cargas de trabajo cercanas a las métricas sin sistema operativo. LXC se centra en los contenedores del sistema, a diferencia de tecnologías similares como Docker, que se centra en los contenedores de aplicaciones.

OpenNebula permite desplegar entornos heterogéneos multihipervisor gestionados por una única instancia de OpenNebula, por lo que después de haber instalado la nube con un hipervisor, se puede añadir otro. La capacidad de integrar gradualmente hipervisores de código abierto ayuda a proteger las inversiones de TI existentes y facilita la evaluación y las pruebas, al mismo tiempo que evita vendor lock-in mediante el uso de componentes de código abierto.

¿Qué es OpenNebula Community Edition?

La Community Edition (CE) de OpenNebula es una versión completa de OpenNebula publicada bajo la Licencia Apache 2.0 para la comunidad. La Edición de la Comunidad de OpenNebula se actualiza y publica cada seis meses y se mantiene a través del Foro de la Comunidad. Para más detalles podemos ver la Política del Ciclo de Lanzamiento de OpenNebula.

Diseño del laboratorio

Para este laboratorio contaré con 4 máquinas virtuales Ubuntu 24.04 con las siguientes características:

OpenNebula Front-end

ResourcesMinimum Recommended configuration
Memory16 GB
CPU4 vCPU
Disk Size80 GB
100 GB
Network2 NICS

OpenNebula Hypervisor Nodes:

ResourcesMinimum Recommended configuration
Memory16 GB
CPU4 vCPU
Disk Size80 GB
Network2 NICS

En cada una de las VM modificaremos el archivo /etc/hosts y agregaremos los equipos.

$ sudo nano /etc/hosts

10.10.10.180     opennebula-master.witcherit.local

10.10.10.181     opennebula-node01.witcherit.local

10.10.10.182     opennebula-node02.witcherit.local

10.10.10.183     opennebula-node03.witcherit.local

Nos aseguramos de tener instalado los siguientes paquetes: gnupg, wget, apt-transport-https.

Debian/Ubuntu

$ apt-get update

$ apt-get -y install gnupg wget apt-transport-https

Instalación y configuración de MariaDB

Lo primero será instalar el servidor de base de datos MariaDB en nuestra instancia de front-end de OpenNebula.

$ apt-get install mariadb-server -y

Iniciamos la configuración de seguridad del servidor de base de datos MariaDB:

$ sudo mysql_secure_installation

Usamos las siguientes respuestas en el setup:

    Enter current password for root (enter for none):

    Switch to unix_socket authentication [Y/n] n

    Set root password? [Y/n]: N

    Remove anonymous users? [Y/n]: Y

    Disallow root login remotely? [Y/n]: Y

    Remove test database and access to it? [Y/n]:  Y

    Reload privilege tables now? [Y/n]:  Y

Una vez que el servidor MariaDB esté seguro, inicie sesión en el shell de MariaDB con el siguiente comando:

$ sudo mysql -u root -p

Creamos una base de datos y un usuario para OpenNebula con el siguiente comando:

MariaDB [(none)]> CREATE DATABASE opennebula;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON opennebula.* TO ‘oneadmin’ IDENTIFIED BY ‘StrongPassword’;

A continuación, vaciamos los privilegios y salimos del shell de MariaDB con el siguiente comando:

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> EXIT;

Reiniciamos MariaDB con el siguiente comando:

$ systemctl restart mariadb

Podemos verificar el estado del servicio MariaDB con el siguiente comando:

$ systemctl status mariadb

Instalar OpenNebula Front-end components

De forma predeterminada, OpenNebula no está disponible en los repositorios predeterminados de Ubuntu, por lo tanto, deberemos agregar el repositorio de OpenNebula en nuestra instancia de front-end de OpenNebula.

Primero, agregamos la clave GPG de firma del repositorio en el front-end ejecutando como usuario root.

# wget -q -O- https://downloads.opennebula.io/repo/repo2.key | gpg –dearmor –yes –output /etc/apt/keyrings/opennebula.gpg

Agregamos el repositorio con el siguiente comando dependiendo de nuestra versión de Ubuntu:

Ubuntu 22.04

 $ echo “deb [signed-by=/etc/apt/keyrings/opennebula.gpg] https://downloads.opennebula.io/repo/6.10/Ubuntu/22.04 stable opennebula” > /etc/apt/sources.list.d/opennebula.list

Ubuntu 24.04

 $ echo “deb [signed-by=/etc/apt/keyrings/opennebula.gpg] https://downloads.opennebula.io/repo/6.10/Ubuntu/24.04 stable opennebula” > /etc/apt/sources.list.d/opennebula.list

Actualizamos el repositorio e instalamos OpenNebula con los siguientes comandos:

$ apt-get update

$ apt-get -y install opennebula opennebula-fireedge opennebula-gate opennebula-flow opennebula-provision

Instalación de librerías Ruby Runtime

Una vez instalado OpenNebula, necesitamos instalar las librerías de Ruby en nuestro servidor. OpenNebula proporciona un script que instala los paquetes necesarios.

$ sudo /usr/share/one/install_gems

Configurar OpenNebula DB

A continuación, debemos editar el archivo /etc/one/oned.conf y definir las credenciales de la base de datos en el archivo.

$ sudo nano /etc/one/oned.conf

Dentro del documento descomentar la siguiente línea:

DB = [ BACKEND = “sqlite” ]

Agregar (Donde muestra la imagen).

DB = [ backend = “mysql”,

 server = “localhost”,

 port = 0,

 user = “oneadmin”,

 passwd = “StrongPassword”,

 db_name = “opennebula” ]

Guardamos los cambios. Podemos probar los cambios realizados usando el siguiente comando.

$ mysql -u oneadmin -p

Configurar oneadmin credentials

Para poder modificar las credenciales por defecto del usuario “oneadmin” tenemos que modificar el archivo /var/lib/one/.one/one_auth.

$ nano /var/lib/one/.one/one_auth

Nota: Cambiamos las credenciales “oneadmin:[my_password]” y guardamos los cambios.

Configuración de Firewall (UFW)

Si tenemos un firewall UFW activo, debemos permitir puertos específicos requeridos por OpenNebula.

$ sudo ufw allow proto tcp from any to any port 2616

Iniciar OpenNebula daemons

Estamos listos para iniciar todos los servicios de OpenNebula con el siguiente comando:

$ systemctl start opennebula opennebula-fireedge opennebula-gate opennebula-flow

Otros servicios de OpenNebula pueden iniciarse como una dependencia, pero no es necesario preocuparse por ellos a menos que sea necesario reiniciarlos o detenerlos explícitamente. Para iniciar estos servicios automáticamente en el arranque del servidor, es necesario habilitarlos mediante el siguiente comando:

$ systemctl enable opennebula opennebula-fireedge opennebula-gate opennebula-flow

Verificación de la instalación

Después de iniciar OpenNebula por primera vez, debemos comprobar que los comandos pueden conectarse al demonio OpenNebula. Podemos hacerlo en la CLI de Linux o en la interfaz gráfica de usuario Sunstone.

En el front-end, ejecutamos el siguiente comando.

$ oneuser show

Acceder a la interfaz web de OpenNebula

Ahora podemos intentar iniciar sesión a través de la GUI de Sunstone y la GUI de provisión. Para ello, vamos a nuestro navegador favorito. Deberíamos llegar a la página de inicio de sesión en ambos casos.

http://<frontend_address>:2616/fireedge/sunstone

http://<frontend_address>:2616/fireedge/provisiononeadmin/var/lib/one/.one/one_auth

Seremos capaces de poder ver el Dashboard de OpenNebula.

En un siguiente post veremos como agregar nodos KVM a nuestra infraestructura de OpenNebula.

Espero que esta información pueda ser de ayuda, y cualquier duda o sugerencia la dejan en los comentarios. Saludos.

Leave a Reply

Your email address will not be published. Required fields are marked *