This guide provides operational instructions for administrators managing the 3-node OpenStack cluster running on FreeBSD. The guide covers cluster architecture, network topology, and common administrative tasks.
The cluster consists of three physical nodes:
| Node | IP Address (vlan1220) | Role |
|---|---|---|
| openstack0 | 10.122.0.254 | Controller |
| openstack1 | 10.122.0.181 | Worker |
| openstack2 | 10.122.0.182 | Worker |
All control-plane components run in FreeBSD jails on openstack0:
openstack0 (10.122.0.254)
- keystone
- placement
- glance
- neutron-server
- neutron-metadata-agent
- neutron-dhcp-agent
- neutron-openvswitch-agent
- nova-api
- nova-scheduler
- nova-conductor
- nova-serialproxy
Data-plane components run directly on the host:
openstack1 and openstack2 (10.122.0.181, 10.122.0182)
- neutron-metadata-agent
- neutron-dhcp-agent
- neutron-openvswitch-agent
- nova-compute
Database and message queue services run in separate jails on the controller node:
# MySQL Database
sudo service mysql-server status
# RabbitMQ Message Queue
sudo service rabbitmq statusEach node has three VLAN interfaces:
- vlan122: Public network
- vlan1220: Management network
- vlan1221: Provider network (data plane)
openstack0
- vlan1220: 10.122.0.254/24 (Management)
- vlan1221: 10.122.1.254/24 (Provider)
openstack1:
- vlan1220: 10.122.0.181/24 (Management)
- vlan1221: attached to br-provider
openstack2:
- vlan1220: 10.122.0.182/24 (Management)
- vlan1221: attached to br-provider
Neutron creates two OVS bridges on each node:
br-int(Integration Bridge)- Connects VM tap interfaces
- Connects to br-provider via patch ports
br-provider(Provider Bridge)- Connected to vlan1221 VLAN interface
- Provides external network connectivity
Verify OVS bridge configuration:
# List all bridges
sudo ovs-vsctl show
# Show bridge ports
sudo ovs-vsctl list-ports br-provider
sudo ovs-vsctl list-ports br-int
# View flow rules
sudo ovs-ofctl dump-flows br-int
sudo ovs-ofctl dump-flows br-providerData plan:
External Network (10.122.1.0/24)
|
[vlan1221]
|
+-------------------------+-------------------------+
| | |
openstack0 openstack1 openstack2
| | |
[br-provider] [br-provider] [br-provider]
| | |
[br-int] [br-int] [br-int]
| | |
[VM tap] [VM tap] [VM tap]
export OS_USERNAME=admin
export OS_PASSWORD=supersecret
export OS_PROJECT_NAME=admin
export OS_USER_DOMAIN_ID=default
export OS_PROJECT_DOMAIN_ID=default
export OS_IDENTITY_API_VERSION=3
export OS_IMAGE_API_VERSION=2
export OS_AUTH_URL=http://10.122.0.254:5000/v3Save this as /root/admin-openrc and load:
source /root/admin-openrcCheck jail status:
sudo jlsEnter specific jail to check service:
sudo jexec <jid> /bin/sh
ps aux | grep <service-name>ps aux | grep neutron
ps aux | grep nova-compute# Compute services
openstack compute service list
# Network agents
openstack network agent listOn worker nodes:
sudo pkill -f neutron-openvswitch-agent
sudo neutron-openvswitch-agent --config-file /path/to/neutron.conf \
--config-file /path/to/openvswitch_agent.ini &On worker nodes:
sudo pkill -f nova-compute
sudo EVENTLET_HUB=poll nova-compute --config-dir /path/to/nova &openstack domain create --description "Engineering Domain" engineeringopenstack project create --domain default \
--description "Development Project" dev-projectopenstack user create --domain default \
--password-prompt \
--email user@example.com \
devuser# Create custom role
openstack role create developer
# Assign role to user in project
openstack role add --project dev-project --user devuser developeropenstack user list
openstack project list
openstack role assignment list --user devuser --project dev-projectopenstack quota set --instances 10 --cores 20 --ram 51200 dev-projectView quota:
openstack quota show dev-projectopenstack network create \
--share \
--provider-physical-network provider \
--provider-network-type flat \
provider1openstack subnet create \
--subnet-range 10.122.1.0/24 \
--gateway 10.122.1.1 \
--network provider1 \
--allocation-pool start=10.122.1.100,end=10.122.1.200 \
--dns-nameserver 8.8.8.8 \
--no-dhcp \
provider1-subnetEnable DHCP if needed:
openstack subnet set --dhcp provider1-subnetopenstack network create \
--provider-physical-network provider \
--provider-network-type vlan \
--provider-segment 100 \
vlan100openstack network show provider1
openstack subnet show provider1-subnet
openstack port list --network provider1Remove all ports first:
# List ports
openstack port list --network provider1
# Delete ports (excluding DHCP and router ports)
for port in $(openstack port list --network provider1 -f value -c ID); do
openstack port delete $port
done
# Delete subnet
openstack subnet delete provider1-subnet
# Delete network
openstack network delete provider1FreeBSD image:
curl -fLO https://download.freebsd.org/releases/VM-IMAGES/13.2-RELEASE/amd64/Latest/FreeBSD-13.2-RELEASE-amd64.raw.xz
xz -d FreeBSD-13.2-RELEASE-amd64.raw.xz
openstack image create \
--disk-format raw \
--container-format bare \
--public \
--file FreeBSD-13.2-RELEASE-amd64.raw \
freebsd-13.2CirrOS image:
curl -fLO http://download.cirros-cloud.net/0.6.2/cirros-0.6.2-x86_64-disk.img
openstack image create \
--disk-format qcow2 \
--container-format bare \
--public \
--file cirros-0.6.2-x86_64-disk.img \
cirrosopenstack image set \
--property os_type=freebsd \
--property os_version=13.2 \
--min-disk 20 \
--min-ram 2048 \
freebsd-13.2openstack image set --private freebsd-13.2openstack image add project freebsd-13.2 dev-project
openstack image set --accept freebsd-13.2openstack image delete freebsd-13.2openstack image list
openstack image show freebsd-13.2openstack flavor create \
--id 1 \
--vcpus 1 \
--ram 2048 \
--disk 20 \
m1.smallopenstack flavor create \
--id 2 \
--vcpus 2 \
--ram 4096 \
--disk 40 \
--property hw:cpu_policy=dedicated \
m1.mediumMake flavor private:
openstack flavor set --private m1.mediumGrant access to project:
openstack flavor set --project dev-project m1.mediumopenstack flavor list
openstack flavor show m1.smallopenstack flavor delete m1.smallopenstack security group create \
--description "Web server security group" \
web-sg# Allow SSH
openstack security group rule create \
--proto tcp \
--dst-port 22 \
web-sg
# Allow HTTP
openstack security group rule create \
--proto tcp \
--dst-port 80 \
web-sg
# Allow HTTPS
openstack security group rule create \
--proto tcp \
--dst-port 443 \
web-sg
# Allow ICMP
openstack security group rule create \
--proto icmp \
web-sgopenstack security group list
openstack security group show web-sg
openstack security group rule list web-sgopenstack security group delete web-sg