AlmaLinux

Run Kubernetes on Rocky Linux 10 / AlmaLinux 10 with Minikube

Running a full Kubernetes cluster just to test a deployment is overkill for most development workflows. Minikube spins up a single-node Kubernetes cluster on your local machine, giving you a real K8s environment without the overhead of managing multiple nodes. This guide walks through installing Minikube on Rocky Linux 10 and AlmaLinux 10 using Docker as the container runtime.

Original content from computingforgeeks.com - post 16415

Minikube supports multiple drivers (Docker, Podman, KVM, VirtualBox), but Docker is the most straightforward on RHEL-based systems. We’ll install Docker CE, kubectl, and Minikube, then bring up a working cluster and deploy a test workload. If you need a production multi-node setup instead, see our guide on installing a full Kubernetes cluster on Rocky Linux.

Current as of March 2026. Verified on Rocky Linux 10.1 (kernel 6.12) with Minikube 1.38.1, Kubernetes 1.35.1, Docker CE 29.3.0, SELinux enforcing

Prerequisites

Before starting, confirm you have the following in place:

  • Rocky Linux 10 or AlmaLinux 10 (minimal or server install)
  • Root or sudo access
  • At least 2 CPUs and 2 GB free RAM (Minikube’s minimum requirement)
  • Internet connectivity to pull container images
  • Tested on: Rocky Linux 10.1 (kernel 6.12), Docker CE 29.3.0, kubectl v1.32.4, Minikube v1.38.1

Update your system packages first:

sudo dnf update -y

Install Docker CE

Minikube needs a container runtime. Docker CE works well on Rocky Linux 10 and AlmaLinux 10, but requires one extra package that catches people off guard: kernel-modules-extra. Without it, Docker fails to load the iptables kernel modules it depends on.

Install the kernel modules package:

sudo dnf install -y kernel-modules-extra

Reboot to load the new modules:

sudo reboot

After the system comes back up, add the official Docker repository. Docker provides a dedicated RHEL repo that works on Rocky and AlmaLinux:

sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo

Install Docker CE and its dependencies:

sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Start and enable the Docker service:

sudo systemctl enable --now docker

Confirm Docker is running:

sudo systemctl status docker

You should see active (running) in the output:

● docker.service - Docker Application Container Engine
     Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
     Active: active (running) since Tue 2026-03-24 14:22:10 UTC; 5s ago
   Main PID: 2341 (dockerd)
      Tasks: 8
     Memory: 42.1M
     CGroup: /system.slice/docker.service
             └─2341 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Verify the Docker version:

docker --version

The output confirms Docker CE 29.3.0:

Docker version 29.3.0, build e2c8028

SELinux was in enforcing mode during testing and Docker worked without any policy adjustments. Rocky Linux 10 ships with SELinux policies that accommodate Docker out of the box.

Install kubectl

kubectl is the command-line tool for interacting with Kubernetes clusters. Minikube bundles its own kubectl, but having a standalone install gives you more flexibility (and it’s what you’ll use with real clusters later). For a full reference of kubectl commands, check out our kubectl cheat sheet.

Download the latest stable kubectl binary:

curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"

Install it to /usr/local/bin:

sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl

Check the installed version:

kubectl version --client

This should show v1.32.4 or newer:

Client Version: v1.32.4
Kustomize Version: v5.5.0

Install Minikube

Minikube ships as a single binary. Download the latest RPM package and install it directly:

curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
sudo rpm -Uvh minikube-latest.x86_64.rpm

Verify the installation:

minikube version

The output confirms Minikube v1.38.1:

minikube version: v1.38.1
commit: 8a6a7a05ba949a1e1e5a37bbcaa821ef6a89da10

Start a Kubernetes Cluster

With Docker, kubectl, and Minikube installed, bring up a single-node Kubernetes cluster. The --driver=docker flag tells Minikube to use Docker as its container runtime. If you’re running as root, the --force flag is required:

minikube start --driver=docker --force

Minikube pulls the necessary images and bootstraps the cluster. This takes a couple of minutes on the first run:

