How Kubernetes can power up your businessJune 15, 2020
Although running a single container is simple, deploying dozens of them in production is more tricky. As you scale up and your application grows, how you orchestrate your containers will become more and more critical for uptime and deployment cycle time.
Containerization is a bit like cloud computing. Move your workloads to the cloud as-is, and all you will get are workloads in the cloud plus a cloud bill. However, move your workloads to the cloud, with the right architecture and tools and you will reap the full benefits of scalability, lower costs, and agility.
The same is true with containers: going a little further than just containerizing everything brings massive benefits. That’s where orchestration with Kubernetes comes in.
Kubernetes is an open-source orchestrator created by Google and now maintained by the Cloud Native Foundation. Kubernetes automates the deployment and scaling of containers across clusters. It will essentially grab containers, and run them on the available compute power, taking care of allocating and replicating containers on hosts, and scaling up and down as needed.
Let’s examine the benefits of doing that.
Scalability & availability
One of the benefits you expect from containerization is to achieve scalability and more efficient use of the infrastructure. Kubernetes automates infrastructure management, from adding new compute nodes to the cluster, to autoscaling based on resource utilization metrics, to terminating unused resources. It supports pod affinity, meaning it will optimize where a container should be placed for the best performance.
Besides, Kubernetes was designed with high availability (HA) as a core principle. Enabling HA is just a few changes in parameters away, and then the cluster will self-heal and load-balance depending on the state of the physical infrastructure.
This means that instead of spending time manually managing and configuring servers, you can spend time optimizing your infrastructure to provide better customer experience and automating more and more.
Kubernetes leverages the portability of containers and automated placement on physical or virtual nodes to optimize capacity usage. Autoscaling means you can run at the right capacity at all times, optimizing costs.
Automate manual work. Stop firefighting.
When I reflect on technology trends, I try to always keep the big picture in mind. Besides the need for scalability and native support for cloud environments, high-performing teams seek to implement DevOps principles and automate themselves away.
That means there should be a way for developers to deploy in staging or production without taking too much risk, or without waiting for hours for a ticket to be approved by the team managing the infrastructure. Automating orchestration is a prerequisite to get there, and Kubernetes helps a lot. Natively, Kubernetes automates rollouts and rollbacks, without downtime. We will come back to that, but the array of tools around it also makes it simpler to adopt battle-tested pipelines used in other top-performing teams.
A side benefit of automation is accelerating cycles. If deployment and rollback are automated, then it becomes less risky to deploy.
Developers are able to ship their containers to the development cluster, then to use canary deployments, meaning testing new versions of the application in parallel with the old version, on a portion of the traffic. Similarly, product managers can test out features on just a portion of the user base. This contributes to creating a culture of shipping frequently, which impacts engineering, but also product management. Shipping faster means learning faster, resulting in faster go to market.
Shipping frequently also means shipping more incremental changes, and that results in shorter and less cumbersome QA cycles. In a traditional, big release cycle, you ship big pieces of code infrequently. That results in lots of complex testing, lots of bugs, and a lot of rework. It slows the team down because developers have to wait for long QA cycles to know what is working and what is not, but also because fixing the many bugs detected by QA takes time. By shipping incremental releases, frequently, QA costs will go down and team velocity will increase.
This does not come with Kubernetes alone, but it is the result of adding the right mindset to the right tooling. Experience and habits play a big role.
No more “works on my computer”
Tools such as minikube (a lightweight version of Kubernetes) allow developers to work locally in a setup that replicates production nearly 1 to 1. That means there will be a lot less variability between the development environment and the staging and production environment.
At their best, clusters become “cattle and not pets”, meaning creating an environment to experiment is fast, secure, and reproducible. There is no more production or development server, and “it works on my computer” does not exist.
Deal with on-prem & cloud and avoid lock-in
Kubernetes orchestrates resources, regardless of the provider. As such, it is a good way to orchestrate workloads in the cloud and on-premise, and unify the way a company works regardless of past and future infrastructure choices. Adopting Kubernetes can be the first step in moving some workloads to the cloud while keeping a single way to manage them. There are now tools that allow for easy deployment of Kubernetes on bare metal and in the cloud.
Besides, Kubernetes is open-source, standard, widely adopted, widely supported by a broad array of providers, which will avoid lock-in. Containers deployed in a given hosted Kubernetes solution can relatively easily be moved to another.
Like any technical choice though, adopting Kubernetes is a commitment, and it will somewhat lock you into Kubernetes. But Kubernetes is robust and extendible enough (see below) that this choice will be a good one for the foreseeable future.
Future proof and battle-tested
Managing infrastructure requires a lot of tooling, from monitoring to storage to observability. Kubernetes’ ecosystem has become one of its main strengths over time. As Tim Hockin, a Principal Software Engineer at Google and a contributor to Kubernetes puts it, “There’s the network ecosystem, the storage ecosystem, and the security ecosystem”. The ecosystem is growing fast and tackling new use cases, which is well illustrated by looking at the CNCF’s landscape.
Choosing Kubernetes means choosing the orchestrator that 78% of teams use in production, according to a recent poll. That means a robust and growing ecosystem of well-supported tools and less technological risk on your team alone. The building blocks are there, it’s up to you to put them together to build the orchestration system that works for you.
The hype around Kubernetes is real, but so are the pains it is solving. Although it has become the obvious choice, it is not enough to “just deploy Kubernetes”: you need to get the right tooling and processes around it to unlock the value.
Over the years, DevOpsBay has helped engineering teams adopt, and customize Kubernetes for their needs, but also trained them to change mindset and workflows to unlock all the benefits. Contact us for a free discussion around how to architect kubernetes for you.