Adventures of a Small Time OpenStack Sysadmin relate the experience of converting a small VMware cluster into two small OpenStack clusters, and the adventures and friends I made along the way.
Adventures of a Small Time OpenStack Sysadmin Chapter 033 - Basic Kolla-Ansible Installation
Here are the main references I used to install the basic Kolla-Ansible system:
https://docs.openstack.org/kolla-ansible/yoga/user/quickstart.html
https://docs.openstack.org/kolla-ansible/yoga/reference/index.html
I'm not going to reword the entire installation process, the docs are pretty good. I'm only going to comment on undocumented or special issues from my installation. Read the official docs, then skim this post, then you're ready.
First thing to note, is I use my LAN Ansible system to install the OS packages listed in the instructions. I began my "for reals" installation at the VENV stage of the instructions.
The docs advise setting some common sense ansible config options, which I agree are good options, but the docs only explain how to set them in a NON-VENV environment. In my VENV environment I put my config options into /root/ansible.cfg and that seems to work.
My specific flavor of Kolla-Ansible was "kolla_base_distro: ubuntu" and "kolla_install_type: source"
After auto-generating my deployment grade passwords, I manually edited the /etc/kolla/passwords.yml file, like "keystone_admin_password", because the default web UI password is, I'm sure, very high security, but also incredibly inconvenient. This will also, BTW, be your "skydive" web user interface password. Ditto for kibana's password.
Remember to edit /etc/kolla/ml2_conf.ini which has the concept of a limited range of VLAN IDs (why not all of them? I don't know?) so I used bond12:1:1000 to imply vlans 1 thru 1000 on interface bond12, although I only use 10,20,30,... up to 60.
The docs, and many or at least some users, strongly encourage editing the single enormous globals.yml file, which seems unmaintainable to me, so I do not edit or comment out ANYTHING in globals.yml (disclaimer see the end of the post), I only override in /etc/kolla/globals.d files with names like neutron.yml.
So, comments about my /etc/kolla/globals.d override files:
kolla_ansible.yml - Don't forget the distro, vip addrs, and keepalived virt router id needs to be different than Cluster 1's keepalived virt router id because they'll be on the same LAN and "fight" each other if they're the same (which is hilarious to watch, although non-productive)
cinder.yml - I enabled the LVM backend, and I use a custom ssd volume group name with swift as my backup driver. I go back and forth on the idea of using NFS or swift (and rclone, etc) as my backup driver. Its so slow I end up not using backups and rely on backing up the NAS and using HEAT/Ansible to deploy new instances faster than I can restore a backup, LOL.
glance.yml - I disable the file backend, and enable the swift backend.
neutron.yml - Lets just say neutron is going to get a VERY long post later on. But initially, remember to set your network_interface, neutron_external_interface, kolla_internal_vip_address. Note that Kolla-Ansible uses OpenVSwitch whereas hand-installed per the instructions use LinuxBridge, so, that was exciting later on.
swift.yml - Remember to set up your rings by hand using something similar to the procedure in:
https://docs.openstack.org/kolla-ansible/yoga/reference/storage/swift-guide.html
although it doesn't have to be that elaborate and complicated. Helpfully the hand rolled install docs, the kolla-ansible docs, and the swift docs all do it somewhat differently, so by looking at all three at once you can get the idea of what's going on quicker than if they all documented the process in a single way.
Bootstrapping bug:
Because I'm not modifying the globals.yml file and am doing all configuration in individual yml files in global.d, that triggers a bug:
https://bugs.launchpad.net/kolla-ansible/+bug/1970638
Instead of setting a dummy variable, I make ONE edit to /etc/globals.yml to set the base distro to ubuntu. Now bootstrapping works without error...
There are certainly a lot of possible targets to the kolla-ansible but mostly all you really have to remember is "bootstrap-servers" "prechecks" "deploy" "post-deploy"
Shockingly, it all pretty much worked on the first day. Cool!
I'm not really into using the demonstration data pack, as I have to extensively edit it to work on my provider network and I end up deleting most of it once I know what I'm doing. However, for complete OpenStack noobs, this is a working config:
/root/kolla-ansible/share/kolla-ansible/init-runonce
Note that Kolla-Ansible is incredibly unbelievably slow, compared to an hand rolled installation. For example, if you have no idea how to set up a provider VLAN id range, if you manually install you'll find docs referencing the ml2_conf.ini file, and you can hand edit that file on a three host cluster and restart services and try it, and the cycle time might be below one minute per experiment, so even if you get lost and confused you can get it up and working in, three, five, maybe ten minutes worst case. Even a blind dog finds a bone once in awhile. However, on Kolla-Ansible, a reconfigure, even on a small cluster with SSDs and 10G ethernet, is going to take maybe a half hour per experimental cycle, so even the simplest task like setting the network_vlan_range might take hours or an entire day unless you already know how to do it. This is not even counting the enormous delays in figuring out in general if you edit /etc/kolla/globals.yml, or /etc/kolla/globals.d/something.yml, or /etc/kolla/neutron/ml2_conf.ini (that doesn't work, BTW), or create a ml2_conf.ini file in /etc/kolla/config or in /etc/kolla/config/neutron, or something else. Eventually you use to learn tags like —tags neutron to save some time, and you learn everything is configured about the same strategy, so what worked in a general sense on Swift, will probably work in a general sense on Neutron WRT file names and things. So, it gets better after awhile.
If you would like to see the files I use to configure my Kolla-Ansible, take a look at the backup directory in:
https://gitlab.com/SpringCitySolutionsLLC/openstack-scripts
That link above is intentionally public because I want people to read it; take a look, poke around, learn something, borrow some ideas. Most importantly, have fun!
Tomorrow, the frustrating adventure of Centralized Logging.