
【云边计算】K3s简介,与K8s的区别

💡简介
本文将介绍K3s和K8s的基本概念,并详细探讨它们之间的区别。K3s是K8s的精简版,专为边缘计算和资源受限的环境设计。通过本文,你将了解K3s的特点、优势以及它与K8s的主要区别。
🖼️背景
最近在了解一些云边协同系统,回忆起曾经调研时得知边缘端广泛采用的管理平台是K3s,也大致知道K3s是K8s的精简版,但一直不知道具体有什么区别。因此现在整理一下K3s的简介、K3s和K8s的区别。
🧠思路
- 介绍K3s和K8s的基本概念。
- 探讨K3s的特点和优势。
- 比较K3s和K8s的主要区别。
- 总结K3s在边缘计算中的应用场景。
🔨解决
K3s简介
K3s是由Rancher Labs开发的轻量级Kubernetes(K8s)发行版,专为资源受限的环境和边缘计算设计,针对边缘计算、物联网等场景进行了高度优化。
K3s 经过专门设计,即使在最小的硬件环境中也能良好运行。[4]
- K3s 提供了一个小于 60MB 的单个二进制文件。这个轻量级可执行文件包含了启动完全功能的 Kubernetes 集群所需的一切。
- 通过放弃非必要的 Kubernetes 功能(如云服务提供商集成和非 CSI 3 存储提供商),实现了这个小巧的二进制文件大小。
- 利用 Go 语言的 goroutines 6,将各个 Kubernetes 组件从单个入口点运行起来。
为什么叫 K3s?
希望安装的 Kubernetes 在内存占用方面只是一半的大小。Kubernetes 是一个 10 个字母的单词,简写为 K8s。所以,有 Kubernetes 一半大的东西就是一个 5 个字母的单词,简写为 K3s。K3s 没有全称,也没有官方的发音。[3]
K3s的特点
简单来说,K3s的特点体现在:
- 轻量级:K3s移除了许多不常用的Kubernetes组件,如内置的云提供商支持和存储驱动程序,减少了资源占用。
- 易于安装:K3s提供了一键安装脚本,使其在各种环境中快速部署。
- 内置SQLite:K3s默认使用SQLite作为数据存储,进一步减少了资源需求。
具体来说,K3s有以下增强功能:
控制
- 最大程度减轻了外部依赖性:K3s 仅需要操作系统的内核 kernel 和 cgroup 挂载。这意味着你不需要安装很多额外的软件,K3s 就能正常工作。
- K3s 软件包需要的依赖项都被打包在 K3s 中,减少了对外部组件的依赖。包括:
- containerd
- Flannel
- CoreDNS
- CNI
- 主机实用程序(iptables、socat 等)
- Ingress controller(Traefik)
- 嵌入式服务负载均衡器(service load balancer)
- 嵌入式网络策略控制器(network policy controller)
- K3s 软件包需要的依赖项都被打包在 K3s 中,减少了对外部组件的依赖。包括:
存储
- 轻量级存储后端:K3s 默认使用基于 SQLite3 的轻量级存储后端作为默认存储机制,进一步减少了资源需求。同时支持使用 etcd3、MySQL 和 PostgreSQL 作为存储机制。
使用
- 打包为单个二进制文件:K3s 将所有 Kubernetes control-plane 组件操作封装在一个单独的二进制文件和进程中,使其更易于分发和管理。
- 封装在简单的启动程序中:通过该启动程序处理很多复杂的 TLS 和选项,使得 K3s 的安装和配置更加简便。
- 所有组件都封装在单个二进制文件和进程中:这使得 K3s 具有自动化和管理包括证书分发在内的复杂集群操作的能力。
安全
- 默认情况下是安全的:对轻量级环境有合理的默认值,确保在资源受限的环境中也能安全运行。
功能
- 添加了简单但功能强大的batteries-included功能: K3s 自带了一些常用的功能和工具,就像买一个玩具时,电池已经包含在内,不需要额外购买,这些功能让 K3s 更加易用和强大。例如:
- 本地存储提供程序
- 服务负载均衡器
- Helm controller:Helm 是 Kubernetes 的包管理工具,类似于 Linux 系统中的 apt 或 yum。Helm controller 是一个自动化工具,可以帮助你在 Kubernetes 集群中安装和管理 Helm 包。它自动化了 Helm 包的安装和管理,允许用户定义、安装和升级复杂的 Kubernetes 应用。Helm controller 使得在 K3s 中使用 Helm 更加方便和高效。
- Traefik Ingress controller:Traefik 是一个现代的反向代理和负载均衡器。Ingress controller 是 Kubernetes 中的一个组件,用于管理外部访问到集群内服务的流量。Ingress controller 负责处理 HTTP 和 HTTPS 请求,并将它们路由到集群内的相应服务。Traefik Ingress controller 就是使用 Traefik 来管理这些流量。Traefik 提供了强大的功能和灵活性,使得流量管理更加高效和可靠。
K8s简介
K8s(Kubernetes)是一个开源的容器编排平台,用于自动化容器化应用的部署、扩展和管理。K8s由Google开发,并由CNCF(云原生计算基金会)维护。K8s提供了强大的功能和灵活性,适用于各种规模的生产环境。K8s帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。
Kubernetes 提供了部署容器并在多个主机上进行扩展的所有所需工具。Kubernetes 集群中的每台主机被称为一个节点,节点由 Kubernetes 控制平面管理。它会将你的容器调度到空闲节点上,管理网络和存储并提供与之交互的 API。
K8s的特点
- 强大的功能:K8s提供了丰富的功能,如自动扩展、负载均衡、滚动更新和回滚等。
- 广泛的生态系统:K8s拥有庞大的社区和生态系统,提供了大量的插件和工具。
- 高可用性:K8s支持多主节点和多工作节点的集群架构,提供高可用性和容错能力。
K3s和K8s的主要区别
简单来说,二者区别如下:
- 安装和配置:K3s提供了一键安装脚本,简化了安装和配置过程。K8s的安装和配置相对复杂,需要更多的步骤和配置。
- 资源占用:K3s移除了许多不常用的组件,减少了内存和CPU的使用,使其能够在资源受限的环境中运行。K8s则提供了更强大的功能和灵活性,但需要更多的资源。
- 数据存储:K3s默认使用SQLite作为数据存储,进一步减少了资源需求。K8s则使用etcd作为数据存储,提供更高的性能和可靠性。
- 架构支持:K3s支持ARM架构,使其能够在Raspberry Pi等设备上运行。K8s主要支持x86架构,但也可以通过额外配置支持ARM架构。
更具体地,主要区别在于安装和配置(部署升级方式)、资源占用、数据存储、速度以及安全方面:
安装和配置(部署升级方式)
通常情况下,相比 K8s,K3s 更容易部署和维护。轻量级的二进制文件让你可以用一个命令启动所有的 Kubernetes 控制平面组件。而要启动官方的 Kubernetes 集群则需要更多的时间和步骤,并且可能更难维护。
K3s 提供了更简单、无需干预的体验。K8s 下虽然使用 Kubeadm 的升级同样也相对简单,但需要运行更多的命令。这增加了升级过程中出错的可能性。而使用 K3s,你只需调用安装脚本并等待集群更新即可。
K3s
- 对于初始部署,以下命令可以启动并运行一个 K3s 集群:
1
$ curl -sFL https://get.k3s.io | sh -
- 官方的安装脚本会下载二进制文件并注册一个系统服务,该系统服务会在进程终止或主机重新启动时自动启动 K3s。它还配置了 Kubernetes 实用工具,包括 kubectl CLI。在新的机器上运行脚本后,你应该能够在几秒钟内与你的集群进行交互。
- 对于升级,K3s 提供简化的集群升级体验。你只需再次运行安装脚本即可下载最新版本并自动完成升级。在每个节点上重复执行此命令将使你的集群升级到最新的稳定版本,无需任何手动干预。
K8s
- 对于初始部署,K8s 的部署过程比较复杂。Kubernetes 项目提供了各个组件的下载,比如:API server、controller manager 和 scheduler。你需要成功部署每个组件来创建你的控制平面。然后,你还需要在每个工作节点上安装 kubelet。
- 通过 kubeadm 工具,可以简化 Kubernetes 安装。在使用 kubeadm 之前,你需要安装一个容器运行时,比如 containerd 4。然后,你可以运行以下命令在你的主机上初始化 Kubernetes 控制平面:
1
$ kubeadm init
- 初始化完成后,系统会告诉你运行下一步需要做什么:
1
2
3$ mkdir -p $HOME/.kube
$ sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
$ sudo chown $(id -u):$(id -g) $HOME/.kube/config - 此后,你还需要手动选择并安装一个 Pod 网络插件,这样你的 Pod 才能相互通信。完成安装后,就可以向集群中添加节点并使用集群了。
- 对于升级,使用 kubeadm 创建的 K8s 集群进行升级需要执行几个额外的步骤。你需要获取最新版本的 kubeadm,接下来使用 kubeadm 升级你的控制平面,最后升级每个工作节点上的 kubelet 和 kubectl。
资源占用
K3s: K3s 可以在 1C 512MB 的设备上运行,K3s 二进制文件大小不到 60 MB,并且不需要外部依赖。
K8s: 使用 kubeadm 创建的 K8s 集群具有更高的资源需求。文档建议至少有两个空闲的 CPU 核和 2 GB 的内存。控制平面组件的增加开销意味着需要更多的硬件资源才能达到相同的结果。这在云上部署集群时可能会增加成本。
K3s 是资源受限环境的优先选择。这是该项目的核心关注领域。请记住,虽然 K3s 可以运行在 512 MB 内存的设备上,但并不推荐这样,因为你需要给应用程序预留运行空间。
数据存储及其它组件
K8s 和 K3s 打包了不同的组件来实现 Kubernetes 的架构。
- 其中最大的变化之一就是控制平面使用的数据存储:上游 Kubernetes 使用 etcd,而 K3s 选择使用内置的 SQLite 数据库。这通常提高了性能并减小了二进制文件的大小,但可能不适用于大规模集群。如果需要,K3s 也可以连接到外部的 etcd 或使用 K3s 内置的 etcd 数据存储,以及其他基于 SQL 的数据库,如 MySQL 和 PostgreSQL。
- 标准的 Kubernetes 发行版只包括控制平面所需的组件。K3s 还内置了常用的生态工具,比如:kubectl。
- K3s 集成了 Helm 支持,可以通过将 Helm Chart 表示为集群中的 HelmChart 对象来部署 Helm Chart。然而,上游 Kubernetes 不理解 Helm;你需要单独安装 Helm CLI 并使用其命令来安装你的 Chart。
- K8s 和 K3s 都使用 containerd 作为默认的容器运行时,但这可以进行定制。K3s 还包含了其他几个来自社区的组件,包括用于 Pod 网络的 flannel 以及作为入口控制器和内置负载均衡器的 Traefik。Kubernetes 让你自己选择和安装这些工具,而 K3s 则内置了我们常用的工具。
当你不想花太多的时间成本去学习 K8s 各个组件作用时,K3s 是更好的选择。它可以启动一个功能完整的集群,并且可用于生产。
速度
- 在等效硬件上部署的 K8s 集群和 K3s 集群应该可以以相似的性能运行你的容器,因为它们使用相同的 containerd 运行时。
- 然而,K3s 非常轻巧,它安装和启动控制平面的速度要比 K8s 快得多。
- 相比之下,上游的 Kubernetes 可能需要几分钟才能启动(而 K3s 通常在一分钟内可用)。
- 这使得 K3s 更适合于临时的集群,例如本地开发和测试环境。你可以快速启动一个集群,使用后再将 K3s 关闭。
安全
- K3s 在设计上是安全的,并提供了一个最小的攻击面。所有组件都打包在一个二进制文件中,减少的依赖关系使得安全漏洞的出现可能性较小。
- 这并不意味着 K8s 是不安全的。Kubernetes 已成为最受欢迎的开源项目之一,被全球各大公司采用。它经过定期审查,以确保集群受到攻击的保护。
无论你使用哪种解决方案,你都应该在安装后加强集群的安全保护。K3s 和 Kubernetes 都有自己的安全建议,用于创建安全的集群。
K3s在边缘计算中的应用场景
K3s由于其轻量级和易于安装的特点,非常适合在边缘计算和资源受限的环境中使用。以下是一些典型的应用场景:
- 物联网(IoT):K3s可以在Raspberry Pi等低功耗设备上运行,适用于物联网设备的管理和编排。
- 边缘计算:K3s可以在边缘节点上部署,提供本地计算和存储能力,减少数据传输延迟。
- 开发和测试:K3s的轻量级和易于安装的特点,使其非常适合用于开发和测试环境。
🏥反思
通过此次调研,我对K3s和K8s有了更深入的了解。K3s作为K8s的精简版,专为资源受限的环境和边缘计算设计,具有轻量级、易于安装和ARM支持等特点。虽然K3s在功能上不如K8s强大,但在特定场景下,K3s提供了更高的效率和灵活性。
在未来的工作中,我将继续关注K3s和K8s的发展,并尝试将它们应用到实际项目中。
- 希望这篇博客对你有帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
- 如果你喜欢这篇文章,欢迎动动小手给我一个follow或star。
🗺参考文献
- 标题: 【云边计算】K3s简介,与K8s的区别
- 作者: Fre5h1nd
- 创建于 : 2025-03-25 15:10:58
- 更新于 : 2025-03-27 11:48:24
- 链接: https://freshwlnd.github.io/2025/03/25/k8s-vs-k3s/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。