Kubernetes automates our deployment activities. It lets us define our desired system using its templates called the Kube API objects. As discussed in our previous article, it simplifies the infrastructure provisioning, network configuration and manages the containers at scale.
The diagram provides a summary of the features it provides. The diagram has our application at the center and shows various features the framework provides for its easy management.
Summary of the Features
Horizontal Scaling : Kubernets allows us to scale our applications through simple configurations. Moreover, the framework takes care of the distribution of the loads. And, it also allows us to add new servers to meet the extra resource requirements.
Auto Scaling : K8s enables us to auto-scale based on our usage. We may configure our application to add new instances as the current usage exceeds 90% of CPU or 85% of memory for instance. This is quite useful in addressing peak loads and unexpected in spikes in application usage.
Auto Recovery : Kubernetes keeps monitoring the state of the system at frequent intervals. In case of any deviation, it quickly starts its restoration process to bring the actual state back to the desired state. As it restores, its does this with its in-built best practices. For instance, it can stop the traffics towards the failed server or application instances and re-start it as the instance are restored.
Auto Placement : The best-practices in K8s ensures the optimal utilization of the resources. As part of this, every time we plan to create new a instance of our application, it uses a scheduler to evaluate the most suitable server.
Auto Deployment: It supports rolling update deployment which can automate our deployment and version upgrades. It ensures the availability of the application, even during deployment, as it migrates the instances one by one. Moreover, if the new instances fail to come up, it can stop deployment process. But, we need to ensure new versions are backward compatible to fully utilize a rolling deployment. Hence, to address compatibility concerns it supports other deployments as well.
Auto Discovery & Service Exposure: A traditional setup involves a lot of effort to address the discovery and service exposure. However, K8s automatically handles complexities using its meta-data and configuration in its API objects.
Flexible Storage Options : It supports plugging in a wide range of storage options including local and cloud storage.
Portable Applications : It provides an elegant solutions to externalize the configuration and confidential information. Thus, it makes it easy to build portable applications.
Flexible Server Choice : Kubernetes is portable. We can install it on a bare-metal, virtual machines or cloud servers. We can use it as a private cloud, move it to a public cloud or use it as a hybrid.
Its being a container management system, it also enables us to easily plug-in other cloud-native solutions.
Supporting Tools & Solutions
Kubernetes is one of the best tools for automating our deployment activities at scale. Its main focus is to manage the deployment infrastructure and the deployed applications.
We need a right set of supporting tools to effectively utilize this in our development process. Many of these tools are open-source and some are part of the K8s add-on. Here are some of those key supporting tools:
- CI\CD & Image Registry :
- Kubernetes starts after we are ready with our containerized builds. A private image registry (like nexus, JFrog, Docker etc) and a suitable CI\CD tool like Jenkins act as the input for our deployment process.
- Logging and Monitoring Tools :
- Essential tools for monitoring the health, critical issues, alerts and useful matrices.
- Example Tools – K8s dashboard, Prometheus, Grafana,Weave Scope, EFK stack, cAdvisor, Kube-state-metrics
- Tracing Tools :
- They usually provide visual tracing which is very very useful in tracing transactions and performance bottlenecks in a micro-service based applications in distributed environments.
- Example Tools – OpenTracing, ZipKin, DynaTracing and Jaeger
- Right Ingress Solution :
- These solution can greatly enhance the power of Ingress load balancing, performance and security features for external client communications.
- Example solutions – NGNIX, Kong, AWS ALB , Ambassador, Gloo etc.