Why a developer needs Kubernetes
To begin with - briefly what Kubernetes is.
So, let's say you use Docker, package applications into Docker images, and deploy to production. This works if you have a simple application and you are delighted with how it works. But this is not enough if the requirements for your applications are higher than usual.
- Fault tolerance. If an application running in a single instance crashes, you will have problems. So it would be useful to have multiple instances and balance between them.
- Resource limits. Everyone wants to limit applications preventing them from occupying the processor and memory.
- Scalability. When the load on applications becomes high, balancing won't help. In this case, you need to optimize the application or even the infrastructure. What if there is no time for this? In this case, the solution is to increase the number of application instances quickly.
- Combining applications into groups. The apps were supposed to be less isolated from each other: they need a shared drive, namespace, and so on.
- Collecting metrics and logs. You need to make an approach that allows you to collect such data.
- Security and access control. When a company has many teams and products, it will be necessary to organize access to the cluster, for example, according to roles and groups.
- Simple integration with different solutions.
- Launching applications on a schedule.
Docker will not cope with the above; you will have to look for another solution. Among suitable options, Kubernetes stands out in that it provides a reasonably simple opportunity to implement the above requirements, which is far from all of its capabilities.
Kubernetes is an open-source orchestration system for managing a cluster of containers. It runs containers (for example, using Docker) on many hosts and manages them. The platform has a large, rapidly growing ecosystem. Kubernetes services, support, and tools are widely available.
But great opportunities always have a downside. In the case of Kubernetes, this is the complexity of configuration and maintenance. Even technologically advanced companies do not always have the resources to understand the intricacies and take full advantage of its operation.
It's a good idea to compare Kubernetes with a framework: we have a runtime environment for applications, there are strict interface boundaries with the possibility of customization and extension, and also full of abstractions that make it relatively simple and it is convenient to manage.
So how does Kubernetes work?
The core of Kubernetes is the cluster. Clusters are formed from a set of virtual or physical machines. Each of them performs a specific function - node or master. Each node stores groups of one or more containers (with your applications), and the master node tells the worker nodes to create, delete containers and reroute traffic based on the new container location.
The general layout of a Kubernetes cluster:
Other useful components for Kubernetes:
Kubernetes provides a mechanism for discovering services between pods using DNS. This DNS server works in addition to any other DNS servers in your infrastructure.
If you have a logging tool, you can integrate it with Kubernetes to extract and store application and system logs taken from the cluster and written to standard output and standard error codes. If you want to use cluster-level logs, keep in mind that Kubernetes does not provide a place to store logs, so you must choose a log storage solution yourself.
Helm is an application manager registry for Kubernetes maintained by the Cloud Native Computing Foundation. Helm charts are pre-configured application software resources that you can download and deploy to your Kubernetes environment. DevOps teams can manage applications on Kubernetes more quickly with pre-built Helm maps that they can share, augment, and deploy across their development and production environments.