Kubernetes and it’s Industry Use Cases
By: Rajnish Mishra
Tags: Deployment, Container Orchestration, Industry, Kubernetes

We have already discussed how we can automate tasks. But just automating is not enough, we have to deploy the project also. The tool used for deployment must be intelligent, advanced, simple, and fast. Simple and fast deployment can be done with the help of container technology. But intelligent and advanced options are missing. So, there must be something that can manage containers and is not only advanced but intelligent also. Kubernetes is such a tool that can be used for deployment. It’s vastly used in Industry.

You may have a few questions in mind like what are containers and what problems do they address? Where does Kubernetes fit into the container and cluster management space? Why is it presenting used in Industry? And, what considerations should you bear in mind as you explore whether containers and cluster management tools are right for your application development needs?.

In this article, I will try to give a satisfying answer to your question.

What Are Containers and What Problems Do They Address?

When application developers test software, they must ensure it runs reliably when moved from one computing environment to another. This could be from a staging environment to production or from an on-premises server to a virtual machine in the cloud. The problem is that different environments are rarely symbiotic. The software may be different and the network and security environments are almost certainly going to be different.

Containers address this problem by bundling everything that makes up your development environment into one package. This introduces a level of environmental consistency and lets developers deploy applications quickly, reliably, and in the same manner, regardless of the deployment environment. By containerizing the application platform and its dependencies, differences in operating system distributions and the underlying infrastructure are abstracted away. In fact, with containers, you can forget about the infrastructure altogether.

Modular, executable standalone packages for software, containers include every element you’ll ever need to run an application — from code to settings. This portability makes containers a great asset to organizations thinking about a multi-cloud strategy.

Containers can also help you prepare for a proper DevOps implementation and its promise of efficient, rapid delivery. With containers, you can update and upgrade, without the legacy headache of starting over each time. Thanks to containers, implementing new applications and efficiencies into existing systems isn’t as hard as you think anymore.

Lighter than virtual machines and less resource-intensive, container adoption is through the roof. A recent survey shows that 94% of respondents had either investigated or used some container technology over the last 12 months.

How Do Container Management Tools Help Efficiently Manage Containers?

To effectively implement this DevOps approach to application development and effectively manage container technologies and platforms at an enterprise-level, you need the right tools.

This is where container cluster management or container orchestration solutions come into play. As enterprises expand their use of containers into production, problems arise with managing which containers run where, dealing with all those containers, and ensuring streamlined communication between containers across hosts. These scaled-out containers are called “clusters.”

Container cluster management tools provide an enterprise framework for integrating and managing containers at scale and ensure essential continuity as you embrace DevOps. Basically, they can help you define your initial container deployment while taking care of mission-critical IT functions on the back end such as availability, scaling, and networking — all of which are streamlined, standardized, and unified.

What Enterprise Container Cluster Management Solutions Are Available?

There are many options for container cluster management. Kubernetes, however, is winning the container war and is now the most widely used, open-source solution. With 15 years of Google development behind it and an enviable open source community (including Red Hat, Canonical, CoreOS, and Microsoft), Kubernetes has matured faster than any other product on the market.

Kubernetes hits the sweet spot for container cluster management because it gives developers the tools they need to quickly and efficiently respond to customer demands while relieving the burden of running applications in the cloud. It does this by eliminating many of the manual tasks associated with deploying and scaling your containerized applications so that you can run your software more reliably when moved from one environment to another. For example, you can schedule and deploy any number of containers onto a node cluster (across public, private, or hybrid clouds) and Kubernetes then does the job of managing those workloads so they are doing what you intend.

Thanks to Kubernetes, container tasks are simplified, including deployment operations (horizontal auto-scaling, rolling updates, canary deployments) and management (monitoring resources, application health checks, debugging applications, and more).

Features and Limitations of Kubernetes

Developers can create cloud-native apps with Kubernetes as a runtime platform by using Kubernetes patterns. Patterns are the tools a Kubernetes developer needs to build container-based applications and services

With Kubernetes you can:

Orchestrate containers across multiple hosts.

Make better use of hardware to maximize the resources needed to run your enterprise apps.

Control and automate application deployments and updates.

Mount and add storage to run stateful apps.

Scale containerized applications and their resources on the fly.

Declaratively manage services, which guarantees the deployed applications are always running the way you intended them to run.

Health-check and self-heal your apps with auto-placement, auto-restart, auto replication, and autoscaling.

However, Kubernetes relies on other projects to fully provide these orchestrated services. With the addition of other open-source projects, you can fully realize the power of Kubernetes. These necessary pieces include (among others):

The registry, through projects like Docker Registry.

Networking, through projects like OpenvSwitch and intelligent edge routing.

Telemetry, through projects such as Kibana, Hawkular, and Elastic.

Security, through projects like LDAP, SELinux, RBAC, and OAUTH with multitenancy layers.

Automation, with the addition of Ansible playbooks for installation and cluster life cycle management.

Services, through a rich catalog of popular app patterns.

There are various terms used in Kubernetes:

Control plane: The collection of processes that control Kubernetes nodes. This is where all task assignments originate.

