Thursday, February 18, 2016

App Dev Cloud Stack - Beginners guide to containers at scale

Containers at scale must be addressed in your Cloud stack.
This series started with the statement, what do you mean by "Can't ignore the stack anymore?"

When your background is application development, you have spent many hours, days and years perfecting your craft. You have not only learned languages and concepts, you have made it a point to learn to make good architectural decisions when pulling together the applications you develop.

The problem is, we tend to ignore the stack we are working on as much as we can. Well it's time that we as application developers broadened our horizons a bit, expanding our understanding of the stack we work on with the introduction of Cloud, Platform As A Service (PaaS) and containers to our toolboxes.

Our tour of your Cloud stack continues from our previous article in this series where we laid the first foundational bricks, our reliable and container supporting operating system. The core machines on which our Cloud will rest, that support containers but obviously don't do much more than that.

These foundational bricks only scale in one direction, vertically.

What scaling containers vertically means, why it would not make a very good Cloud stack and what we really need for our Cloud stack will be the focus of this article.

Containers at scale

The idea that we can put together an OS that enables all the tooling we need for generating and hosting containers for our application is exciting.

Limits to vertical scaling of your containers.
Every application developer that is looking at moving their applications into the Cloud will start by putting together containers to run their applications as microservices. The problem is that when you start to host these containers, just like putting containers on a cargo ship, you have a limit as to the number you can pile onto your OS.

This is the vertical scaling limits based on the resources a single machine can host. Just like there are only so many containers you can stick up on a cargo ship before it either become just dangerous or an accident happens.

There are also some issues you will run into as you scale vertically with your containers. You have to determine how to manage these containers, monitor their usage, charge back to the original departments for use of the resources and more as you deal with the increased demands your excited application developers will be putting on the limited resources.

As an administrator of these new containers you will begin to feel the need for a solution that can provide containers at scale. This would be a solution that allows you to scale the containers out vertically. This would be the same as putting more cargo ships into the fleet and spreading the containers across these new ships as the need grows.

Cloud stacks can scale out horizontally to
provide containers at scale.
This is done with virtualization solutions to provide Infrastructure as a Service (IaaS), but has it's limitations.

Scalable IaaS

This is fine if you can expect to have linear growth and constant usage of the underlying infrastructure, but what to do when you need to scale down, load balance for a specific container that is short term resource intensive or if you just need to manage the entire infrastructure as it scales out across more resources?

The next step is to provide abstraction from the individual resources and allow for the management of the entire set of resources for each specific container, application or microservice. This can be solved with Open Source solutions such as Red Hat Atomic Enterprise Platform that leverages projects like Docker, Kubernetes among others to provide containers at scale based on your current infrastructure, providing a powerful IaaS to the rest of the enterprise.

Containers at scale.
This is akin to having a shipping company that can now make use of a new cargo ship when the need arises due to a flood of extra containers needing to be shipped, say around the beginning of the new year as new car models are shipped globally to meet new consumer demands. This is like having instant access to an almost unlimited supply of cargo ships and loading facilities to process any amount of cargo containers we might be asked to ship on the high seas.

This layer is crucial to what an application developers does. By providing proper container hosting, proper container management and containers that scale out as needed, it keeps both application development and application deliver running smoothly across an enterprise infrastructure.

What is left for consideration?

How to manage all this IaaS so that we have some insights into who to charge for usage? How can we monitor for stress on our infrastructure resources? How can we determine when we need to take action, preventing any failures of our IaaS?

Red Hat Cloud Suite
These are all questions that will be covered in the following article from this series, where we talk about why scale matters and what some of the issues are that will arise for application developers as well as those responsible for maintaining this new Cloud stack.

App Dev Cloud Stack series

Missed a previous article or looking for a specific article in the series?
  1. Can’t ignore the stack anymore
  2. Foundations for a stable Cloud
  3. Beginners guide to containers at scale
  4. Why containers at scale matter
  5. It’s all about the PaaS baby
  6. Open interoperability critical to success
  7. Securing containers at scale