K3d vs Kind 谁更适合本地研发

简介: 对比 K3d 和 Kind 在本地开发侧的能力。

前言

随着 Kubernetes 及其周边生态的发展壮大,新项目层出不穷,越来越多的开发者加入到了开发云原生应用的行列。随之而来的,就是 Kubernetes 极高的复杂度和研发人员想要快速开发云原生应用之间的矛盾。为了解决这个矛盾,同时也为了降低学习 Kubernetes 的门槛,社区出现了各种各样的解决方案。如 minikube 用于生成一个单节点的 k8s VM,而 katacoda 则是在 web 端提供交互式的 k8s 操作教程。

在这些方案中,最有意思的一类方案是使用 docker 运行整个 k8s 集群,以极高的启动速度、极低的使用成本以及简单的操作深受广大开发者欢迎,并广泛应用于各种云原生应用开发和 e2e 测试中。其中最具代表性的就是 Kubernetes SIGs 项目 KindRancher Lab 开源的 k3d。在这篇文章中,我们就来探究一下这两个项目在本地开发侧的优缺点,站在一个开发者的的角度看看使用哪个项目更能提升我们的效率。

Kind

Kind 顾名思义 Kubernetes in docker,是一个使用 docker 容器在本地运行 Kubernetes 集群的工具。其本身就是为了测试 Kubernetes 而设计,所以天生就和 CI 紧密关联,广泛应用于各种云原生项目的 CI 中,同时因为其可以快速拉起集群和操作简单,深受开发者喜爱,可谓是“有 Kind 不思 Minikube”。

Kind 使用 kubeadm 进行集群的创建,内部使用 containerd 运行组件容器,可以通过指定配置文件 config.yaml 来拉起相应配置的集群,支持多节点集群,同时也可以把本地的镜像加载到集群中,实现测试镜像无需上传镜像仓库的功能。并且之前国内拉取不到镜像的问题已经解决,直接在 dockerhub 拉取 kindest/node 镜像,镜像中均已包含创建 Kubernetes 集群所需的全部资源,无需再额外下载。

K3d

与 Kind 类似,K3d 是使用 docker 容器在本地运行 k3s 集群,k3s 是由 Rancher Lab 开源的轻量级 Kubernetes。k3d 完美继承了 k3s 的简单、快速和占用资源少的优势,镜像大小只有 100 多 M,启动速度快,支持多节点集群。虽然 k3s 对 Kubernetes 进行了轻量化的裁剪,但是提供了完整了功能,像 Istio 这样复杂的云原生应用都可以在 k3s 上顺利运行。

K3d 同时也有着自己的优势,除了启动速度快和占用资源少以外,在边缘计算和嵌入式领域也有着不俗的表现。因为 k3s 本身应用场景主要在边缘侧,所以支持的设备和架构很多,如:ARM64 和 ARMv7 处理器。很多老旧 PC 和树莓派这样的设备都可以拿来做成 k3s 集群,为本地研发测试燃尽最后的生命。

Kind vs K3d

下面就对 Kind 和 K3s 的进行一些简单的对比,对比数据均来自同一台 macbook pro,使用相同的资源进行。采用目前最新版本,版本如下:

  • k3d v3.2.1
  • kind v0.7.0

工具安装

K3d 和 Kind 均支持使用 brew 安装,且均在安装时自动注入命令补全 completion 脚本,安装好之后即可实现按 <TAB> 自动补全命令,无需手动操作,体验极佳。

本地镜像注入

k3d image importkind load 命令均可将本地镜像注入集群且均支持注入 docker 镜像或镜像文件。

base 镜像大小

本项 k3s 完胜,由于 k3s 本身就是轻量级的 Kubernetes,所以镜像极小,大小还没有 Kind base 镜像 kindest/node 的零头大。

镜像大小比较

启动速度

这里的启动速度排除了镜像拉取的时间,两者的镜像均已拉取到本地,且启动的均为默认配置的集群。

k3d 启动时间:

k3d 启动时间

kind 启动时间:

kind 启动时间

可以看到还是 k3s 的启动速度要快于 Kind,因为 k3s 本身就是主打轻量级和快速启动,但 kind 的启动速度也很快,耗时均在本地用户的可接受范围内。

资源占用

这里对比的两个集群均是默认配置,无运行任何其他组件和服务。同样 k3d 占用的资源更少,但总体都没有超出不可承受的范围。

资源占用

ingress

这项更偏向使用者的体验,k3s 自带了 traefik 作为 Ingress Controller 开箱即用,用户如果不想关心使用什么 ingress 可以无需关心,直接上手使用。而 Kind 则没有预装 Ingress Controller,如果需要使用则需要手动部署。

架构支持

