i007.cc

i007.cc

优先队列-降维打击

05.价值资料

kind和minikube有什么不同?

kind 和 minikube 都是本地跑 Kubernetes 集群的工具,目标类似,但底层架构和设计取向差别挺大,你这几天全程用的 kind 正好能拿来对照着理解。

架构上最根本的区别:kind 用 Docker 容器来模拟 Kubernetes 节点,每个”节点”就是一个跑着完整 K8s 组件(apiserver、etcd、kubelet 等等,也就是我们这几天一直在 docker exec 进去查看的那个 kind-control-plane 容器)的 Docker 容器,本质上是”用容器套娃出一个节点”,不涉及虚拟化,直接共享宿主机内核;minikube 则是创建一个真正的虚拟机(或者容器,取决于你选的 driver)来跑整个集群,历史上更偏向虚拟机路线。这也导致了 minikube 支持的 driver 种类比 kind 多得多——VirtualBox、HyperKit(macOS)、Hyper-V(Windows)、KVM(Linux)、Docker、Podman 都能选,而 kind 从设计上就只依赖 Docker 一种方式,配置选项少,但前提条件也更简单(你这几天遇到的所有网络问题,严格来说也都是拜这个”基于 Docker 容器”的架构所赐,如果换成 minikube 用 VM driver,反而不会遇到我们排查了半天的那个 systemd-resolved/Docker 内置 DNS 代理的坑,算是 kind 这种轻量方案的一个代价)。

多节点支持是 kind 明显更强的地方——它天生就是为多节点场景设计的,创建 3 个、5 个节点的集群,本质上就是多起几个容器,速度很快,特别适合测试节点亲和性、Pod 打散分布、控制面高可用这类必须要多节点才能验证的场景;minikube 是后来(1.10.1 版本)才补上多节点支持的,目前这块功能相对还不够成熟,跟 kind 这种”专门为多节点而生”的方案比起来还是有差距。

功能丰富度上 minikube 明显更”开箱即用”,自带一套 addon 系统,一条命令(比如 minikube addons enable ingressdashboardmetrics-server)就能装好常用组件,甚至有个 minikube dashboard 直接弹出 Kubernetes 官方 Dashboard 网页界面;kind 走的是极简路线,默认几乎什么都不装,你想要 Ingress Controller、Dashboard 这些,都得自己动手装——这个我们这几天其实深有体会,从装 Crossplane 的 Provider,到排查 CoreDNS 配置,都是自己一步步手动搞定的,如果换成 minikube,可能有些环节会因为自带的组件而少踩点坑,但也会因为很多东西”已经帮你装好了”而少了很多亲手折腾、理解底层原理的机会。

资源开销上 kind 更轻量,因为容器不需要额外的虚拟化层开销,启动快、占用内存磁盘都更少,这也是为什么 kind 特别受 CI/CD 流水线欢迎——GitHub Actions 这类 CI 环境本身就有 Docker,跑 kind 几乎零额外配置成本,这也是 kind 最初被设计出来的初衷:它是 kubernetes-sigs 官方项目,最早就是 Kubernetes 项目自己拿来在 CI 里测试 Kubernetes 本身(测试新版本、测试升级兼容性)用的工具,后来才被社区广泛拿去做日常本地开发测试;minikube 则更偏向”本地开发学习”这个定位,从一开始的设计目标就是让开发者能用最简单的方式在自己电脑上跑一个尽量贴近生产环境的单节点(现在也支持多节点)集群,文档和使用体验打磨得更细致,也更适合入门学习和演示场景。两者都是 Kubernetes 官方(kubernetes 和 kubernetes-sigs 组织)维护的项目,不存在谁更”官方”的问题,只是定位不同。

简单总结:追求轻量、快速、多节点测试、CI 集成,选 kind;追求开箱即用、功能丰富、更贴近”完整生产环境体验”、addon 一条命令搞定,选 minikube。你这几天这套从装 Docker DNS 问题排查到手动装 Crossplane 的经历,其实正是 kind”极简、什么都要自己动手”这个设计取向的真实写照,也算是理解这两个工具差异的一个很好的亲身对照案例。

发表回复