MicroK8s in Production: Evaluating Kubernetes Deployment for Legacy-Compatible Ubuntu Servers


19 views

MicroK8s is Canonical's lightweight Kubernetes distribution that packages all cluster components as snap packages. Unlike minikube which uses VM isolation, MicroK8s runs directly on the host system:


# Key components included:
- API Server
- Scheduler
- Controller Manager
- Kubelet
- Kube-proxy
- Containerd runtime
- DNS and Dashboard (optional)

MicroK8s includes several features that make it suitable for production:

  • HA clustering with etcd
  • Automatic security updates via snap
  • GPU acceleration support
  • Istio and Knative integrations
  • RBAC enabled by default

Here's how to deploy MicroK8s while preserving existing services on Ubuntu 20.04:


# Install with strict confinement
sudo snap install microk8s --classic --channel=1.24/stable

# Configure resource limits to avoid conflicts
sudo vim /var/snap/microk8s/current/args/kubelet
# Add:
--system-reserved=cpu=500m,memory=500Mi
--kube-reserved=cpu=500m,memory=500Mi

# Enable only necessary addons
microk8s enable dns storage

Benchmarks show MicroK8s has comparable performance to kubeadm clusters:

Metric MicroK8s kubeadm
Pod Startup 1.2s 1.1s
API Latency 35ms 32ms
Node Memory 650MB 600MB

The snap-based architecture simplifies operations:


# Check for updates
snap refresh --list

# Perform rolling upgrade
sudo snap refresh microk8s --channel=1.25/stable

# Rollback if needed
sudo snap revert microk8s

Organizations using MicroK8s in production typically:

  1. Run edge computing workloads
  2. Maintain development/production parity
  3. Need fast cluster deployment
  4. Require LTS support

Essential security practices for production:


# Enable audit logging
microk8s enable audit

# Configure network policies
microk8s enable cilium

# Regular vulnerability scans
sudo snap install trivy
trivy k8s --report summary all

MicroK8s differs fundamentally from Minikube in its architecture. While Minikube uses a nested virtualization approach with a single-node VM, MicroK8s provides a true Kubernetes deployment using snap packages. The key production-ready features include:

  • Automatic high-availability clustering
  • Built-in etcd for state management
  • Production-grade networking via Calico (default) or other CNIs

Here's how to configure MicroK8s for a production scenario with legacy apps:

# Enable essential production addons
sudo microk8s enable dns storage ingress metrics-server

# Configure resource limits
sudo snap set microk8s \
    disable.resource-limits=false \
    cni-args=--max-pods=110

# Verify cluster status
microk8s kubectl get nodes -o wide

For your specific case with two Ubuntu servers running legacy apps, consider these approaches:

  1. Dual-Stack Deployment:
    # Schedule pods only on specific nodes
    kubectl label nodes node1 legacy-app=true
    kubectl label nodes node2 legacy-app=true
  2. Network Policy Isolation:
    apiVersion: networking.k8s.io/v1
    kind: NetworkPolicy
    metadata:
      name: legacy-app-isolation
    spec:
      podSelector:
        matchLabels:
          app: legacy
      policyTypes:
      - Ingress
      - Egress

Recent tests show MicroK8s performs comparably to standard K8s deployments in these metrics:

Metric MicroK8s kubeadm
Pod startup (avg) 1.2s 1.1s
API latency (p99) 45ms 42ms
Memory overhead 412MB 380MB

For production environments, implement these practices:

  • Automated snap updates with health checks:
    sudo snap set microk8s refresh.timer=00:00~24:00/2
    sudo snap set microk8s refresh.hold=72h
  • Regular etcd snapshots:
    sudo microk8s etcdctl snapshot save /var/snap/microk8s/common/etcd-backup.db