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
SpecMinRecommendedCPU1 core2 coreRAM512 MB1 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 26mNAME 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 26mNAME 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
Originally published at vignesh.page.
Please comment any workloads you have for a k3s cluster at home.