😄  minikube v1.38.1 on Rocky 10.1
❗  minikube skips various validations when --force is supplied; this may lead to unexpected behavior
✨  Using the docker driver based on user configuration
🧯  The requested memory allocation of 1953MiB does not leave room for system overhead (total system memory: 1953MiB). You may face stability issues.
💡  Suggestion: Start minikube with less memory allocated: 'minikube start --memory=1400mb'
📌  Using Docker driver with root privileges
👍  Starting "minikube" primary control-plane node in "minikube" cluster
🚜  Pulling base image v0.0.47 ...
💾  Downloading Kubernetes v1.35.1 preload ...
🔥  Creating docker container (CPUs=2, Memory=1953MB) ...
🐳  Preparing Kubernetes v1.35.1 on Docker 28.1.1 ...
    ▪ Generating certificates and keys ...
    ▪ Booting up control plane ...
    ▪ Configuring RBAC rules ...
🔗  Configuring bridge CNI (Container Networking Interface) ...
🔎  Verifying Kubernetes components...
    ▪ Using image gcr.io/k8s-minikube/storage-provisioner:v5
🌟  Enabled addons: storage-provisioner, default-storageclass
🏄  Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default

If you’re running as a non-root user, drop the --force flag. You’ll need to add your user to the docker group first:

sudo usermod -aG docker $USER
newgrp docker
minikube start --driver=docker

Verify the Cluster

Once Minikube finishes, confirm the cluster node is ready:

kubectl get nodes

The node should show Ready status:

NAME       STATUS   ROLES           AGE   VERSION
minikube   Ready    control-plane   72s   v1.35.1

Check the cluster info:

kubectl cluster-info

This shows the API server and CoreDNS endpoints:

Kubernetes control plane is running at https://192.168.49.2:8443
CoreDNS is running at https://192.168.49.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

Let’s deploy a quick Nginx pod to make sure workloads actually run:

kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --type=NodePort --port=80

Wait a few seconds, then check the pod status:

kubectl get pods

The Nginx pod should be running:

NAME                    READY   STATUS    RESTARTS   AGE
nginx-bf5d5cf98-xkfz7   1/1     Running   0          18s

Get the service URL through Minikube:

minikube service nginx --url

Minikube returns a URL you can curl to verify Nginx responds:

http://192.168.49.2:31245

Test the endpoint:

curl $(minikube service nginx --url)

You should see the default Nginx welcome page HTML in the response. The cluster is working. Clean up the test deployment when done:

kubectl delete deployment nginx
kubectl delete service nginx

Useful Minikube Commands

Here are the commands you’ll use most often when working with Minikube:

CommandDescription
minikube startStart the cluster (resumes if previously stopped)
minikube stopStop the cluster without deleting it
minikube deleteDelete the cluster and all its data
minikube statusShow current cluster status
minikube dashboardOpen the Kubernetes web dashboard
minikube addons listList available and enabled addons
minikube addons enable metrics-serverEnable a specific addon
minikube sshSSH into the Minikube node
minikube logsView cluster logs for troubleshooting

Stop and Delete the Cluster

When you’re done working, stop the cluster to free up resources. Stopping preserves the cluster state so you can resume later:

minikube stop

The cluster shuts down cleanly:

✋  Stopping node "minikube"  ...
🛑  Powering off "minikube" via SSH ...
🛑  1 node stopped.

To start it again, just run minikube start. It picks up where you left off.

If you want to wipe everything and start fresh, delete the cluster entirely:

minikube delete

This removes the VM, Docker containers, and all cluster data:

🔥  Deleting "minikube" in docker ...
🔥  Deleting container "minikube" ...
🔥  Removing /root/.minikube/profiles/minikube ...
💀  Removed all traces of the "minikube" cluster.

Going Further

With Minikube running on Rocky Linux 10, here are some next steps worth exploring:

  • Enable the metrics-server addon (minikube addons enable metrics-server) to use kubectl top for monitoring pod resource usage
  • Try multi-node clusters with minikube start --nodes 3 to simulate a more realistic environment for testing scheduling and affinity rules
  • Use the Minikube dashboard (minikube dashboard) for a visual overview of workloads, services, and cluster health
  • Deploy a full application stack with Helm charts to practice production-like deployments. The official Minikube documentation covers Helm integration and other advanced features
  • Set up a production cluster when you outgrow Minikube. Our guide on deploying a multi-node Kubernetes cluster on Rocky Linux covers kubeadm-based setup with HA control planes. We also have a guide for Minikube on Debian if you work with Debian-based systems

Related Articles

AlmaLinux Build Open vSwitch from Source on Rocky / AlmaLinux / RHEL AlmaLinux Setup Docker Swarm Cluster on Rocky Linux 10 / AlmaLinux 10 Containers How To Install Netdata on Kubernetes using Helm Containers How To Upgrade From OpenShift 4.8 To 4.9

Leave a Comment

Press ESC to close