State of Kubernetes 2023
Kubernetes for Developers: Part VII
Welcome to Part VII of the “Kubernetes for Developer” series!
For those of you who have been following along, we started from reviewing Docker basics and built our way onto crucial Kubernetes concepts such as pods, controllers, networking, and resource management. Finally, last week, we covered some popular Kubernetes tools to help you interact with Kubernetes easier.
This week, we’ll take a brief detour from those dense topics and circle back to why we started this series in the first place. In particular, I want to talk about the state of Kubernetes and the developer experience (or the lack thereof). Hopefully this post can help spark some productive conversations within your organization or even inspire you to come up with a fix!
This series is brought to you by DevZero.
DevZero’s platform provides cloud-hosted development environments. With DevZero, you can reuse your existing infrastructure configuration to configure production-like environments for development and testing.
Check out DevZero at devzero.io to get started today!
State of Kubernetes 2023
As we mentioned in Part I of this series, Kubernetes is undoubtedly very popular and has become the de facto standard for container orchestration. Over the years, we’ve seen other competing products like Docker Swarm lose traction and eventually converge into supporting Kubernetes and its growing ecosystem.
Besides its popularity, one of the most interesting findings from various Kubernetes surveys has been the purported value. According to VMware Tanzu’s State of Kubernetes 2023 report, a stunning 90% of survey respondents (752 software development and IT professionals across the world) have reported Kubernetes transforming the way their business operates as well as benefiting their entire organization beyond IT.
Digging deeper into those benefits, the report showed more than 60% agreeing with statements that IT operators and developers are more efficient and productive with Kubernetes. The top two quoted benefits were improved resource utilization (50%) and shortened software development cycles (41%).
While these numbers paint a rosy picture, in my experience, the reality is a bit more complex. It’s not to say that I don’t agree with the survey results. I have seen tremendous value both operationally and in terms of developer productivity in all the companies that I’ve worked at and consulted for in adopting Kubernetes. However, those benefits come at a cost, especially during the transition period of implementing various Kubernetes clusters and tooling across all the environments. The end result is certainly worth it, but along the way, developer experience tends to suffer.
While these numbers paint a rosy picture, in my experience, the reality is a bit more complex. It’s not to say that I don’t agree with the survey results. I have seen tremendous value both operationally and in terms of developer productivity in all the companies that I’ve worked at and consulted for in adopting Kubernetes. However, those benefits come at a cost, especially during the transition period of implementing various Kubernetes clusters and tooling across all the environments. The end result is certainly worth it, but along the way, developer experience tends to suffer.
Kubernetes is Still Hard
The main problem is that Kubernetes is still very hard in 2023.
Take a look at Spectro Cloud’s 2022 State of Production Kubernetes report where they asked developers about the challenges their organizations face with using Kubernetes.
Top results were:
- We lack skills and headcount to manage and support Kubernetes (37%)
- It’s challenging to put in needed guardrails for enterprise production environments (e.g., compliance, security, access controls) (36%)
- Configuration drift causes issues with compliance and availability (35%)
- It’s difficult to choose and validate the right stack components from the broad cloud-native ecosystem (35%)
- It’s hard to manage K8s across diverse environments (34%)
- Many Kubernetes ecosystem components lack enterprise-grade technical support (34%)
- We can’t easily quantify cost, value, and ROI to demonstrate project success (31%)
- Our overall Kubernetes stack is complex and changes all the time (31%)
- We struggle to keep multi-cluster deployments consistent (30%)
These results largely align with the challenges I’ve seen first hand. In my view, this all stems from the fact that Kubernetes itself is still changing rapidly. For a relatively mature product, Kubernetes releases new versions too frequently with a short support timeline for older versions. This causes infra teams to spend a lot of time just keeping the lights on. Some hyperscalers provide excellent experience with managed upgrades, node patching, etc (e.g., GKE), whereas others leave a lot to individual teams with indeterministic upgrade behavior (e.g., EKS), causing teams to create new clusters and move workloads over instead of upgrading in place.
This has multiple downstream effects:
- The learning curve for Kubernetes is high (and ever-changing). For infra teams, they must be plugged in to keep up with new releases, trends, tools, etc. For developers, it’s daunting to learn about it in the first place, only to find out that their understanding may already be obsolete.
- Kubernetes experience is different depending on the environment. I’ve seen startups use Kubernetes exclusively in lower environments, but have custom solutions in production due to issues with implementing “enterprise-ready” features for compliance, security, and access control. On the other hand, I’ve also seen large enterprises with Kubernetes used in production managed by a large team, but have left lower environments built on top of EC2 or ECS as is.
- Also, it’s very common to see “local” environments whether that means a developer’s laptop or some VM on the cloud still largely utilizing Docker or Docker Compose only. Developers write their code, run some integration tests with Docker Compose or test containers, and throw the “Kubernetes-fication” portion to the DevOps team to figure out. This ends up doubling the effort of maintaining their Docker infrastructure as well as Kubernetes infrastructure.
- Building out a useful abstraction layer requires tremendous effort to maintain. Naive approaches at this such as patching together some open-source tools usually ends up incurring more of a learning tax and maintenance burden rather than bringing actual value to developers. But at the same time, expecting developers to interact with Kubernetes via kubectl or simple dashboard only is also not the best experience.
In other words, until your team has built enough Kubernetes knowledge and infrastructure to support developers, the experience will be fraught with challenges.
Yet There’s Hope
Despite all the challenges, there is a reason why Kubernetes adoption is growing. Also, to be fair, Kubernetes is only 10 years old, so there’s still a lot of room for growth and innovation. We are already seeing exciting developments like Virtual Clusters and enterprise-grade management platforms built on top of Kubernetes to solve some of the aforementioned issues.
Kelsey Hightower, famous Developer Advocate especially on Kubernetes, summed it up best in a recent interview on Github’s ReadME podcast: “The future of Kubernetes is, if we’re being honest, that it has to go away. If we’re still talking about Kubernetes 20 years from now, that would be a sad moment in tech because we didn’t come up with any better ideas.” He said this after characterizing Kubernetes as a “project that implemented the previous ten years of [best] patterns.” And he finally left with commenting on how the doubters and those who initially watched on the sidelines are now trying to build on top of Kubernetes, and “one of those are going to work out one day, and then that will be the new thing that shows up.”
Kubernetes is hard, because it was designed to solve complex problems. But just as Kubernetes was born after decades of experimentation, the new thing, as Hightower mentions, will come once we work through the challenges of Kubernetes.
Wrapping Up
Next week is the final installment of the Kubernetes for Developer Series. We’ll cover some advanced Kubernetes topics that are useful to know, namely service mesh and operators. Thanks for following along so far and see you next week!
Kubernetes for Developers Series
- Part I: Why learn Kubernetes at all?
- Part II: Docker basics
- Part III: Kubernetes 101 — Pods & Controllers
- Part IV: Kubernetes 101 — Architecture & Networking
- Part V: Kubernetes 101 — Resource Management & Scheduling
- Part VI: Popular Kubernetes Tools
- Part VII: State of Kubernetes 2023
- Part VIII: Advanced Kubernetes Topics