DEV Community

Cover image for Part 2: Installing MicroK8s on Ubuntu 24.04+
kamlesh merugu
kamlesh merugu

Posted on • Edited on

Part 2: Installing MicroK8s on Ubuntu 24.04+

MicroK8s is a powerful yet lightweight Kubernetes distribution perfect for:

  • πŸš€ Developers testing Kubernetes locally
  • πŸ§ͺ CI/CD environments
  • 🏠 Homelabs
  • πŸ› οΈ Edge and IoT systems
  • 🧩 Single-node or small clusters

This configuration is ideal for running MicroK8s with multiple workloads, monitoring tools, and CI/CD pipelines.


πŸ“‹ What You'll Learn

In this guide, you will:

  • ✨ Install MicroK8s
  • πŸ”’ Configure user permissions
  • 🧰 Enable essential add-ons
  • πŸ§ͺ Verify the cluster is running
  • πŸŽ‰ Deploy a test application
  • πŸ”„ Ensure services autostart on boot

❓ Why MicroK8s?

MicroK8s is:

  • Lightweight πŸͺΆ β€” Minimal resource footprint
  • Easy to install ⚑ β€” One command setup
  • Zero external dependencies 🎯 β€” Everything bundled
  • Production-ready πŸ”₯ β€” Enterprise-grade
  • Beginner-friendly and pro-friendly πŸ‘¨β€πŸ’» β€” Great for learning and production

It includes core Kubernetes components and plug-and-play add-ons like DNS, Ingress, Helm, and the Dashboard.


πŸ“¦ Install MicroK8s

Update your system

sudo apt update && sudo apt upgrade -y
Enter fullscreen mode Exit fullscreen mode

Install MicroK8s via Snap

sudo snap install microk8s --classic
Enter fullscreen mode Exit fullscreen mode

This will take a few minutes. MicroK8s installs the latest stable Kubernetes release.

Verify installation

sudo microk8s status --wait-ready
Enter fullscreen mode Exit fullscreen mode

Expected output:

microk8s is running
high-availability: no
  datastore master nodes: 127.0.0.1:19001
  datastore standby nodes: none
Enter fullscreen mode Exit fullscreen mode

πŸŽ‰ Kubernetes is up and running!


πŸ‘₯ Add Your User to the MicroK8s Group

MicroK8s creates its own Unix group to manage access. Add your user to avoid using sudo every time:

sudo usermod -a -G microk8s $USER
Enter fullscreen mode Exit fullscreen mode

Apply group changes immediately without logging out:

newgrp microk8s
Enter fullscreen mode Exit fullscreen mode

Now you can run microk8s commands without sudo!


πŸ’‘ Pro Tip: Create a Kubectl Alias

Typing microk8s kubectl every time is tedious. Let's create an alias so you can just type kubectl.

Add the alias to your bash configuration:

echo 'alias kubectl="microk8s kubectl"' >> ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Apply the changes to your current session:

source ~/.bashrc
Enter fullscreen mode Exit fullscreen mode

Test it:

kubectl version --client
Enter fullscreen mode Exit fullscreen mode

From this point forward, all commands in this guide will use kubectl for brevity, but remember it is running the MicroK8s version.


πŸ”§ Enable Essential Kubernetes Add-ons

Recommended add-ons

Enable DNS for internal service discovery:

microk8s enable dns
Enter fullscreen mode Exit fullscreen mode

Enable storage for persistent volumes (databases, file storage):

microk8s enable storage
Enter fullscreen mode Exit fullscreen mode

Enable Ingress for external access (domain routing, SSL):

microk8s enable ingress
Enter fullscreen mode Exit fullscreen mode

Optional but useful add-ons

Enable Helm 3 package manager:

microk8s enable helm3
Enter fullscreen mode Exit fullscreen mode

Enable Kubernetes Dashboard (UI):

microk8s enable dashboard
Enter fullscreen mode Exit fullscreen mode

Enable Metrics Server (for monitoring CPU/RAM usage):

microk8s enable metrics-server
Enter fullscreen mode Exit fullscreen mode

Check status

microk8s status
Enter fullscreen mode Exit fullscreen mode

You should see all enabled add-ons listed as active.


πŸ§ͺ Test Your Kubernetes Cluster

Check node status

kubectl get nodes
Enter fullscreen mode Exit fullscreen mode

Expected output:

NAME       STATUS   ROLES   AGE   VERSION
hostname   Ready    <none>  5m    v1.31.3
Enter fullscreen mode Exit fullscreen mode

STATUS should be Ready βœ…

Check system pods

kubectl get pods --all-namespaces
Enter fullscreen mode Exit fullscreen mode

All components should show Running or Completed status:

NAMESPACE     NAME                                     READY   STATUS    RESTARTS   AGE
kube-system   calico-node-xxxxx                        1/1     Running   0          5m
kube-system   coredns-xxxxx                            1/1     Running   0          4m
ingress       nginx-ingress-microk8s-controller-xxxxx  1/1     Running   0          3m
Enter fullscreen mode Exit fullscreen mode

