Claude Code Plugins

Community-maintained marketplace

Feedback

minikube-local-development

@mub7865/Hackathone-2
0
0

>

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name minikube-local-development
description Complete guide for local Kubernetes development with Minikube: installation, configuration, image management, addons, networking, and troubleshooting for efficient local development workflows.

Minikube Local Development Skill

When to use this Skill

Use this Skill whenever you are:

  • Setting up local Kubernetes development environment.
  • Running Kubernetes clusters on your laptop for testing.
  • Loading and testing local Docker images in Kubernetes.
  • Debugging Kubernetes deployments locally.
  • Learning Kubernetes without cloud costs.
  • Testing Helm charts before deploying to production.

This Skill works for any Minikube project, not just a single repository.

Core Goals

  • Set up reliable local Kubernetes environment.
  • Efficiently load and test local Docker images.
  • Use addons for enhanced development experience.
  • Implement proper networking for service access.
  • Troubleshoot common issues quickly.
  • Enable fast development iteration cycles.

What is Minikube?

Minikube is local Kubernetes that makes it easy to learn and develop for Kubernetes.

Cloud Kubernetes:              Minikube:
┌──────────────────┐          ┌──────────────────┐
│  Cloud Provider  │          │  Your Laptop     │
│  (AWS/GCP/Azure) │          │  (Free!)         │
│  Multiple Nodes  │          │  Single Node     │
│  $100s/month     │          │  $0/month        │
└──────────────────┘          └──────────────────┘

Key Features:

  • Single-node Kubernetes cluster
  • Supports multiple drivers (Docker, Hyper-V, VirtualBox)
  • Built-in addons (dashboard, ingress, registry)
  • Local image loading (no registry needed)
  • Cross-platform (Windows, macOS, Linux)

Installation

Prerequisites

Platform Requirements
Windows Docker Desktop or Hyper-V enabled
macOS Docker Desktop or HyperKit
Linux Docker or KVM

Windows Installation

Option 1: Using Chocolatey (Recommended)

# Install Chocolatey first if not installed
# Then install minikube
choco install minikube

# Verify installation
minikube version

Option 2: Direct Download

# Download installer
# https://minikube.sigs.k8s.io/docs/start/

# Or use winget
winget install Kubernetes.minikube

Option 3: Using Scoop

scoop install minikube

macOS Installation

# Using Homebrew
brew install minikube

# Verify
minikube version

Linux Installation

# Download binary
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64

# Install
sudo install minikube-linux-amd64 /usr/local/bin/minikube

# Verify
minikube version

Install kubectl

kubectl is required to interact with Kubernetes.

# Windows (Chocolatey)
choco install kubernetes-cli

# macOS
brew install kubectl

# Linux
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
sudo install kubectl /usr/local/bin/kubectl

# Verify
kubectl version --client

Drivers

Minikube supports multiple drivers for running the cluster.

Available Drivers

Driver Platform Description
docker All Uses Docker containers (recommended)
hyperv Windows Uses Hyper-V VMs
virtualbox All Uses VirtualBox VMs
kvm2 Linux Uses KVM VMs
hyperkit macOS Uses HyperKit VMs
podman All Uses Podman containers

Setting Default Driver

# Set Docker as default (recommended)
minikube config set driver docker

# View current config
minikube config view

# Or specify at start time
minikube start --driver=docker

Docker Driver (Recommended)

# Requires Docker Desktop running
minikube start --driver=docker

Advantages:

  • Fastest startup time
  • Works on all platforms
  • Easy image loading
  • Lower resource usage

Hyper-V Driver (Windows)

# Requires Hyper-V enabled
minikube start --driver=hyperv

# With specific virtual switch
minikube start --driver=hyperv --hyperv-virtual-switch="Minikube Switch"

Starting & Managing Cluster

Start Cluster

# Basic start (uses default driver)
minikube start

# With specific driver
minikube start --driver=docker

# With custom resources
minikube start --cpus=4 --memory=8192 --disk-size=50g

# With specific Kubernetes version
minikube start --kubernetes-version=v1.28.0

# With multiple addons enabled
minikube start --addons=dashboard,ingress,metrics-server

Check Status

# Cluster status
minikube status

# Expected output:
# minikube
# type: Control Plane
# host: Running
# kubelet: Running
# apiserver: Running
# kubeconfig: Configured

# Get cluster IP
minikube ip

# Get Kubernetes version
kubectl version

Stop & Delete

# Stop cluster (preserves state)
minikube stop

# Delete cluster (removes everything)
minikube delete

# Delete all clusters and profiles
minikube delete --all

