Today’s users expect their mobile apps, cloud services, web applications to function and available when they need them within a fraction of a second. Users no longer tolerate poor service performance, let alone services that become inaccessible for periods of a time. For businesses, this poor user experience can translate to lower user activations and engagement and worse, loss of customers to competitors.
Building a highly available and reliable cloud service is all about knowing how to craft together a system of interconnected machines that are able to serve massive amount of network traffic, users and data.
In recent years, there have been great innovations in the ability to build systems with the aim of better standardization, increased developer productivity and simplification. One such tool, the focus of this article, is Kubernetes.
What is Kubernetes?
The official definition of Kubernetes is “an open-source system for automating deployment, scaling, and management of containerized applications.” In other words, it is a container orchestration engine. Kubernetes provides developers greatly boosted efficiency in building, deploying and running applications in public and private clouds.
Google released Kubernetes to the open-source community in 2015. It has thrived successfully and is now under management of the Cloud Native Computing Foundation.
How does it help?
Kubernetes, when utilized properly by skilled practitioners, promises ways to quickly roll out new application features seamlessly, optimize hardware usage effectively, and reliably deploy and scale applications on the fly to meet new customer demands.
One great aspect of Kubernetes that our DevOps teams appreciate the most are the self-healing attributes: auto-placement, auto-replication, auto-scaling, auto-restart.
Key Concepts & Elements
In this section, we’ll cover the most essential key concepts and elements in Kubernetes. This blog is introductory so we’ll provide simple and general coverage of the basics. A more detailed coverage of concepts can be found in Kubernetes documentation.
- Pods: A pod is a group of one or more containers. Containers within a pod can communicate with each other using localhost—they share the same IP address and port. Pods are typically used to host co-located, co-managed helper programs, for example: monitoring adapters, proxies, compression, etc.
- Replication Controllers: One common use case is horizontal scaling. Scaling can be achieved by making copies of pods. Replication Controllers ensure that a set number of “replicas” are up and available at any one time. They manage the lifecycle of pod replicas. Other common use cases for these controllers are rolling updates and rescheduling. (Note: ReplicaSets are the next-generation of Replication Controllers).
- Services: A service is an abstraction that encapsulates a set of pods and access policies. Services are also often called microservices. Pods are ephemeral and they come and go as managed by Replication Controllers; therefore, one can’t rely on the pods’ IP addresses to gain access to their functionality.
- Nodes: A node is a worker machine (physical or virtual) in Kubernetes. A node contains all the services needed to run pods.
- Cluster Control Plane (previously Master): This control plane manages all nodes in Kubernetes. It provides a unified view into the whole Kubernetes cluster. An important element of the control plane is its API Server. It provides REST endpoint that can be used to interact with the cluster.
To learn more about Kubernetes, visit the documentation home.
Stay tune for next installments of this blog. We’ll cover more Kubernetes and related topics, including a step-by-step walkthrough.