Let’s start with a simple use case of a developer wanting to deploy her application to Kubernetes.
She creates a Pod or a Deployment Object, a ConfigMap, and a Secret for the application. If the application needs to be exposed to the outside world, she then deals with Ingress and Ingress Controllers. For Availability and Scalability, a Horizontal Pod Autoscaler, and for database needs, she creates Persistent Volumes and Volume claims.
In short, to deploy a simple app in Kubernetes, one needs to deal with 8-10 Kubernetes objects. And it doesn’t stop there, once the app is up and running, you then have to deal with the operational side of things – monitoring, logging, tracing, etc.
These are just way too many moving parts that a developer needs to deal with beyond building their applications and serving customers. This is in no way to scare you off Kubernetes. Kubernetes is designed with decoupling at its core and to provide flexibility for its users. But that brings along a bit of a learning curve for successful adoption.
Now, let’s switch to the other side – the IT operations. Every organization has varying needs of security, networking, cost, and availability needs. These are governed through different policies and compliances enforced at various layers of the infrastructure.
All of those policies, and the tools that are used to implement those policies need to continue to work in the Kubernetes world.
Most organizations who move beyond their “Hello World” applications on Kubernetes to running a production workload on Kubernetes face this challenge today.
This isn’t a challenge that we haven’t faced before. Any new technology adoption brings these challenges and we have always dealt with them – by building internal tools and Platforms.
And today, if you are adopting Kubernetes at scale in your organization, there is a need to build a platform. A platform that is focused on your developers.
Key Components of the Platform
Now that we have established why you need an internal Kubernetes platform, let’s dive into some of the essential components of this platform.
Simplified, Enterprise Grade Cluster Provisioning
The first step to any Kubernetes journey is obviously getting your cluster up and running. The platform needs to take care of two major aspects of Cluster provisioning:
- Simplified Experience
- Enterprise Grade
Developers should be able to provision a cluster in a few simple steps without requiring to provide complex inputs that they may not understand fully. The platform should make some default choices and let the developers input only the bare minimum required ones.
At the same time, as an organization, you would typically have certain Security, Networking, or Governance related policies. Such as cluster endpoints being private, production clusters operating in 3 Availability Zones, Dev/Test clusters utilizing AWS Spot Instances, etc.
The platform needs to bake in these best practices and apply them automatically as part of the cluster provisioning process.
Application Centric Configuration Management
Every workload that gets deployed within the cluster would have certain requirements around Configuration, Secrets, Scaling, Persistent Volumes, etc. The platform should be capable of automatically deploying the underlying Kubernetes Objects to meet these needs without the developer requiring to perform any plumbing.
The platform should be able to provide easy-to-use interfaces that developers can use to configure these without the need for understanding how the underlying Kubernetes APIs work.
Integrated Observability
Your developers need various tools to make sure they are able to observe how their applications are running within the Kubernetes environment. Out-of-the-box integration for Monitoring, Logging, and Tracing need to be automatically provided for the deployed applications.
The Observability space within Kubernetes is evolving pretty rapidly and today the following stack is recommended:
- Prometheus for metrics
- Tempo for Tracing
- Loki for Logging
- Grafana for Dashboards
The above stack provides an integrated view of Monitoring, Logging, and Tracing in one place for your developers.
Also, the platform should take care of automatically managing long term storage backends for all these Observability components.
In the next post, we will look at three more essential capabilities that the platform should offer.