What is K3s?

Brick wall with the letter "K" number "3" and the letter "s" that represents K3s

What is K3s?

Five less Ks than K8s, but just as powerful in the right environment. Seriously, though, K3s are a smaller, certified, fully compliant open-source Kubernetes distribution that is a perfect candidate for fitting into your edge, IoT and CI infrastructure beautifully. It is a much slimmer distribution that does not require a Ph.D. in Kubernetes and is hyper-focused on resource-constrained environments and low touch operations.

Just how small is the distribution? It is about ¼ the size of vanilla Kubernetes, and it can boot up in about 30 seconds, with your containers immediately available. Now that is impressive! You can be up and running with a K3 cluster in minutes, it really is that easy.

Requirements

What are the actual hardware requirements? They are very low, and you can easily run your own cluster on a Raspberry Pi, or even on a large VM just as easily.

The requirements to run K3 are:

  • Linux 3.10 or higher
  • 512 MB RAM (per server)
  • 75 MB RAM per node
  • 200 MB of free disk space
  • 86/64/ARMV7/ARM64 chip

How Does it Compare?

To compare with vanilla Kubernetes, a single node of a Kubernetes cluster with Docker uses a little over 1GB of memory just to exist. Whereas a comparable K3 node only takes up a little over 260 MB of memory, and that includes the ingress controller and a service load balancer that is not present in the K8 install.

Just how did they get it so small? One thing you must know is that it is a highly opinionated distribution. If there was more than one way to do something, they only kept one. Sure, this is highly subjective, but it has helped reduce the footprint incredibly.

The other things they looked at were the legacy and alpha features within Kubernetes and stripped them out. A lot of external dependencies have also been removed, but they did keep containerd, Flannel, CoreDNS and the standard host utilities, such as iptables and socat, which are required. Also removed were the in-tree providers and the storage plugins. They also removed the Docker binary dependency and went with containerd, which shaved a lot of weight. This got it down to a 40 MB binary that loads super quick.

The default ingress is Traefik, a much better option than Nginx in my opinion (I have fought with Nginx more than I care to admit). However, you are not tied to Traefik as your ingress, as you can just as easily boot up your cluster with no ingress at all and deploy your own. It also packages kubectl within the distribution, which I always thought should be included.

They also kept in the local storage provider, a simple host port based service load balancer and the always required Helm controller. These are all more than enough to get you started quickly. They removed the latency prejudiced etcd and swapped it for an embedded SQLite datastore, but it also supports external datastores as well.

With such a small footprint, it takes away the guesswork, and fears, of upgrading your underlying OS and cluster. If you have ever had to upgrade Kubernetes (or the OS it resides on), you know how complex it can be. K3s allows you to separately patch and upgrade easily. That is a huge win that cuts down on the complications that can arise.

The Origin of K3

So how did K3 come to be? We have Darren Shepherd at Rancher Labs to thank for that. K3 spurred during one of Rancher’s other projects called Rio, a really cool application deployment engine for Kubernetes that is worth checking out. They were stripping down Kubernetes to include in the Rio deployment to allow for simple deployments of a complete package, but soon found interest in their stripped down Kubernetes environment. Noticing this interest, and based on customer feedback, they decided to strip it out of Rio and promote K3 to a top level project. The rest is history!

Learn More

There is currently no Windows support, but that may not be off the table. It will all depend on community interest, just like any project.

Take a look, and see how it fits in your environment. It is easy to get up and running quickly, even for local development. Much easier than MiniKube (I promise).

K3 fits nicely with Ranchers “Kubernetes Everywhere” mantra, and I fully expect them to have a K1 release soon that will run on my Apple Watch.

Read more about K3s at the official site (https://k3s.io/), which also gets you started quickly in setting up your own K3 cluster.

Also, check out K3sup (pronounced ketchup) at https://github.com/alexellis/k3sup – this is a great way to get up and running quickly. This also offers a great way to install Helm charts without tiller and it also works on K8 clusters as well, not just K3.

How can this complement your current CI pipelines or project? RLT would love to hear about it!