Published June 11, 2025 by with 0 comment

CloudStack Made Simple: A Minimalist Deployment Guide

Untitled Document.md

Apache CloudStack is an open-source cloud computing platform for deploying and managing Infrastructure-as-a-Service (IaaS) environments. It enables organizations to build private, public, or hybrid clouds with features similar to AWS EC2 but with on-premises or data center deployment.

Key Features

  • Multi-Hypervisor Support: KVM, VMware, XenServer, Hyper-V, and LXC
  • Self-Service Portal: Users can provision VMs, networks, storage, and firewalls via a web UI or API.
  • Scalable & High-Availability (HA) : Supports auto-scaling, live migration, and load balancing
  • Network Management : Advanced SDN (Software-Defined Networking) with VLANs, VPCs, and VPN.
  • Storage Options : Supports local storage, NFS, Ceph, and object storage (S3-compatible).
  • API & Integrations

Environment

  1. Management Server:
  • Operating System : Ubuntu 22.04 LTS
  • vCPU : 2
  • Memory : 8G
  • Disk : 150G
  • Network : management & storage (10.20.11.0/24)
  • Role : Management Server + NFS Server(Primary & secondary storage)
  1. KVM Host:
  • Operating System : Ubuntu 22.04 LTS
  • vCPU : 8
  • Memory : 16G
  • Disk : 100G
  • Network : management-network & storage (10.20.11.0/24), & public, guest (10.20.12.0/24)
  • Role : Compute

Apache Cloudstack

Management Server setup

  1. Configure Bridges
nano /etc/netplan/50-cloud-init.yaml

paste following content:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      dhcp6: false
      optional: true
  bridges:
    cloudbr0:
      addresses: [10.20.11.217/24]
      routes:
       - to: default
         via: 10.20.11.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
      interfaces: [ens3]
      dhcp4: false
      dhcp6: false
      parameters:
        stp: false
        forward-delay: 0
  1. Setup Repository cloudstack
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.19 / > /etc/apt/sources.list.d/cloudstack.list
apt-get update -y
  1. Install database server and cloudstack-management packages
apt-get install cloudstack-management mysql-server cloudstack-usage -y
  1. Configure Database server
nano /etc/mysql/mysql.conf.d/mysqld.cnf
[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'
systemctl restart mysql
# auto provisioning databases
cloudstack-setup-databases cloud:cloud@localhost --deploy-as=root 
  1. Setup NFS as Primary and Secondary Storage
apt-get install nfs-kernel-server quota -y

echo "/export  *(rw,async,no_root_squash,no_subtree_check)" > /etc/exports
mkdir -p /export/primary /export/secondary
exportfs -a

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

KVM Host setup (Compute)

  1. Setup Repository Cloudstack
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.19 / > /etc/apt/sources.list.d/cloudstack.list
  1. Configure Bridges
nano /etc/netplan/50-cloud-init.yaml

paste following content:

network:
  version: 2
  renderer: networkd
  ethernets:
    ens3:
      dhcp4: false
      dhcp6: false
      optional: true
    ens4:
      dhcp4: false
      dhcp6: false
      optional: true
  bridges:
    cloudbr0:
      addresses: [10.20.11.218/24]
      routes:
       - to: default
         via: 10.20.11.1
      nameservers:
        addresses: [1.1.1.1, 8.8.8.8]
      interfaces: [ens3]
      dhcp4: false
      dhcp6: false
      parameters:
        stp: false
        forward-delay: 0
    cloudbr1:
      interfaces: [ens4]
      dhcp4: false
      dhcp6: false
      parameters:
        stp: false
        forward-delay: 0
  1. Install KVM packages and cloudstack-agent
apt-get install bridge-utils openssh-server openntpd qemu-kvm cloudstack-agent  -y
  1. Configure Libvirtd
sed -i -e 's/\#vnc_listen.*$/vnc_listen = "0.0.0.0"/g' /etc/libvirt/qemu.conf

# makesure this value correct
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
nano /etc/default/libvirtd (uncomment --listen)
apt-get install uuid -y
UUID=$(uuid)
echo host_uuid = \"$UUID\" >> /etc/libvirt/libvirtd.conf
  1. Disable apparmor 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

systemctl mask libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tls.socket libvirtd-tcp.socket
systemctl restart libvirtd
  1. Add Sysctl configuration
nano /etc/sysctl.conf

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

sysctl -p 

Notes

## Exec on management server
cloudstack-setup-management
systemctl status cloudstack-management
cat /var/lib/cloudstack/management/.ssh/id_rsa.pub
tail -f /var/log/cloudstack/management/management-server.log

Read More
      edit