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
- 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)
- 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
- 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
- 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
- Install database server and cloudstack-management packages
apt-get install cloudstack-management mysql-server cloudstack-usage -y
- 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
- 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)
- 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
- 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
- Install KVM packages and cloudstack-agent
apt-get install bridge-utils openssh-server openntpd qemu-kvm cloudstack-agent -y
- 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
- 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
- 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