Kubernetes is all the rage these days, and rightly so. The open source project, originally created by Google, is designed to automate the deployment and management of your containerized applications. But does Kubernetes create more problems than it solves? Is it worth the effort of the going through a steep learning curve to use Kubernetes to deploy your production applications? Let’s dig in and find out.
One of the most interesting aspects of Kubernetes is that it’s a platform designed to help development and operations teams go faster. Here’s the description of K8s as a platform directly from the Kubernetes website… “Even though Kubernetes provides a lot of functionality, there are always new scenarios that would benefit from new features. Application-specific workflows can be streamlined to accelerate developer velocity. Ad hoc orchestration that is acceptable initially often requires robust automation at scale. This is why Kubernetes was also designed to serve as a platform for building an ecosystem of components and tools to make it easier to deploy, scale, and manage applications.”
Problems Solved Using Kubernetes
When it comes right down to it, Kubernetes was created to automate most of the tasks associated with deploying many clustered services across many infrastructure components. Kubernetes provides the following capabilities:
- Automatic deployment of application services
- Automatic configuration of application network
- Automatic distribution of services across infrastructure
- Automatic resource allocation for application services
- Automatic load balancing between application components
- Automatic replication of application components
- Automatic failover of application components
- Easily scale out application services when required
- Sharing of storage across multiple containers
Kubernetes is certainly a great automation tool for deploying and managing distributed containerized application services. It would be very labor intensive and time consuming to try to achieve the same results manually, if possible at all.
Problems Created Using Kubernetes
As with everything technology related there are benefits and drawbacks, and Kubernetes is no exception. Along with all of the problems Kubernetes solves, it creates some new challenges too.
- COMPLEXITY – Kubernetes itself is quite complex to install, configure, and manage
- Unknowingly over or under-allocating the available resources with negative results
- Pods might not start at all
- Pods might crash at really bad times – under high workload 🙁
- Using/configuring external load balancers to access your applications via the internet – yet another technology to learn and manage
- Creating health checks for every component
- Integration into build pipeline – running Kubernetes at scale requires integration and automation
- Learning YAML 🙁
- Monitoring – Kubernetes requires unique monitoring tooling especially if you want to understand the relationships between infrastructure, K8s, and application services
Kubernetes for the Uninitiated
The high degree of complexity in Kubernetes means that it requires a longer, steeper learning curve than most other technologies. As such, there are very few Kubernetes experts out there and your company most likely does not have those skills in house. Apart from the team who manages Kubernetes, there are many disciplines in the application delivery organization that need information from or about Kubernetes as it relates to the deployed applications and services. For example, after a developer commits a code update, there are many questions that need to be answered.
- Has the new version been deployed?
- Are all of the desired replicas running?
- If the deployment failed, why?
- Was there a performance regression?
- Are there any errors?
- Are there performance optimization opportunities?
The answers to some of these questions are contained within Kubernetes, but to answer all of these questions requires correlation between Kubernetes monitoring data and application monitoring data. This requires a monitoring solution that is capable of understanding infrastructure, Kubernetes, and application dependencies. This requires a monitoring system that can aggregate data across Kubernetes clusters and isolate data for each Kubernetes service. This requires a system that makes it easy to transition between and analyze – infrastructure, Kubernetes, and application performance data to isolate root cause and quickly respond to incidents.
Enhancing the abilities of Kubernetes experts and making Kubernetes accessible to the rest of us are key elements to Instana’s monitoring philosophy. If your company uses Kubernetes you need to experience Instana in your own environment today. It takes 5 minutes to start monitoring Kubernetes and all of your application services. Sign up for your free trial today.