minikube v1.29.0 time-to-k8s 基准测试报告:启动耗时与 CPU 开销实测分析
【免费下载链接】minikubeRun Kubernetes locally项目地址: https://gitcode.com/gh_mirrors/mi/minikube
导读
本文是 minikube 官方持续基准测试(time-to-k8s Benchmark)在v1.29.0版本上的完整数据报告与解读。测试在 GitHub Actions 标准托管 Runner(Linux x86_64)上执行,将 minikube v1.29.0 与 kind v0.17.0、k3d v5.4.6 置于相同的评测脚本与硬件条件下,从"空机到 Kubernetes 集群成功对外服务"的全流程视角对比三者耗时与 CPU 开销。读完本文,你将掌握 minikube 官方基准测试的六个核心耗时指标与两个 CPU 指标的定义、v1.29.0 的具体实测数据、该数据在仓库中的生成方式,以及如何结合 hack/benchmark/time-to-k8s 目录下的工具复现同类评测。
v1.29.0 基准测试环境与对象
该页面对应于仓库文档 v1.29.0.md,由 page.go 中的 Go 模板自动生成。参与对比的三个工具及其版本如下:
| 对比对象 | 版本信息 |
|---|---|
| minikube | v1.29.0 |
| kind | v0.17.0(go1.19.2 linux/amd64) |
| k3d | v5.4.6 |
测试环境要点(依据 daily_benchmark.md 中指向的 GitHub Actions 标准托管 Runner 说明):
- 运行平台:Linux x86_64(amd64)公共仓库标准 Runner;
- 驱动与运行时:Docker driver + Docker runtime,minikube 以
--driver=docker --container-runtime=docker --memory=max --cpus=max启动(见 docker-docker-benchmark.yaml); - 评测脚本:time-to-k8s.sh 依次安装 kind、k3d 与通过
make构建的本地 minikube,随后运行go run . --config local-kubernetes.yaml --iterations 10 --output output.csv执行 10 轮迭代并输出 CSV。
因此,本文所有数据均为同一台机器、同一评测工具链下的横向对比结果,可以直接用于观察三种工具在"启动到可用"阶段的相对差异,但不代表不同硬件或虚拟化驱动(如 VirtualBox)下的表现。
核心耗时指标定义与 v1.29.0 实测数据
六个阶段指标的含义
time-to-k8s 评测将"从 0 到成功部署 Kubernetes"拆解为六个可独立计时的阶段。从 chart.go 中的run结构体与 chart.go 输出的 Markdown 表字段可以确认其命名与顺序:
| 指标 | 含义 |
|---|---|
| Command Exec | 执行启动命令(如minikube start)到命令返回的总耗时 |
| API Server Answering | API Server 开始响应请求所花费的时间 |
| Kubernetes SVC | Kubernetes 服务(kube-system 相关 Service)就绪耗时 |
| DNS SVC | DNS 服务(kube-dns / coredns Service)就绪耗时 |
| App Running | 测试应用进入 Running 状态耗时 |
| DNS Answering | 集群内 DNS 解析真正开始应答的耗时 |
其中 Total 为六项之和(见 chart.go 中total := cmdAvg + apiAvg + k8sAvg + dnsSvcAvg + appAvg + dnsAnsAvg),即从执行命令到 DNS 可应答的端到端总时长。
v1.29.0 实测耗时表(单位:秒)
| 指标 | minikube v1.29.0 | kind v0.17.0 | k3d v5.4.6 |
|---|---|---|---|
| Command Exec | 28.555 | 19.904 | 14.527 |
| API Server Answering | 0.070 | 0.089 | 0.107 |
| Kubernetes SVC | 0.063 | 0.066 | 0.098 |
| DNS SVC | 0.061 | 0.066 | 0.091 |
| App Running | 15.349 | 23.402 | 15.192 |
| DNS Answering | 8.699 | 0.631 | 3.407 |
| Total | 52.797 | 44.158 | 33.422 |
数据解读要点
- minikube 的耗时大头集中在 Command Exec(28.555s)与 DNS Answering(8.699s)两个阶段:前者包含虚拟机/容器启动、系统初始化与 kubeadm 引导等全套流程;后者反映集群内 DNS 从服务就绪到真正可解析的收敛时间。
- kind 的 App Running 耗时(23.402s)是三组中最高的,但其 DNS Answering 仅 0.631s,说明各工具的时间分布结构差异明显,单看 Total 会掩盖阶段差异。
- k3d 在 Command Exec 上优势最大(14.527s),总耗时 33.422s 为三者最低;从源码结构看,k3d 的镜像预置与轻量引导方式(直接在 Docker 内运行 k3s)与 minikube 基于 kicbase 节点镜像、完整 kubeadm 初始化的路径不同,这是阶段耗时结构差异的重要原因。
- 数据均来自 10 次迭代的平均值(
--iterations 10),并由 chart.go 计算平均值后落表,单次抖动已被平滑。
CPU 开销指标与实测数据
除耗时外,评测还记录了启动全程的 CPU 使用情况,两个指标定义如下(见 chart.go 中cpu结构体):
| 指标 | 含义 |
|---|---|
| CPU Utilization(%) | 启动全程平均 CPU 利用率百分比 |
| CPU Time(seconds) | 累计消耗的 CPU 时间(秒) |
v1.29.0 实测 CPU 数据
| 指标 | minikube v1.29.0 | kind v0.17.0 | k3d v5.4.6 |
|---|---|---|---|
| CPU Utilization(%) | 36.175 | 45.639 | 46.976 |
| CPU Time(seconds) | 18.119 | 20.130 | 15.710 |
解读:
- minikube v1.29.0 的平均 CPU 利用率(36.175%)在三者中最低,说明其启动流程对 CPU 的占用更平缓;kind 与 k3d 的利用率接近(约 45%~47%)。
- CPU 时间方面 k3d 最低(15.710s),与它的启动总耗时最低相一致;minikube 为 18.119s,介于两者之间。
- 由于三者的启动总耗时不同,"利用率低"并不直接等同于"更快"——minikube 用时更长但平均占用更分散,这正是把"耗时"与"CPU"两套指标并列展示的意义。
数据从何而来:仓库内的自动化生成链路
v1.29.0 基准页并非手工撰写,而是由仓库内一套完整的"评测 → 绘图 → 生成页面"流水线产出,读者可沿以下路径自行查阅与复现:
- 执行评测:
time-to-k8s.sh先安装 kind、k3d,再用make构建当前版本 minikube,最后在 time-to-k8s-repo 子模块中执行go run . --config local-kubernetes.yaml --iterations 10 --output output.csv收集 10 轮数据到 CSV; - 解析 CSV:
chart.go中readInCSV(chart.go)跳过首行表头,取第 8~16 列作为六项耗时与两项 CPU 指标,按 minikube/kind/k3d 分组存储; - 计算平均值:对每组多次运行求和后取平均,并累加出 Total(chart.go);
- 生成图表与 Markdown 表格:
createChart(chart.go)用 gonum/plot 绘制堆叠柱状图(六阶段叠加、Total 数值标注于柱顶),cpu.go中的createCPUChart(cpu.go)绘制 CPU 分组柱状图,outputMarkdownTable与cpuMarkdownTable分别生成两张 Markdown 表; - 渲染页面:
page.go通过 Go 模板(page.go)将版本号、时间表格、CPU 表格与两张图片组装为形如v1.29.0.md的页面文件,图片输出至site/static/images/benchmarks/timeToK8s/目录,weight字段取当天日期用于文档排序。
time-to-k8s.sh末尾的create_page "$VERSION"即一次调用go run ./hack/benchmark/time-to-k8s/*.go --csv ... --image ... --page ...完成图表与页面生成,随后清理 CSV 临时文件。整个链路说明该页面数据可随每次版本发布自动更新,读者看到的 v1.29.0 数据即该流程在该版本上的产物。
图表速览
上图标题为 "Time to go from 0 to successful Kubernetes deployment",X 轴依次为 minikube v1.29.0、kind v0.17.0、k3d v5.4.6,六种颜色分别对应 Command Exec(红)、API Server Answering、Kubernetes SVC、DNS SVC、App Running(紫)、DNS Answering(棕)六个阶段,柱顶数字即各工具 Total 耗时,与上文表格完全对应。
上图标题为 "CPU utilization to go from 0 to successful Kubernetes deployment",X 轴为 CPU Utilization(%) 与 CPU Time(seconds) 两组指标,三色柱分别代表 minikube、kind、k3d,直观呈现三者 CPU 开销差异。
两张图均由 chart.go 与 cpu.go 中的绘图逻辑自动生成,是本文表格数据的可视化对应物。
如何理解与使用这份基准数据
- 横向对比的适用前提:本数据只代表"Docker driver + Docker runtime、Linux x86_64 托管 Runner"这一种典型场景。若换用 VirtualBox 等驱动,结果会显著不同(仓库为此提供了 virtualbox-docker-benchmark.yaml 与 virtualbox-containerd-benchmark.yaml 等评测配置)。读者不应将单组数据外推为所有环境下的结论。
- 关注阶段分布而非只看 Total:minikube 的 Total(52.797s)高于 kind(44.158s)与 k3d(33.422s),但其 API Server、Kubernetes SVC、DNS SVC 三个阶段均快于另外两者;"慢"主要体现在 Command Exec 与 DNS Answering。若你的场景关注集群内部服务就绪速度,minikube 的表现并不差。
- 与其他版本对比:仓库的 timeToK8s 目录 按版本归档了 v1.20.0 至 v1.36.0 的全部基准页,可用于观察 minikube 随版本迭代的耗时变化趋势;daily_benchmark.md 则提供 Docker/VirtualBox × Docker/containerd 四种组合的每日基准图。
- 自行复现:可参考 time-to-k8s.sh 的步骤,在具备 Docker 的 Linux 主机上安装 kind、k3d 与本地构建的 minikube,以
--iterations 10运行评测并生成 CSV,再用go run ./hack/benchmark/time-to-k8s/*.go产出属于你自己环境的图表与页面。
小结
v1.29.0 基准页完整呈现了 minikube 在该版本上的启动耗时画像:Total 52.797s,其中命令执行(28.555s)与 DNS 应答(8.699s)为主要耗时来源;CPU 平均利用率 36.175%、累计 CPU 时间 18.119s,均为三者中较低或居中水平。该数据由仓库内置的 time-to-k8s 评测流水线在统一环境下自动产出,既可作为 minikube 版本间性能演进的参照锚点,也为开发者选择本地 Kubernetes 工具时提供了"耗时 + 资源开销"双维度的量化依据。
【免费下载链接】minikubeRun Kubernetes locally项目地址: https://gitcode.com/gh_mirrors/mi/minikube
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考