Skip to main content

Setup a k3s Cluster at home quickly

·468 words·3 mins
Table of Contents
Devops - This article is part of a series.
Part : This Article

I was setting up a new Fedora Server VM over the weekend and wanted to use it as a kubernetes cluster to run my containerized workloads. I usually install docker and docker-compose and get on with my work. But I wanted to set up a k8s cluster for fun. When looking up online I found a quick and easy way to set it up.

Why k3s over k8s?
#

Rather than going with a full-blown k8s cluster with multiple VMs, I went with a single node k3s setup. k3s is a lightweight k8s, it has a smaller footprint and is great for a home lab.

I would encourage you to check out their docs for more info based on your requirements, but the gist is as follows.

Requirements
#

The minimum hardware requirement is

Spec Min Recommended
CPU 1 core 2 core
RAM 512 MB 1 GB  

I am running this on a Fedora Server VM with 4 cores and 8 GB of RAM, so well above the recommended settings.

Installation
#

The command to install is,

curl -sfL https://get.k3s.io | sh -

It will ask for the sudo password. Have a look at the script before running it at Installation Script. Also, they have a lot of options to customize the components installed. Check out the full list at Config Options.

Verify the install
#

If everything goes well, you should be able to check the service through systemctl.

$ systemctl status k3s
● k3s.service - Lightweight Kubernetes
     Loaded: loaded (/etc/systemd/system/k3s.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Sun 2024-07-14 18:47:30 IST; 21min ago
       Docs: https://k3s.io

Check the default k3s objects
#

Running the following command gives you all the k3s objects deployed.

$ sudo kubectl get all -n kube-system
NAME                                         READY   STATUS    RESTARTS   AGE
pod/coredns-6799fbcd5-svqqf                  1/1     Running   0          26m
pod/local-path-provisioner-6f5d79df6-d8h5g   1/1     Running   0          26m
pod/metrics-server-54fd9b65b-5xxq4           0/1     Running   0          26m

NAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns         ClusterIP   10.43.0.10 <none>        53/UDP,53/TCP,9153/TCP   26m
service/metrics-server   ClusterIP   10.43.198.179 <none>        443/TCP                  26m

NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns                  1/1     1            1           26m
deployment.apps/local-path-provisioner   1/1     1            1           26m
deployment.apps/metrics-server           0/1     1            0           26m

NAME                                               DESIRED   CURRENT   READY   AGE
replicaset.apps/coredns-6799fbcd5                  1         1         1       26m
replicaset.apps/local-path-provisioner-6f5d79df6   1         1         1       26m
replicaset.apps/metrics-server-54fd9b65b           1         1         0       26m

Configuring k3s
#

Create and edit the following file to configure the k3s setup.

sudo vi /etc/rancher/k3s/config.yaml

Check out all the available config at k3s Config.

Post, the creation/updation of the config file, restart using systemctl.

sudo systemctl restart k3s

Stopping k3s
#

Just use systemctl to stop the service.

sudo systemctl stop k3s

Unintalling k3s
#

Uninstalling is also a breeze with k3s, as it generates an uninstall script as soon as you install k3s at /usr/local/bin/k3s-uninstall.sh.

Just run the script to uninstall.

/usr/local/bin/k3s-uninstall.sh

Post uninstall and check the status with systemctl.

systemctl status k3s
Devops - This article is part of a series.
Part : This Article