This document explains how to do Sunbeam Multi-node deployment on two OpenStack VMs. The main requirement is to bring two nodes on the same L2 network so that Metallb L2advertisements can discover both the nodes.
VM1 - 32GB
openstack server create --image 7fc8437c-6ffc0f-4d47-ba5a-1568d6ff811e --flavor staging-cpu4-ram32-disk50 --key ahmad-can --network net_stg-reproducer-hassahma-psd multinode1
ssh VM1-ip
sudo hostnamectl set-hostname multinode1.res
VM2 - 8GB
openstack server create --image 7fc8437c-6ffc0f-4d47-ba5a-1568d6ff811e --flavor staging-cpu4-ram8-disk50 --key ahmad-can --network net_stg-reproducer-hassahma-psd multinode2
ssh VM2-ip
sudo hostnamectl set-hostname multinode2.res
Next step is to get IP address of LB on VM1
ssh VM1
sudo k8s kubectl get l2advertisements -ANAMESPACE NAME IPADDRESSPOOLS IPADDRESSPOOL SELECTORS INTERFACESmetallb-system management-multinode2 [“metallb-loadbalancer-ck-loadbalancer”] [“ens3”]metallb-system metallb-loadbalancer-ck-loadbalancer [“metallb-loadbalancer-ck-loadbalancer”]
sudo k8s kubectl get ipaddresspool -ANAMESPACE NAME AUTO ASSIGN AVOID BUGGY IPS ADDRESSESmetallb-system metallb-loadbalancer-ck-loadbalancer true false [“172.16.1.201-172.16.1.240”]
sudo k8s kubectl get svc -A | grep controller-service
controller-sunbeam-controller controller-service LoadBalancer 10.152.183.201 172.16.1.201 17070:30108/TCP,17022:32510/TCP 3d7h
172.16.1.201 is the Load balancer IP
Now we require to set the network route to this IP from VM2 so that VM2 can join the juju controller running on VM1 for a multi node sunbeam installation
ssh VM2
# VM1 ip is 10.149.133.21
sudo nano /etc/netplan/01-netcfg.yaml
network:
version: 2
ethernets:
ens3:
dhcp4: true
routes:
- to: 172.16.1.0/24
via: 10.149.133.21
Apply the above netplan
sudo netplan apply
Add a new port to VM2 which will add a new nic to VM2. The extra nic is required for sunbeam joining node for multi node installation
On the local machine with openstack novarc sourced, create the port for VM2
openstack port create --network net_stg-reproducer-hassahma-psd VM2-port
openstack server add port VM2-port <port_id>
ssh VM2
The following will show the nic and if its down then bring it up
ip -br a
sudo ip link set <name> up
Now the two nodes VM1 and VM2 are ready for sunbeam multinode installation.
Parent node VM1 multinode1.res
sudo snap install openstack --channel 2024.1/edge
sunbeam prepare-node-script --bootstrap | bash -x && newgrp snap_daemon
sunbeam cluster bootstrap -m manifest.yaml --role control,compute
sunbeam cluster add multinode2.res --output token
Joining node VM2 multinode2.res
sudo snap install openstack --channel 2024.1/edge
sunbeam prepare-node-script | bash -x && newgrp snap_daemon
sunbeam cluster join --role compute token
In the End, we can confirm two hypervisors as below
openstack compute service list
+--------------------------------------+----------------+----------------+----------+---------+-------+----------------------------+
| ID | Binary | Host | Zone | Status | State | Updated At |
+--------------------------------------+----------------+----------------+----------+---------+-------+----------------------------+
| c4447b49-b826-48c1-bf8c-50898c3e7ac3 | nova-scheduler | nova-0 | internal | enabled | up | 2026-03-07T17:49:18.000000 |
| 14643ee7-c997-4017-8e91-7b7b3f106ff9 | nova-conductor | nova-0 | internal | enabled | up | 2026-03-07T17:49:10.000000 |
| 61e962cb-7b88-4247-8f56-e7e191471402 | nova-compute | multinode1.res | nova | enabled | up | 2026-03-07T17:49:15.000000 |
| 0272ca18-1d9e-405f-a1f5-e55471297323 | nova-compute | multinode2.res | nova | enabled | up | 2026-03-07T17:49:15.000000 |
+--------------------------------------+----------------+----------------+----------+---------+-------+----------------------------+