Diving into Juju

Adam Israel

November 17th, 2015

In my last post, I introduced you to Juju and talked about how it could help you. Now I'd like to walk you through some real world examples of Juju in action.


Bundles are used to represent workloads. Bundles can be simple, like the Wordpress example in the previous post, or complex.


If you're not familiar with OpenStack, it is a collection of services for managing a cloud computing platform. Think Infrastructure as a Service (IAAS).

I've heard horror stories from people who've spent months trying to deploy and configure OpenStack. Several different tools for automating an OpenStack Deployment have been developed, and this video from the October 2015 OpenStack Summit compares them (with Juju a strong favorite):

How easy is it to install OpenStack? It's this easy as this:

$ juju quickstart openstack-base

Sit back and wait, and soon you'll have an OpenStack environment with Keystone, Glance, Ceph, Nova-compute and more ready for testing.

Big Data

This is the area I'm personally most excited about. Big Data solutions are all aimed at taking some of the complexity out of analysing huge datasets.

The base of these workloads is Apache Hadoop, bundled with tools like mapreduce, Tez, Hive, Pig and Storm. Drink from the Twitter firehose with Flume. Crunch Open Data from your favorite city or government to spot trends in voter turnout or track neighborhood gentrification or crime rates.


Containers are the new hot thing, but there's no reason why you can't use Juju to orchestrate the deployment of them. Docker? No problem. Kubernetes? Juju does that, too.

There are advantages to containerizing your application. It gives you a nice layer of isolation, and the addition of container networking with Flannel makes it even more powerful.

Juju steps in to compliment the benefits of a container by offering a way to manage and scale them in the cloud. As a developer, you can write a dockerfile to launch your application, and use the Docker charm to deploy it.

Things at scale

For a typical development workflow, you may only need the bare minimum of machines to run your application. Once you deploy to the cloud for production use, you're going to need the ability to scale your application.

For example, if your database is running slow, you can easily add scale up:

juju add-unit mysql -n 3

This would add three new units to MySQL and configure replication and failover, things that are complicated and often fragile to do by hand.


The cloud offers a dizzying array of hardware options. Spinning rust or SSD. Lots of memory, or CPU, or both. 1 or 10 Gigabit networking. You can speculate about which options are best suited for your application but even the most well-informed of guesses can be wrong when put to practice.

Benchmarking provides the ability to exercise a service in order to evaluate its performance, and collect hardware and software statistics to monitor how your workload is performing. Maybe you want to test your database under load, or stress your web application, or identify potential bottlenecks. Could it be disk or network I/O slowing you down? Is it poorly optimized database queries? This is the tool you'll want to use to answer those questions.

Workloads are complex things, with many moving parts. Like Hydra, bottlenecks are a shifting target; strike down one and two more rise to take it's place.

In order to tune workloads, I've gone hunting for blog posts or white papers showing best practices for the services I use. I'm often frustrated, though, because all the pretty graphs in the world don't help me if I can't replicate the results. It leads to a trust issue; sure, it ran fast for you, but how do I recreate it?

Benchmarking's focus on repeatable, reliable testing means that you can repeat benchmarks over and over again and expect to see similar results. You can then make adjustments to your hardware or software, repeat the benchmark and compare the results.

That effort can then be distilled into best practices that anyone using or deploying a service can benefit from.


Juju is a robust devops tool, reducing the complexity of cloud development and orchestration. It's growing community of users and contributors, including IBM, Intel, Microsoft, Cisco and China Telecom means it's going to be around for a long time.

Dig deeper into the best DevOps solutions with a look at the best command line tools in our article – read it now!

About the author

Adam Israel has worn many hats over the past twenty years, from help desk to Chief Technical Officer, from point of sale software to search engines and ad server platforms. He currently works at Canonical, Ltd as a Software Engineer, with focus on cloud development and operations.