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)