Nodes: These machines perform the requested tasks assigned by the control plane.

Pod: A group of one or more containers deployed to a single node. All containers in a pod share an IP address, IPC, hostname, and other resources. Pods abstract network and storage from the underlying container. This lets you move containers around the cluster more easily.

Replication controller: This controls how many identical copies of a pod should be running somewhere on the cluster.

Service: This decouples work definitions from the pods. Kubernetes service proxies automatically get service requests to the right pod no matter where it moves in the cluster or even if it’s been replaced.

Kubelet: This service runs on nodes, reads the container manifests, and ensures the defined containers are started and running.

Kube-apiserver: Need to interact with your Kubernetes cluster? Talk to the API. The Kubernetes API is the front end of the Kubernetes control plane, handling internal and external requests. The API server determines if a request is valid and, if it is, processes it. You can access the API through REST calls, through the kubectl command-line interface, or through other command-line tools such as kubeadm.

kube-scheduler: Is your cluster healthy? If new containers are needed, where will they fit? These are the concerns of the Kubernetes scheduler. The scheduler considers the resource needs of a pod, such as CPU or memory, along with the health of the cluster. Then it schedules the pod to an appropriate compute node.

kubectl: The command line configuration tool for Kubernetes.

A working Kubernetes deployment is called a cluster. You can visualize a Kubernetes cluster as two parts: the control plane and the compute machines, or nodes.

The control plane is responsible for maintaining the desired state of the cluster, such as which applications are running and which container images they use. Compute machines actually run the applications and workloads.

Each node is its own Linux® environment, and could be either a physical or virtual machine. Each node runs pods, which are made up of containers.

Kubernetes runs on top of an operating system and interacts with pods of containers running on the nodes.

The Kubernetes control plane takes the commands from an administrator (or DevOps team) and relays those instructions to the compute machines.

This handoff works with a multitude of services to automatically decide which node is best suited for the task. It then allocates resources and assigns the pods in that node to fulfill the requested work.

The desired state of a Kubernetes cluster defines which applications or other workloads should be running, along with which images they use, which resources should be made available to them, and other such configuration details.

But, and there’s always a “but.” Despite its many benefits, as we previously discussed when offering tips on , Kubernetes is still relatively difficult to set-up and use. Managing Kubernetes is a time-consuming process requiring highly-skilled staff and a potentially large monetary commitment. To the untrained eye, Kubernetes looks like it can be up and running in hours or days, but this is far from true for production environments where additional functionality is needed — security, high availability, disaster recovery, backups, and maintenance — everything you need to make Kubernetes “production-ready.”

The result is that organizations that go the Kubernetes route quickly realize that they are unable to deliver it without bringing in skilled and costly external resources.

Case Study

We have got a brief idea about Kubernetes and it’s features. Let’s see how a big MNC got benefitted using Kubernetes.

Company : AppDirect

Headquarters location: San Francisco, California, United States

Industry : Digital Service

Challange

AppDirect provides an end-to-end commerce platform for cloud-based products and services. When Director of Software Development Pierre-Alexandre Lacerte began working there in 2014, the company had a monolith application deployed on a “tomcat infrastructure, and the whole release process was complex for what it should be,” he says. “There were a lot of manual steps involved, with one engineer building a feature, then another team picking up the change. So you had bottlenecks in the pipeline to ship a feature to production.” At the same time, the engineering team was growing, and the company realized it needed a better infrastructure to both support that growth and increase velocity.

Solution

“My idea was: Let’s create an environment where teams can deploy their services faster, and they will say, ‘Okay, I don’t want to build in the monolith anymore. I want to build a service,’” says Lacerte. They considered and prototyped several different technologies before deciding to adopt Kubernetes in early 2016. Lacerte’s team has also integrated Prometheus monitoring into the platform; tracing is next. Today, AppDirect has more than 50 microservices in production and 15 Kubernetes clusters deployed on AWS and on premise around the world.

Impact

The Kubernetes platform has helped support the engineering team’s 10x growth over the past few years. Coupled with the fact that they were continually adding new features, Lacerte says, “I think our velocity would have slowed down a lot if we didn’t have this new infrastructure.” Moving to Kubernetes and services has meant that deployments have become much faster due to less dependency on custom-made, brittle shell scripts with SCP commands. Time to deploy a new version has shrunk from 4 hours to a few minutes. Additionally, the company invested a lot of effort to make things self-service for developers. “Onboarding a new service doesn’t require Jira tickets or meeting with three different teams,” says Lacerte. Today, the company sees 1,600 deployments per week, compared to 1–30 before. The company also achieved cost savings by moving its marketplace and billing monoliths to Kubernetes from legacy EC2 hosts as well as by leveraging autoscaling, as traffic is higher during business hours.

“It was an immense engineering culture shift, but the benefits are undeniable in terms of scale and speed.” — ALEXANDRE GERVAIS, STAFF SOFTWARE DEVELOPER, APPDIRECT

I hope the article was able to give you a brief insight. If you have any feedback or suggestion, you can comment below.

You can appreciate the article by giving it a like and posting comment about your feedback here or on LinkedIn.