How Install Kubernetes on RHEL 10 with CRI-O | kubeadm Step-by-Step

Опубликовано: 14 Март 2026
на канале: LinuxTechi
148
4

In this tutorial, you’ll learn how to install Kubernetes on RHEL 10 using CRI-O container runtime with one control plane node and one worker node.

This step-by-step guide is beginner friendly, production-aligned, and perfect for:
Learning Kubernetes fundamentals
RHEL-based Kubernetes labs
DevOps & Cloud practice environments

📌 Setup Overview
OS: RHEL 10
Kubernetes Version: v1.34
Container Runtime: CRI-O
Cluster Type: 1 Control Plane + 1 Worker Node

🔧 Prerequisites
Two RHEL 10 systems (VM or Physical)
Root or sudo access
Active Red Hat subscription
Minimum: 2 vCPU, 2 GB RAM
Internet connectivity between nodes

Step 1: Update System & Set Hostnames
sudo dnf update -y
sudo reboot

Set hostnames
sudo hostnamectl set-hostname k8s-control
sudo hostnamectl set-hostname k8s-worker

Update /etc/hosts
sudo vi /etc/hosts
192.168.1.96 k8s-control
192.168.1.4 k8s-worker

Step 2: Disable Swap (Mandatory) and SELinux
sudo swapoff -a
sudo sed -i '/ swap / s/^/#/' /etc/fstab

Set SElinux to Permissive Mode
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config

⚙ Step 3: Load Kernel Modules & Sysctl Settings
sudo vi /etc/modules-load.d/k8s.conf
overlay
br_netfilter
Save & close the file

sudo modprobe overlay
sudo modprobe br_netfilter

Apply sysctl parameters

sudo vi /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
save and exit the file

sudo sysctl --system

🔥 Step 4: Configure Firewall
Control Plane Node
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250-10252/tcp
sudo firewall-cmd --reload

Worker Node
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp
sudo firewall-cmd --reload

🧱 Step 5: Install CRI-O Container Runtime
CRIO_VERSION=v1.34
sudo vi /etc/yum.repos.d/cri-o.repo
[cri-o]
name=CRI-O
baseurl=https://download.opensuse.org/reposit...
enabled=1
gpgcheck=0
gpgkey=https://download.opensuse.org/reposit...

sudo dnf install -y cri-o
sudo systemctl enable --now crio
sudo systemctl status crio

📦 Step 6: Install Kubernetes Components
KUBERNETES_VERSION=v1.34
sudo vi /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://pkgs.k8s.io/core:/stable:/$KU...
enabled=1
gpgcheck=1
gpgkey=https://pkgs.k8s.io/core:/stable:/$KU...
exclude=kubelet kubeadm kubectl cri-tools kubernetes-cni

Install kubeadm, kubelet & kubectl
sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
sudo systemctl enable --now kubelet

🚀 Step 7: Initialize Control Plane
sudo kubeadm init \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=unix:///var/run/crio/crio.sock

Configure kubectl access
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

🌐 Step 8: Install Flannel CNI
kubectl apply -f https://github.com/flannel-io/flannel...

Verify:
kubectl get pods -n kube-flannel

🤝 Step 9: Join Worker Node
sudo kubeadm join {control-ip:6443} --token {token} \
--discovery-token-ca-cert-hash sha256:{hash}

Verify from control plane:
kubectl get nodes

🧪 Step 10: Test Kubernetes Cluster
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80
kubectl get svc

Access app:
http://[node-ip]:[node-port]

You have successfully installed Kubernetes on RHEL 10 using CRI-O with a 1 Control + 1 Worker Node setup.

👍 Like | 🔔 Subscribe | 📢 Share
for more Linux, Kubernetes, DevOps & Cloud tutorials.