Installing a 4 node Fedora 18 OpenStack Folsom cluster with PackStack
For a few months now Derek has been working on a tool called PackStack, which aims to facilitate & automate the deployment of OpenStack services. Most of the time I’ve used DevStack for deploying OpenStack, but this is not at all suitable for doing production quality deployments. I’ve also done production deployments from scratch following the great Fedora instructions. The latter work but require the admin to do far too much tedious legwork and know too much about OpenStack in general. This is where PackStack comes in. It starts from the assumption that the admin knows more or less nothing about how the OpenStack tools work. All they need do is decide which services they wish to deploy on each machine. With that answered PackStack goes off and does the work to make it all happen. Under the hood PackStack does its work by connecting to each machine over SSH, and using Puppet to deploy/configure the services on each one. By leveraging puppet, PackStack itself is mostly isolated from the differences between various Linux distros. Thus although PackStack has been developed on RHEL and Fedora, it should be well placed for porting to other distros like Debian & I hope we’ll see that happen in the near future. It will be better for the OpenStack community to have a standard tool that is portable across all target distros, than the current situation where pretty much ever distributor of OpenStack has reinvented the wheel building their own private tooling for deployment. This is why PackStack is being developed as an upstream project, hosted on StackForge rather than as a Red Hat only private project.
Preparing the virtual machines
Anyway back to the point of this blog post. Having followed PackStack progress for a while I decided it was time to actually try it out for real. While I have a great many development machines, I don’t have enough free to turn into an OpenStack cluster, so straight away I decided to do my test deployment inside a set of Fedora 18 virtual machines, running on a Fedora 18 KVM host.
The current PackStack network support requires that you have 2 network interfaces. For an all-in-one box deployment you only actually need one physical NIC for the public interface – you can use ‘lo’ for the private interface on which VMs communicate with each other. I’m doing a multi-node deployment though, so my first step was to decide how to provide networking to my VMs. A standard libvirt install will provide a default NAT based network, using the virbr0 bridge device. This will serve just fine as the public interface over which we can communicate with the OpenStack services & their REST / Web APIs. For VM traffic, I decided to create a second libvirt network on the host machine.
# cat > openstackvms.xml <<EOF <network> <name>openstackvms</name> <bridge name='virbr1' stp='off' delay='0' /> </network> EOF # virsh net-define openstackvms.xml Network openstackvms defined from openstackvms.xml # virsh net-start openstackvms Network openstackvms started EOF
Next up, I installed a single Fedora 18 guest machine, giving it two network interfaces, the first attached to the ‘default’ libvirt network, and the second attached to the ‘openstackvms’ virtual network.
# virt-install --name f18x86_64a --ram 1000 --file /var/lib/libvirt/images/f18x86_64a.img \ --location http://www.mirrorservice.org/sites/dl.fedoraproject.org/pub/fedora/linux/releases/18/Fedora/x86_64/os/ \ --noautoconsole --vnc --file-size 10 --os-variant fedora18 \ --network network:default --network network:openstackvms
In the installer, I used the defaults for everything with two exceptions. I select the “Minimal install” instead of “GNOME Desktop”, and I reduced the size of the swap partition from 2 GB, to 200 MB – it the VM ever needed more than a few 100 MB of swap, then it is pretty much game over for responsiveness of that VM. A minimal install is very quick, taking only 5 minutes or so to completely install the RPMs – assuming good download speeds from the install mirror chosen. Now I need to turn that one VM into 4 VMs. For this I looked to the virt-clone tool. This is a fairly crude tool which merely does a copy of each disk image, and then updates the libvirt XML for the guest to given it a new UUID and MAC address. It doesn’t attempt to change anything inside the guest, but for a F18 minimal install this is not a significant issue.
# virt-clone -o f18x86_64a -n f18x86_64b -f /var/lib/libvirt/images/f18x86_64b.img Allocating 'f18x86_64b.img' | 10 GB 00:01:20 Clone 'f18x86_64b' created successfully. # virt-clone -o f18x86_64a -n f18x86_64c -f /var/lib/libvirt/images/f18x86_64c.img Allocating 'f18x86_64c.img' | 10 GB 00:01:07 Clone 'f18x86_64c' created successfully. # virt-clone -o f18x86_64a -n f18x86_64d -f /var/lib/libvirt/images/f18x86_64d.img Allocating 'f18x86_64d.img' | 10 GB 00:00:59 Clone 'f18x86_64d' created successfully.
I don’t fancy having to remember the IP address of each of the virtual machines I installed, so I decided to setup some fixed IP address mappings in the libvirt default network, and add aliases to /etc/hosts
# virsh net-destroy default # virsh net-edit default ...changing the following... <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.254' /> </dhcp> </ip> ...to this... <ip address='192.168.122.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.2' end='192.168.122.99' /> <host mac='52:54:00:fd:e7:03' name='f18x86_64a' ip='192.168.122.100' /> <host mac='52:54:00:c4:b7:f6' name='f18x86_64b' ip='192.168.122.101' /> <host mac='52:54:00:81:84:d6' name='f18x86_64c' ip='192.168.122.102' /> <host mac='52:54:00:6a:9b:1a' name='f18x86_64d' ip='192.168.122.102' /> </dhcp> </ip> # cat >> /etc/hosts <<EOF 192.168.122.100 f18x86_64a 192.168.122.101 f18x86_64b 192.168.122.102 f18x86_64c 192.168.122.103 f18x86_64d EOF # virsh net-start default
Now we’re ready to actually start the virtual machines
# virsh start f18x86_64a Domain f18x86_64a started # virsh start f18x86_64b Domain f18x86_64b started # virsh start f18x86_64c Domain f18x86_64c started # virsh start f18x86_64d Domain f18x86_64d started # virsh list Id Name State ---------------------------------------------------- 25 f18x86_64a running 26 f18x86_64b running 27 f18x86_64c running 28 f18x86_64d running
Deploying OpenStack with PackStack
All of the above is really nothing todo with OpenStack or PackStack – it is just about me getting some virtual machines ready to act as the pretend “physical servers”. The interesting stuff starts now. PackStack doesn’t need to be installed in the machines that will receive the OpenStack install, but rather on any client machine which has SSH access to the target machines. In my case I decided to run packstack from the physical host running the VMs I just provisioned.
# yum -y install openstack-packstack
While PackStack is happy to prompt you with questions, it is far simpler to just use an answer file straight away. It lets you see upfront everything that is required and will make it easy for you repeat the exercise later.
$ packstack --gen-answer-file openstack.txt
The answer file tries to fill in sensible defaults, but there’s not much it can do for IP addresses. So it just fills in the IP address of the host on which it was generated. This is suitable if you’re doing an all-in-one install on the current machine, but not for doing a multi-node install. So the next step is to edit the answer file and customize at least the IP addresses. I have decided that f18x86_64a will be the Horizon frontend and host the user facing APIs from glance/keystone/nova/etc, f18x86_64b will provide QPid, MySQL, Nova schedular and f18x86_64c and f18x86_64d will be compute nodes and swift storage nodes (though I haven’t actually enabled swift in the config).
$ emacs openstack.txt ...make IP address changes...
So you can see what I changed, here is the unified diff
--- openstack.txt 2013-03-01 12:41:31.226476407 +0000 +++ openstack-custom.txt 2013-03-01 12:51:53.877073871 +0000 @@ -4,7 +4,7 @@ # been installed on the remote servers the user will be prompted for a # password and this key will be installed so the password will not be # required again -CONFIG_SSH_KEY= +CONFIG_SSH_KEY=/home/berrange/.ssh/id_rsa.pub # Set to 'y' if you would like Packstack to install Glance CONFIG_GLANCE_INSTALL=y @@ -34,7 +34,7 @@ CONFIG_NAGIOS_INSTALL=n # The IP address of the server on which to install MySQL -CONFIG_MYSQL_HOST=10.33.8.113 +CONFIG_MYSQL_HOST=192.168.122.101 # Username for the MySQL admin user CONFIG_MYSQL_USER=root @@ -43,10 +43,10 @@ CONFIG_MYSQL_PW=5612a75877464b70 # The IP address of the server on which to install the QPID service -CONFIG_QPID_HOST=10.33.8.113 +CONFIG_QPID_HOST=192.168.122.101 # The IP address of the server on which to install Keystone -CONFIG_KEYSTONE_HOST=10.33.8.113 +CONFIG_KEYSTONE_HOST=192.168.122.100 # The password to use for the Keystone to access DB CONFIG_KEYSTONE_DB_PW=297088140caf407e @@ -58,7 +58,7 @@ CONFIG_KEYSTONE_ADMIN_PW=342cc8d9150b4662 # The IP address of the server on which to install Glance -CONFIG_GLANCE_HOST=10.33.8.113 +CONFIG_GLANCE_HOST=192.168.122.100 # The password to use for the Glance to access DB CONFIG_GLANCE_DB_PW=a1d8435d61fd4ed2 @@ -83,25 +83,25 @@ # The IP address of the server on which to install the Nova API # service -CONFIG_NOVA_API_HOST=10.33.8.113 +CONFIG_NOVA_API_HOST=192.168.122.100 # The IP address of the server on which to install the Nova Cert # service -CONFIG_NOVA_CERT_HOST=10.33.8.113 +CONFIG_NOVA_CERT_HOST=192.168.122.100 # The IP address of the server on which to install the Nova VNC proxy -CONFIG_NOVA_VNCPROXY_HOST=10.33.8.113 +CONFIG_NOVA_VNCPROXY_HOST=192.168.122.100 # A comma separated list of IP addresses on which to install the Nova # Compute services -CONFIG_NOVA_COMPUTE_HOSTS=10.33.8.113 +CONFIG_NOVA_COMPUTE_HOSTS=192.168.122.102,192.168.122.103 # Private interface for Flat DHCP on the Nova compute servers CONFIG_NOVA_COMPUTE_PRIVIF=eth1 # The IP address of the server on which to install the Nova Network # service -CONFIG_NOVA_NETWORK_HOST=10.33.8.113 +CONFIG_NOVA_NETWORK_HOST=192.168.122.101 # The password to use for the Nova to access DB CONFIG_NOVA_DB_PW=f67f9f822a934509 @@ -116,14 +116,14 @@ CONFIG_NOVA_NETWORK_PRIVIF=eth1 # IP Range for Flat DHCP -CONFIG_NOVA_NETWORK_FIXEDRANGE=192.168.32.0/22 +CONFIG_NOVA_NETWORK_FIXEDRANGE=192.168.123.0/24 # IP Range for Floating IP's -CONFIG_NOVA_NETWORK_FLOATRANGE=10.3.4.0/22 +CONFIG_NOVA_NETWORK_FLOATRANGE=192.168.124.0/24 # The IP address of the server on which to install the Nova Scheduler # service -CONFIG_NOVA_SCHED_HOST=10.33.8.113 +CONFIG_NOVA_SCHED_HOST=192.168.122.101 # The overcommitment ratio for virtual to physical CPUs. Set to 1.0 # to disable CPU overcommitment @@ -131,20 +131,20 @@ # The overcommitment ratio for virtual to physical RAM. Set to 1.0 to # disable RAM overcommitment -CONFIG_NOVA_SCHED_RAM_ALLOC_RATIO=1.5 +CONFIG_NOVA_SCHED_RAM_ALLOC_RATIO=10 # The IP address of the server on which to install the OpenStack # client packages. An admin "rc" file will also be installed -CONFIG_OSCLIENT_HOST=10.33.8.113 +CONFIG_OSCLIENT_HOST=192.168.122.100 # The IP address of the server on which to install Horizon -CONFIG_HORIZON_HOST=10.33.8.113 +CONFIG_HORIZON_HOST=192.168.122.100 # To set up Horizon communication over https set this to "y" CONFIG_HORIZON_SSL=n # The IP address on which to install the Swift proxy service -CONFIG_SWIFT_PROXY_HOSTS=10.33.8.113 +CONFIG_SWIFT_PROXY_HOSTS=192.168.122.100 # The password to use for the Swift to authenticate with Keystone CONFIG_SWIFT_KS_PW=aec1c74ec67543e7 @@ -155,7 +155,7 @@ # on 127.0.0.1 as a swift storage device(packstack does not create the # filesystem, you must do this first), if /dev is omitted Packstack # will create a loopback device for a test setup -CONFIG_SWIFT_STORAGE_HOSTS=10.33.8.113 +CONFIG_SWIFT_STORAGE_HOSTS=192.168.122.102,192.168.122.103 # Number of swift storage zones, this number MUST be no bigger than # the number of storage devices configured @@ -223,7 +223,7 @@ CONFIG_SATELLITE_PROXY_PW= # The IP address of the server on which to install the Nagios server -CONFIG_NAGIOS_HOST=10.33.8.113 +CONFIG_NAGIOS_HOST=192.168.122.100 # The password of the nagiosadmin user on the Nagios server CONFIG_NAGIOS_PW=7e787e71ff18462c
The current version of PackStack in Fedora mistakenly assumes that ‘net-tools’ is installed by default in Fedora. This used to be the case, but as of Fedora 18 it is not longer installed. Upstream PackStack git has switched from using ifconfig to ip, to avoid this. So for F18 we temporarily need to make sure the ‘net-tools’ RPM is installed in each host. In addition the SELinux policy has not been finished for all openstack components, so we need to set it to permissive mode.
$ ssh root@f18x86_64a setenforce 0 $ ssh root@f18x86_64b setenforce 0 $ ssh root@f18x86_64c setenforce 0 $ ssh root@f18x86_64d setenforce 0 $ ssh root@f18x86_64a yum -y install net-tools $ ssh root@f18x86_64b yum -y install net-tools $ ssh root@f18x86_64c yum -y install net-tools $ ssh root@f18x86_64d yum -y install net-tools
Assuming that’s done, we can now just run packstack
# packstack --answer-file openstack-custom.txt Welcome to Installer setup utility Installing: Clean Up... [ DONE ] Setting up ssh keys... [ DONE ] Adding pre install manifest entries... [ DONE ] Adding MySQL manifest entries... [ DONE ] Adding QPID manifest entries... [ DONE ] Adding Keystone manifest entries... [ DONE ] Adding Glance Keystone manifest entries... [ DONE ] Adding Glance manifest entries... [ DONE ] Adding Cinder Keystone manifest entries... [ DONE ] Checking if the Cinder server has a cinder-volumes vg... [ DONE ] Adding Cinder manifest entries... [ DONE ] Adding Nova API manifest entries... [ DONE ] Adding Nova Keystone manifest entries... [ DONE ] Adding Nova Cert manifest entries... [ DONE ] Adding Nova Compute manifest entries... [ DONE ] Adding Nova Network manifest entries... [ DONE ] Adding Nova Scheduler manifest entries... [ DONE ] Adding Nova VNC Proxy manifest entries... [ DONE ] Adding Nova Common manifest entries... [ DONE ] Adding OpenStack Client manifest entries... [ DONE ] Adding Horizon manifest entries... [ DONE ] Preparing servers... [ DONE ] Adding post install manifest entries... [ DONE ] Installing Dependencies... [ DONE ] Copying Puppet modules and manifests... [ DONE ] Applying Puppet manifests... Applying 192.168.122.100_prescript.pp Applying 192.168.122.101_prescript.pp Applying 192.168.122.102_prescript.pp Applying 192.168.122.103_prescript.pp 192.168.122.101_prescript.pp : [ DONE ] 192.168.122.103_prescript.pp : [ DONE ] 192.168.122.100_prescript.pp : [ DONE ] 192.168.122.102_prescript.pp : [ DONE ] Applying 192.168.122.101_mysql.pp Applying 192.168.122.101_qpid.pp 192.168.122.101_mysql.pp : [ DONE ] 192.168.122.101_qpid.pp : [ DONE ] Applying 192.168.122.100_keystone.pp Applying 192.168.122.100_glance.pp Applying 192.168.122.101_cinder.pp 192.168.122.100_keystone.pp : [ DONE ] 192.168.122.100_glance.pp : [ DONE ] 192.168.122.101_cinder.pp : [ DONE ] Applying 192.168.122.100_api_nova.pp 192.168.122.100_api_nova.pp : [ DONE ] Applying 192.168.122.100_nova.pp Applying 192.168.122.102_nova.pp Applying 192.168.122.103_nova.pp Applying 192.168.122.101_nova.pp Applying 192.168.122.100_osclient.pp Applying 192.168.122.100_horizon.pp 192.168.122.101_nova.pp : [ DONE ] 192.168.122.100_nova.pp : [ DONE ] 192.168.122.100_osclient.pp : [ DONE ] 192.168.122.100_horizon.pp : [ DONE ] 192.168.122.103_nova.pp : [ DONE ] 192.168.122.102_nova.pp : [ DONE ] Applying 192.168.122.100_postscript.pp Applying 192.168.122.101_postscript.pp Applying 192.168.122.103_postscript.pp Applying 192.168.122.102_postscript.pp 192.168.122.100_postscript.pp : [ DONE ] 192.168.122.103_postscript.pp : [ DONE ] 192.168.122.101_postscript.pp : [ DONE ] 192.168.122.102_postscript.pp : [ DONE ] [ DONE ] **** Installation completed successfully ****** (Please allow Installer a few moments to start up.....) Additional information: * Time synchronization installation was skipped. Please note that unsynchronized time on server instances might be problem for some OpenStack components. * Did not create a cinder volume group, one already existed * To use the command line tools you need to source the file /root/keystonerc_admin created on 192.168.122.100 * To use the console, browse to http://192.168.122.100/dashboard * The installation log file is available at: /var/tmp/packstack/20130301-135443-qbNvvH/openstack-setup.log
That really is it – you didn’t need to touch any config files for OpenStack, QPid, MySQL or any other service involved. PackStack just worked its magic and there is now a 4 node OpenStack cluster up and running. One of the nice things about PackStack using Puppet for all its work, is that if something goes wrong 1/2 way through, you don’t need to throw it all away – just fix the issue and re-run packstack and it’ll do whatever work was left over from before.
The results
Lets see what’s running on each node. First the frontend user facing node
$ ssh root@f18x86_64a ps -ax PID TTY STAT TIME COMMAND 1 ? Ss 0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 14 283 ? Ss 0:00 /usr/lib/systemd/systemd-udevd 284 ? Ss 0:07 /usr/lib/systemd/systemd-journald 348 ? S 0:00 /usr/lib/systemd/systemd-udevd 391 ? Ss 0:06 /usr/bin/python -Es /usr/sbin/firewalld --nofork 392 ? S<sl 0:00 /sbin/auditd -n 394 ? Ss 0:00 /usr/lib/systemd/systemd-logind 395 ? Ssl 0:00 /sbin/rsyslogd -n -c 5 397 ? Ssl 0:01 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 403 ? Ss 0:00 login -- root 411 ? Ss 0:00 /usr/sbin/crond -n 417 ? S 0:00 /usr/lib/systemd/systemd-udevd 418 ? Ssl 0:01 /usr/sbin/NetworkManager --no-daemon 452 ? Ssl 0:00 /usr/lib/polkit-1/polkitd --no-debug 701 ? S 0:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-4d0e96db-64cd-41d3-a9c3-c584da37dd84-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0 769 ? Ss 0:00 /usr/sbin/sshd -D 772 ? Ss 0:00 sendmail: accepting connections 792 ? Ss 0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue 800 tty1 Ss+ 0:00 -bash 8702 ? Ss 0:00 /usr/bin/python /usr/bin/glance-registry --config-file /etc/glance/glance-registry.conf 8745 ? S 0:00 /usr/bin/python /usr/bin/glance-registry --config-file /etc/glance/glance-registry.conf 8764 ? Ss 0:00 /usr/bin/python /usr/bin/glance-api --config-file /etc/glance/glance-api.conf 10030 ? Ss 0:01 /usr/bin/python /usr/bin/keystone-all --config-file /etc/keystone/keystone.conf 10201 ? S 0:00 /usr/bin/python /usr/bin/glance-api --config-file /etc/glance/glance-api.conf 13096 ? Ss 0:01 /usr/bin/python /usr/bin/nova-api --config-file /etc/nova/nova.conf --logfile /var/log/nova/api.log 13103 ? S 0:00 /usr/bin/python /usr/bin/nova-api --config-file /etc/nova/nova.conf --logfile /var/log/nova/api.log 13111 ? S 0:00 /usr/bin/python /usr/bin/nova-api --config-file /etc/nova/nova.conf --logfile /var/log/nova/api.log 13120 ? S 0:00 /usr/bin/python /usr/bin/nova-api --config-file /etc/nova/nova.conf --logfile /var/log/nova/api.log 13484 ? Ss 0:05 /usr/bin/python /usr/bin/nova-consoleauth --config-file /etc/nova/nova.conf --logfile /var/log/nova/consoleauth.log 20354 ? Ss 0:00 python /usr/bin/nova-novncproxy --web /usr/share/novnc/ 20429 ? Ss 0:03 /usr/bin/python /usr/bin/nova-cert --config-file /etc/nova/nova.conf --logfile /var/log/nova/cert.log 21035 ? Ssl 0:00 /usr/bin/memcached -u memcached -p 11211 -m 922 -c 8192 -l 0.0.0.0 -U 11211 -t 1 21311 ? Ss 0:00 /usr/sbin/httpd -DFOREGROUND 21312 ? Sl 0:00 /usr/sbin/httpd -DFOREGROUND 21313 ? S 0:00 /usr/sbin/httpd -DFOREGROUND 21314 ? S 0:00 /usr/sbin/httpd -DFOREGROUND 21315 ? S 0:00 /usr/sbin/httpd -DFOREGROUND 21316 ? S 0:00 /usr/sbin/httpd -DFOREGROUND 21317 ? S 0:00 /usr/sbin/httpd -DFOREGROUND 21632 ? S 0:00 /usr/sbin/httpd -DFOREGROUND
Now the infrastructure node
$ ssh root@f18x86_64b ps -ax PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 289 ? Ss 0:00 /usr/lib/systemd/systemd-udevd 290 ? Ss 0:05 /usr/lib/systemd/systemd-journald 367 ? S 0:00 /usr/lib/systemd/systemd-udevd 368 ? S 0:00 /usr/lib/systemd/systemd-udevd 408 ? Ss 0:04 /usr/bin/python -Es /usr/sbin/firewalld --nofork 409 ? S<sl 0:00 /sbin/auditd -n 411 ? Ss 0:00 /usr/lib/systemd/systemd-logind 412 ? Ssl 0:00 /sbin/rsyslogd -n -c 5 414 ? Ssl 0:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 419 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 38400 linux 429 ? Ss 0:00 /usr/sbin/crond -n 434 ? Ssl 0:01 /usr/sbin/NetworkManager --no-daemon 484 ? Ssl 0:00 /usr/lib/polkit-1/polkitd --no-debug 717 ? S 0:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-2c0f596e-002a-49b0-b3f6-5e228601e7ba-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0 766 ? Ss 0:00 sendmail: accepting connections 792 ? Ss 0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue 805 ? Ss 0:00 /usr/sbin/sshd -D 8531 ? Ss 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr 8884 ? Sl 0:15 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock --port=3306 9778 ? Ssl 0:01 /usr/sbin/qpidd --config /etc/qpidd.conf 10004 ? S< 0:00 [loop2] 13381 ? Ss 0:02 /usr/sbin/tgtd -f 14831 ? Ss 0:00 /usr/bin/python /usr/bin/cinder-api --config-file /etc/cinder/cinder.conf --logfile /var/log/cinder/api.log 14907 ? Ss 0:04 /usr/bin/python /usr/bin/cinder-scheduler --config-file /etc/cinder/cinder.conf --logfile /var/log/cinder/scheduler.log 14956 ? Ss 0:02 /usr/bin/python /usr/bin/cinder-volume --config-file /etc/cinder/cinder.conf --logfile /var/log/cinder/volume.log 15516 ? Ss 0:06 /usr/bin/python /usr/bin/nova-scheduler --config-file /etc/nova/nova.conf --logfile /var/log/nova/scheduler.log 15609 ? Ss 0:08 /usr/bin/python /usr/bin/nova-network --config-file /etc/nova/nova.conf --logfile /var/log/nova/network.log
And finally one of the 2 compute nodes
$ ssh root@f18x86_64c ps -ax PID TTY STAT TIME COMMAND 1 ? Ss 0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 21 315 ? Ss 0:00 /usr/lib/systemd/systemd-udevd 317 ? Ss 0:04 /usr/lib/systemd/systemd-journald 436 ? Ss 0:05 /usr/bin/python -Es /usr/sbin/firewalld --nofork 437 ? S<sl 0:00 /sbin/auditd -n 439 ? Ss 0:00 /usr/lib/systemd/systemd-logind 440 ? Ssl 0:00 /sbin/rsyslogd -n -c 5 442 ? Ssl 0:00 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation 454 ? Ss 0:00 /usr/sbin/crond -n 455 tty1 Ss+ 0:00 /sbin/agetty --noclear tty1 38400 linux 465 ? S 0:00 /usr/lib/systemd/systemd-udevd 466 ? S 0:00 /usr/lib/systemd/systemd-udevd 470 ? Ssl 0:01 /usr/sbin/NetworkManager --no-daemon 499 ? Ssl 0:00 /usr/lib/polkit-1/polkitd --no-debug 753 ? S 0:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-ada59d24-375c-481e-bd57-ce0803ac5574-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0 820 ? Ss 0:00 sendmail: accepting connections 834 ? Ss 0:00 sendmail: Queue runner@01:00:00 for /var/spool/clientmqueue 846 ? Ss 0:00 /usr/sbin/sshd -D 9749 ? Ssl 0:13 /usr/sbin/libvirtd 16060 ? Sl 0:01 /usr/bin/python -Es /usr/sbin/tuned -d 16163 ? Ssl 0:03 /usr/bin/python /usr/bin/nova-compute --config-file /etc/nova/nova.conf --logfile /var/log/nova/compute.log
All-in-all PackStack exceeded my expectations for such a young tool – it did a great job with minimum of fuss and was nice & reliable at what it did too. The only problem I hit was forgetting to set SELinux permissive first, which was not its fault – this is a bug in Fedora policy we will be addressing – and it recovered from that just fine when I re-ran it after setting permissive mode.