If everything shows Running, your cluster is healthy! πŸŽ‰


🐳 Deploy a Test NGINX App

Let's deploy a simple NGINX workload to verify everything works end-to-end:

Create deployment

kubectl create deployment nginx --image=nginx
Enter fullscreen mode Exit fullscreen mode

Expose the deployment

kubectl expose deployment nginx --port=80 --type=NodePort
Enter fullscreen mode Exit fullscreen mode

Get service details

kubectl get svc nginx
Enter fullscreen mode Exit fullscreen mode

You'll see output like:

NAME    TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
nginx   NodePort   10.152.183.45   <none>        80:31234/TCP   10s
Enter fullscreen mode Exit fullscreen mode

Note the NodePort (e.g., 31234).

Access the application

Open your browser and visit:

http://your-server-ip:31234
Enter fullscreen mode Exit fullscreen mode

If you see the NGINX welcome page β†’ πŸŽ‰ Your Kubernetes cluster is working perfectly!


πŸ”„ Ensuring MicroK8s Auto-Starts on Boot

Since MicroK8s is installed via Snap, systemctl cannot be used directly. Snap manages startup behavior automatically, but let's verify and ensure it's active.

βœ”οΈ Step 1: Check Service Status

sudo snap services microk8s
Enter fullscreen mode Exit fullscreen mode

You should see:

Service                              Startup
microk8s.daemon-apiserver            enabled
microk8s.daemon-containerd           enabled
...
Enter fullscreen mode Exit fullscreen mode

If all services show Startup: enabled, MicroK8s is set to autostart βœ…

βœ”οΈ Step 2: Enable Autostart (If Needed)

If services show disabled, simply run:

sudo snap start --enable microk8s
Enter fullscreen mode Exit fullscreen mode

This enables the entire application service and its internal daemons.

βœ”οΈ Step 3: Reboot & Validate

Reboot the server to test autostart:

sudo reboot
Enter fullscreen mode Exit fullscreen mode

After logging back in, run:

microk8s status --wait-ready
Enter fullscreen mode Exit fullscreen mode

If you see microk8s is running, then autostart is confirmed! πŸŽ‰

Verify your NGINX app survived the reboot

kubectl get pods
Enter fullscreen mode Exit fullscreen mode

Your nginx pod should be running.


πŸ’Ύ Resource Usage Check

Check how much of your 8GB RAM MicroK8s is using:

free -h
Enter fullscreen mode Exit fullscreen mode

Check disk usage (out of 120GB):

df -h
Enter fullscreen mode Exit fullscreen mode

MicroK8s typically uses:

  • ~500MB-1GB RAM at idle
  • ~2-3GB storage for base installation

This leaves plenty of resources for your workloads! πŸš€


πŸ› οΈ Troubleshooting Tools

Check cluster health (Generates a report)

sudo microk8s inspect
Enter fullscreen mode Exit fullscreen mode

Restart MicroK8s

sudo microk8s stop
sudo microk8s start
Enter fullscreen mode Exit fullscreen mode

Check specific logs

# Check kubelet logs
journalctl -u snap.microk8s.daemon-kubelet -f

# Check API server logs
journalctl -u snap.microk8s.daemon-apiserver -f
Enter fullscreen mode Exit fullscreen mode

πŸ“‹ Summary Checklist

Step Purpose Status
βœ… Install MicroK8s Kubernetes runtime Done
βœ… Add user to group Non-root access Done
βœ… Set up kubectl alias Simplify commands Done
βœ… Enable add-ons DNS, storage, ingress Done
βœ… Test with kubectl Validate cluster Done
βœ… Deploy NGINX Confirm workload scheduling Done
βœ… Enable autostart Ensure services start on boot Done

🧹 Clean Up Test Deployment (Optional)

Once you've verified everything works, you can remove the test NGINX deployment:

kubectl delete deployment nginx
kubectl delete service nginx
Enter fullscreen mode Exit fullscreen mode

🎯 Final Thoughts

Congratulations! πŸŽ‰ Your 4-core, 8GB RAM, 120GB Ubuntu server is now running a fully functional MicroK8s cluster!

You have a robust foundation ready for production workloads.


πŸ”™ Previous Guide

πŸ‘ˆ Back to Part 1: Prerequisites & Basic Ubuntu Setup


πŸ”œ What's Next?

Ready to deploy production applications? πŸš€

πŸ‘‰ Continue to Part 3: Production Namespace, App Deployment & Configuration

In Part 3, you'll learn how to:

  • πŸ—οΈ Create production namespaces for workload isolation
  • πŸš€ Deploy PostgreSQL and n8n with proper configurations
  • πŸ“¦ Set up Persistent Volume Claims for databases
  • πŸ” Secure sensitive data using Kubernetes Secrets

Top comments (0)