注意:minikube 实践操作建议在科学上网环境下进行,非科学上网稍等曲折,适合想要挑战的同学。

minikube 是什么?

  minikube 是 Kubernetes 官方提供的本地单节点集群工具,可以在你的电脑(Mac / Linux / Windows)上快速搭建一个完整的 K8s 环境。

1779075892

为什么 minikube 是 K8s 入门最佳选择?

  1. 零成本,即装即用

    • 完全免费开源项目
    • 不需要云账号、不需要信用卡
      -一条命令就能启动集群
  2. 对电脑要求低

    • 支持 VirtualBox、Docker、Hyper-V 等多种驱动
    • 最低 2 核 CPU + 2GB 内存即可运行
    • 笔记本也能跑
  3. 功能完整

    • 包含 Master + Worker 节点
    • 支持 Dashboard、Ingress、StorageClass
    • 与生产环境 K8s 功能一致
  4. 学习曲线平缓

    • 不需要懂集群、网络、存储等复杂概念
    • 专注学习 K8s 核心概念,而不是运维
    • 出错容易排查,本地调试方便
  5. 官方推荐

    • Kubernetes 官方文档推荐的本地开发工具
    • 与 kubectl 无缝集成
    • 社区活跃,文档完善

实践开始

 当前实践默认已经下载安装好minikube,如果没有可以参考官网下载安装。

启动 minikube 启动集群(需要科学上网)

 如果本地安装了 Docker,minikube 会默认选择 Docker 作为驱动。

# 使用国内镜像源 
minikube start --image-mirror-country='cn'

# 如果上述命令仍然拉取基础镜像失败,可强行指定 aliyuncs 镜像 
minikube start --image-mirror-country='cn'  --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.50'

💡 常用启动参数解析
(注:完整参数可使用 minikube start --help 查看,这里仅列出最常用的)

  • --cpus=2: 分配给 K8s 的 CPU 核心数,默认 2。
  • --memory=4g: 分配给 K8s 的内存大小,建议开发环境至少分配 4g。
  • --disk-size=20g: 分配给虚拟机的磁盘大小,默认 20g。
  • --driver=docker: 强制指定驱动(可选 docker, virtualbox, hyperv, vmware 等)。
  • --kubernetes-version=v1.28.0: 指定启动的 K8s 版本,默认为 stable 版本。
  • --cni=calico: 指定 CNI 网络插件(可选 auto, bridge, calico, cilium, flannel 等)。
  • -n, --nodes=3: 启动多节点集群(minikube 也支持模拟多节点!)。
  • --ha=true: 创建高可用的多控制平面集群。

启动dashboard(科学上网)

 为了便于开发实践,增加趣味性,强烈建议启动 Dashboard,告别纯黑底命令行的枯燥。

1779074187

minikube dashboard
  • 启动完成后会出现以下信息
PS C:\Users\desktop> minikube dashboard
🤔  正在验证 dashboard 运行情况 ...
🚀  正在启动代理...
🤔  正在验证 proxy 运行状况 ...
PS C:\Users\desktop> minikube dashboard
🤔  正在验证 dashboard 运行情况 ...
🚀  正在启动代理...
🤔  正在验证 proxy 运行状况 ...
🎉  正在使用默认浏览器打开 http://127.0.0.1:51954/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/ ...

查看集群基础状态

# 查看所有命名空间的 pod 
kubectl get pods --all-namespaces 
 
# 查看集群节点信息 
kubectl get nodes 
 
# 查看 pod 日志(通过查看日志可以快速定位排错)
kubectl logs --namespace=kube-system <pod-name>
 
# 实时跟踪日志输出(非常实用)
kubectl logs -f --namespace=xxx <pod-name>

kubectl describe pod <pod-name>

# 查看默认命名空间下的所有资源(Pod, Service, Deployment等)
kubectl get all 
 
# 以宽格式输出(可以查看 Pod 的 IP 和所在 Node)
kubectl get pods -o wide 
 
# 查看特定标签的 Pod 
kubectl get pods -l app=hello-minikube 

# 将本地的 8080 端口映射到 Service 的 80 端口 
kubectl port-forward service/hello-minikube 8080:80 

Hello World

 启动一个Nginx示例

创建部署应用实例

kubectl create deployment hello-minikube --image=nginx:latest
  • create deployment:创建一个 Deployment 资源
  • hello-minikube: 应用名称
  • --image=nginx:latest:使用的容器镜像
K8s 实际做了什么:
  • 拉取 nginx:latest 镜像
  • 创建 Pod(容器运行载体)
  • 监控 Pod 状态,确保始终有指定数量的副本运行(自愈能力)

暴露 Service(服务)

 让外部可以访问这个应用

kubectl expose deployment hello-minikube --type=NodePort --port=80
  • expose deployment:为 Deployment 创建一个 Service
  • --type=NodePort:通过节点端口访问
  • --port=80:Service 监听的端口

两者的关系

Deployment(部署)     →     负责"运行"容器 
       ↓ 
Service(服务)        →     负责"访问"容器 
--------------------------------------
用户请求 
    ↓ 
Service (NodePort: 3xxxx)
    ↓ 
Pod (nginx 容器)
    ↓ 
Nginx 镜像 

测试访问

  • 直接打开浏览器访问
minikube service hello-minikube
  • 获取访问地址
minikube service hello-minikube --url 

测试完成之后我们可以通过以下命令清理删除

删除服务

 kubectl delete service hello-minikube

删除应用

kubectl delete deployment hello-minikube

停止您的本地集群(保留数据,下次启动更快)

minikube stop

删除您的本地集群(谨慎,会清除当前集群的所有数据)

minikube delete

删除所有本地集群和配置(极度谨慎,会清空一切 minikube 状态)

minikube delete --all

🚨 常见问题排查

ImagePullBackOff / ErrImagePull

  • 原因:无法拉取镜像。
  • 解决:检查是否开启了科学上网;如果是国内环境,确保启动时加了 --image-mirror-country='cn';或者尝试手动拉取镜像并重新 tag。

The "docker" driver should not be used with root privileges

  • 原因:在 Linux 下使用 Docker 驱动时使用了 root 用户。
  • 解决:将当前用户加入 docker 组 sudo usermod -aG docker $USER && newgrp docker,然后使用非 root 用户运行 minikube。

Dashboard 无法访问或超时

  • 原因:代理未启动或网络问题。
  • 解决:执行 minikube dashboard 重新开启代理;如果是在 WSL/远程环境,确保做了端口转发。

参考文档

https://minikube.kubernetes.ac.cn/docs/

https://kubernetes.io/zh-cn/docs/reference/kubectl/introduction/