Instalación de CloudStack sobre KVM en Ubuntu 20
22 febrero, 2024
Compartir:

Comercial

Instalación de CloudStack sobre KVM en Ubuntu 20

Instalación de CloudStack sobre KVM en Ubuntu 20.04

Objetivo

Queremos darte los pasos para poder tener una infraestructura de nube autogestionada y autocontenida en un servidor Linux con el hypervisor KVM, esto posibilitará realizar pruebas de creación de máquinas virtuales utilizando la interfaz gráfica de Apache CloudStack o utilizando su API para utilizar el concepto de infraestructura como código

Configuración inicial

Debemos tener instalado un Ubuntu Server 20.04 sobre una máquina con 8GB de RAM mínimo y procesador que soporte extensiones de virtualización

Debemos verificar que estén habilitadas las opciones de virtualización del procesador

Instalar los paquetes:

apt-get install openntpd openssh-server sudo vim htop tar

En caso que el procesador sea Intel hay que instalar lo siguiente:

apt-get install intel-microcode

Para realizar la conexión desde CloudStack debemos permitir el login via SSH del usuario root, actulizando el archivo /etc/ssh/sshd_config  y agregando la siguiente línea:

PermitRootLogin yes

Realizado el cambio, reiniciamos el servicio

systemctl restart sshd

Posteriormente seteamos la clave de root, para ello ejecutamos el comando:

sudo su -

y procedemos a setear la clave:

passwd root

Configuración de Networking

Instalamos los paquetes necesarios:

apt-get install bridge-utils

Realizamos la configuración de las placas, considerando que tenemos una zona placa de red a la cual le pondremos la direcciómn 192.168.1.22, en este caso la placa de red se llama:  enp5s0 pero puede variar en cada instalación

cat /etc/netplan/00-installer-config.yam

network:

  ethernets:

    enp5s0:

      dhcp4: false

      dhcp6: false

      optional: true

  bridges:

    cloudbr0:

      addresses: [192.168.1.22/24]

      gateway4: 192.168.1.1

      nameservers:

        addresses: [1.1.1.1,8.8.8.8]

      interfaces: [enp5s0]

      dhcp4: false

      dhcp6: false

      parameters:

        stp: false

        forward-delay: 0

  version: 2

Grabamos la configuración asegurandonos de haber cargado los valores correctos de TCP/IP y activamos la configuración de red:

netplan generate

netplan apply

reboot

Instalando el Management de CloudStack

Debemos instalar MySQL Server como usuario root, si utilizamos Ubuntu 20.04 ejecutamos lo siguiente:

apt-key adv --keyserver keyserver.ubuntu.com --recv-keys BDF0E176584DF93F

Para Ubuntu 22.04 y superiores:

mkdir -p /etc/apt/keyrings

wget -O- http://packages.shapeblue.com/release.asc | gpg --dearmor | sudo tee /etc/apt/keyrings/cloudstack.gpg > /dev/null

echo deb [signed-by=/etc/apt/keyrings/cloudstack.gpg] http://packages.shapeblue.com/cloudstack/upstream/debian/4.18 / > /etc/apt/sources.list.d/cloudstack.list

En ambos casos debemos ejecutar los siguientes comandos:

apt-get update -y

apt-get install cloudstack-management mysql-server

Para tener una instalación con seguimiento del uso de los recursos instalamos el servicio de Usage de CloudStack:

apt-get install cloudstack-usage

Base de datos

Debemos modificar los siguientes parámetros de la base de datos MySQL

[mysqld]

server_id = 1

sql-mode="STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_ENGINE_SUBSTITUTION"

innodb_rollback_on_timeout=1

innodb_lock_wait_timeout=600

max_connections=1000

log-bin=mysql-bin

binlog-format = 'ROW'

Reiniciamos el servidor de base datos MySQL

systemctl restart mysql

cloudstack-setup-databases cloud:cloud@localhost --deploy-as=root:<root password> -i 192.168.1.22

Configuración de Servicio NFS

Instalamos los paquetes del servicio:

apt-get install nfs-kernel-server quota

Creamos los recursos a exportar:

echo "/export  *(rw,async,no_root_squash,no_subtree_check)" > /etc/exports

mkdir -p /export/primary /export/secondary

exportfs -a

Configuramos y reiniciamos el servicio de NFS

sed -i -e 's/^RPCMOUNTDOPTS="--manage-gids"$/RPCMOUNTDOPTS="-p 892 --manage-gids"/g' /etc/default/nfs-kernel-server

sed -i -e 's/^STATDOPTS=$/STATDOPTS="--port 662 --outgoing-port 2020"/g' /etc/default/nfs-common

echo "NEED_STATD=yes" >> /etc/default/nfs-common

sed -i -e 's/^RPCRQUOTADOPTS=$/RPCRQUOTADOPTS="-p 875"/g' /etc/default/quota

service nfs-kernel-server restart

Configuración del hipervisor KVM

apt-get install qemu-kvm cloudstack-agent

Habilitamos el acceso via VNC a la consola de las VMs

sed -i -e 's/\#vnc_listen.*$/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf

Debemos habilitar al servicio libvirtd que quede en modo de escucha:

echo LIBVIRTD_ARGS=\"--listen\" >> /etc/default/libvirtd

Configuramos los servicios de KVM

systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket

systemctl restart libvirtd

y seteamos los valores por defecto:

echo 'listen_tls=0' >> /etc/libvirt/libvirtd.conf

echo 'listen_tcp=1' >> /etc/libvirt/libvirtd.conf

echo 'tcp_port = "16509"' >> /etc/libvirt/libvirtd.conf

echo 'mdns_adv = 0' >> /etc/libvirt/libvirtd.conf

echo 'auth_tcp = "none"' >> /etc/libvirt/libvirtd.conf

systemctl restart libvirtd

En caso que en el mismo servidor tengamos corriendo servicios de Docker debemos modificar el archivo /etc/sysctl.conf agregando las siguientes líneas:

net.bridge.bridge-nf-call-arptables = 0

net.bridge.bridge-nf-call-iptables = 0

y ejecutamos como usuario root el comado:

sysctl -p

Para que nuestra instalación tenga un identificador único corremos los siguientes comandos:

apt-get install uuid

UUID=$(uuid)

echo host_uuid = \"$UUID\" >> /etc/libvirt/libvirtd.conf

systemctl restart libvirtd

Antes de iniciar el management de CloudStack debemos bajar el servicio AppArmor

# Disable apparmour on libvirtd

ln -s /etc/apparmor.d/usr.sbin.libvirtd /etc/apparmor.d/disable/

ln -s /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper /etc/apparmor.d/disable/

apparmor_parser -R /etc/apparmor.d/usr.sbin.libvirtd

apparmor_parser -R /etc/apparmor.d/usr.lib.libvirt.virt-aa-helper

Ya podemos arrancar nuestra Cloud

cloudstack-setup-management

systemctl status cloudstack-management

tail -f /var/log/cloudstack/management/management-server.log

y accedemos por la url: http://192.168.1.22:8080/client   utilizando las credenciales por defecto, usuario admin contraseña password

Solo nos queda crear la Zona Avanzada para dar servicios.