# Pause cluster (save resources)
minikube pause

# Unpause cluster
minikube unpause

Resource Management

# View current config
minikube config view

# Set default CPUs
minikube config set cpus 4

# Set default memory (MB)
minikube config set memory 8192

# Set default disk size
minikube config set disk-size 50g

# Apply changes (requires restart)
minikube stop
minikube start

Loading Docker Images

Minikube has its own Docker registry. Local images must be loaded into Minikube.

Method 1: Use Minikube's Docker Daemon (Recommended)

# Point shell to Minikube's Docker
eval $(minikube docker-env)

# Now build directly in Minikube
docker build -t my-app:v1 .

# Verify image is in Minikube
docker images | grep my-app

# Reset to local Docker (when done)
eval $(minikube docker-env -u)

Note: For PowerShell on Windows:

& minikube docker-env | Invoke-Expression

Method 2: Load Pre-built Images

# Build locally first
docker build -t my-app:v1 .

# Load into Minikube
minikube image load my-app:v1

# Verify
minikube image ls | grep my-app

Method 3: Build Directly in Minikube

# Build inside Minikube
minikube image build -t my-app:v1 .

# Or with specific Dockerfile
minikube image build -t my-app:v1 -f Dockerfile.prod .

Image Commands

# List images in Minikube
minikube image ls

# Load image
minikube image load my-app:v1

# Remove image
minikube image rm my-app:v1

# Pull image from registry
minikube image pull nginx:latest

Important: ImagePullPolicy

When using local images, set imagePullPolicy to prevent Kubernetes from trying to pull from remote registry.

spec:
  containers:
  - name: my-app
    image: my-app:v1
    imagePullPolicy: Never  # or IfNotPresent
Policy Description Use Case
Never Never pull from registry Local images only
IfNotPresent Pull only if not local Local first, then registry
Always Always pull (default for :latest) Always use registry

Accessing Services

Method 1: minikube service (Easiest)

# Opens service in browser
minikube service my-service

# Get URL only
minikube service my-service --url

# With namespace
minikube service my-service -n my-namespace

Method 2: kubectl port-forward

# Forward pod port
kubectl port-forward pod/my-pod 8080:80

# Forward service port
kubectl port-forward svc/my-service 8080:80

# Forward with specific address
kubectl port-forward svc/my-service 8080:80 --address='0.0.0.0'

Method 3: NodePort Service

apiVersion: v1
kind: Service
metadata:
  name: my-service
spec:
  type: NodePort
  selector:
    app: my-app
  ports:
  - port: 80
    targetPort: 80
    nodePort: 30000  # Fixed port 30000-32767

Access at: http://$(minikube ip):30000

Method 4: minikube tunnel (LoadBalancer)

# Start tunnel (run in separate terminal)
minikube tunnel

# Now LoadBalancer services get external IPs
kubectl get svc
# NAME         TYPE           EXTERNAL-IP    PORT(S)
# my-service   LoadBalancer   127.0.0.1      80:31234/TCP

Addons

Addons extend Minikube functionality.

List & Manage Addons

# List all addons
minikube addons list

# Enable addon
minikube addons enable dashboard

# Disable addon
minikube addons disable dashboard

# Enable at start
minikube start --addons=dashboard,ingress

Essential Addons

Addon Description Command
dashboard Web UI for Kubernetes minikube addons enable dashboard
ingress NGINX Ingress controller minikube addons enable ingress
metrics-server Resource metrics minikube addons enable metrics-server
registry Local Docker registry minikube addons enable registry
storage-provisioner Dynamic storage Enabled by default

Dashboard

# Enable dashboard
minikube addons enable dashboard

# Open dashboard in browser
minikube dashboard

# Get dashboard URL only
minikube dashboard --url

Ingress

# Enable ingress addon
minikube addons enable ingress

# Verify ingress controller is running
kubectl get pods -n ingress-nginx

Example Ingress:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: my-app.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 80

Add to hosts file:

# /etc/hosts (Linux/macOS) or C:\Windows\System32\drivers\etc\hosts (Windows)
192.168.49.2  my-app.local  # Use your minikube ip

Metrics Server

# Enable metrics server
minikube addons enable metrics-server

# Now you can use:
kubectl top nodes
kubectl top pods

Multi-Node Clusters

Minikube can create multi-node clusters for testing.

# Start with 3 nodes
minikube start --nodes 3

# Add node to existing cluster
minikube node add

# List nodes
kubectl get nodes

# Delete specific node
minikube node delete minikube-m02

Profiles

Profiles allow multiple Minikube clusters.

