Kubernetes is a Platform as a Service (PaaS). This means we can automate our application deployments just like we can with Heroku and Cloud Foundry using a single YAML file to define how our application is configured and deployed.
We can also scale and monitor these applications in a generic fashion i.e. no specialised knowledge is required about the application. We can run one off computational tasks or have them scheduled on a regular basis.
Kubernetes is highly extensible, allowing you to add new functionality and provide APIs that other components within Kubernetes can interact with.
The components required to set up a Kubernetes cluster
A Kubernetes cluster consists of a Master and at least one Node (a worker machine, usually a virtual machine).
The Master (control plane) component (there can be more than one for resiliency) makes decisions on scheduling and responding to cluster events like provisioning and autoscaling.
The Node component carries out the actual work as instructed by the Master.
If we zoom into a node, we can see that a pod which is the smallest unit that can be deployed to a Kubernetes cluster consists of one or more containers. Just like containers are analogous to those in Docker (the only exception is that with Kubernetes you can use alternative container runtimes like rkt, containerd, cri-o, etc). Pods can be thought of as a docker compose file, where you orchestrate one or more containers to build an application.
One or more pods can form a deployment (often done to scale out an application). These pods are usually scheduled by the Master and assigned to nodes that have the capacity or specific capability.
Typical uses and applications
As we mentioned at the start, we can think of Kubernetes clusters as a personal Platform as a Server (PaaS). We can take this further and using a Kubernetes application like OpenFaaS, OpenWhisk and Fn turns our cluster into full-blown Serverless platform.
- kubernetes.io – The canonical definition of “What is Kubernetes”
- Cloud Native Computing is a one-stop shop for all Cloud Native related resources