Minikube is an open-source tool that makes it easy to run a single-node Kubernetes cluster on your personal machine (like a laptop or desktop).
What is Minikube?
-
It spins up a single-node Kubernetes cluster on your laptop or desktop.
-
Both the “master” (control plane) and “worker” (node) run on that same machine.
-
It works via a virtual machine (VM) or a container, depending on your setup.
- Comes with “addons” — extra Kubernetes functionalities you can turn on (e.g. dashboard, ingress).
Why Use Minikube?
-
Learning: Great for beginners to learn Kubernetes without needing a cloud or multi-node cluster. Zesty
-
Development / Testing: You can build and test Kubernetes apps on your machine before deploying to a real cluster. Damavis Blog
-
Lightweight: Since it's just one node and local, it's less resource-intensive than a full production setup. Kubernetes+1
Limitations
-
Not for Production: It's not meant to run production-grade workloads. Zesty
-
Single Node: Because it's just one node, you don’t get the resilience or horizontal scaling of real multi-node clusters. GeeksforGeeks
-
Resource Constraints: Since it's running on your local machine, your Kubernetes cluster is limited by your laptop’s hardware.
Installing Minikube
Refer: https://minikube.sigs.k8s.io/docs/start/?arch=%2Flinux%2Fx86-64%2Fstable%2Fbinary+download for installation.
To install the latest minikube stable release on x86-64 Linux using RPM package:
[root@devopsvm01 ~]# sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64
rm: remove regular file 'minikube-linux-amd64'? y
[root@devopsvm01 ~]#
[root@devopsvm01 ~]# curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-latest.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 50.5M 100 50.5M 0 0 7012k 0 0:00:07 0:00:07 --:--:-- 9963k
[root@devopsvm01 ~]# sudo rpm -Uvh minikube-latest.x86_64.rpm
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:minikube-1.37.0-0 ################################# [100%]
[root@devopsvm01 ~]#
Start minikube standalone cluster
minikube start command will do below activities:
prepares Kubernetes configuration
chooses a driver (Docker)
creates a special container called minikube
installs Kubernetes components into that container
configures kubectl
creates the kubeconfig file
It automatically creates a single-node Kubernetes cluster with:
-
1 Control Plane (Master)
-
1 Worker Node
[root@devopsvm01 ~]# minikube start --cpus 1
* minikube v1.37.0 on Oracle 9.6 (vbox/amd64)
* Automatically selected the docker driver. Other choices: podman, none, ssh
X Exiting due to RSRC_INSUFFICIENT_CORES: has less than 2 CPUs available, but Kubernetes requires at least 2 to be available
[root@devopsvm01 ~]#
I increase the VM's cpu count to 2 and re-tried.
[root@devopsvm01 ~]# minikube start
* minikube v1.37.0 on Oracle 9.6 (vbox/amd64)
* Automatically selected the docker driver. Other choices: podman, none, ssh
* The "docker" driver should not be used with root privileges. If you wish to continue as root, use --force.
* If you are running minikube within a VM, consider using --driver=none:
* https://minikube.sigs.k8s.io/docs/reference/drivers/none/
X Exiting due to DRV_AS_ROOT: The "docker" driver should not be used with root privileges.
[root@devopsvm01 ~]#
Looks like we need to run it as non-root user.
[root@devopsvm01 ~]# useradd mahesh
[root@devopsvm01 ~]# passwd mahesh
Changing password for user mahesh.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@devopsvm01 ~]# usermod -aG docker mahesh
[root@devopsvm01 ~]#
[root@devopsvm01 ~]# su - mahesh
[mahesh@devopsvm01 ~]$
[mahesh@devopsvm01 ~]$ minikube status
* Profile "minikube" not found. Run "minikube profile list" to view all profiles.
To start a cluster, run: "minikube start"
[mahesh@devopsvm01 ~]$ minikube start
* minikube v1.37.0 on Oracle 9.6 (vbox/amd64)
* Automatically selected the docker driver
X Exiting due to RSRC_INSUFFICIENT_CONTAINER_MEMORY: docker only has 1511MiB available, less than the required 1800MiB for Kubernetes
[mahesh@devopsvm01 ~]$
I increased memory and re-tried .
[root@devopsvm01 ~]# su - mahesh
[mahesh@devopsvm01 ~]$ free -m
total used free shared buff/cache available
Mem: 2355 808 1093 27 631 1546
Swap: 2095 0 2095
[mahesh@devopsvm01 ~]$
[mahesh@devopsvm01 ~]$ minikube start
* minikube v1.37.0 on Oracle 9.6 (vbox/amd64)
* Automatically selected the docker driver
X The requested memory allocation of 2355MiB does not leave room for system overhead (total system memory: 235 5MiB). You may face stability issues.
* Suggestion: Start minikube with less memory allocated: 'minikube start --memory=2355mb'
* Using Docker driver with root privileges
* Starting "minikube" primary control-plane node in "minikube" cluster
* Pulling base image v0.0.48 ...
* Downloading Kubernetes v1.34.0 preload ...
> preloaded-images-k8s-v18-v1...: 337.07 MiB / 337.07 MiB 100.00% 5.62 Mi
> gcr.io/k8s-minikube/kicbase...: 488.49 MiB / 488.52 MiB 99.99% 5.80 MiB
* Creating docker container (CPUs=2, Memory=2355MB) ...
* Preparing Kubernetes v1.34.0 on Docker 28.4.0 ...
* Configuring bridge CNI (Container Networking Interface) ...
* Verifying Kubernetes components...
- Using image gcr.io/k8s-minikube/storage-provisioner:v5
* Enabled addons: storage-provisioner, default-storageclass
* kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'
* Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
[mahesh@devopsvm01 ~]$
Following installation, a .kube directory is created, and inside it, you will find the config file.
[mahesh@devopsvm01 ~]$ cd .kube
[mahesh@devopsvm01 .kube]$ ls -lrt
total 4
-rw-------. 1 mahesh mahesh 827 Nov 15 16:45 config
drwxr-x---. 4 mahesh mahesh 35 Nov 15 16:51 cache
[mahesh@devopsvm01 .kube]$ cat config
apiVersion: v1
clusters:
- cluster:
certificate-authority: /home/mahesh/.minikube/ca.crt
extensions:
- extension:
last-update: Sat, 15 Nov 2025 16:45:56 IST
provider: minikube.sigs.k8s.io
version: v1.37.0
name: cluster_info
server: https://192.168.49.2:8443
name: minikube
contexts:
- context:
cluster: minikube
extensions:
- extension:
last-update: Sat, 15 Nov 2025 16:45:56 IST
provider: minikube.sigs.k8s.io
version: v1.37.0
name: context_info
namespace: default
user: minikube
name: minikube
current-context: minikube
kind: Config
preferences: {}
users:
- name: minikube
user:
client-certificate: /home/mahesh/.minikube/profiles/minikube/client.crt
client-key: /home/mahesh/.minikube/profiles/minikube/client.key
[mahesh@devopsvm01 .kube]$
[mahesh@devopsvm01 ~]$ minikube kubectl -- get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-66bc5c9577-5t9v7 1/1 Running 0 5m56s
kube-system etcd-minikube 1/1 Running 0 6m1s
kube-system kube-apiserver-minikube 1/1 Running 0 6m1s
kube-system kube-controller-manager-minikube 1/1 Running 0 6m1s
kube-system kube-proxy-7flzw 1/1 Running 0 5m56s
kube-system kube-scheduler-minikube 1/1 Running 0 6m1s
kube-system storage-provisioner 1/1 Running 1 (5m25s ago) 5m58s
[mahesh@devopsvm01 ~]$
While the Pods are running inside the minikube container, minikube enables you to retrieve their details. It does this by configuring your local kubectl to communicate directly with the Kubernetes API Server that resides within the containerized cluster.
So what we did is,
🔍 Think of it like this:
👉 Your Oracle Linux VM
runs Docker
👉 Docker runs a container
called minikube
👉 And that container behaves like
a Kubernetes node/cluster
So your Kubernetes cluster is running inside that minikube container.
| Component (Pod) | Status | Meaning |
coredns | Running (1/1 Ready) | The DNS service for your cluster is operational, allowing services to find each other by name. |
etcd-minikube | Running (1/1 Ready) | The critical key-value store that holds all the cluster state is working. |
kube-apiserver | Running (1/1 Ready) | The frontend for the Control Plane, handling all communication. |
kube-controller-manager | Running (1/1 Ready) | Manages core controllers (like Replication, Endpoint, Namespace). |
kube-proxy | Running (1/1 Ready) | Manages network routing for services in the cluster. |
kube-scheduler | Running (1/1 Ready) | Responsible for assigning Pods to Nodes (in this case, your single Minikube node). |
storage-provisioner | Running (1/1 Ready) | Handles dynamic volume provisioning, so you can easily use persistent storage. |
When you ran minikube start with the Docker driver (the default), it created a Docker container named minikube (or whatever profile name you use).
[mahesh@devopsvm01 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6be75721042c gcr.io/k8s-minikube/kicbase:v0.0.48 "/usr/local/bin/entr…" 11 minutes ago Up 11 minutes 127.0.0.1:32768->22/tcp, 127.0.0.1:32769->2376/tcp, 127.0.0.1:32770->500 0/tcp, 127.0.0.1:32771->8443/tcp, 127.0.0.1:32772->32443/tcp minikube
[mahesh@devopsvm01 ~]$
Let's verify whats inside the container
[mahesh@devopsvm01 ~]$ docker exec -it minikube bash
root@minikube:/#
Try ps -ef | grep kube , systemctl status kubelet etc.
root@minikube:~# cd /etc/kubernetes
root@minikube:/etc/kubernetes#
root@minikube:/etc/kubernetes# ls -lrt
total 36
-rw-------. 1 root root 5635 Nov 15 11:15 admin.conf
-rw-------. 1 root root 5659 Nov 15 11:15 super-admin.conf
-rw-------. 1 root root 5636 Nov 15 11:15 controller-manager.conf
-rw-------. 1 root root 5584 Nov 15 11:15 scheduler.conf
drwxr-xr-x. 1 root root 113 Nov 15 11:15 manifests
-rw-------. 1 root root 1936 Nov 15 11:15 kubelet.conf
drwxr-xr-x. 2 root root 63 Nov 15 11:15 addons
root@minikube:/etc/kubernetes#
We are currently inside the core configuration directory (/etc/kubernetes) of your running Kubernetes node (the minikube container).
The files and directories you see are essential configuration elements that define how the various Kubernetes components operate.
| File Name | Purpose | What it Contains |
admin.conf | Cluster Administrator Kubeconfig | The configuration file (kubeconfig) that grants full administrative access to the cluster. This is often the file that gets copied to your host machine's ~/.kube/config when you run minikube start. |
super-admin.conf | Elevated Access Kubeconfig | Similar to admin.conf, but potentially configured for a specific, high-privilege access role (sometimes used internally by Minikube for setup). |
controller-manager.conf | Controller Manager Kubeconfig | The configuration file that tells the kube-controller-manager process how to authenticate with and talk to the kube-apiserver. |
scheduler.conf | Scheduler Kubeconfig | The configuration file that tells the kube-scheduler process how to authenticate with and talk to the kube-apiserver. |
kubelet.conf | Kubelet Configuration | The file that tells the kubelet (the node agent) how to authenticate with the kube-apiserver and specifies the essential parameters for the node's operation. |
🧩 Why inside the minikube container you see many containers?
Because Kubernetes runs its own components as containers.
Kubelet (inside minikube container) pulls and runs containers for:
So these are NOT normal Docker containers —
They are Kubernetes system components, initiated by kubelet.
🚢 So What is the minikube Container?
In this context (using the Docker driver), the minikube container is the single-node Kubernetes cluster itself.
It's not just a virtual machine; it is a KIC (Kubernetes in Container) image.
Here is a breakdown of what that container is and what it holds:
| Component | Location | Description |
The minikube Container | Your Host OS's Docker Engine | This single container acts as the entire virtual machine (the "node") for your Kubernetes cluster.
Minikube often uses a VM (Virtual Machine) driver (like VirtualBox) as its default method. When it uses the Docker driver, it replaces the need for that VM. However, the container's purpose remains the same: it acts as a single, isolated operating system instance that hosts all Kubernetes processes, mimicking the isolation and functionality of a traditional VM-based node.
|
| Control Plane | Inside the Container | This includes the critical components: kube-apiserver, etcd, kube-scheduler, and kube-controller-manager. |
| Worker Node | Inside the Container | This includes the kubelet and the Container Runtime (Docker, in your case) that run your workload Pods. |
| Your Pods/Workloads | Inside the Container | When you deploy an Nginx application, that Nginx container will run inside the minikube container. |
Let's see the image pulled by the installation.
[mahesh@devopsvm01 ~]$ docker images | grep -i minikube
gcr.io/k8s-minikube/kicbase v0.0.48 c6b5532e987b 2 months ago 1.31GB
[mahesh@devopsvm01 ~]$
It means you have successfully pulled the KIC (Kubernetes In Container) Base Image used by Minikube's Docker driver.
In Traditional Minikube, The cluster runs inside a real Virtual Machine.
With the Docker Driver (My Setup): The cluster runs inside a Docker Container.
Minikube dashboard
The Minikube dashboard is a web-based UI for Kubernetes. It lets you visually manage your cluster: view pods, deployments, services, namespaces, and more.
Run from your VM as the normal user (mahesh), and run below command
minikube dashboard
This will start the Kubernetes dashboard inside Minikube.
It will also open a browser on your local machine (or give you a URL if you’re on a VM without GUI).
The dashboard runs as a pod inside the kube-system namespace.
No comments:
Post a Comment