Made Tech Blog

Kubernetes: The Good Parts

This is the start of a blog post series that will discuss the various aspects of Kubernetes. Inspired by Douglas Crockford’s cautionary tale (JavaScript: the good parts) we’ll try to guide you through the myriad of choices when choosing the type of Kubernetes installation, setting up a continuous pipeline to deploy your application to a Kubernetes cluster and how to secure said cluster.

What’s Kubernetes?

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

k8s-good-parts-001

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.

k8s-good-parts-002

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.

Further reading

  • kubernetes.ioThe canonical definition of “What is Kubernetes”

About the Author

Mark Sta Ana

Reliability Engineer at Smartwyre