For engineers, Kubernetes Installation can be a challenge since there is a huge selection of Kubernetes distributions and tools to set them up, making choosing the best one for your use case difficult. Getting started with a Kubernetes cluster requires different configuration challenges and utilities. We will discuss K3s, a very powerful lightweight Kubernetes distribution that you can install in a matter of minutes.

The K3s binary is designed to be a single binary of less than 40 MB that implements the Kubernetes API. It’s like software without excess drivers.

K3s offer the following features:

  • It can be run over a starting RAM of 512MB .
  • For edge devices, K3s is a highly available, certified Kubernetes distribution.
  • Even a Raspberry Pi can be used with great success.
  • Instead of etcd, SQLite is used as the storage backend, and Containerd is used as the default container runtime (not Docker).
  • With utilities like k3sup and k3d, you can easily install K3S. This post will show you how to install k3s using k3sup (ketchup), which is a lightweight utility to quickly and easily set up Kubeconfig with k3s on the local or remote machine.

Prerequisite

  • You need to have a Linux machine (VM or physical) with a minimum of 512MB of RAM.
  • A supported Linux distribution (Ubuntu, CentOS, or RHEL). We’ll be using Ubuntu 22.04 LTS.
  • Sudo or root access.
  • A working internet connection.

Installation

Download the k3sup using the GitHub repo of Alex Ellis https://github.com/alexellis/k3sup.

Command to install k3sup:

curl -sLS https://get.k3sup.dev | sh

Output:

root@demo:~# curl -sLS https://get.k3sup.dev | sh
x86_64
Downloading package https://github.com/alexellis/k3sup/releases/download/0.12.0/k3sup as /tmp/k3sup
Download complete.

Running with sufficient permissions to attempt to move k3sup to /usr/local/bin
New version of k3sup installed to /usr/local/bin
 _    _____                 
| | _|___ / ___ _   _ _ __  
| |/ / |_ \/ __| | | | '_ \ 
|   < ___) \__ \ |_| | |_) |
|_|\_\____/|___/\__,_| .__/ 
                     |_|    
Version: 0.12.0
Git Commit: c59d67b63ec76d5d5e399808cf4b11a1e02ddbc8

Give your support to k3sup via GitHub Sponsors:

https://github.com/sponsors/alexellis

================================================================
  Thanks for choosing k3sup.
  Support the project through GitHub Sponsors

  https://github.com/sponsors/alexellis
================================================================

root@demo:~# 

Now we can use k3sup to install k3s. In this example, we will use the k3sup utility to install k3s on a local machine.

Command:

k3sup install --local

Output:

root@demo:~# k3sup install --local
Running: k3sup install
2022/07/14 22:19:42 127.0.0.1
Executing: curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC='server --tls-san 127.0.0.1' INSTALL_K3S_CHANNEL='stable' sh -

[INFO]  Finding release for channel stable
[INFO]  Using v1.23.8+k3s2 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.23.8+k3s2/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.23.8+k3s2/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Skipping installation of SELinux RPM
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh
[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh
[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env
[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service
[INFO]  systemd: Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  systemd: Starting k3s
stderr: "Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.\n"stdout: "[INFO]  Finding release for channel stable\n[INFO]  Using v1.23.8+k3s2 as release\n[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.23.8+k3s2/sha256sum-amd64.txt\n[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.23.8+k3s2/k3s\n[INFO]  Verifying binary download\n[INFO]  Installing k3s to /usr/local/bin/k3s\n[INFO]  Skipping installation of SELinux RPM\n[INFO]  Creating /usr/local/bin/kubectl symlink to k3s\n[INFO]  Creating /usr/local/bin/crictl symlink to k3s\n[INFO]  Creating /usr/local/bin/ctr symlink to k3s\n[INFO]  Creating killall script /usr/local/bin/k3s-killall.sh\n[INFO]  Creating uninstall script /usr/local/bin/k3s-uninstall.sh\n[INFO]  env: Creating environment file /etc/systemd/system/k3s.service.env\n[INFO]  systemd: Creating service file /etc/systemd/system/k3s.service\n[INFO]  systemd: Enabling k3s unit\n[INFO]  systemd: Starting k3s\n"Saving file to: /root/kubeconfig

# Test your cluster with:
export KUBECONFIG=/root/kubeconfig
kubectl config set-context default
kubectl get node -o wide
root@demo:~# 

At this point, we have a k3s cluster running on our local machine. And we can verify that it is running by using the kubectl commands listed below.

export KUBECONFIG=/root/kubeconfig
kubectl config set-context default
kubectl get node -o wide

Output:

root@demo:~# kubectl get node -o wide
NAME   STATUS   ROLES                  AGE   VERSION        INTERNAL-IP    EXTERNAL-IP   OS-IMAGE           KERNEL-VERSION      CONTAINER-RUNTIME
demo   Ready    control-plane,master   56s   v1.23.8+k3s2   172.27.7.100   <none>        Ubuntu 22.04 LTS   5.15.0-27-generic   containerd://1.5.13-k3s1
root@demo:~#