Minikube 是一个本地 Kubernetes 集群工具,适合用来学习 Kubernetes、验证 YAML、调试 Helm Chart、测试 Ingress / Service / 存储等能力。
它和 kubeadm 的定位不同:
- Minikube:偏本地学习和开发,启动快,封装多。
- Kind:偏 CI、测试和多集群实验,基于容器模拟节点。
- Kubeadm:偏真实集群安装,更接近生产环境。
一、准备工作#
1. 基础要求#
建议机器至少满足:
- 2 CPU 或更多
- 2GB 以上可用内存
- 20GB 以上可用磁盘
- 可访问网络
- 已安装 Docker、Podman、VirtualBox、Hyper-V、QEMU、VMware 等容器或虚拟化环境之一
本地开发最常见的组合是:
Docker Desktop + minikube + kubectlLinux 上也可以直接使用 Docker Engine。
2. 安装 Minikube#
macOS:
brew install minikubeLinux x86_64:
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube
rm minikube-linux-amd64Windows:
winget install Kubernetes.minikube验证安装:
minikube version二、启动本地 Kubernetes 集群#
1. 使用 Docker Driver 启动#
minikube start --driver=docker如果希望后续默认都使用 Docker Driver:
minikube config set driver docker常见资源参数:
minikube start --driver=docker --cpus=4 --memory=8192 --disk-size=30g指定 Kubernetes 版本:
minikube start --kubernetes-version=v1.34.02. 查看集群状态#
minikube status
kubectl get nodes
kubectl get pods -A如果本机没有单独安装 kubectl,可以使用 Minikube 内置的 kubectl:
minikube kubectl -- get pods -A也可以设置别名:
alias kubectl="minikube kubectl --"三、部署第一个应用#
1. 创建 Deployment#
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0查看 Pod:
kubectl get pods查看 Deployment:
kubectl get deployment hello-minikube2. 暴露为 NodePort Service#
kubectl expose deployment hello-minikube --type=NodePort --port=8080查看 Service:
kubectl get svc hello-minikube通过 Minikube 打开服务:
minikube service hello-minikube只获取访问 URL:
minikube service hello-minikube --url如果使用 Docker Driver,并且系统是 macOS、Windows 或 WSL,minikube service --url 通常会启动一个本地 tunnel。这个命令所在终端需要保持打开,否则访问会中断。
3. 使用 Port Forward 访问#
也可以不依赖 NodePort,直接转发端口:
kubectl port-forward service/hello-minikube 7080:8080访问:
curl http://localhost:7080四、访问不同类型的 Service#
1. ClusterIP#
ClusterIP 只能在集群内部访问:
kubectl expose deployment hello-minikube --type=ClusterIP --port=8080如果要从宿主机访问,通常配合:
kubectl port-forward service/hello-minikube 7080:80802. NodePort#
NodePort 会在节点上暴露一个端口,默认范围是 30000-32767:
kubectl expose deployment hello-minikube --type=NodePort --port=8080
minikube service hello-minikube --url查看具体 NodePort:
kubectl get service hello-minikube --output='jsonpath="{.spec.ports[0].nodePort}"'3. LoadBalancer#
本地环境没有真实云厂商负载均衡器,需要使用 minikube tunnel 模拟:
kubectl create deployment balanced --image=kicbase/echo-server:1.0
kubectl expose deployment balanced --type=LoadBalancer --port=8080另开一个终端运行:
minikube tunnel回到原终端查看外部 IP:
kubectl get svc balanced如果不启动 minikube tunnel,EXTERNAL-IP 通常会一直是 pending。
五、使用 Dashboard#
Minikube 集成了 Kubernetes Dashboard:
minikube dashboard只输出 Dashboard URL:
minikube dashboard --url停止当前代理:
Ctrl+CDashboard 本身仍然可以留在集群里,只是本地代理会停止。
六、使用 Addons#
Minikube 内置了很多插件,例如 dashboard、ingress、metrics-server、registry 等。
查看插件列表:
minikube addons list启用插件:
minikube addons enable <name>禁用插件:
minikube addons disable <name>启动集群时直接启用插件:
minikube start --addons=dashboard --addons=ingress七、使用 Ingress#
1. 启用 Ingress Addon#
minikube addons enable ingress查看 ingress-nginx 相关 Pod:
kubectl get pods -n ingress-nginx2. 创建示例应用#
kubectl create deployment web --image=nginx
kubectl expose deployment web --port=80创建 Ingress:
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
spec:
rules:
- host: web.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: web
port:
number: 80
EOF查看 Ingress:
kubectl get ingress配置本机 hosts:
echo "$(minikube ip) web.local" | sudo tee -a /etc/hosts访问:
curl http://web.local如果使用 Docker Desktop 或 Docker Driver 在 macOS / Windows 上运行,可能需要另开终端:
minikube tunnel并将 hosts 中的地址改成:
127.0.0.1 web.local八、本地镜像开发#
本地开发时,经常需要把自己构建的镜像放进 Minikube 集群。
1. 方式一:直接在 Minikube 中构建#
在项目目录中执行:
minikube image build -t myapp:dev .然后在 Deployment 中使用:
containers:
- name: myapp
image: myapp:dev
imagePullPolicy: IfNotPresent2. 方式二:使用 Minikube 的 Docker Daemon#
让当前终端的 Docker 命令指向 Minikube 内部 Docker:
eval $(minikube docker-env)构建镜像:
docker build -t myapp:dev .验证当前 Docker 是否指向 Minikube:
echo $MINIKUBE_ACTIVE_DOCKERD
docker images退出 Minikube Docker 环境:
eval $(minikube docker-env -u)九、持久化存储#
Minikube 默认支持 hostPath 类型的 PersistentVolume,适合本地实验。
创建 PVC:
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: data-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
EOF查看 PVC:
kubectl get pvc注意:Minikube 内部只有部分目录适合持久化保存,例如 /data、/var/lib/minikube、/var/lib/docker、/var/lib/containerd 等。其他目录在重启或重建后可能丢失。
十、多集群与多节点#
1. 创建第二个集群#
minikube start -p cluster2切换 context:
kubectl config get-contexts
kubectl config use-context cluster22. 创建多节点集群#
minikube start --nodes=3查看节点:
kubectl get nodes多节点模式更适合测试调度、DaemonSet、节点亲和性、污点和容忍等能力。
十一、常用管理命令#
1. 暂停集群#
minikube pausepause 会暂停 Kubernetes 组件,保留虚拟机或容器运行状态,适合临时让集群安静下来,节省一部分 CPU。
暂停后恢复:
minikube unpauseunpause 会恢复 Kubernetes 组件,原来的 Deployment、Service、Pod 等资源仍然存在。
2. 停止集群#
如果暂时不用 Minikube,可以停止整个集群:
minikube stopstop 会关闭 Minikube 集群的运行环境,但不会删除集群数据。已经创建的 Deployment、Service、ConfigMap、PVC 等资源会保留。
停止后恢复集群:
minikube start恢复后检查状态:
minikube status
kubectl get nodes
kubectl get pods -A3. 删除集群#
如果想彻底清理当前 Minikube 集群:
minikube delete删除所有 Minikube 集群:
minikube delete --all注意:delete 会删除集群数据,和 stop 不同。删除后再 minikube start 会创建一个新集群。
4. 查看与修改配置#
查看配置:
minikube config view设置默认内存:
minikube config set memory 4096十二、清理示例资源#
删除应用:
kubectl delete service hello-minikube
kubectl delete deployment hello-minikube删除 LoadBalancer 示例:
kubectl delete service balanced
kubectl delete deployment balanced删除 Ingress 示例:
kubectl delete ingress web-ingress
kubectl delete service web
kubectl delete deployment web十三、常见问题#
1. minikube start 很慢#
常见原因:
- 网络拉取镜像慢
- Docker Desktop 没启动
- 虚拟化环境不可用
- 机器资源不足
可以增加日志:
minikube start --alsologtostderr -v=12. kubectl get nodes 连接不上#
检查当前 context:
kubectl config current-context
kubectl config get-contexts重新进入 Minikube context:
kubectl config use-context minikube3. NodePort 访问不了#
优先使用:
minikube service <service-name> --urlmacOS、Windows、WSL 下使用 Docker Driver 时,直接访问 minikube ip:nodePort 可能不可达,需要保持 minikube service --url 所在终端打开。
4. LoadBalancer 一直 pending#
需要另开终端运行:
minikube tunnel5. 本地镜像拉取失败#
如果镜像是在宿主机 Docker 里构建的,Minikube 集群内部不一定能看到。可以使用:
minikube image build -t myapp:dev .或者:
eval $(minikube docker-env)
docker build -t myapp:dev .Deployment 中建议设置:
imagePullPolicy: IfNotPresent