Kubernetes is an open-source, production-grade container management system. It helps you effectively manage and scale container applications in a clustered environment.
Kubernetes is (extract from GitHub):
- Lean: lightweight, simple, accessible.
- Portable: public, private, hybrid, multi-cloud.
- Extensible: modular, pluggable, hookable, composable.
- Self-healing: auto-placement, auto-restart, auto-replication.
While deploying and orchestrating docker containers, you have two choices — Docker Swarm and Kubernetes. Docket Swarm was built specifically for solving Docker orchestration in a standardised way and exposes standard Docker APIs, which can be used for communication with containers. Kubernetes builds upon 15 years of experience of running production workloads at Google and provides first-class support for running Docker containers.
Having tried both Docker Swarm and Kubernetes in production environments, I feel the best way to build and orchestrate Docker containers is through Kubernetes. The horizontal auto-scaling feature and self-discovery via external descriptors make it easier to manage dependencies. Kubernetes has a learning curve, but it provides greater flexibility and features. I also feel the dependency and configuration between containers are easier to maintain using Kubernetes.
One of the key features that was missing in Kubernetes earlier was the ability to manage and run federated services across clusters (geographical distributions workloads). This is an important feature, as we had to manually take care of this via geocentric load balancers. Kubernetes 1.3 (released on July 6) introduced cross-cluster service discovery, stateful workloads for applications, and many more features.
We are running on GCP, and I will post my experience when we move over to Kubernetes 1.3. So far, GCP and Kubernetes have provided us with one of the best options to build and scale container applications in a production environment.
If you are building and orchestrating Docker containers, give Kubernetes a try and you won't be disappointed. Also, do ensure you build services (microservices) the right way and lay out the right set of dependencies to leverage the power and capabilities of container management solutions.