Running Bareon on DevStack
==========================
The following notes give an overview of how to setup Devstack (Newton) for use with Bareon.
.. contents:: Contents
:local:
:depth: 1
Preparation
-----------
What you will need:
- A familiarity with `DevStack `_
- A machine with:
- Local block storage. In this guide 40GB was used, but this is not definitive.
- Hardware virtualization. Configured by default in libvirt.
- A large amount of RAM:
- Each virtual Ironic node requires >=3GB.
- Building bareon images requires >=16GB. Although these can be
built elsewhere and copied to the host.
.. warning::
DevStack will make substantial changes to your system during installation. Only run DevStack on servers or virtual machines that are dedicated to this purpose.
Setup Libvirt
-------------
1. Create VM using the Centos minimal image (``_).
2. Log into the machine and enable networking
.. code-block:: console
vi /etc/sysconfig/network-scripts/ifcfg-eth0
3. Change 'ONBOOT' to 'yes'
.. code-block:: console
systemctl restart network
4. Update and install git
.. code-block:: console
yum update
yum install git
reboot
Setup Openstack with DevStack
-----------------------------
Setting up DevStack and booting a node with Bareon requires the following
steps:
.. contents::
:local:
:depth: 1
Setup Stack User
^^^^^^^^^^^^^^^^
1. Login into target host as root user
2. Download devstack sources and create "stack" user
.. code-block:: console
useradd -m -d /opt/stack stack
sudo -u stack -iH
git config --global user.name "Name"
git config --global user.email "user@email.com"
git clone https://github.com/openstack-dev/devstack.git
cd devstack
git checkout -b newton origin/stable/newton
exit
cd ~stack/devstack
tools/create-stack-user.sh
3. Switch user to “stack”
.. code-block:: console
sudo -u stack -iH
Patch Ironic & Nova Using Bareon-Ironic
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The bareon-ironic repo contains a series of patches which are required by
Bareon but have not yet been merged into Nova and Ironic.
1. Retrieve bareon-ironic code
.. code-block:: console
cd ~
git clone https://git.openstack.org/openstack/bareon-ironic
2. Retrieve nova and ironic code, to apply bareon-ironic patches.
.. code-block:: console
# nova
cd ~
git clone https://git.openstack.org/openstack/nova
cd nova
git checkout -b local/newton origin/stable/newton
cat ../bareon-ironic/patches/newton/nova/*.patch | git am
# ironic
cd ~
git clone https://git.openstack.org/openstack/ironic
cd ironic
git checkout -b local/newton origin/stable/newton
cat ../bareon-ironic/patches/newton/ironic/*.patch | git am
Configure and Deploy DevStack
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Create configuration file "local.conf"
.. code-block:: console
cd ~/devstack
cat > local.conf << 'CATEND'
[[local|localrc]]
IRONIC_BRANCH=local/newton
NOVA_BRANCH=local/newton
disable_service n-net
enable_service n-api-meta
enable_service n-novnc
enable_service n-crt
enable_service n-cell
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service s-proxy
enable_service s-object
enable_service s-container
enable_service s-account
enable_plugin ironic https://github.com/openstack/ironic.git stable/newton
enable_service ironic
enable_service ir-api
enable_service ir-cond
disable_service tempest
disable_service heat h-api h-api-cfn h-api-cw h-eng
disable_service cinder c-api c-vol c-sch c-bak
ADMIN_PASSWORD=111
MYSQL_PASSWORD=111
RABBIT_PASSWORD=111
SERVICE_PASSWORD=111
SERVICE_TOKEN=111
SWIFT_HASH=123qweasdzxcnbvhgfytr654
SWIFT_TEMPURL_KEY=123qweasdzxcnbvhgfytr654
SWIFT_ENABLE_TEMPURLS=True
SWIFT_LOOPBACK_DISK_SIZE=8G
VERBOSE=True
LOG_COLOR=True
VIRT_DRIVER=ironic
IRONIC_BAREMETAL_BASIC_OPS=True
IRONIC_VM_COUNT=2
IRONIC_VM_SSH_PORT=22
IRONIC_VM_SPECS_RAM=3072
IRONIC_VM_SPECS_DISK=4
IRONIC_VM_EPHEMERAL_DISK=0
IRONIC_ENABLED_DRIVERS=fake,pxe_ssh
IRONIC_BUILD_DEPLOY_RAMDISK=False
CATEND
2. Deploy DevStack
.. code-block:: console
./stack.sh
.. note::
If ./stack.sh fails for any reason ./unstack.sh will undo the deployment after which ./stack.sh
can be re-attempted.
Install Bareon-Ironic and Configure Related Settings
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Install bareon-ironic
.. code-block:: console
cd ~/bareon-ironic
python setup.py bdist_egg
sudo easy_install dist/bareon_ironic-1.0.1.dev19-py2.7.egg
2. Patch ironic configuration
.. code-block:: console
mkdir -p /opt/stack/data/bareon-ironic/master
mkdir -p /opt/stack/data/rsync/master
cd ~/devstack
(
source ./inc/ini-config
iniset /etc/ironic/ironic.conf DEFAULT enabled_drivers 'fake,bare_swift_ssh,bare_rsync_ssh'
iniset /etc/ironic/ironic.conf glance swift_temp_url_key 12345678900987654321
iniset /etc/ironic/ironic.conf resources resource_root_path '/opt/stack/data/bareon-ironic'
iniset /etc/ironic/ironic.conf resources resource_cache_master_path '/opt/stack/data/bareon-ironic/master'
iniset /etc/ironic/ironic.conf bareon bareon_pxe_append_params 'nofb nomodeset vga=normal console=tty0 console=ttyS0,9600n8'
iniset /etc/ironic/ironic.conf rsync rsync_root '/opt/stack/data/rsync'
iniset /etc/ironic/ironic.conf pxe pxe_append_params 'nofb nomodeset vga=normal console=ttyS0 systemd.journald.forward_to_console=yes no_timer_chec'
)
3. Because rsync can be used during node setup by bareon, we need to alter rsync daemon configuration.
.. code-block:: console
sudo sed -i 's/address = 127.0.0.1//' /etc/rsyncd.conf
(
echo '
[ironic_rsync]
uid = root
gid = root
path = /opt/stack/data/rsync/' | sudo tee -a /etc/rsyncd.conf
)
4. Restart rsync daemon
.. code-block:: console
sudo systemctl restart rsyncd
5. Restart ironic services because changes have been made to ironic.conf.
Join devstack screen session
.. code-block:: console
screen -r stack
Switch to ``ir-cond`` view (``Ctrl+a Shift+"``) and restart ironic conductor. Do so by sending ``Ctrl+c`` to the active process, then running it again (``Up Arrow + Enter``). Perform the same actions for ``ir-api`` and detach (``Ctrl+a d``). For more information see: ``_.
Install Bareon and Build Images
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Clone and install bareon on host
.. code-block:: console
cd ~
git clone https://git.openstack.org/openstack/bareon
cd bareon
sudo pip install .
2. Build bareon images
.. code-block:: console
cd ~/bareon
sudo yum install diskimage-builder
./bareon/tests_functional/image_build/centos_minimal.sh
.. note::
bareon images will built under /tmp/rft_image_build
3. Build deployment images
.. code-block:: console
./bareon/tests_functional/image_build/sync_golden_images.sh
.. note::
deployment images will built under /tmp/rft_golden_images
4. Put bareon SSH key together with other ironic SSH keys
.. code-block:: console
cp -a /tmp/rft_image_build/bareon_key* ~/data/ironic/ssh_keys/
Register Bareon Images in OpenStack
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Initialise OpenStack credentials
.. code-block:: console
source ~/devstack/openrc admin demo
2. Upload bareon image, kernel, target image and deployment config into glance
.. code-block:: console
export KERNEL=$(eval "$(openstack image create \
-f shell \
--disk-format raw --container-format bare \
--file /tmp/rft_image_build/vmlinuz \
bareon/kernel.1)"; echo $id)
export INITRD=$(eval "$(openstack image create \
-f shell \
--disk-format raw --container-format bare \
--file /tmp/rft_image_build/initramfs \
bareon/initramfs.1)"; echo $id)
export TARGET_IMAGE=$(eval "$(openstack image create \
-f shell \
--disk-format raw --container-format bare \
--file /tmp/rft_golden_images/centos-7.1.1503.fpa_func_test.raw \
local/centos-7.1.1503)"; echo $id)
openstack image create \
--disk-format raw --container-format bare \
deploy_config << 'OPENSTACKEND'
{
"partitions_policy": "clean",
"partitions": [
{
"type": "disk",
"id": {
"type": "name",
"value": "vda"
},
"size": "2048 MiB",
"volumes": [
{
"type": "partition",
"mount": "/",
"file_system": "ext4",
"size": "1536 MiB"
}
]
}
]
}
OPENSTACKEND
3. Update ironic-node settings of the two devstack created ironic nodes. They should be named node-0 and node-1. You can check it via ``ironic node-list``.
.. code-block:: console
for NODE in node-0 node-1; do
ironic node-update $NODE replace driver=bare_rsync_ssh
ironic node-update $NODE add \
driver_info/deploy_kernel=$KERNEL \
driver_info/deploy_ramdisk=$INITRD \
driver_info/bareon_username=root \
driver_info/bareon_key_filename=/opt/stack/data/ironic/ssh_keys/bareon_key
done
4. Create a new OpenStack keypair
.. code-block:: console
mkdir -p ~/auth
(
umask 0477
nova keypair-add bareon-node-access > ~/auth/bareon-node-access
)
Configure Networking (CentOS Only)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Relax network security (don't do it on prodution systems).
.. code-block:: console
sudo sysctl net.bridge.bridge-nf-call-iptables=0
sudo iptables -D INPUT -j REJECT --reject-with=icmp-host-prohibited
2. Fix routing
.. code-block:: console
sudo ip route add 10.0.0.0/26 via \
"$(sudo ip netns exec "$(ip netns | grep '^qrouter-' | head -n1)" ip -oneline a | grep 'inet 172.24.4' | sed -e 's:^.*inet ::' -e 's:/.*$::')"
Deploy Nodes Using Bareon
-------------------------
Deploy node
^^^^^^^^^^^
.. code-block:: console
nova boot \
--flavor baremetal \
--image $TARGET_IMAGE \
--nic net-name=private \
--key-name bareon-node-access \
--meta deploy_config=deploy_config \
bareon-test
Monitor Deployment (Optional)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1. Check when node is being deployed
.. code-block:: console
watch -d -n 1 sudo virsh list --all
2. View console output
.. code-block:: console
sudo tail -F -n 50 ~/data/ironic/logs/_console.log
3. SSH into node
.. code-block:: console
# Get the ip address of the node
openstack server list
ssh centos@
.. note::
Depending on the image deployed on the node, a key may have to manually specified.
The image created by ``./bareon/tests_functional/image_build/centos_minimal.sh``
has a hardcoded public ssh key and so can be accessed as follows:
.. code-block:: console
wget -O ~/auth/id_rsa https://raw.githubusercontent.com/openstack/fuel-main/stable/8.0/bootstrap/ssh/id_rsa
chmod 600 ~/auth/id_rsa
ssh -i ~/auth/id_rsa centos@
Troubleshooting
---------------
Unable to Delete Node
^^^^^^^^^^^^^^^^^^^^^
If it is not possible to reset the node using the Nova/Ironic CLI, then editing the database can be
performed as a last resort
.. code-block:: console
mysql << 'MYSQLEND'
use ironic;
update nodes set provision_state='deploy failed' where id='';
MYSQLEND
ironic node-set-provision-state $NODE_ID deleted
Hardware Virtualisation
^^^^^^^^^^^^^^^^^^^^^^^
Check that the appropriate kernel modules are loaded for virtualisation.
.. code-block:: console
modprobe kvm
# depending on the cpu either:
modprobe kvm-intel
modprobe kvm-amd
# check output
lsmod | grep kvm