Kind 目前只支持 x86 的 CPU 架构,而 k3d 则支持 x86、ARM64 和 ARMv7,如果想在使用 M1 芯片的新 MacBook 或在有 ARM 架构 CPU 的 PC 上使用,暂时只能使用 k3d。

总结

通过对比可以看出 k3d 和 kind 的相似点很多,但两方的使用场景还是略有差别。Kind 更贴近原生 Kubernetes,适合用于开发测试 Kubernetes 原生组件、资源比较充沛的开发者;而 K3s 则更适合边缘计算场景应用开发、资源紧张、使用非 x86 CPU 架构设备的开发者。如果你只是想学习 Kubernetes 集群的操作、各种资源的使用、Kubernetes 相关项目的尝鲜,则这两个工具都是不错的选择。

注意:两者都是为了方便测试 kubernetes 集群,切不可用于生产环境。

欢迎扫描二维码关注公众号,了解更多云原生知识

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
机器学习/深度学习 人工智能 算法
图解机器学习 | KNN算法及其应用
KNN算法(K近邻算法)是一种很朴实的机器学习方法,既可以做分类,也可以做回归。本文详细讲解KNN算法相关的知识,包括:核心思想、算法步骤、核心要素、缺点与改进等。
4855 1
图解机器学习 | KNN算法及其应用
|
数据采集 JSON API
深入解析:使用 Python 爬虫获取淘宝店铺所有商品接口
本文介绍如何使用Python结合淘宝开放平台API获取指定店铺所有商品数据。首先需注册淘宝开放平台账号、创建应用并获取API密钥,申请接口权限。接着,通过构建请求、生成签名、调用接口(如`taobao.items.search`和`taobao.item.get`)及处理响应,实现数据抓取。代码示例展示了分页处理和错误处理方法,并强调了调用频率限制、数据安全等注意事项。此技能对开发者和数据分析师极具价值。
vue 计算属性,实现复选框的全选和反选 【小案例】
本文通过一个Vue.js小案例,展示了如何使用计算属性实现复选框的全选和反选功能。计算属性的完整写法包括get和set两部分,分别用于获取值和设置值。在全选和反选的场景中,计算属性的get方法用于判断所有复选框是否都已选中,从而控制全选复选框的状态;计算属性的set方法则用于根据全选复选框的状态,批量更新每个复选框的选中状态。通过示例代码和效果图,文章清晰地说明了计算属性在实现这一功能中的作用和效果。
vue 计算属性,实现复选框的全选和反选 【小案例】
|
数据采集 数据可视化 定位技术
倾斜摄影教程:无人机航拍后使用ContextCapture生成 3D模型
倾斜摄影建模利用多角度影像生成高精度三维模型,广泛应用于城市规划、遗产保护等领域。通过无人机拍摄与专业软件处理,实现真实感强、自动化程度高的实景建模。
倾斜摄影教程:无人机航拍后使用ContextCapture生成 3D模型
|
Kubernetes 容器
Kubernetes(K8S) 拉取镜像 ImagePullBackOff pull access denied
Kubernetes(K8S) 拉取镜像 ImagePullBackOff pull access denied
719 0
|
Kubernetes 网络协议 Linux
Cilium 系列 -2-Cilium 快速安装
Cilium 系列 -2-Cilium 快速安装
|
网络协议 虚拟化 网络架构
VMware的三种连接模式
在学习网安的过程中,我们需要通过实战来模拟来练习我们的技术能力,而我们私人进行测试容易吃牢饭,不仅如此我们在学习过程中会使用到很多的操作系统,我们也不可能去买多台电脑来去使用,不太现实,我们为了避免这种情况,我们需要通过虚拟机来安装不同的系统来使用.本篇文章是对于虚拟机的三种链接方法进行详细的介绍,我对使用VMware虚拟机过程中在连接过程中遇了一些问题后,觉得需要对这方面的知识进行学习和总结,也是在学习中,之前的我对于实际操作的部分很熟练,但是对于理论方面的知识其实不是很了解,现在也是对我短板的一个弥补吧,收获满满.
|
Kubernetes 调度 Docker
玩转Kubernetes—使用minikube操作集群
玩转Kubernetes—使用minikube操作集群
1069 0
|
JavaScript Java 数据库连接
Spring Boot 2.0+Mybatis+Vue的轻量级后台管理系统
Spring Boot 2.0+Mybatis+Vue的轻量级后台管理系统
392 0
|
XML 测试技术 网络安全
开发工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成上面几种接口的硬件时序电信号,实现与这几种接口芯片、设备的快速测试。 首先声明一下,大家都是搞硬件开发的,这几种接口当然是很简单的事,但有些时候对于一个新的设备或者芯片的测试,有个现成的工具当然更顺手,节省时间,也更可靠嘛。

热门文章

最新文章