- 云原生
- 容器编排
- CLI
- 开发工具
【免费下载链接】minikube
Run Kubernetes locally
本篇技术指南围绕 minikube 官方基准文档 site/content/en/docs/benchmarks/timeToK8s/v1.27.0.md 展开,完整解读 minikube v1.27.0 与 kind、k3d 三款本地 Kubernetes 方案的 "从零到集群可用"(time-to-k8s)耗时与 CPU 开销实测数据,并结合仓库内hack/benchmark/time-to-k8s/的基准工具链源码,讲清每一项指标的含义、数据的产生方式以及该基准页面的自动生成机制。读完本文,你将能准确读懂 minikube 官方基准表格与图表,理解 6 个耗时阶段和 2 项 CPU 指标的定义,并掌握如何基于仓库脚本自行复现这套对比基准。
一、基准文档是什么:v1.27.0 发布的性能快照
minikube 仓库为每个发布版本保留一份 "time-to-k8s" 基准快照,存放在 site/content/en/docs/benchmarks/timeToK8s/ 目录下,从 v1.20.0 一直持续到 v1.36.0,v1.27.0.md正是 minikube v1.27.0 版本对应的那一份。
该文档的结构非常固定,包含两个部分:
- time-to-k8s 分段耗时表格(单位为秒)及对应的堆叠柱状图;
- CPU 利用率与 CPU 时间表格及对应的分组柱状图。
被测对象是三款主流的本地 Kubernetes 工具:
| 工具 | 被测版本 |
|---|---|
| minikube | v1.27.0 |
| kind | v0.15.0 go1.19 linux/amd64 |
| k3d | version v5.4.6 |
测试环境为 GitHub 托管的 Linux/amd64 标准 runner。整个系列基准由 hack/benchmark/time-to-k8s/ 下的自动化脚本持续产出,v1.27.0.md只是其中一个版本快照;同目录下另有 daily_benchmark.md 展示针对 HEAD 的每日趋势图,可按 benchmarks 总览页 继续阅读其他版本快照。
二、指标定义:time-to-k8s 到底在测量什么
"time-to-k8s"(Time to go from 0 to successful Kubernetes deployment)衡量的是:在全新环境里,从执行启动命令开始,到集群部署成功、应用可访问所经历的总时间。基准工具把整个过程拆成 6 个阶段,由 hack/benchmark/time-to-k8s/chart.go 中的run结构体可见其字段顺序与文档表格一一对应:
| 阶段指标 | 含义 | 代码字段 |
|---|---|---|
| Command Exec | 启动命令从下发到返回的耗时 | cmd |
| API Server Answering | API Server 开始响应请求 | api |
| Kubernetes SVC | Kubernetes 核心 Service 就绪 | k8s |
| DNS SVC | kube-dns/CoreDNS Service 就绪 | dnsSvc |
| App Running | 示例应用 Pod 进入 Running 状态 | app |
| DNS Answering | 集群内 DNS 域名解析成功响应 | dnsAns |
Total(总计)并非独立测量项,而是 6 个阶段耗时之和,见 chart.go 中的total := cmdAvg + apiAvg + k8sAvg + dnsSvcAvg + appAvg + dnsAnsAvg。
CPU 部分则由两个指标构成(cpu.go 中定义):
- CPU Utilization(%):整个基准运行期间的平均 CPU 利用率百分比;
- CPU Time(seconds):累计消耗的 CPU 时间(秒)。
需要说明的是,这些指标反映的是单次发布快照在特定 runner 硬件上的表现,绝对数值会随机器环境波动;更有参考价值的是同一环境下三款工具的横向相对差距。
三、v1.27.0 time-to-k8s 实测数据与图表
以下是该基准文档中的完整 time-to-k8s 耗时数据(单位:秒):
| minikube version: v1.27.0 | kind v0.15.0 go1.19 linux/amd64 | k3d version v5.4.6 | |
|---|---|---|---|
| Command Exec | 28.504 | 20.215 | 15.026 |
| API Server Answering | 0.077 | 0.078 | 0.097 |
| Kubernetes SVC | 0.065 | 0.060 | 0.060 |
| DNS SVC | 0.061 | 0.060 | 0.060 |
| App Running | 14.903 | 23.039 | 11.824 |
| DNS Answering | 8.702 | 0.637 | 2.770 |
| Total | 52.312 | 44.089 | 29.837 |
该图表由 chart.go 中的createChart生成:6 个阶段按 "Command Exec → API Server Answering → Kubernetes SVC → DNS SVC → App Running → DNS Answering" 的顺序自下而上堆叠成柱状图(bars[0].StackOn(bars[1])逐层叠放),图例置于顶部,并在每根柱子上方标注总计耗时(Y 轴上限固定为 80 秒)。
数据要点分析
从这份实测数据可以观察到几个关键现象:
- Command Exec 是最大的耗时项:minikube 的 28.504 秒占总耗时 52.312 秒的 54.5%,kind 与 k3d 的该项同样占比最大。这一阶段涵盖镜像拉取、虚拟机/容器节点创建、kubeadm 初始化等重活,直接决定三款工具的启动体验。
- API Server、Kubernetes SVC、DNS SVC 三个就绪阶段三者差距极小:均在 0.06~0.10 秒量级,说明这三款工具在控制面组件启动后的就绪速度上没有实质差异。
- App Running 阶段 minikube 明显快于 kind:14.903 秒对 kind 的 23.039 秒,节省约 8.1 秒;但仍慢于 k3d 的 11.824 秒。
- DNS Answering 是 minikube 相对明显的短板:8.702 秒远高于 kind 的 0.637 秒和 k3d 的 2.770 秒,这是本次快照中 minikube 与对手差距最大的单项。
总体而言,本次快照中k3d 总耗时最短(29.837 秒),kind 居中(44.089 秒),minikube v1.27.0 为 52.312 秒。需要强调的是,这只是一次发布版本的横向快照,minikube 后续版本的持续优化可在 timeToK8s 目录 的后续版本文档中追踪对比。
四、v1.27.0 CPU 开销实测数据与图表
文档第二部分是 CPU 资源开销数据:
| minikube version: v1.27.0 | kind v0.15.0 go1.19 linux/amd64 | k3d version v5.4.6 | |
|---|---|---|---|
| CPU Utilization(%) | 38.822 | 46.720 | 44.883 |
| CPU Time(seconds) | 19.224 | 20.570 | 13.381 |
该图表由 cpu.go 中的createCPUChart生成:针对 "CPU Utilization(%)" 和 "CPU Time(seconds)" 两个字段,三款工具各画一根并列的柱(分别以-w、0、+w偏移错开),Y 轴上限取数据最大值加 5 自适应。
数据要点分析
- CPU 利用率:minikube 以 38.822% 在三者中最低,kind 为 46.720%,k3d 为 44.883%。从启动期间对宿主 CPU 的占用来看,本次快照中 minikube 表现最省。
- CPU 时间:minikube 为 19.224 秒,与 kind 的 20.570 秒基本相当,k3d 的 13.381 秒最低。
综合两个指标可以推断:minikube v1.27.0 在这台测试机器上以最低的平均 CPU 占用完成了启动,但其累计 CPU 时间并未像 k3d 那样压缩到更低水平,说明耗时更多体现在墙钟时间(wall-clock)而非 CPU 忙等上——这与上一节中 Command Exec、DNS Answering 两项偏高的现象是相互印证的。
五、这套基准是如何自动化产出的
v1.27.0.md并非手写文档,而是由仓库内基准工具链自动生成。完整流程记录在 hack/benchmark/time-to-k8s/time-to-k8s.sh 中,主要分为四步:
- 安装被测工具:
install_kind、install_k3d分别下载 kind 与 k3d 的最新发布版;install_minikube则通过make从当前源码构建 minikube 并安装到/usr/local/bin,保证被测的是仓库当前代码。 - 运行基准:
run_benchmark进入 git 子模块time-to-k8s-repo(该子模块在仓库中以 submodule 形式维护,镜像内此目录为空,需git submodule update --init拉取),执行:go run . --config local-kubernetes.yaml --iterations 10 --output output.csv即针对三款工具各迭代 10 次取平均,结果写入 CSV。
- 生成页面与图表:
create_page调用 page.go:go run ./hack/benchmark/time-to-k8s/*.go \ --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv \ --image ./site/static/images/benchmarks/timeToK8s/"$VERSION" \ --page ./site/content/en/docs/benchmarks/timeToK8s/"$VERSION".md - 清理临时 CSV,保留最终产物。
从源码看数据与页面的对应关系
page.go 内嵌了一个page模板,生成的 Markdown 结构与v1.27.0.md完全一致:
title: "{{.Version}} Benchmark" ... time-to-k8s {{.TimeMarkdown}} cpu-to-k8s {{.CPUMarkdown}}细节上值得注意的几点:
- 版本信息来自被测产物本身:页面标题中的版本号通过执行
minikube version --short获取(page.go),而非写死,保证文档与二进制一致; - front matter 的 weight 取生成日期:
data.Weight = time.Now().Format("20060102"),因此v1.27.0.md的weight: -20220915表示该页面生成于 2022-09-15; - CSV 解析规则:每行第 8~16 列是运行结果,第 1~6 个数值依次对应 6 个耗时阶段,第 7、9 个数值对应 CPU 利用率与 CPU 时间(chart.go);各工具的版本字符串取自 CSV 第 6 列(
d[5]); - 聚合方式:
values()函数对三款工具分别累加所有迭代并求平均(chart.go),表格与图表共用同一份聚合数据,因此文档中表格与图片数值天然一致; - Markdown 表格渲染:耗时表与 CPU 表分别由
outputMarkdownTable(chart.go)和cpuMarkdownTable(cpu.go)生成,字段名 "Command Exec"、"CPU Utilization(%)" 等硬编码在源码中。
由此可以确认:本文第三节、第四节呈现的两张表格与两张图表,正是上述自动化流水线对 10 次迭代取平均后的直接产物。
六、结论与进一步阅读
minikube v1.27.0 的这份基准快照表明:
- 总耗时:k3d(29.837s)< kind(44.089s)< minikube v1.27.0(52.312s),主要差距集中在 Command Exec 与 DNS Answering 两个阶段;
- CPU 资源:minikube v1.27.0 的 CPU 利用率(38.822%)在三者中最低,CPU 时间(19.224s)与 kind 相当;
- 就绪速度:三款工具在 API Server、Kubernetes SVC、DNS SVC 就绪阶段几乎没有差异(均在 0.1 秒内)。
如果你希望跟踪这项指标随版本的演化,可以参考:
- timeToK8s 基准总览 与 每日基准趋势;
- 同目录下其他版本快照(如 v1.26.1.md、v1.28.0.md)用于对比版本间变化;
- 基准工具源码 time-to-k8s.sh、chart.go、cpu.go、page.go 用于理解甚至复现整套测量流程。
需要提醒的是,本数据为单次发布快照、单机环境结果,不同硬件与驱动(Docker/containerd/VirtualBox 等,参见 daily_benchmark.md 中按 driver-runtime 组合区分的趋势图)下结论可能不同;将其视为版本间相对趋势的参考而非绝对性能承诺,是更合理的解读方式。
- 云原生
- 容器编排
- CLI
- 开发工具
【免费下载链接】minikube
Run Kubernetes locally
相关推荐
minikube v1.33.1 的 time-to-k8s 基准测试解读:minikube 与 kind、k3d 的启动耗时与 CPU 开销对比
minikube v1.33.1 的 time to k8s 基准测试解读:minikube 与 kind、k3d 的启动耗时与 CPU 开销对比 本文基于 m
云原生容器编排CLI开发工具minikube v1.31.2 time-to-k8s 基准测试解析:与 kind、k3d 的启动耗时与 CPU 开销对比
minikube v1.31.2 time to k8s 基准测试解析:与 kind、k3d 的启动耗时与 CPU 开销对比 本文基于 minikube 官方仓
云原生容器编排CLI开发工具minikube v1.34.0 time-to-k8s 基准测试解读:与 kind、k3d 的启动耗时与 CPU 占用对比
minikube v1.34.0 time to k8s 基准测试解读:与 kind、k3d 的启动耗时与 CPU 占用对比 导读 :本文基于 minikube
云原生容器编排CLI开发工具
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考