If there’s one thing that I got asked a lot is a summary of my viewpoint on “why you choose opennebula”, after my presentation at the last OpenNebulaConf. Basically the answer is always “it depends on what you’re looking for” but it rarely suffices, so I take advantage of the invitation by Ignacio Llorente to write a few words on that. Let’s start with an image that explains how people usually views the debate:
And – let’s be clear – it does not really convey the fact that OpenNebula and OpenStack are both terrific project with slightly different needs and use cases, and so this comparison is probably useless. After all, do we really say that we can’t have both Apache and Nginx as web servers? Who said that we can’t have both, in their respective market niches?
In my view, OpenStack is a toolkit for creating sophisticated Infrastructure-as-a-Service platforms, and is composed of several top level projects and many more ancillary pieces, a view that is shared by many others (for example Monty Taylor, or Jay Pipes) that can be summarily shown as:
Talking about “an OpenStack cloud” is thus quite indefinite, as it may be composed of just three pieces or thirty. Another defining aspect is the overall scalability, that implies that (just because there are lots of different pieces, connected in many different ways) there are lots of knobs. Lots.
Well, OpenStack probably needs them all.
And – just to be clear – a very large OpenStack installation probably needs most of them, since they need to provide components that must be usable and deployable in innumerable different conditions and combinations.
OpenNebula is structurally different: it is much more a finished product, with a modular structure that covers a subset of the OpenStack projects, with a much smaller set of variables and knobs:
|Object Storage (Swift)
|Image Service (Glance)
|Block Storage (Cinder)
|Database Service (Trove)
|Data processing (Sahara)
|Bare metal (Ironic)
|Queue service (Zaqar)
|Key management (Barbican)
|DNS Services (Designate)
Most of the higher level services do have no equivalent in OpenNebula, and it’s mostly by design – if you need a service you add it through an external VM that provides what you need. For example, if you need an object storage service you can use Riak, Ceph, Walrus, Gluster, Skylable are among the first that come to mind, all with different advantages and disadvantages (and you can even use swift inside of an OpenNebula VM, by the way :-))
The “all in one” approach of OpenNebula also simplifies common management operations, like recovery from failover. OpenStack needs external automation or a manual intervention; as an example, to recover from a total fault on a compute node:“If a compute node fails and won’t be fixed for a few hours (or at all), you can relaunch all instances that are hosted on the failed node if you use shared storage for /var/lib/nova/instances. To do this, generate a list of instance UUIDs that are hosted on the failed node by running the following query on the nova database: mysql> select uuid from instances where host = ‘c01.example.com’ and deleted = 0; Next, update the nova database to indicate that all instances that used to be hosted on c01.example.com are now hosted on c02.example.com: mysql> update instances set host = ‘c02.example.com’ where host = ‘c01.example.com’ and deleted = 0; After that, use the nova command to reboot all instances that were on c01.example.com while regenerating their XML files at the same time: # nova reboot –hard <uuid> Finally, reattach volumes using the same method described in the section Volumes.”
(from OpenStack Operations Guide, sep. 2014, page 140)
Even after a compute node reboot, you may have to handle things properly:“After the compute node is successfully running, you must deal with the instances that are hosted on that compute node because none of them are running. Depending on your SLA with your users or customers, you might have to start each instance and ensure that they start correctly. … You can create a list of instances that are hosted on the compute node by performing the following command: # nova list –host c01.example.com –all-tenants After you have the list, you can use the nova command to start each instance: # nova reboot <uuid>”
OpenNebula on the other hand manages the same thing with the fault hooks, mostly managing things in an automated way. Other aspect are extremely simplified in OpenNebula, like action/condition triggers, where OpenStack Heat is certainly more complete and sophisticated than the probes available within OpenNebula.
Another aspect is size: OpenNebula is one tenth of OpenStack in terms of lines of code – 1841Klines for OpenStack vs. 193Klines for OpenNebula (data from J.G.Barahona, “the quantitative state of the open cloud”, OSCON 2014) which means that changing, adapting and simply looking at the code to understand it is ten times easier and cheaper as well.
If we look at the features that are expected both from devops and enterprise users (as defined by the fine folks at the 451 group) we can see that what is looked for is a set of features like these:
|Supports hybrid cloud networking (multi-vendor, public, hosted)
|DevOps and enterprise business users
|Supports private cloud offerings
|Supports vendor and user service blueprints
|Supports VM provisioning, HA, scaling, recovery
|Integrates with developer tools (such as Chef or New Relic)
|Offers a self-service portal, service catalog
|Integration/migration (transformation engine)
|Provides workload placement recommendations
|Offers consumption management/optimization recommendations
|Supports role-based access control/security
|SaaS and on-premises license models
|Offers app monitoring and system tool extensions (patching, backup, OS monitoring, etc.)
source: 451 group “Cloud Management Platforms: a comparison of product categories”
And it’s easy to see that apart for the last line (where probably the only open source platform with said features is ManageIQ) everything else is more or less covered by both.
The end result is that OpenStack and OpenNebula should be seen as complementary offerings – if you need a toolbox, or the features of some or all the many components offered by the OpenStack ecosystem just go there. Lots of people will help you in building your cloud, the amount of activity and enthusiasm is amazing and beautiful. If you need something that can be deployed, understood and used in a few hours (without sacrificing scalability or core features) look at OpenNebula.
The open cloud does have space enough for both.