Cloudify Manager is a pretty complex piece of software consisting of over a dozen open source services. These services, such as Nginx, InfluxDB, and PostgreSQL, are all required components to have a properly functioning Cloudify Manager. Feel free to read more about Cloudify’s architecture.
See multi-cloud + container orchestration in action in the Cloudify Lab!
Cloudify previously required a slow and cumbersome bootstrap method of installing a manager by first using a manager blueprint to bring up the infrastructure for a specific cloud and then installing the manager using Cloudify itself. This process could take upwards of 20 minutes to get a manager running.
We then modified the method for installing Cloudify Manager by using only a simple-manager-blueprint which removed some of the complexity from the process. Rather than creating the infrastructure for users, who would usually come to us with an environment already configured, the simple-manager-blueprint installs Cloudify Manager on the cloud of your choice with only the following minimum required inputs:
1. Public IP
2. Private IP
3. SSH User
4. SSH Key
But the fact is that this solution was still not optimal, so we had to find a better solution.
In September 2016, Cloudify had its first official internal Hackathon. This was our chance to finally make the Cloudify bootstrap much more user friendly – so we went for it.
Thinking about the process of using blueprints, we found two major inefficiencies:
1. Installing Cloudify Manager from a remote computer takes too long with data moving back and forth and we actually had to ssh into our own VM and then run the commands
2. The simple-manager-blueprint method was clunky
So, we decided that the optimal path forward was to have streamlined Python code that runs deterministically and without the need to think about topology or any other factors. We then looked at each component and extracted the code, making sure to remove any excess fat, and started by adding components one by one. We also wanted to ensure the process was idempotent, whereby if you received an error in the bootstrap, you would simply be able to overwrite the file next time you installed, instead of the process breaking on subsequent bootstraps.
In order to make this process as efficient as possible, we opted for a single RPM archive containing all the necessary components and requirements for Cloudify Manager. All in all, we managed to cut down the process a whopping 80% from 20 minutes to as fast as 4 minutes or less!
The steps to install the manager using the RPM archive are as follows:
1. Create your cloud instance (make sure to check the prerequisites)
2. Download the Cloudify RPM onto the host machine
sudo yum install <path/to/file.rpm>
cfy_manager install --public-ip <PUBLIC_IP> --private-ip <PRIVATE_IP>
5. Wait about 4 minutes and check your manager is running by going to http://PUBLIC_IP in your browser
Check out the amazing new bootstrap in this video demo:
As we move forward, there is still some room to make things more efficient. Here are some ways we plan on doing just that:
- Packaging certain internal services more efficiently to cut install time even further
- Building internal RPMs for each manager service to allow `yum install` updates for any manager service
- Bundling plugins and other useful tools with the RPM install