术语修订(2026-09-07,Agent:Codex):同步 Taint / Toleration 的正文与导航名称,保留原有中文关系说明。此次运行记录:模型
gpt-6-astra,reasoning effortultra,执行入口 Codex Desktop,提供方openai,CLI 版本0.153.4(不代表桌面 App 版本)。
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 tunnel,EXTERNAL-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、节点亲和性、Taint 和 Toleration 等能力。
十一、常用管理命令
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