How To Install Kubernetes on Fedora 41

Kubernetes has become the de facto standard for container orchestration in modern cloud-native environments. Whether you’re managing microservices or scaling applications, Kubernetes provides the necessary tools to automate deployment, scaling, and management of containerized applications. In this guide, we’ll walk you through the complete process of installing Kubernetes on Fedora 41, ensuring that you have a fully functional cluster by the end.
Prerequisites
Before diving into the installation process, there are a few prerequisites you need to meet:
- System Requirements: Ensure your system has at least 2 CPUs, 2GB of RAM, and 20GB of disk space.
- Fedora 41 Installed: You should have a fresh installation of Fedora 41 with root or sudo access.
- Basic Knowledge: Familiarity with Linux commands and networking concepts will be helpful.
- Container Runtime: You will need either Docker or CRI-O installed as the container runtime for Kubernetes.
Step 1: Update Your System
The first step in setting up Kubernetes on Fedora is to ensure your system is up-to-date. Keeping your system updated ensures that you have the latest security patches and software versions.
sudo dnf update -y
sudo reboot
If any kernel updates are applied during this process, you may need to reboot your system for the changes to take effect.
Step 2: Install Container Runtime (Docker or CRI-O)
Kubernetes requires a container runtime to manage containers. You can choose between Docker or CRI-O. Below are instructions for both options.
Option A: Install Docker
If you prefer Docker as your container runtime, follow these steps:
Remove Conflicting Packages: Fedora comes with Podman and Buildah by default, which may conflict with Docker. Remove them first:
sudo dnf remove podman buildah -yInstall Docker:
sudo dnf install docker-ce docker-ce-cli containerd.io -yStart and Enable Docker Service:
sudo systemctl start docker
sudo systemctl enable dockerOption B: Install CRI-O
If you prefer using CRI-O as your container runtime (which is more lightweight and optimized for Kubernetes), follow these steps:
Install CRI-O and Networking Plugins:
sudo dnf install cri-o containernetworking-plugins -yStart and Enable CRI-O Service:
sudo systemctl start crio
sudo systemctl enable crioStep 3: Configure Kernel Modules and Network Settings
Kubernetes requires certain kernel modules and network settings to function properly. These settings will ensure that your system is ready for pod networking.
Load Kernel Modules:
sudo modprobe overlay
sudo modprobe br_netfilterCreate Sysctl Configuration File:
Create a new file called `/etc/sysctl.d/k8s.conf` with the following content:
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
Apply the Changes:
sudo sysctl --system
Step 4: Disable SELinux (Optional but Recommended)
Kubernetes recommends disabling SELinux for smoother operation. While not mandatory, it can help avoid potential issues related to security policies blocking certain actions.
Set SELinux to Permissive Mode Temporarily:
sudo setenforce 0
Permanently Disable SELinux:
Edit the SELinux configuration file located at `/etc/selinux/config` and change `SELINUX=enforcing` to `SELINUX=permissive`.
Reboot (if needed):
If you made changes to SELinux settings, reboot your system for them to take effect.
Step 5: Install Kubernetes Components (kubeadm, kubelet, kubectl)
The next step is installing the necessary Kubernetes components: `kubeadm`, `kubelet`, and `kubectl`. These tools are essential for managing your cluster.
Add Kubernetes Repository
Create a new repository file at `/etc/yum.repos.d/kubernetes.repo` with the following content:
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
exclude=kubelet kubeadm kubectl
Install Kubernetes Packages
sudo dnf install -y kubelet kubeadm kubectl --disableexcludes=kubernetes
Enable kubelet Service
sudo systemctl enable --now kubelet
Step 6: Initialize the Kubernetes Cluster Using kubeadm
You are now ready to initialize your control plane node using `kubeadm`. This step will configure all necessary components for running a single-node cluster (or multi-node if desired).
Initialize Control Plane Node
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
This command sets up the control plane components such as etcd, API server, controller manager, and scheduler. The `--pod-network-cidr=10.244.0.0/16` flag is used because we will be using Flannel as our pod network add-on later.
Configure kubectl for Non-root User Access
If you want to run `kubectl` commands as a non-root user (recommended), follow these steps:
mkdir -p $HOME/.kube 
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config 
sudo chown $(id -u):$(id -g) $HOME/.kube/config 
Verify Cluster Initialization
You can verify that your cluster has been initialized successfully by running the following commands:
kubectl cluster-info 
kubectl get nodes 
Step 7: Set Up Pod Network Add-on (Flannel)
Kubernetes requires a pod network add-on to allow communication between pods across different nodes in the cluster. We will use Flannel as our network add-on in this guide.
Install Flannel Network Add-on:
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml 
Verify Pod Network Installation:
kubectl get pods --all-namespaces 
Step 8: Join Worker Nodes to the Cluster (Optional)
If you want to expand your cluster by adding worker nodes, follow these instructions on each worker node that you wish to join to the control plane node.
Retrieve Join Command from Control Plane Node
kubeadm token create --print-join-command 
Run Join Command on Worker Node(s)
sudo kubeadm join <control-plane-ip>:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>
Verify Worker Node Status
kubectl get nodes 
Step 9: Testing the Cluster with a Sample Application
Your cluster should now be fully operational! To test it further, let’s deploy a simple Nginx application using Kubernetes.
Create an Nginx Deployment
kubectl create deployment nginx --image=nginx 
Create a Service for Nginx Deployment
kubectl expose deployment nginx --port=80 --type=NodePort 
Verify Deployment Status
kubectl get pods 
kubectl get svc nginx Congratulations! You have successfully installed Kubernetes. Thanks for using this tutorial for installing the Kubernetes on your Fedora 41 system. For additional or useful information, we recommend you check the official Kubernetes website.
