【容器架构】Minikube vs.kind vs.k3s-我应该用哪一个?

现在有一些工具声称(部分地)替代了一个成熟的Kubernetes集群。例如,使用它们,每个开发人员都可以运行他们自己的本地集群实例,以便在CI/CD期间使用它、部署他们的应用程序或对K8s中运行的应用程序执行测试。在这篇文章中,我们将看看其中的三个,比较它们的优缺点,并为每一个确定用例。

minikube

minikube是一个Kubernetes-SIGs项目,已经启动三年多了。它采用的方法是生成一个实质上是单节点K8s集群的VM。由于对一系列管理程序的支持,它可以在所有主要操作系统上使用。这还允许您并行创建多个实例。

从用户的角度来看,minikube是一个非常适合初学者的工具。使用minikube start启动集群,稍等几分钟,kubectl就可以开始了。要指定Kubernetes版本,可以使用--Kubernetes version标志。支持的版本列表可以在这里找到。

如果您是库伯内特斯的新手,minikube提供的对其仪表板的一流支持可能会帮助您。使用一个简单的minikube仪表板,应用程序将打开,让您对集群中发生的所有事情有一个很好的概述。这是通过minikube的插件系统实现的,该系统可以帮助您将诸如Helm、Nvidia gpu和图像注册表之类的东西集成到集群中。

Kind

Kind是另一个Kubernetes SIGs项目,但与minikube相比有很大不同。顾名思义,它将集群移动到Docker容器中。与生成VM相比,这将显著加快启动速度。

创建集群与minikube的方法非常相似。执行类创建集群,玩等待游戏,然后你就可以走了。通过使用不同的名称(-name)kind,可以并行创建多个实例。

我个人喜欢的一个特性是能够将本地图像直接加载到集群中。这为我节省了一些额外的步骤来设置注册表和每次尝试更改时推送我的图像。有了一个简单的类型加载docker图像我的应用程序:最新的图像可用于我的集群。很不错的!

如果您正在寻找一种以编程方式创建Kubernetes集群的方法,请友好地(您已经等了很久了,不是吗:P)发布它的Go包,这些包在hood下使用。如果您想了解更多,请查看GoDocs并查看KUDO如何使用kind进行集成测试。

k3s

K3s是由牧场主实验室开发的Kubernetes的缩小版。通过删除可有可无的特性(传统的、alpha的、非默认的树内插件)和使用轻量级组件(例如sqlite3而不是etcd3),它们实现了显著的精简。这将产生一个大小约为60MB的二进制文件。

应用程序分为K3s服务器和代理。前者担任经理,后者负责处理实际工作量。我不鼓励您在工作站上运行它们,因为这会导致本地文件系统中出现一些混乱。相反,将k3放在一个容器中(例如,使用rancher/k3),这也允许您轻松地运行几个独立的实例。

其中一个突出的特性称为自动部署。它允许您通过将Kubernetes清单和Helm图表放入特定目录来部署它们。K3s关注变化,并注意应用它们,而不需要任何进一步的交互。这对于CI管道和物联网设备(都是K3s的目标用例)特别有用。只需创建/更新您的配置,K3s确保您的部署保持最新。

 

摘要

我是一个很长时间的minikube用户,因为那里根本没有其他选择(至少我从来没有听说过),老实说……它在成为本地Kubernetes开发环境方面做得相当好。创建集群,等几分钟就可以了。不过,对于我的用例(主要是使用运行在K8s上的工具),我可以完全用kind替换它,因为安装时间更快。如果你在一个资源紧张的环境中工作,或者需要更快的启动时间,K3S绝对是一个你应该考虑的工具。

这三种工具都是在使用不同的方法和关注不同的用例的同时完成工作的。我希望你能更好地理解它们是如何工作的,哪一个是解决你即将面临的问题的最佳人选。

下面您可以找到一个表,列出了每个工具的一些关键事实。

  minikube kind k3s
runtime VM container native
supported architectures AMD64 AMD64 AMD64, ARMv7, ARM64
supported container runtimes Docker,CRI-O,containerd,gvisor Docker Docker, containerd
startup time initial/following 5:19 / 3:15 2:48 / 1:06 0:15 / 0:15
memory requirements 2GB 8GB (Windows, MacOS) 512 MB
requires root? no no yes (rootless is experimental)
multi-cluster support yes yes no (can be achieved using containers)
multi-node support no yes yes
project page minikube kind k3s

原文:https://brennerm.github.io/posts/minikube-vs-kind-vs-k3s.html

本文:http://jiagoushi.pro/node/978

讨论:请加入知识星球或者微信圈子【首席架构师圈】