At Camptocamp, we’ve been using containers for a few years now and have integrated them with the tools we’ve been using for a decade to automate our infrastructure.
While we have had time to get used to this stack and see it grow, for most of our customers, containers are a new approach to solving their IT problems.
Visualizing the Stack
There are so many technologies in the containers ecosystem today that it’s easy to get lost. How does Docker relate to Kubernetes? Do I need Openshift in order to use them? Where does IaaS fit with this new stack?
Let’s start with IaaS
Ten years ago, it was very common to manage Virtualization manually. Sysadmins would pick a physical host and start Virtual Machines on it when they needed one. IaaS provided us with a way to dynamically provision Virtual Machines without the need to pick an hypervisor ourselves. The IaaS system manages a cluster of hypervisors and dialogues with them in order to start new VMs on demand. This was a great revolution for Systems Administration, and opened up whole new ways to automate node deployment.
Then came Container Runtimes
About 5 years ago, when Container Runtimes such as Docker started to emerge as solutions to ship applications, they came out as standalone systems which could be used locally to start containers on the node they were running on.
Enter Container Orchestrators
In a similar fashion to IaaS with Hypervisors, Container Orchestrators can be made to take control of multiple Container Runtime instances to set up a cluster and dynamically schedule containers across the nodes.
Orchestrators usually work with specific Runtimes. Docker has become very standard and is supported by most Orchestrators, while others such as rkt or cri-o are typically Kubernetes-specific.
Container Platforms bring it all together
Container Orchestrators provide the base brick to deploy applications across multiple nodes using Containers. Orchestrators such as Kubernetes are full-featured, production-ready systems with support for complex deployment plans and advanced scheduling abilites. They do not however always provide all the features that might be necessary.
Container Platforms offer a distribution for a Container Orchestrator, along with additional features, such as advanced RBAC (user/rights management), CI/CD integration (shipping applications from code and keeping the images up-to-date with security patches) or Routing (dynamic routing to services by name or path).
Additionally, they can also serve as proxies to dynamically provision new cluster nodes by leveraging the underlying IaaS layer.
A simple example
Let’s take a simple example, using Rancher as a Container Platform, with Kubernetes as the Orchestrator and let’s pretend we want to add a new node to an existing cluster. The following animation shows the steps necessary to achieve this:
But wait, there is more!
Pulling everything together in Container Platforms is great, but one thing is missing though: Infrastructure as Code. Once all the components are there and orchestrated, we want to be able to control the full stack in a reproducible and well documented way. Where Puppet has been a great helper to automate node provisioning, Terraform has come to be a reference in managing cloud resources, in particular in controlling IaaS systems. So to pull it all together, Camptocamp has started using Terraform to control its full stack, from IaaS to Container Platforms.
Are you wondering about switching to containers for your applications? Would you like to know how Openshift and Rancher can help you set up production workflows with containers? Our team is available for any questions you might have!