Minikube 使用教程

This article is extracted from the chat log with AI. Please identify it with caution.

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 + kubectl

Linux 上也可以直接使用 Docker Engine。

2. 安装 Minikube#

macOS:

brew install minikube

Linux 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-amd64

Windows:

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.0

2. 查看集群状态#

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-minikube

2. 暴露为 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:8080

2. 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 tunnelEXTERNAL-IP 通常会一直是 pending

五、使用 Dashboard#

Minikube 集成了 Kubernetes Dashboard:

minikube dashboard

只输出 Dashboard URL:

minikube dashboard --url

停止当前代理:

Ctrl+C

Dashboard 本身仍然可以留在集群里,只是本地代理会停止。

六、使用 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-nginx

2. 创建示例应用#

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: IfNotPresent

2. 方式二:使用 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 cluster2

2. 创建多节点集群#

minikube start --nodes=3

查看节点:

kubectl get nodes

多节点模式更适合测试调度、DaemonSet、节点亲和性、污点和容忍等能力。

十一、常用管理命令#

1. 暂停集群#

minikube pause

pause 会暂停 Kubernetes 组件,保留虚拟机或容器运行状态,适合临时让集群安静下来,节省一部分 CPU。

暂停后恢复:

minikube unpause

unpause 会恢复 Kubernetes 组件,原来的 Deployment、Service、Pod 等资源仍然存在。

2. 停止集群#

如果暂时不用 Minikube,可以停止整个集群:

minikube stop

stop 会关闭 Minikube 集群的运行环境,但不会删除集群数据。已经创建的 Deployment、Service、ConfigMap、PVC 等资源会保留。

停止后恢复集群:

minikube start

恢复后检查状态:

minikube status
kubectl get nodes
kubectl get pods -A

3. 删除集群#

如果想彻底清理当前 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=1

2. kubectl get nodes 连接不上#

检查当前 context:

kubectl config current-context
kubectl config get-contexts

重新进入 Minikube context:

kubectl config use-context minikube

3. NodePort 访问不了#

优先使用:

minikube service <service-name> --url

macOS、Windows、WSL 下使用 Docker Driver 时,直接访问 minikube ip:nodePort 可能不可达,需要保持 minikube service --url 所在终端打开。

4. LoadBalancer 一直 pending#

需要另开终端运行:

minikube tunnel

5. 本地镜像拉取失败#

如果镜像是在宿主机 Docker 里构建的,Minikube 集群内部不一定能看到。可以使用:

minikube image build -t myapp:dev .

或者:

eval $(minikube docker-env)
docker build -t myapp:dev .

Deployment 中建议设置:

imagePullPolicy: IfNotPresent

参考资料#

本文共 2751 字,创建于 Jul 8, 2026

相关标签: Kubernetes, Linux, DevOps, ByAI