Setting Up Kubernetes with Minikube

Complete guide for setting up a local Kubernetes development environment using Minikube

Setting Up Kubernetes with Minikube

Minikube is a tool that lets you run Kubernetes locally. This guide covers installation, configuration, and best practices for running Minikube on your local machine.

Video Tutorial

Learn more about setting up Kubernetes with Minikube in this comprehensive video tutorial:

View Source Code

Prerequisites

  • 2 CPUs or more
  • 2GB of free memory
  • 20GB of free disk space
  • Docker, VirtualBox, or Hyperkit
  • Internet connection

Installation

macOS

# Using Homebrew
brew install minikube

# Using Direct Download
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-darwin-amd64
sudo install minikube-darwin-amd64 /usr/local/bin/minikube

Linux

# Using Direct Download
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube

Windows

# Using Chocolatey
choco install minikube

# Using Direct Download
New-Item -Path 'c:\\' -Name 'minikube' -ItemType Directory
Invoke-WebRequest -OutFile 'c:\\minikube\\minikube.exe' -Uri 'https://github.com/kubernetes/minikube/releases/latest/download/minikube-windows-amd64.exe'

Starting Minikube

1. Basic Start

# Start with default configuration
minikube start

# Start with specific Kubernetes version
minikube start --kubernetes-version=v1.26.1

# Start with more resources
minikube start --cpus=4 --memory=8192mb

2. Advanced Configuration

# Start with specific driver
minikube start --driver=hyperkit

# Start with custom configuration
minikube start \
  --cpus=4 \
  --memory=8192mb \
  --disk-size=50gb \
  --driver=hyperkit \
  --container-runtime=containerd \
  --kubernetes-version=v1.26.1

Cluster Management

1. Basic Commands

# Check cluster status
minikube status

# Stop cluster
minikube stop

# Delete cluster
minikube delete

# Pause cluster
minikube pause

# Resume cluster
minikube unpause

2. Multi-node Clusters

# Start a multi-node cluster
minikube start --nodes 3

# Add a node
minikube node add

# List nodes
minikube node list

# Delete a node
minikube node delete minikube-m02

Addons Management

1. Basic Addons

# List available addons
minikube addons list

# Enable dashboard
minikube addons enable dashboard

# Enable metrics-server
minikube addons enable metrics-server

# Access dashboard
minikube dashboard
# Enable ingress
minikube addons enable ingress

# Enable registry
minikube addons enable registry

# Enable storage-provisioner
minikube addons enable storage-provisioner

Networking

1. Service Access

# Get service URL
minikube service <service-name> --url

# Create tunnel for LoadBalancer services
minikube tunnel

# Port forwarding
kubectl port-forward service/<service-name> 8080:80

2. Docker Registry

# Enable registry addon
minikube addons enable registry

# Configure insecure registry
minikube start --insecure-registry="10.0.0.0/24"

Storage Configuration

1. Persistent Volumes

# pv-example.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
  name: example-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /data/example-pv

2. Storage Classes

# storage-class.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: standard
provisioner: k8s.io/minikube-hostpath
reclaimPolicy: Delete
volumeBindingMode: Immediate

Development Workflow

1. Local Docker Images

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

# Build image using minikube's Docker
docker build -t myapp:v1 .

# Use image in Kubernetes
kubectl run myapp --image=myapp:v1 --image-pull-policy=Never

2. Mount Local Files

# Mount local directory
minikube mount ~/project:/project

# Use mounted directory in pod
kubectl apply -f - <<EOF
apiVersion: v1
kind: Pod
metadata:
  name: mount-test
spec:
  containers:
  - name: app
    image: alpine
    command: ['sh', '-c', 'sleep 3600']
    volumeMounts:
    - name: project
      mountPath: /project
  volumes:
  - name: project
    hostPath:
      path: /project
EOF

Monitoring and Debugging

1. Basic Monitoring

# Enable metrics-server
minikube addons enable metrics-server

# Get node metrics
kubectl top nodes

# Get pod metrics
kubectl top pods

2. Logs and Debugging

# View minikube logs
minikube logs

# SSH into minikube node
minikube ssh

# Debug addons
minikube addons list
minikube addons enable dashboard

Troubleshooting

Common Issues

  1. Startup Issues
# Check system requirements
minikube config view

# Delete and recreate cluster
minikube delete
minikube start --alsologtostderr -v=4
  1. Networking Issues
# Check service status
minikube service list

# Verify DNS
kubectl run -it --rm debug --image=busybox --restart=Never -- nslookup kubernetes.default
  1. Performance Issues
# Increase resources
minikube config set cpus 4
minikube config set memory 8192
minikube delete
minikube start

Best Practices

  1. Resource Management

    • Allocate sufficient resources
    • Clean up unused resources
    • Use resource limits
  2. Development Workflow

    • Use local Docker registry
    • Mount local directories
    • Enable relevant addons
  3. Performance

    • Use appropriate driver
    • Configure resource limits
    • Clean up regularly
  4. Security

    • Keep Minikube updated
    • Use RBAC
    • Secure container images

Additional Resources