# Create new profile
minikube start -p dev-cluster

# List profiles
minikube profile list

# Switch profile
minikube profile dev-cluster

# Delete profile
minikube delete -p dev-cluster

SSH Access

# SSH into Minikube VM
minikube ssh

# Run command via SSH
minikube ssh -- ls -la /

# SSH to specific node (multi-node)
minikube ssh -n minikube-m02

Logs & Debugging

View Logs

# Minikube logs
minikube logs

# Follow logs
minikube logs -f

# Logs for specific node
minikube logs -n minikube-m02

# Verbose startup
minikube start --alsologtostderr -v=2

Kubernetes Logs

# Pod logs
kubectl logs my-pod

# Follow logs
kubectl logs -f my-pod

# Previous container logs
kubectl logs my-pod --previous

# Logs from all pods with label
kubectl logs -l app=my-app

Describe Resources

# Describe pod (shows events)
kubectl describe pod my-pod

# Describe service
kubectl describe service my-service

# Describe node
kubectl describe node minikube

Troubleshooting

Common Issues & Solutions

1. Minikube Won't Start

# Delete and recreate
minikube delete
minikube start

# Try different driver
minikube start --driver=docker

# Check Docker is running
docker info

2. ImagePullBackOff Error

Cause: Image not found in Minikube

Solution:

# Load image into Minikube
minikube image load my-app:v1

# Set imagePullPolicy to Never
# In deployment.yaml:
imagePullPolicy: Never

3. Insufficient Resources

# Allocate more resources
minikube stop
minikube start --cpus=4 --memory=8192

# Or permanently set
minikube config set cpus 4
minikube config set memory 8192

4. kubectl Connection Refused

# Check cluster status
minikube status

# Update kubeconfig
minikube update-context

# Or set context manually
kubectl config use-context minikube

5. Service Not Accessible

# Use minikube service
minikube service my-service

# Or start tunnel
minikube tunnel

6. DNS Issues

# Check CoreDNS pods
kubectl get pods -n kube-system | grep coredns

# Restart CoreDNS
kubectl rollout restart deployment coredns -n kube-system

7. Clean Start

# Complete reset
minikube delete --all --purge
rm -rf ~/.minikube
minikube start

Diagnostic Commands

# Full status check
minikube status

# System info
minikube ssh -- cat /etc/os-release

# Disk usage
minikube ssh -- df -h

# Memory usage
minikube ssh -- free -m

# Kubernetes component status
kubectl get componentstatuses

# All pods in all namespaces
kubectl get pods -A

Development Workflow

Recommended Workflow

# 1. Start Minikube
minikube start --driver=docker

# 2. Point to Minikube Docker
eval $(minikube docker-env)

# 3. Build images
docker build -t my-backend:v1 ./backend
docker build -t my-frontend:v1 ./frontend

# 4. Deploy
kubectl apply -f k8s/

# 5. Access service
minikube service frontend-service

# 6. View logs if needed
kubectl logs -l app=backend

# 7. Make changes, rebuild, redeploy
docker build -t my-backend:v1 ./backend
kubectl rollout restart deployment/backend

# 8. When done
minikube stop

Fast Iteration Cycle

# Build and deploy in one command
docker build -t my-app:dev . && kubectl rollout restart deployment/my-app

# Or create a script: dev.sh
#!/bin/bash
eval $(minikube docker-env)
docker build -t $1:dev ./$1
kubectl rollout restart deployment/$1
echo "Deployed $1"

Complete Example: Deploy Full-Stack App

Step 1: Start Minikube

minikube start --driver=docker --cpus=4 --memory=4096

Step 2: Build Images

eval $(minikube docker-env)

cd phase2/backend
docker build -t todo-backend:v1 .

cd ../frontend
docker build -t todo-frontend:v1 .

Step 3: Create Namespace

kubectl create namespace todo-app

Step 4: Deploy

kubectl apply -f k8s/ -n todo-app

Step 5: Verify

kubectl get all -n todo-app

Step 6: Access

minikube service frontend-service -n todo-app

Best Practices

Do

  • Use Docker driver for fastest startup.
  • Set imagePullPolicy: Never for local images.
  • Use eval $(minikube docker-env) for direct builds.
  • Enable metrics-server for resource monitoring.
  • Use namespaces to organize deployments.
  • Stop Minikube when not in use (save resources).

Don't

  • Don't use :latest tag with local images.
  • Don't forget to load images into Minikube.
  • Don't ignore resource limits in deployments.
  • Don't leave tunnel running when not needed.
  • Don't use excessive resources for simple tests.

References