minikube 基础控制命令实战指南:从启动集群到部署应用与多集群管理
【免费下载链接】minikubeRun Kubernetes locally项目地址: https://gitcode.com/gh_mirrors/mi/minikube
本文是 minikube(Run Kubernetes locally)官方 Handbook 中 "Basic controls" 一节的完整技术指南,覆盖集群的启动、Dashboard 访问、应用部署与暴露、版本升级、多集群(Profile)管理以及停止与删除等全部基础操作。读完本文,你将掌握 minikube 日常使用频率最高的 8 组命令及其核心参数,并能结合源码理解每条命令背后的实现机制,从而在本地开发环境中高效地创建、使用和销毁 Kubernetes 集群。
一、快速上手:一条命令启动本地 Kubernetes 集群
启动集群是使用 minikube 的第一步,也是最核心的一条命令:
minikube start执行后,minikube 会自动完成驱动探测(Docker、Podman、KVM、QEMU、VirtualBox 等)、基础镜像拉取、kubeadm 引导 Kubernetes 控制面等一整套流程。如果本机从未使用过 minikube,首次启动会额外下载 kicbase 镜像与所需二进制文件,耗时较长;之后再次启动时会复用已有缓存,速度明显提升。
从源码看,start命令的初始化集中在 cmd/minikube/cmd/start.go 与 cmd/minikube/cmd/start_flags.go 中。start_flags.go 中定义了startCmd的全部标志位,例如--driver(自动探测)、--nodes/-n(节点数,默认 1)、--container-runtime、--memory等;start.go 则负责依次执行驱动检查、配置校验、镜像准备与 Kubernetes 引导,并在启动前通过validateKubernetesVersion(cmd/minikube/cmd/start.go)校验 Kubernetes 版本合法性。
二、访问 Kubernetes Dashboard:minikube dashboard
minikube 内置了 Kubernetes Dashboard 插件,启动集群后可直接访问集群内的 Web 控制台:
minikube dashboard该命令的实现位于 cmd/minikube/cmd/dashboard.go,其完整流程为:
- 检查
dashboard插件是否已启用,若未启用则自动执行addons.SetAndSave(cname, "dashboard", "true", options)将其开启(对应源码 cmd/minikube/cmd/dashboard.go); - 在
kubernetes-dashboard命名空间下反复探测kubernetes-dashboardService 的健康状态(带指数退避重试); - 后台启动
kubectl proxy,默认端口为 0(即由系统随机分配一个可用端口); - 校验代理 URL 可访问后,调用系统默认浏览器打开
http://<host>:<port>/api/v1/namespaces/kubernetes-dashboard/services/http:kubernetes-dashboard:/proxy/。
dashboard命令还提供两个实用参数(见 cmd/minikube/cmd/dashboard.go):
| 参数 | 默认值 | 说明 |
|---|---|---|
--url | false | 只打印 Dashboard 的访问 URL,不打开浏览器,适合脚本或远程环境(root 用户下也会自动退化为仅输出 URL) |
--port | 0 | 指定 kubectl proxy 暴露的端口,设为 0 表示随机分配 |
# 只获取 URL,便于集成到自动化脚本 minikube dashboard --url # 固定使用 8001 端口访问 minikube dashboard --port=8001三、像使用正式集群一样使用 kubectl
集群启动后,minikube 会自动把当前集群写入本地 kubeconfig 并设为当前 context,因此你可以直接用kubectl操作它,与操作任何标准 Kubernetes 集群完全一致。例如部署一个测试应用:
kubectl create deployment hello-minikube --image=kicbase/echo-server:1.0这里使用kicbase/echo-server:1.0镜像创建名为hello-minikube的 Deployment,它是一个简易的 HTTP echo 服务,非常适合验证集群工作负载。
接着,将该 Deployment 以 NodePort 类型暴露为 Service:
kubectl expose deployment hello-minikube --type=NodePort --port=8080--type=NodePort会在每个节点上分配一个高位端口(30000–32767 范围内),并把容器端口 8080 映射出去,这样集群外部(即宿主机)即可访问该服务。
四、一行命令打开服务:minikube service
暴露为 NodePort 后,手动拼写http://<节点IP>:<NodePort>并不方便,minikube 提供了service子命令一键在浏览器中打开该端点:
minikube service hello-minikube其实现见 cmd/minikube/cmd/service.go:命令会先调用service.GetServiceURLs获取集群内服务对应的访问 URL 列表,再针对每个 URL 等待服务真正就绪后打开浏览器;对于 Docker/Podman 这类 KIC(Kubernetes in Container)驱动,minikube 会自动建立端口转发,使容器内端口可从宿主机直接访问(对应源码中的startKicServiceTunnel逻辑)。
service命令常用参数(定义于 cmd/minikube/cmd/service.go):
| 参数 | 默认值 | 说明 |
|---|---|---|
--url | false | 只打印访问 URL,不打开浏览器 |
-n, --namespace | default | 指定服务所在的命名空间 |
--https | false | 以 https 协议访问 |
--format | http://{{.IP}}:{{.Port}} | 自定义 URL 输出模板,支持{{.Name}}、{{.IP}}、{{.Port}}等字段 |
--all | false | 列出/打开当前命名空间下的全部服务 |
--wait/--interval | 2/1(秒) | 等待服务就绪的超时时间与轮询间隔 |
# 只打印 URL,供脚本消费 minikube service hello-minikube --url # 指定命名空间 minikube service hello-minikube -n my-namespace # 一次查看命名空间内所有服务 minikube service --all # 使用自定义 URL 模板 minikube service hello-minikube --url --format="http://{{.IP}}:{{.Port}}/hello"注意:对于ClusterIP类型的服务,minikube 同样允许本地访问(控制台会给出提示),这是为本地开发提供的便利特性。
五、升级集群:minikube start --kubernetes-version
minikube 允许通过start命令的--kubernetes-version参数指定或升级 Kubernetes 版本:
minikube start --kubernetes-version=latestkubernetes-version标志的完整语义定义在 cmd/minikube/cmd/start_flags.go:
The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for ... , 'latest' for ...). Defaults to 'stable'.
其取值规则(见 cmd/minikube/cmd/start.go 的getKubernetesVersion函数):
| 取值 | 含义 |
|---|---|
不指定 /stable | 使用默认版本,即当前 minikube 发行版配套的稳定版(大小写不敏感) |
latest/newest | 使用当前 minikube 支持的最新 Kubernetes 版本 |
v1.37.0这类完整版本号 | 使用指定版本,支持v1.37这类省略 patch 的写法,minikube 会自动解析为最新 patch 版本 |
--no-kubernetes与--kubernetes-version同时指定 | 报错退出,二者互斥 |
版本校验由validateKubernetesVersion(cmd/minikube/cmd/start.go)负责:它会将请求版本与当前 minikube 支持的版本区间比较,超出范围的版本默认拒绝启动,但可通过--force强制使用;同时它禁止对已有集群执行降级操作(Unable to safely downgrade existing Kubernetes ...),如需降级需新建集群。
以当前仓库 pkg/minikube/constants/constants.go 中的常量为例,DefaultKubernetesVersion与NewestKubernetesVersion均为v1.37.0,OldestKubernetesVersion为v1.28.0,即当前版本支持 v1.28.0 ~ v1.37.0 区间内的集群(具体数值随 minikube 版本迭代而变化,请以你所用版本的minikube config defaults kubernetes-version输出为准)。注意:升级操作会通过start在已有集群上重建控制面组件,属于就地升级,而非新建集群。
# 显式指定某个具体版本 minikube start --kubernetes-version=v1.36.0 # 查看当前 minikube 支持的默认版本 minikube config defaults kubernetes-version六、多集群管理:Profile 机制
minikube 通过 Profile(配置文件)机制支持在单台机器上并行运行多个相互独立的集群,每个集群拥有独立的名称、配置与数据目录:
minikube start -p cluster2-p(等价于--profile)是定义在 cmd/minikube/cmd/root.go 的全局持久标志,默认值为minikube。使用-p cluster2启动后,minikube 会创建名为cluster2的全新集群,与默认集群互不干扰;kubeconfig 中也会新增对应的 context(如cluster2),可用kubectl config use-context cluster2切换。
重要限制:该功能在使用 bare-metal/none 驱动(即直接在宿主机上运行 Kubernetes,不借助虚拟机或容器)时不可用——因为 none 驱动直接使用宿主机环境,无法在同一台机器上并行启动多个隔离集群,正如本文开头所述 "This will not work if minikube is using the bare-metal/none driver"。
多集群相关的常用操作:
# 列出所有集群/Profile 及其状态 minikube profile list # 切换默认操作的集群 minikube profile cluster2 # 使用指定集群执行其他命令(等价于 -p) minikube dashboard -p cluster2 minikube stop -p cluster2七、停止集群:minikube stop
暂停使用集群时,执行:
minikube stopstop的实现见 cmd/minikube/cmd/stop.go,其 Long 描述明确了行为边界:停止底层 VM 或容器,但保留全部用户数据,之后随时可用minikube start恢复。停止时节点会按逆序依次关停(多节点集群先停 worker 节点,最后停主控节点,以便下次启动时主控节点优先恢复,见 cmd/minikube/cmd/stop.go)。
stop命令提供以下参数(定义于 cmd/minikube/cmd/stop.go):
| 参数 | 说明 |
|---|---|
--all | 停止所有 Profile 下的集群 |
--keep-context-active | 停止后仍保留 kubeconfig 中对应的 context 为当前 context(默认停止后会切换/清理) |
--schedule=5m | 定时停止,例如--schedule=5m表示 5 分钟后自动停止(后台守护进程实现) |
--cancel-scheduled | 取消已存在的定时停止请求 |
-o, --output | 输出格式,可选text、json |
# 5 分钟后自动停止当前集群 minikube stop --schedule=5m # 停止全部集群 minikube stop --all八、删除集群:minikube delete
彻底销毁集群时执行:
minikube delete与stop不同,delete是破坏性操作:它会删除 VM/容器、以及所有关联文件(对应源码 cmd/minikube/cmd/delete.go 的 Long 描述:"This command deletes the VM, and removes all associated files")。从 cmd/minikube/cmd/delete.go 可以看到,删除流程依次执行:终止挂载进程、停止 ssh-agent、删除宿主机条目、清理 Profile 与机器目录、删除本地配置与 kubeconfig 中的 context,并对 KIC 驱动额外清理带 minikube 标签的容器、卷与镜像。
删除所有本地集群及 Profile:
minikube delete --alldelete命令常用参数(定义于 cmd/minikube/cmd/delete.go):
| 参数 | 说明 |
|---|---|
--all | 删除所有 Profile 下的集群 |
--purge | 同时删除用户目录下的整个.minikube文件夹(含缓存、配置文件等全部数据) |
-o, --output | 输出格式,可选text、json |
# 连同缓存数据一并清除 minikube delete --purge # 删除指定 Profile 的集群 minikube delete -p cluster2九、小结:minikube 基础控制命令速查
| 目的 | 命令 |
|---|---|
| 启动集群 | minikube start |
| 访问 Dashboard | minikube dashboard [--url] [--port=N] |
| 部署应用 | kubectl create deployment <name> --image=<image> |
| 暴露服务 | kubectl expose deployment <name> --type=NodePort --port=<port> |
| 打开服务 | minikube service <name> [--url] [-n <ns>] |
| 升级 Kubernetes | minikube start --kubernetes-version=latest |
| 启动第二个集群 | minikube start -p <profile>(none 驱动不支持) |
| 停止集群 | minikube stop [--all] [--schedule=5m] |
| 删除集群 | minikube delete [--all] [--purge] |
以上命令构成了 minikube 本地开发工作流的最小闭环:start建集群 →kubectl/dashboard用集群 →service验证应用 →stop/delete回收资源。所有命令的完整参数与实现细节,可继续深入阅读 cmd/minikube/cmd 目录下对应的源码文件,以及 site/content/en/docs/handbook 中的其他 Handbook 章节。
【免费下载链接】minikubeRun Kubernetes locally项目地址: https://gitcode.com/gh_mirrors/mi/minikube
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考