How to Install Kubernetes Cluster Using K3s on RHEL 9 | 8

The step-by-step guide on this page will show you how to install Kubernetes cluster using K3s on RHEL 9 or RHEL 8. We will be setting up a single master node and two worker nodes, providing a scalable foundation for the containerized applications.

K3s is a lightweight, easy-to-install, and efficient Kubernetes distribution designed for resource-constrained environments, edge computing, and situations where simplicity and speed are paramount. Developed by Rancher Labs, K3s aims to simplify the deployment and operation of Kubernetes clusters, making it accessible to a broader range of users and use cases.


  • Pre-Install RHEL 9 or 8 Systems
  • Local User with Sudo rights
  • Minimum 1 GB RAM and 1 CPU core
  • Red Hat Subscription with reliable internet connectivity

Lab Details:

  • VM1:   K3s-master –
  • VM2: k3s-worker01 –
  • VM3: k3s-worker02 –

Without any further delay, lets jump into Kubernetes installation using k3s.

1) Set Hostname on Each Node

As we are using three node, one master and two worker nodes, set their respective hostname using hostnamectl command.

$ sudo hostnamectl set-hostname "k3s-master" && exec bash     // Run on VM1
$ sudo hostname set-hostname "k3s-worker01" && exec bash      // Run on VM2
$ sudo hostname set-hostname "k3s-worker02"  && exec bash     // Run on VM3

Add the following entries in /etc/hosts file on each node. k3s-master k3s-worker01 k3s-worker02

2) Add Firewall rules on Master and Worker Nodes

In case firewall is enabled on your RHEL systems, then allow following ports in firewall on the master node.

$ sudo firewall-cmd --permanent --add-port=6443/tcp
$ sudo firewall-cmd --permanent --add-port=8472/udp
$ sudo firewall-cmd --permanent --add-port=10250/tcp
$ sudo firewall-cmd --permanent --add-port=51820/udp
$ sudo firewall-cmd --permanent --add-port=51821/udp
$ sudo firewall-cmd --permanent --zone=trusted --add-source=
$ sudo firewall-cmd --permanent --zone=trusted --add-source=
$ sudo firewall-cmd --reload

Add following ports in the firewall on worker nodes.

$ sudo firewall-cmd --permanent --add-port=8472/udp
$ sudo firewall-cmd --permanent --add-port=10250/tcp
$ sudo firewall-cmd --permanent --add-port=51820/udp
$ sudo firewall-cmd --permanent --add-port=51821/udp
$ sudo firewall-cmd --permanent --zone=trusted --add-source=
$ sudo firewall-cmd --permanent --zone=trusted --add-source=
$ sudo firewall-cmd --reload

3) Install Required Tools

Install curl and wget on each node using the following dnf command.

$ sudo dnf install curl wget -y

4) Download and Install Kubernetes Cluster Using K3s on RHEL 9 | 8

Run following command on master node only,

$ curl -sfL | sh -


This script installs K3s and starts the service automatically.

Post k3s successful installation, verify k3s service using following command.

$ sudo systemctl status k3s


5) Configure Kubectl on Master node

In order to interact with Kubernetes cluster, we must configure kubectl utility, execute the following set of commands on master node.

$ mkdir ~/.kube
$ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
$ sudo chown $USER ~/.kube/config
$ sudo chmod 600 ~/.kube/config
$ export KUBECONFIG=~/.kube/config

Now, try to get node and cluster information using beneath kubectl commands.


Output above confirms that our master node is in Ready State and also Control plane, CoreDNS and Metrics-server are up and running.

In the next step, we will join our two worker nodes to this cluster.

6) Join Worker Nodes to K3s Kubernetes Cluster

The K3s installation generates a token for worker nodes to join the cluster. Retrieve it from the master node:

$ sudo cat /var/lib/rancher/k3s/server/node-token


Copy the token as you will need it in the next steps.

Now login to the worker nodes, run beneath command.

$ curl -sfL | K3S_URL=https://k3s-master:6443 K3S_TOKEN=<token> sh -

Replace <token> with the token you copied.

$ curl -sfL | K3S_URL=https://k3s-master:6443 K3S_TOKEN=K1074af52efef36e7667b6971e9d0c9ccf3608bcc50070dd5dfe51766e5bb7e764e::server:4870e82c91586749be4aaf4c4b3e75a8 sh -

Output from k3s-worker01


Output from k3s-worker02


Now head back to master node and run ‘kubectl get node‘ command to verify whether worker nodes have joined the cluster or not.

$ kubectl get nodes


Perfect, above output confirms that worker nodes have joined the cluster successfully.

7) Test K3s Kubernetes Cluster Installation

To test k3s Kubernetes cluster installation, lets deploy a nginx based application, run beneath command from master node.

$ kubectl create deployment nginx-web --image nginx --replicas 2
$ kubectl get deployment nginx-web
$ kubectl get pods


Expose the above created deployment with NodePort type.

$ kubectl expose deployment nginx-web --type NodePort --port 80
$ kubectl get svc nginx-web


Now try to access above deployed nginx application using curl command.

$ curl http://<Any-Worker-Node-IP>:30016


Great, output above confirms that our k3s Kubernetes cluster is working fine as we able to access our nginx sample application.

That’s all from this guide, we hope you have found it informative and useful. Feel free to post your queries and feedback in below comments section.

Also Read: How to Install Kubernetes Dashboard Using Helm

Share on:

I am a Cloud Consultant with over 15 years of experience in Linux, Kubernetes, cloud technologies (AWS, Azure, OpenStack), automation (Ansible, Terraform), and DevOps. I hold certifications like RHCA, CKA, CKAD, CKS, AWS, and Azure.

Leave a Comment