Sunday, September 4, 2011

Ubuntu Enterprise Cloud review

If you're building an internal or private cloud, Canonical wants you to use Ubuntu Linux 10.04 as your operating system of choice. To that end, the newest version of Ubuntu includes a feature set called Ubuntu Enterprise Cloud.
In keeping with its open source pedigree, Ubuntu Enterprise Cloud is integrated with the open source Eucalyptus private cloud platform, making it possible to create a private cloud with much less configuration than installing Linux first, then Eucalyptus.
And for those thinking about eventually moving resources to the public cloud, or simply bursting to the public cloud when workloads spike, the Ubuntu/Eucalyptus internal cloud offering is designed to be compatible with Amazon's EC2 public cloud service.
Related Articles on Techworld
On the flip side, you'll need to familiarise yourself with both Ubuntu and Eucalyptus, as Ubuntu Enterprise Cloud's dependence on Eucalyptus will force you to reach beyond Ubuntu documentation when problems occur. For example, we found Ubuntu had weak documentation for customising images, an important step in deploying Ubuntu Enterprise Cloud.
Basically, Ubuntu Enterprise Cloud can be deployed on internal hardware to run job/batch applications. The idea is to initially allocate storage, then rapidly build multiple virtual machines to process data, collect the data, then tear down the infrastructure for re-use by a subsequent purpose.
Ubuntu Enterprise Cloud provides internal cloud control methods that closely mime what can be done on Amazon's public cloud infrastructure. Its tools can be used to process recurring jobs or one-shot distributed applications, like DNA analysis, video rendering, or database table reformatting/reindexing.
Ubuntu Enterprise Cloud uses the open source kernel-based virtual machine (KVM) platform to host virtual machines that run on the backend nodes. This is important because there are extra Eucalyptus-provided images that include both the KVM and Xen kernels, but you must use the KVM ones if you're importing them into Ubuntu Enterprise Cloud.
Getting started
In order to successfully run Ubuntu Enterprise Cloud, we had to have at least two dedicated systems. One is used for the front-end applications, which include a Cloud Controller, a Cluster Controller, Walrus Controller and the Storage Controller. The other system became a node machine that ran the hosted virtual machines.
The controller services were easy to understand since they're similar to Amazon EC2 Cloud components. The Ubuntu Enterprise Cloud Cloud Controller is the front-end service application — the one to connect to for managing cloud services. It understands EC2 API calls, and offered us its web user interface.
The Cluster Controller, in turn, manages each cluster of node (VM) resources, and talks to the node/VM host via the open source libvrt library. We could use as many nodes as we had hardware resources to cram them into, Canonical recommends baseline hardware and recommends faster components, even down to disk speed.
The Walrus Controller acts as a storage mechanism like Amazon's S3 (Simple Storage Service) for data storage or storing VM images. The Ubuntu Enterprise Cloud Storage Controller, like Amazon Elastic Block Storage (EBS), makes persistent virtual disks to attach to running instances — active resource storage virtualisation control. Each cluster can have a Storage Controller for the convenience of management, snapshots, object aggregation, and so on.
Installation was very simple. We inserted the Ubuntu Server CD, selected Ubuntu Enterprise Cloud, and drank energy drinks. When installing, all we had to do was select options and if more information was needed, boxes would pop up for us to enter our choices, such as hostname or an elastic IP address range.
The installer automatically creates certificates, keys, private keys and other relevant data. One would have to do most of this manually if setting up Eucalyptus alone.
Next, we installed a node by running installation for nodes. If both machines are on the same network, the node will automatically find the cluster and cloud controllers. There are different network topologies available depending upon how many machines are available to be used, but Ubuntu doesn't recommend a single machine for production environments, even though it is possible.
Job requirements and their applications dictate configuration of Ubuntu Enterprise Cloud. Most of the setup was taken care of by the installer. In order to use Ubuntu Enterprise Cloud, we connected to the web interface, and logged in with the default user admin/admin. We then setup our user by changing the password. We also had to enter other information such as email and name, but some optional metadata could be entered as well, such as telephone number, project leader, project description and affiliation.
Once done, we could download a zip file that included our credentials (X.509 certs, public/private key pairs) which can be used with Amazon EC2 tools (or the Eucalyptus tools and certain other third-party tools). Also, you can get a query ID and secret key for use with Amazon-like tools. HybridFox, a Firefox plugin, seemed to be the simplest and quickest tool to setup that we could find to make managing the cloud much simpler (as opposed to ssh'ing into the cloud server using only command line tools).
For power conservation, we could manage power for nodes not in use, turning them on for jobs, then off when done. After setting this up, it's automatic and the controller will remotely turn on and off the machines when necessary. To manage this, we had to turn Wake-On-LAN for our network interface on the node.
In addition, the server host machine needs to be able to support at least one of the following of several common Linux power management commands: pm-suspend, pm-hibernate or poweroff. The default setting is for the machine to use one of the previous commands if it hasn't been used in 5 minutes (and, of course, no instances running).
We tested this and it seemed to work well, after 5 minutes our node turned off. We then tried loading a new instance, and the machine turned back on and started to run the instance. This seems like a pretty good way to save power when your nodes are not being used — without having to perhaps walk across a campus and flip power switches.

Image Bundles
With each job there's a VM instance that's preconfigured to do a piece or all of the work. The OS is designed to use only the components needed. Once a VM is built, it can also be replicated so that multiple concurrent instances can do many jobs, or many pieces of a job or batch application processing.
Bundling Ubuntu Enterprise Cloud Linux images is very similar to the Amazon EC2 method of bundling images and uses almost the exact same commands. If you are familiar with how EC2 does this, then you should have no problems here either. If not, the Eucalyptus web page docs supply information on its bundling command, euca-bundle-vol.
To bundle our VM, we started off with a base Ubuntu 10.04 Ubuntu Enterprise Cloud server image. After launching this instance, we used ssh to link into the machine and follow the instructions to install more application functionality options, in this case we used the LAMP server option. After this initial installation, we upgraded to the latest packages, then installed our test website. The bundle was then built using the command line tools. The bundling commands aren't smart enough to do things like check disk space first.
Image setup, as mentioned, isn't fun. After a lot of trial and error, here are the commands we used to bundle an image (after updating everything) running the latest Ubuntu 10.04 (from within the virtual environment itself):
euca-bundle-image -i /boot/initrd.img-2.6.32-21-generic-pae --ramdisk true -r i386
euca-upload-bundle -b lamp-bucket -m /tmp/initrd.img-2.6.32-21-generic-pae.manifest.xml
euca-register lamp-bucket/initrd.img-2.6.32-21-generic-pae.manifest.xml
euca-bundle-image -i /boot/vmlinuz-2.6.32-21-generic-pae --kernel true -r i386
euca-upload-bundle -b lamp-bucket -m /tmp/vmlinuz-2.6.32-21-generic-pae.manifest.xml
euca-register lamp-bucket/vmlinuz-2.6.32-21-generic-pae.manifest.xml
euca-bundle-vol -p lamp-server -d /mnt --kernel eki-0E6C159C --ramdisk eri-4FE51677 -r i386 -s 5120
euca-upload-bundle -b lamp-bucket -m /mnt/lamp-server.manifest.xml
euca-register lamp-bucket/lamp-server.manifest.xml
These nine commands are easily scripted to make the components of the bundle: ramdisk, kernel and image. Note the use of easily understood XML. We wish the docs had better instructions.
Ubuntu Enterprise Cloud uses the Eucalyptus "euca" commands, similar to those used for Amazon, allowing you to monitor and manage instances.
Examples include HybridFox, a third-party plugin based upon Amazon's ElasticFox, a Firefox browser extension that provides a simple GUI for accessing, monitoring and using the cloud resources. In our testing, ElasticFox didn't work, since the latest version is no longer compatible with Eucalyptus. But HybridFox did work. Combining HybridFox with the Ubuntu Enterprise Cloud web interface made it simple to manage a private cloud. We suggest using this combination, and it would make a great addition to the Ubuntu Enterprise Cloud download.
With HybridFox, we could see all our images, instances, security keypairs, security groups, elastic IP addresses, EBS volumes and clusters. We could create new instances from images, connect to those instances via ssh, add or edit our keypairs and security groups, create, delete or attach EBS volumes. Sadly, we couldn't create new bundles from running instances or upload bundles. We still had to do this from the command line.

No comments:

Post a Comment