A reimagining of Bifrost using Kolla Ansible to deploy a containerised control plane for standalone bare metal environments.
A single host. So far only tested on a CentOS 7.5 cloud image. A user account with passwordless sudo.
Clone this repo:
git clone https://github.com/markgoddard/bikolla
Kolla Ansible needs to know the name of the network interface on which services will be exposed. This should be done as follows:
export INTERFACE=<interface>
The default is breth1
, intended for the development/test use case where
Tenks will be used to provide virtual bare metal machines, which requires a
bridge. The interface should exist, and have an IP address. A dummy bridge may
be created as follows for testing:
sudo ip link add breth1 type bridge sudo ip link set breth1 up sudo ip address add <IP address>/<prefix> dev breth1
Additionally, Kolla Ansible needs to know an IP address range to use for the
dnsmasq DHCP server. This range should be in the same subnet as the IP address
of $INTERFACE
. This is done as follows:
export DHCP_RANGE=<start IP,end IP>
There are various configuration files under etc/kolla
which can be modified
to configure the control plane if necessary.
Install dependencies for Kolla Ansible, including Ansible and Docker:
cd bikolla ./kolla-install.sh
This will likely log you out. You should log back in, picking up membership of
the docker
group.
Next, deploy containers:
./kolla-deploy.sh
You should now have a standalone ironic control plane running in Docker containers:
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES aa6b3ea09a9b kolla/centos-binary-dnsmasq:master "kolla_start" 2 days ago Up 2 days ironic_dnsmasq d250bb846777 kolla/centos-binary-ironic-pxe:master "kolla_start" 2 days ago Up 2 days ironic_ipxe 5450494242b3 kolla/centos-binary-ironic-pxe:master "kolla_start" 2 days ago Up 2 days ironic_pxe 52587635049d kolla/centos-binary-ironic-inspector:master "kolla_start" 2 days ago Up 2 days ironic_inspector 6f6c54cad1ca kolla/centos-binary-ironic-api:master "kolla_start" 2 days ago Up 2 days ironic_api f0abf333fd25 kolla/centos-binary-ironic-conductor:master "kolla_start" 2 days ago Up 2 days ironic_conductor 0d239e6efd92 kolla/centos-binary-rabbitmq:master "kolla_start" 2 days ago Up 2 days rabbitmq 5b83db07c6e5 kolla/centos-binary-iscsid:master "kolla_start" 2 days ago Up 2 days iscsid fd56724b0caa kolla/centos-binary-mariadb:master "kolla_start" 2 days ago Up 2 days mariadb 8b693049b9d0 kolla/centos-binary-cron:master "kolla_start" 2 days ago Up 2 days cron 31110aa7052d kolla/centos-binary-kolla-toolbox:master "kolla_start" 2 days ago Up 2 days kolla_toolbox
At this point there are a few options.
- Use the
openstack
client directly to interact with the ironic and inspector APIs - Use Tenks to create and register some virtual bare metal nodes for testing
- Use Bifrost to automate image building and node provisioning
This method requires a good understanding of ironic and its client.
To install the openstack
client in a virtual environment and create a
clouds.yaml
file:
./clients.sh
To access ironic:
export OS_CLOUD=bifrost openstack baremetal node list
To access ironic inspector:
export OS_CLOUD=bifrost-inspector openstack baremetal introspection list
To install Tenks and use it to create some virtual bare metal nodes:
./tenks.sh
The nodes will be registered in ironic. To modify their configuration, edit
tenks-deploy-config.yml
.
To install Bifrost and use it to create a CentOS image and deploy it to all nodes:
./bifrost.sh
Once this is complete, the deployed nodes should be accessible via SSH. If
using Tenks, check the console logs in /var/log/tenks/tk*-console.log
to
find the assigned IPs.