Arif’s Scratch Pad

Openstack Lab – Part 1: xCAT

Before I start, the contents of all files mentioned in this blog are available at (https://gitlab.arif-ali.co.uk/arif/openstack-lab). Also my assumption is that you would have some knowledge of most of the components in OpenStack. Finally, this will be in a few parts so that there’s not as much to take on

Over the past few months, I have been evaluating OpenStack, and trying a few things in a Proof of Concept(PoC) environment, to see how we can use this in the future. I came through many challenges and hurdles, but finally I got the core components working recently.

I first started working OpenStack in October 2013, evaluating at the time the Havana release, and decided that I would go through the manual process of defining the OpenStack environment. This proved very challenging to say the least, although I managed to get it working mostly as a 2 node Controller/Nova setup

With work getting busy, the PoC got distracted, and therefore having a 6 month gap. I then discovered RDO, and decided to use this for my new environment with CentOS 7 and 9 physical machines.

My environment includes the first physical machine (stackmaster) to be my provisioning machine, which uses xCAT 2.8.5, which is an OpenSource provisioning system developed and maintained by IBM. I will assume, that a basic installation of xCAT is done as per the Quick Start Guide

The hostnames/IPs I will be using are listed below

Nodename Function External IP Management IP
stackmaster xCAT Management Node 192.168.95.200 10.0.0.201
stack01 OpenStack Controller Node 192.168.80.1 10.0.0.1
stack02 OpenStack Controller Node 192.168.80.2 10.0.0.2
stack03 Openstack Controller Node 192.168.80.3 10.0.0.3
stack04 Openstack Nova Node 192.168.80.4 10.0.0.4
stack05 Openstack Nova Node 192.168.80.5 10.0.0.5
stack06 Openstack Nova Node 192.168.80.6 10.0.0.6
stack07 Openstack Nova Node 192.168.80.7 10.0.0.7
stack08 Openstack Nova Node 192.168.80.8 10.0.0.8
stack09 Openstack Nova Node 192.168.80.9 10.0.0.9

So the initial stage was to synchronise the repositories that I was going to need, for example my environment being CentOS 7, I needed the following repositories downloaded

The base repository for CentOS 7 was done automatically by the copycds command in xCAT, so we didn’t need to worry about that one, this is usually found in /install/centos7.0/x86_64

A new directory was created on stackmaster in /install/post/otherpkgs/repos. We synchronised the repositories, using the reposync command, this required .repo files located in an arbitrary directory. We decided that to be /etc/reposync.repos.d. We need yum.conf that points to new directory, so copying /etc/yum.conf to /etc/reposync.repos.d/yum.conf, with the relevant changes, i.e. the reposdir variable to be changed to /etc/reposync.repos.d

A new script in /install/post/otherpkgs/repos/createrepo.sh was created that synchronised the repos, and runs the createrepo command to create yum repositories. Note if you don’t have the bandwidth, and the space, don’t do this, as this may take a few hours to days, depending on your connection. The total space required for this is approx 17G.

For the purpose of xCAT, we created the following symlinks in /install/post/otherpkgs/el7

1
2
3
4
5
6
7
8
9
cd /install/post/otherpkgs/el7
ln -s ../repos/epel-7 epel
ln -s ../repos/extras-7 extra
ln -s ../repos/puppet-7 puppet
ln -s ../repos/rdo-openstack-epel-7 rdo-openstack
ln -s ../repos/rdo-openstack-juno-epel-7 rdo-openstack-juno

cd /install/centos7.0/updates/
ln -s ../../post/otherpkgs/repos/updates-7 x86_64

The osimages from the repo can be downloaded, which in turn can be added to xCAT by using the following command.

1
cat c7-os.osimage | chdef -z

To confirm that the osimage has been imported correctly, you can run the following command

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@stackmaster ~]# lsdef -t osimage c7-os
Object name: c7-os
    imagetype=linux
    osarch=x86_64
    osname=Linux
    osvers=centos7.0
    otherpkgdir=/install/post/otherpkgs/el7
    otherpkglist=/install/templates/c7-os/controller.otherpkgs.pkglist
    partitionfile=/install/templates/c7-os/controller.partfile
    pkgdir=/install/centos7.0/x86_64,/install/centos7.0/updates/x86_64
    pkglist=/install/templates/c7-os/controller.pkglist
    postbootscripts=setup_extnw -n stack_pub,configOvsBridge bridgeprereq enp2s1f1:br-ex,packstack-openstack,add_glance_images
    postscripts=confignics,hardeths
    profile=controller
    provmethod=install
    synclists=/install/templates/c7-os/controller.synclist
    template=/install/templates/c7-os/common.tmpl

Then we create the directory required for the templates

1
mkdir /install/templates

then copy the contents of the xcat directory to /install/templates, the contents looking like below

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
./c6-os
./c6-os/controller.pkglist
./c6-os/controller.partfile
./c6-os/nova.pkglist
./c6-os/nova.otherpkgs.pkglist
./c6-os/nova.partfile
./c6-os/controller.otherpkgs.pkglist
./c7-os
./c7-os/nova.juno.otherpkgs.pkglist
./c7-os/common.tmpl
./c7-os/controller.pkglist
./c7-os/controller.partfile
./c7-os/nova.pkglist
./c7-os/nova.otherpkgs.pkglist
./c7-os/controller.juno.otherpkgs.pkglist
./c7-os/nova.partfile
./c7-os/controller.otherpkgs.pkglist

Once the files have been synchronised, we can install the controller node, by running the following command

1
rinstall stack01 -O c7-os

The node should take approximately 20 mins to install. This should install the base OS with all the updates for the OS, and then finally after boot it will install all the openstack packages defined in the controller.otherpkgs.pkglist.

We will look at installing and configuration of Packstack in the next part. Stay Tuned.

If you have any questions or comments, then you can contact me on IRC arif-ali at freenode