Taula de continguts

Open Nebula Environment - ONE

Open Nebula Environment és un gestor de infraestructura de virtualització. És

Instal·lació de proves amb Vagrant

Tenim aquí els arxius per a una instal·lació típica de 1 frontend + 2 workers KVM (que es poden augmentar fàcilment).

Tindrem 5 arxius:

  1. Vagranfile : arxiu principal de la infraestructura
  2. network.sh : ajustos de la xarxa
  3. common.sh : configuració bàsica de paquets comuns de Open Nebula
  4. frontend.sh : configuració del node frontend
  5. worker.sh : configuració del node worker KVM

Crearà 3 nodes, cadascun amb 3 interfícies de xarxa:

  1. frontend amb IPs 192.168.100.10 i 192.168.101.10 . Té el GUI web al port 2621
  2. worker1 amb IPs 192.168.100.11 i 192.168.101.11
  3. worker2 amb IPs 192.168.100.12 i 192.168.101.12

Les interfícies son:

  1. eth0 : reservada per Vagrant
  2. eth1 : 192.168.100. reservada per admin i heartbeat de ONE
  3. eth2 : 192.168.101. pensada per fer-hi bridges accessibles des de les pròpies VMs

Arxius

Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
 
# Vagrantfile per a ONE - Open Nebula Environment
# frontend node a 192.168.100.10
# nodes (2) a 192.168.100.11 , .12 , etc.
# xarxa bridge br0 per a VMs
 
#box = "bento/debian-12" # per a macos (aarch64)
box = "debian/bookworm64" # per a linux/windows (amd64)
#provider = "virtualbox"
provider = "libvirt" # tb utilitza virtiofs
 
 
Vagrant.configure("2") do |config|
 
  config.vm.define "frontend" do |frontend|
    frontend.vm.box = box
    frontend.vm.hostname = "frontend"
    frontend.vm.network "private_network", ip: "192.168.100.10" # main
    frontend.vm.network "private_network", ip: "192.168.101.10", auto_config: false # bridge per vms
    frontend.vm.provision "shell", path: "network.sh"
    frontend.vm.provision "shell", path: "common.sh"
    frontend.vm.provision "shell", path: "frontend.sh"
  end
 
  # Configuració de les màquines nodes
  (1..2).each do |i|
    config.vm.define "node#{i}" do |node|
      node.vm.box = box
      node.vm.hostname = "node#{i}"
      node.vm.network "private_network", ip: "192.168.100.1#{i}" # main
      node.vm.network "private_network", ip: "192.168.101.1#{i}", auto_config: false # bridge per vms
      node.vm.provision "shell", path: "network.sh"
      node.vm.provision "shell", path: "common.sh"
      node.vm.provision "shell", path: "worker.sh"
    end
  end
 
  # Configuració comuna per totes les màquines
  config.vm.provider provider do |virt|
    virt.memory = "4096"
    virt.cpus = 2
    # ajustos virtiofs (nomes en libvirt)
    if provider == "libvirt" then
      virt.memorybacking :access, :mode => 'shared'
    end
  end
 
  # carpeta compartida per virtiofs enlloc de NFS per libvirt
  if provider == "libvirt" then
    config.vm.synced_folder ".", "/vagrant", type: "virtiofs"
  end
 
end
network.sh
#!/bin/bash
 
# configuració /etc/network/interfaces
 
IPBASE="192.168.101."
IFACE="eth2"
 
# paquets
apt-get update
apt-get install -y bridge-utils
 
# trobem numero de node
numero=$(echo "$(hostname)" | grep -oE '[0-9]+$')
 
# si no té número, és que és el frontend (.10)
if [ -z "$numero" ]; then
    numero=0
fi
 
lastipnum=$((10+$numero))
IP="$IPBASE$lastipnum"
echo "Configurant xarxa br0 a "$(hostname)" : $IP"
 
echo "
# interficie física per al pont
#auto $IFACE
iface $IFACE inet manual
 
# Bridge principal
auto br0
 
# Bridge amb IP estàtica
iface br0 inet static
    bridge_ports $IFACE
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0
    address $IP
    netmask 255.255.255.0
    # gateway "$IPBASE"1    # gateway: Descomentar si cal
" >> /etc/network/interfaces
 
# reiniciem xarxa
systemctl restart networking.service
common.sh
#!/bin/bash
 
# actualització apt
apt-get update
 
# Eines bàsiques (per versió curl+gpg)
apt-get install -y wget curl net-tools vim nfs-common gnupg2
 
# repos Open Nebula
wget -q -O- https://downloads.opennebula.io/repo/repo2.key | apt-key add -
#curl -fsSL https://downloads.opennebula.io/repo/repo2.key | gpg --dearmor -o /etc/apt/keyrings/opennebula.gpg
echo "deb https://downloads.opennebula.io/repo/7.0/Debian/12 stable opennebula" > /etc/apt/sources.list.d/opennebula.list
 
# actualitzem
apt-get update
frontend.sh
#!/bin/bash
 
# resetejem la clau pública del oneadmin per fer SSH
rm -f /vagrant/id_rsa.pub.frontend
 
# a la conf comuna ja s'ha fet update i afegir els repos de Open Nebula
#apt-get update
 
# Instal·lació packages Open Nebula
apt-get install -y opennebula opennebula-fireedge opennebula-gate opennebula-flow
 
# ajust password de oneadmin
echo 'oneadmin:vagrant' > /var/lib/one/.one/one_auth
 
# TODO: instal·lar i configurar mariadb-server i /etc/one/oned.conf
 
# arrenquem i configurem a l'inici els serveis
systemctl start opennebula opennebula-fireedge opennebula-gate opennebula-flow
systemctl enable opennebula opennebula-fireedge opennebula-gate opennebula-flow
 
# publiquem clau publica del oneadmin
cp /var/lib/one/.ssh/id_rsa.pub /vagrant/id_rsa.pub.frontend
worker.sh
#!/bin/bash
 
# a la conf comuna ja s'ha fet update i afegir els repos de Open Nebula
#apt-get update
 
# instal·lem node worker KVM
apt-get install -y opennebula-node-kvm
 
while [ ! -f /vagrant/id_rsa.pub.frontend ]
do
	echo "Esperem que es publiqui la clau publica de oneadmin"
	sleep 5
done
 
# importem la clau pública de oneadmin
cat /vagrant/id_rsa.pub.frontend >> /var/lib/one/.ssh/authorized_keys


Posada en marxa

Has de tenir instal·lat Vagrant.

$ time vagrant up

Hauria de crear 3 nodes amb noms «frontend», «node1» i «node2».