After exploring many new technical topics over the past few months, including Docker and Kubernetes, I ventured out over the weekend to have a look at OpenStack. I wanted to have a closer look because OpenStack is used to provide a private cloud infrastructure, i.e. virtual machines (compute), storage, and networking for many projects. OpenStack is also used by some public cloud providers such as Rackspace or OVH, who seems to run many data centers all around the world with it. With such a strong backing, I assumed that it should be fairly easy to get the necessary information to setup up a basic installation. What followed was a day of trial, error and frustration.
Personally, I don’t need OpenStack to administer the 25 or so virtual machines that run on four servers in my private cloud at home. KVM, Virt-Manager and Virtualbox do the job very nicely, because I’m the only person changing the setup, so no synchronization with others is needed. What I wanted to explore, however, were the basics of how to use OpenStack in a medium sized technology company to provide compute, storage and networking resources. In such a setup, several employees create, use and recycle virtual machines on a daily basis. To be flexible, people use OpenStack’s web interface to spin up the virtual machines they require on their own and the system automatically selects a bare metal sever that has capacity for their configuration and ties the required storage and networking to their setup. No interaction with an administrator or co-workers is required. Furthermore, OpenStack provides an API for automation, so virtual machines could be automatically created, used and discarded in an automated ‘continuous integration / continuous delivery’ (CI/CD) tool-chain. In other words, I wanted to explore a setup in practice that provides the same services in a small private cloud as hyperscalers provide on a global scale to customers.
How Hard Can It Be – Part 1?
The first approach I took was to install Canonical’s Microstack snap package to get an OpenStack installation up and running on a Ubuntu 20.04 notebook with 16 GB RAM. The website with the tutorial looks rather nice and the setup only requires a couple of shell commands and a half an hour of patience until everything is installed. And indeed, I was delighted at first because everything worked out of the box and I could do exactly what the tutorial described: Create and launch virtual machines from the command line and explore the setup in a Web interface. So far, so good. But when I wanted to take the next logical step and create a new VM on the OpenStack Web Interface, I just got obscure error message (see screenshot above). Also, while I could ssh into the VM setup, it had no Internet connectivity. Trying to change this on the web interface also ended up in obscure error messages. Unfortunately, the tutorial did not explain this part and the Internet also provided no answers. So I thought it must be an issue with my setup, even though snap packages require little from the outside host., So I ventured on and tried other options.
How Hard Can It Be – Part 2?
Next, I used the beginners tutorial on the OpenStack web page to get a DevStack system up and running in a virtual machine on my cloud server at home. As the tutorial described, the setup can run virtual machines in virtual machines, albeit slowly. But speed was not my goal and such a setup can quickly be clean-up. The tutorial recommended an Ubuntu 18.04 VM setup, which is what I used. It seems I didn’t have enough storage, however, so the installation process terminated with strange error messages around 30 minutes into the procedure with only 2 GB of disk storage left. My mistake perhaps, but frustrating.
How Hard Can It Be? – Part 3
Next, I tried the same approach again with enough storage. Instead of using a VM on my KVM based system at home, I ventured into Hetzner’s public cloud and rented a VM with enough storage attached. This worked a lot better and after about 20-30 minutes, the installation process terminated successfully. Even better, I could create virtual machines with OpenStack’s web interface and I could access the shell of the VMs from a simulated shell in the GUI. However, whatever I tried, I could not ssh into the VMs from the outside and the VMs did not bring up the Ethernet interface correctly. After lots of trial and error, I finally found a checkbox in the ‘Networks’ section of the GUI to enable DHCP for the subnet used by the VM. That finally brought the floating-IP into the VM. Now I could ping the outside world but DNS resolution still didn’t work. Manually changing /etc/resolv.conf in the VM fixed this problem as well. But still, I could not SSH into the VM from the outside so something was still in the way. Next, I rebooted the system just for the fun of it. Afterward, nothing worked anymore and the syslog got flooded with error messages of several OpenStack components. One could run a cleanup and restart script after which things were working again. However, that took just as long as setting-up OpenStack on a fresh system again. Perhaps it’s me, but I find it odd to get a ‘works out of the box’ system that misconfigures the VMs and is not even able to survive a reboot.
How Hard Can It Be? – Part 4
So perhaps it’s Ubuntu 18.04? I thus tried the same exercise again with a VM at home running Ubuntu 20.04 with enough storage this time. After half an-hour, the installation terminated successfully. Like on the VM in the public cloud, basic VM creation and instantiation worked but I could again not access the VM via SSH. Also I had to use the same tricks to get Internet connectivity inside the VM working as before. Also, pausing the VM for a couple of hours had a similar effect than rebooting: Nothing worked anymore. At this point I came to the cautious conclusion that no, it’s probably not me…
How Hard Can It Be? – Part 5
All right, I thought, let’s go back to Canonical’s Microstack approach and use a fresh Ubuntu 20.04 server installation instead of a workstation variant. After all, Canonical says Microstack is not only suited for testing things but for small edge-clouds and IoT applications. It’s even possible to add additional compute nodes to the single control/compute node combination. After installing Ubuntu 20.04 server I ran the snap commands again as per Canonical’s tutorial. 20 minutes later I had a working installation and could do exactly the same things as in part 1 above: Creating VMs on the command line worked and the VMs were accessible from the outside. However, like in part 1, I could not create and run new VMs from the Web interface. But on the plus side, this setup can be rebooted and it still works.
After one and a half days of trial and error, I have to say that I am underwhelmed with getting a basic OpenStack installation up and running as a novice. True, I can now choose between an installation that let’s me run broken VMs from the GUI but does not survive a restart, or a setup that works and survives reboots, but doesn’t let me use the web interface for much. That’s not what I expected after investing one and a half days of effort. So I’ve you’ve been here before as well and have some good advice, please leave a comment below.