Open Cloud Adventures: Introduction

Building even a primitive cloud seems like a daunting and costly endeavor. I set out to prove this conception wrong. Join me on my journey.

yosefrow
Linnovate
5 min readSep 13, 2017

--

For a long time I viewed building even a primitive cloud as a lengthy and expensive process, closed to all but those with the wisest of minds and deepest of pockets.

However, recently I was introduced to a few tools that enlightened me about what a cloud looks like and how difficult it is to set up. Those tools are MAAS, Juju, and Openstack.

Through the course of this series I will explain the different parts of the cloud and how the tools I mentioned above fill individual roles in the cloud. I will then detail my experience with each of these tools so that you can learn from my experiences in order to build your own cloud.

What is Cloud Computing?

Before we begin to understand how we build a cloud, first let us understand what a cloud is supposed to be.

The Berkely paper: Above the Clouds: A Berkeley View of Cloud Computing sums it up like this:

Cloud Computing, … is … the long-held dream of computing as a utility… Developers with innovative ideas for new Internet services … need not be concerned about overprovisioning for a service … thus wasting costly resources, or underprovisioning for one … thus missing potential customers and revenue…

programs can scale, since using 1000 servers for one hour costs no more than using one server for 1000 hours. This elasticity of resources, without paying a premium for large scale, is unprecedented in the history of IT.

Cloud Computing refers to both the applications delivered as services over the Internet and the hardware and systems software in the datacenters that provide those services.

The services themselves have long been referred to as
Software as a Service (SaaS).

The datacenter hardware and software is what we … call a Cloud.

the service being sold [ or used ] is Utility Computing…

Thus, Cloud Computing is the sum of SaaS and Utility Computing

While most cloud users are exposed to SaaS and Utility Computing services via a public cloud UI such as AWS console, it is more difficult to imagine “the hardware and systems software in the datacenters that provide those services.”

At it’s core level a Cloud Provider (or Node Provider) is a flexible cluster of physical and/or virtual nodes which may span multiple regions. There is nothing stopping you from simply using it to install a single web server. Although, it could be considered a waste, as the cloud provider is capable of becoming the foundation for much more powerful applications, such as the aforementioned Utility Computing Provider software, or a container orchestration engine such as Kubernetes.

Layers of the Cloud

The modern cloud infrastructure can essentially be visualized in 3 layers:

  1. Cloud Provider / Node Provisioning Framework
  2. Cloud Deployer / Node Service Orchestration
  3. Cloud Engine / Utility Computing Engine Software

Cloud Provider

At the most basic level, a cloud provider is a physical and/or virtual node manager which generally allows you to register, commission, and provision nodes.

That means the Cloud Provider is aware of new nodes that enter the network and provides the capability of gathering information about and registering those nodes.

A Cloud Provider can then provide a Cloud Deployer with information about available nodes, such as the ip of and resources available to those nodes, as well as receive and execute provisioning requests from the Cloud Deployer.

Cloud Deployer

A Cloud Deployer is essentially an orchestration tool for a Cloud Provider

The job of the Cloud Deployer is to handle deployment requests. This means that if you wanted to deploy a Cloud Engine onto a Cloud Provider, you would send your request through a Cloud Deployer in order to fulfill your request.

The Cloud Deployer speaks with the Cloud Provider in order to understand whether a node which fits its demands is available, and then requests that node from the Cloud Provider along with a list of constraints, such as RAM, CPU, or the name of an operating system to be installed on the requested node.

Once the Cloud Provider receives a valid request from the Cloud Deployer, The Cloud Provider will mark the node as provisioned and prime it with the particular operating system that the Cloud Deployer requests.

Similarly to the Cloud Provider layer, there is no requirement to deploy a Cloud Engine using the Cloud Deployer tool. One could again simply deploy a single web server, or they could go straight to deploying Kubernetes or Docker Datacenter directly onto a collection of nodes provided by the Cloud Deployer through the Cloud Provider.

Cloud Engine

The Cloud Engine layer is the meat of the modern public cloud offering and is generally what most people refer to when they speak of ‘the cloud’.

As a ‘Utility Computing Engine’ the job of the Cloud Engine is to completely abstract the Cloud Provider layer so that the users of the Cloud Engine need no knowledge of the underlying physical or virtual hardware managed by the Cloud Provider in order to deploy their applications.

The Cloud Engine itself is a collection of services and applications which are deployed through the Cloud Deployer layer. In order to deploy the Cloud Engine we first choose to run a selection of deployment scripts at the Cloud Deployer Layer. The Cloud Deployer then talks with the Cloud Provider to obtain a collection of nodes and runs the deployment scripts on those provided nodes in order to deploy storage, hardware, machine, and network abstraction services for the Cloud Engine.

Enter MAAS, Juju, and Openstack

Now that we generally understand what is required to deploy a cloud, we can assign software to each of the 3 layers in order to begin deployment.

MAAS

MAAS stands for Metal As A Service and as you can imagine its main role is to serve as a Cloud Provider for physical Nodes. Although, MAAS is geared towards this purpose, it still has excellent features for managing virtual nodes which we may explore in a future section.

Juju

Juju stands for…well Juju. Despite its exotic sounding name, Juju is simply one of the best Cloud Deployer tools you will likely find today. Juju has a multitude of pre-built deployment scripts known as charms, and bundles of charms known as bundles. In our journey, we will be focusing mainly on deploying charms and bundles geared toward installing OpenStack.

Openstack

Openstack is an incredibly flexible and full featured Cloud Engine with a great community and active development. Openstack includes many optional modules that allow you to create and configure a Cloud Engine with as many or as few features as you would like.

Moving Forward

We will become more familiar with MAAS, Juju, and OpenStack as we explore them on our path to install a fully functional private cloud with the assistance of this guide.

Join me in the next step of my journey, where I take a look at getting started with setting up the Cloud Provider of our choice: MAAS.

--

--

yosefrow
Linnovate

I’m here to share my journeys in the brave new world of microservices, utility computing, and devops