Definition of Kubernetes
Kubernetes (K8S) is an open-source container-orchestration system for automating cloud-native application deployment, hosting, and management.
A Kubernetes architecture implements many non-functional requirements such as high-availability, elastic scaling and no-downtime upgrades for appropriately designed applications.
Kubernetes standardizes application deployment format (container & helm charts) and observability (OpenTelemetry).
Its scope has been recently extended to cover management of storage (CSI - Container Storage Interface) and networking (CNI - Container Network Interface). The defined interfaces make it possible to plugin implementations from different vendors.
Kubernetes is maintained by the CNCF (Cloud Native Computing Foundation).
A Kubernetes application consists of a set of containers. The application is described by a so-called helm chart. A helm chart describes the relationship of the containers and configuration options for a deployment. Given the containers and the helm chart, Kubernetes distributes the containers to different servers (“worker nodes”) and orchestrates them to ensure availability and scaling. See details in the following diagram.
Kubernetes can host Docker containers, alternatives like CRI-O or containerd are supported, too.
Kubernetes separates cross-cutting concerns like availability and scalability from the business logic. With that, developers can concentrate on the specific business problem, while IT administrators can use a single platform across different applications.
The business logic can be implemented in any programming language. This is in contrast to previous generation technologies like Java Enterprise Edition, Enterprise OSGi, or various low-code application platforms, which are programming language-specific platforms. Another advantage of the programming language independence is that most applications can be made Kubernetes-compatible with reasonable effort.
Kubernetes has been designed to run cloud-native (Definition applications. Cloud-native applications are scalable applications that are resilient, manageable, and observable. They run in public and private clouds.
Kubernetes has been designed for extensibility: To support different applications and infrastructure options, Kubernetes defines APIs (see CNI or CSI above). During deployment customers can then select one out of many implementations matching their requirements.
Kubernetes has been designed to manage 1000s of servers in a reliable approach. Technically this is supported using declarative configuration: Instead of using imperative statements to change the cluster configuration (state), an administrator describes the target configuration and Kubernetes controllers ensure that the target configuration is reached and maintained automatically.
Installing and operating Kubernetes can be complex with steep learning curve. This can be mitigated using a hyperscaler-operated Kubernetes environment.
The ability to run stateful applications has only been added recently. Implementing availability and scalability for stateful applications always was and still is extremely challenging. Kubernetes makes it somewhat easier, but the majority of the effort is still on the shoulders of the container developers.
Kubernetes is primarily architected to run applications providing HTTP endpoints. Hosting e.g. UDP based applications brings up challenges.
Kubernetes’ support for multi-tenancy is limited. That is, it is not trivial to host containers from different enterprises on the same Kubernetes cluster.
Relevance for IoT
To manage millions of devices, cloud-native IoT platforms are required for scalability, availability and observabililty reasons. Kubernetes is an excellent platform to achieve these goals. Also for hosting vertical-specific IoT applications on top of the IoT platform, Kubernetes is the best choice.
In IoT, the edge continuum (see e.g. 5G Edge) is important to meet availability, legal or response time requirements: In many cases, identical functionality is needed in cloud, far-edge, near-edge or on the IoT device. To deploy the same functionality across the continuum, Kubernetes (and its container format) provides an excellent platform.
Market - Adoption
Kubernetes is the de-facto standard for deploying for server-side applications. Many other platform (e.g. OpenShift) have replaced their own container orchestration with Kubernetes.
Most hyperscalers offer K8S as a service (AWS EKS, Azure AKS, Google GKE).
Kubernetes has a huge community among container orchestration tools with 200 contributors and a large ecosystem. K8S ecosystem providing different distributions, certifications, service mesh, CI/CD, observability, and security. See CNCF Landscape for details.
Many server-side applications and middleware can be deployed on Kubernetes nowadays.
Kubernetes will continue to be the dominant platform to host server-side applications for the coming years.