diff --git a/doc/source/bareon_on_devstack.rst b/doc/source/bareon_on_devstack.rst new file mode 100644 index 0000000..ea1553a --- /dev/null +++ b/doc/source/bareon_on_devstack.rst @@ -0,0 +1,480 @@ +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 -y + yum install -y 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 -y 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