Earlier this week I had the opportunity to attend a Cloud Native PDX Meetup with a presentation on Kubernetes 1.2 given by Kelsey Hightower of Google. I've been playing around with Docker and have heard of Kubernetes, but I really didn't have a good understanding of how these technologies fit together, and I wanted to learn more about how all this supports the concept of DevOps. Ultimately, I'm wanting to understand how Hitachi's products can fit into this ecosystem. Here are a few highlights from Kelsey's talk.
I'll blog separately about Docker soon, but in a nutshell it's a standard for running processes/applications in containers. Think of containers as lightweight, portable virtual machines. Well-designed "containerized" applications separate the components of the application into separate containers (ideally so that each container only runs one process).
Isn't Docker Enough?
Not really. The challenge is that when you have a complex application that's been properly containerized (for example, with separate containers for the back-end database, the business logic, the front-end web server, etc.) you now have to manage all these parts. Yes, you can use Docker to start each of the components, but how do you guarantee containers with a high affinity are running in the same node? How do you manage all of the parts as a whole?
This is where Kubernetes comes in. As Kelsey describes, Kubernetes is a framework for building distributed systems. It's basically the plumbing to build a distributed platform by taking a lot of physical machines and making them look like a single large machine. As pertains to containers, Kubernetes introduces the concept of a "pod", which is a way to tightly couple containers that make up an application. Pods are logical applications, which have:
- One or more containers and volumes
- Shared namespaces
- One IP address per pod
You can think of pods as being virtual machines that are constructed at run-time.
Imperative vs Declarative
Isn't Kubernetes just a container orchestration platform? That's what I thought coming into this Meetup based on what I'd read about Kubernetes. But according to Kelsey, Kubernetes is not an orchestration tool at all. But people want to use it that way.
As I mentioned earlier, Kelsey describes Kubernetes as a framework for building distributed systems. And yes, you can use it in an imperative fashion, issuing commands to Kubernetes which it's happy to execute. But that's missing the true power of the framework.
Rather, Kubernetes is meant to be used in a declarative fashion: You define your applications (say, via Dockerfile definitions), then you describe to Kubernetes what you require for that application to meet your business needs (configuration files, number of instances, load balancing, etc.) and Kubernetes just makes it happen!
This meetup wasn't recorded, but here's a video of an almost identical talk Kelsey gave last year, which also contains a great Tetris analogy. It's a great talk and provides a lot more detail about Kubernetes and includes a great live demo.
What is Hitachi doing with Kubernetes and Docker?
We'll provide more details about what we're doing with Kubernetes and Docker in upcoming blog posts, but here are a few resources available now:
- Hitachi Unified Compute Platform with Kubernetes Orchestration
- Hitachi UCP and Google Kubernetes Orchestration
- Kubernetes: The Data Center is Evolving
What are you doing with containers?
I'd love to hear about what you or your customers are doing with DevOps and containerized applications. Which technologies are you exploring? How would you like to use Hitachi products in a containerized model?