0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

什么是K3s和K8s?K3s和K8s有什么区别?

马哥Linux运维 来源:马哥Linux运维 2023-08-03 10:53 次阅读

Kubernetes,通常缩写为 K8s,是领先的容器编排工具。该开源项目最初由 Google 开发,帮助塑造了现代编排的定义。该系统包括了部署和运行容器化系统所需的一切。

社区供应商基于 Kubernetes 创建了适用于不同用例的独立发行版。K3s[1]是由 Rancher 创建的一种 kubernetes 流行发行版,现在作为云原生计算基金会[2](CNCF)的一部分进行维护。

K3s 的目标是成为一个轻量级的 Kubernetes 版本,适合在资源受限的硬件上使用,例如 IoT 设备。它还易于设置和使用,因此非常适合用于本地开发集群。它专注于边缘部署,但并不排除对大规模云部署的支持:K3s 的 CNCF 认证意味着它提供了所有 Kubernetes 功能,并且可以用于生产环境

在本文中,你将了解 K3s 与 Kubernetes 项目提供的官方发行版之间的比较,包括它们的区别、何时使用它们以及掌握它们的容易程度。

什么是 K8s

Kubernetes 是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。该项目托管在 CNCF。

Kubernetes 提供了部署容器并在多个主机上进行扩展的所有所需工具。Kubernetes 集群中的每台主机被称为一个节点,节点由 Kubernetes 控制平面管理。它会将你的容器调度到空闲节点上,管理网络和存储并提供与之交互的 API

什么是 K3s

K3s 是由 Rancher 主导开发的 Kubernetes 发行版。它在不分叉的基础上构建了上游项目。概念上,Kubernetes 发行版类似于 Linux 操作系统:K3s 是一种 Kubernetes 发行版,就像 Ubuntu 是一种 Linux 发行版一样。K3s 在保留 Kubernetes 功能的基础上,还增加了自己的功能。

K3s 经过专门设计,即使在最小的硬件环境中也能良好运行。K3s 提供了一个小于 60MB 的单个二进制文件。这个轻量级可执行文件包含了启动完全功能的 Kubernetes 集群所需的一切。

通过放弃非必要的 Kubernetes 功能(如云服务提供商集成和非 CSI[3]存储提供商),实现了这个小巧的二进制文件大小。利用 Go 语言的goroutines[4],将各个 Kubernetes 组件从单个入口点运行起来。

K3s 和 K8s 易于部署

通常情况下,相比 K8s,K3s 更容易部署和维护。轻量级的二进制文件让你可以用一个命令启动所有的 Kubernetes 控制平面组件。而要启动官方的 Kubernetes 集群则需要更多的时间和步骤,并且可能更难维护。

部署 K3s

以下命令可以启动并运行一个 K3s 集群:

$curl-sFLhttps://get.k3s.io|sh-

官方的安装脚本会下载二进制文件并注册一个系统服务,该系统服务会在进程终止或主机重新启动时自动启动 K3s。它还配置了 Kubernetes 实用工具,包括 kubectl CLI。在新的机器上运行脚本后,你应该能够在几秒钟内与你的集群进行交互:

$kubectlrunnginx--image=nginx
pod/nginxcreated

你可以通过在其他节点上运行以下命令,轻松地将节点加入到你的 K3s 集群中:

$sudok3sagent--serverhttps://:6443
--token

你可以通过从运行 K3s 控制平面的机器上读取/var/lib/rancher/k3s/server/node-token文件来获取的值。

K3s 还可以通过 Rancher 开发的k3d[5]部署。k3d 将 K3s 封装在 docker 容器内并运行。K3d 允许你在单个主机上运行多个 K3s 集群,并使用熟悉的 Docker 工具进行管理。你可以使用以下命令安装 k3d:

$curl-shttps://raw.githubusercontent.com/k3d-io/k3d/main/install.sh|
TAG=v5.4.5bash

然后创建你的第一个集群:

$k3dcreateclusterdemo-cluster

现在你可以使用 kubectl 来向 k3d/K3s 集群添加对象:

$kubectlrunnginx–imagenginx:latest
pod/nginxcreated

部署 K8s

K8s 的部署过程比较复杂。Kubernetes 项目提供了各个组件的下载,比如:API server、controller manager 和 scheduler。你需要成功部署每个组件来创建你的控制平面。然后,你还需要在每个工作节点上安装 kubelet。

通过 kubeadm 工具,可以简化 Kubernetes 安装。在使用 kubeadm 之前,你需要安装一个容器运行时,比如containerd[6]。然后,你可以运行以下命令在你的主机上初始化 Kubernetes 控制平面:

$kubeadminit

初始化完成后,系统会告诉你运行下一步需要做什么:

$mkdir-p$HOME/.kube
$sudocp-i/etc/kubernetes/admin.conf$HOME/.kube/config
$sudochown$(id-u):$(id-g)$HOME/.kube/config

然后,你需要手动选择并安装一个 Pod 网络插件,这样你的 Pod 才能相互通信。Flannel 是一个受欢迎的选项:

$kubectlapply-fhttps://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yaml

经过所有这些步骤,你就可以向集群中添加节点了:

kubeadmjoin--token:
--discovery-token-ca-cert-hashsha256:

的值是通过在控制平面主机上运行kubeadm token list命令获取的。要找到正确的discovery-token-ca-cert-hash,你需要在控制平面主机上运行以下命令:

opensslx509-pubkey-in/etc/kubernetes/pki/ca.crt|opensslrsa-pubin
-outformder2>/dev/null|openssldgst-sha256-hex|sed's/^.*//'

使用 kubeadm 启动本地 Kubernetes 集群比使用 K3s 要复杂得多。K3s 抽象了集群设置步骤,使得快速启动和运行变得更加简单。在本地使用 K8s 需要额外的时间和精力来学习安装过程并配置环境。

K3s 和 K8s 之间的主要区别

K8s 和 K3s 对用户提供了相同的功能接口。如果你有一个 Kubernetes YAML 清单,你可以在两个集群中使用任何一个进行部署,而无需进行修改。

这两个发行版的区别在于它们的打包方式和包含的组件。以下是一些你应该考虑的关键特点:

默认安装的组件

K8s 和 K3s 打包了不同的组件来实现 Kubernetes 的架构。其中最大的变化之一就是控制平面使用的数据存储:上游 Kubernetes 使用 etcd,而 K3s 选择使用内置的 SQLite 数据库。这通常提高了性能并减小了二进制文件的大小,但可能不适用于大规模集群。如果需要,K3s 也可以连接到外部的 etcd 或使用 K3s 内置的 etcd 数据存储,以及其他基于 SQL 的数据库,如 MySQL 和 PostgreSQL。

标准的 Kubernetes 发行版只包括控制平面所需的组件。K3s 还内置了常用的生态工具,比如:kubectl。

K3s 集成了 Helm 支持[7],可以通过将 Helm Chart 表示为集群中的HelmChart对象来部署 Helm Chart。然而,上游 Kubernetes 不理解 Helm;你需要单独安装 Helm CLI 并使用其命令来安装你的 Chart。

K8s 和 K3s 都使用 containerd 作为默认的容器运行时,但这可以进行定制。K3s 还包含了其他几个来自社区的组件,包括用于 Pod 网络的 flannel 以及作为入口控制器和内置负载均衡器的 Traefik。Kubernetes 让你自己选择和安装这些工具,而 K3s 则内置了我们常用的工具。

当你不想花太多的时间成本去学习 K8s 各个组件作用时,K3s 是更好的选择。它可以启动一个功能完整的集群,并且可用于生产。

资源要求

K3s 可以在 1C 512MB 的设备上运行,K3s 二进制文件大小不到 60 MB,并且不需要外部依赖。

使用 kubeadm 创建的集群具有更高的资源需求。文档建议至少有两个空闲的 CPU 核和 2 GB 的内存。控制平面组件的增加开销意味着需要更多的硬件资源才能达到相同的结果。这在云上部署集群时可能会增加成本。

K3s 是资源受限环境的优先选择。这是该项目的核心关注领域。请记住,虽然 K3s 可以运行在 512 MB 内存的设备上,但并不推荐这样,因为你需要给应用程序预留运行空间。

升级

K3s 提供简化的集群升级体验。你只需再次运行安装脚本即可下载最新版本并自动完成升级:

$curl-sfLhttps://get.k3s.io|sh-

在每个节点上重复执行此命令将使你的集群升级到最新的稳定版本,无需任何手动干预。

对于使用 kubeadm 创建的 K8s 集群进行升级需要执行几个额外的步骤。你需要获取最新版本的 kubeadm:

#Updatingtov1.24.1
$apt-getupdate
$apt-getinstall-ykubeadm=1.24.1

接下来,使用 kubeadm 升级你的控制平面:

$kubeadmupgradeapplyv1.24.1

最后,升级每个工作节点上的 kubelet 和 kubectl:

$apt-getupdate
$apt-getinstall-ykubelet=1.24.1kubectl=1.24.1
$systemctldaemon-reload
$systemctlrestartkubelet

K3s 再次提供了更简单、无需干预的体验。Kubeadm 的升级同样也相对简单,但需要运行更多的命令。这增加了升级过程中出错的可能性。而使用 K3s,你只需调用安装脚本并等待集群更新即可。

速度

在等效硬件上部署的 K8s 集群和 K3s 集群应该可以以相似的性能运行你的容器,因为它们使用相同的 containerd 运行时。然而,K3s 非常轻巧,它安装和启动控制平面的速度要比 K8s 快得多。

相比之下,上游的 Kubernetes 可能需要几分钟才能启动(而 K3s 通常在一分钟内可用)。这使得 K3s 更适合于临时的集群,例如本地开发和测试环境。你可以快速启动一个集群,使用后再将 K3s 关闭。

安全

K3s 在设计上是安全的,并提供了一个最小的攻击面。所有组件都打包在一个二进制文件中,减少的依赖关系使得安全漏洞的出现可能性较小。

这并不意味着 K8s 是不安全的。Kubernetes 已成为最受欢迎的开源项目之一,被全球各大公司采用。它经过定期审查,以确保集群受到攻击的保护。

无论你使用哪种解决方案,你都应该在安装后加强集群的安全保护。K3s 和Kubernetes 都有自己的安全建议[8],用于创建安全的集群。

K3s 和 K8s 的理想使用场景

K3s 具有最低的硬件要求,适用于资源受限的环境,这些环境无法容纳标准的 K8s 集群。K3s 放弃了诸如 etcd 之类的组件,而选择了更小的替代方案,这意味着 K3s 可以适应 IoT 和边缘设备。

同时,K3s 也是在开发测试环境中运行本地 Kubernetes 集群的理想解决方案。工程师可以在几秒钟内快速启动自己的环境,而无需安装依赖项或在云中使用托管的 Kubernetes 服务产生成本。你甚至可以在 CI 流水线脚本中运行 K3s,以简化测试流程。

虽然 K3s 适用于许多不同的环境,但在某些情况下,使用更大的 Kubernetes 发行版可能更合理。例如,在 大规模部署或需要使用依赖于 K8s 特定组件的场景时。如果你在这个规模上运作,你可能需要使用 kubeadm 或其他工具部署和维护 K8s。对于希望对各个控制平面组件具有完全控制权的大型集群,K3s 的简单性可能会过于局限。

总结

Kubernetes 是部署和分发容器的领先编排工具。虽然它在推动容器进入生产技术方面发挥了重要作用,但纯 Kubernetes 仍然相当复杂且难以维护。

K3s 通过提供一个经过 CNCF 认证的 Kubernetes 发行版,将其打包为一个不到 60MB 的单个二进制文件,解决了这些挑战。它的轻量级方案让你可以在边缘、工作站和传统云环境中运行相同版本的 Kubernetes。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 开源
    +关注

    关注

    3

    文章

    2989

    浏览量

    41720
  • 容器
    +关注

    关注

    0

    文章

    481

    浏览量

    21883
  • IOT
    IOT
    +关注

    关注

    186

    文章

    3986

    浏览量

    193208
  • go语言
    +关注

    关注

    1

    文章

    157

    浏览量

    8927
  • kubernetes
    +关注

    关注

    0

    文章

    219

    浏览量

    8568

原文标题:K3s vs K8s:轻量级和全功能的对决

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    等能力,同时提供了网络、文件系统的抽象与管理,所以对于已有应用上k8s或者基于k8s部署应用十分便捷。但这里一部分令开发和运维人员比较头疼--日志采集。难点分析基于VM或者物理机部署的应用,日志采集
    发表于 02-28 12:49

    全面提升,阿里云Docker/Kubernetes(K8S) 日志解决方案与选型对比

    等能力,同时提供了网络、文件系统的抽象与管理,所以对于已有应用上k8s或者基于k8s部署应用十分便捷。但这里一部分令开发和运维人员比较头疼--日志采集。难点分析基于VM或者物理机部署的应用,日志采集
    发表于 02-28 12:50

    K8S容器编排的互通测试

    K8S容器编排之NetWorkPolicy官方实例
    发表于 06-06 11:28

    k8s核心原理学习指南3

    k8s学习3 - 核心原理
    发表于 09-25 16:37

    K8s 从懵圈到熟练 – 集群网络详解

    是 172.16.8.1/25,而 Node A 的子网是 172.16.0.128/25。这个配置会记录到集群 node 的 podCIDR 数据项里。节点阶段经过以上集群阶段,K8S 了集群 CIDR,以及为每个节点
    发表于 10-14 15:06

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    的常见类型:本地存储,常用的 emptydir/hostpath;网络存储:网络存储当前的实现方式两种,一种是 in-tree,它的实现代码是放在 K8s 代码仓库中的,随着 K8s
    发表于 10-15 14:55

    从零开始入门 K8s | 应用存储和持久化数据卷:存储快照与拓扑调度

    是什么意思:这里所说的拓扑是 K8s 集群中为管理的 nodes 划分的一种“位置”关系,意思为:可以通过在 node 的 labels 信息里面填写某一个 node 属于某一个拓扑。 常见的三种,这三种在使用时
    发表于 10-15 15:07

    从零开始入门 K8s | 应用存储和持久化数据卷:核心知识

    首先看一下 Pod Volumes 的常见类型:本地存储,常用的 emptydir/hostpath;网络存储:网络存储当前的实现方式两种,一种是 in-tree,它的实现代码是放在 K8s 代码
    发表于 10-16 10:10

    k8s volume中的本地存储和网络存储

    八 、 k8s volume 本地存储和网络存储
    发表于 03-25 08:44

    搭建K8s环境平台的步骤

    1 搭建K8s环境平台规划1.1 单master集群1.2 多master集群
    发表于 11-04 06:03

    如何使用STM8S003K3

    STM8S脱坑指南你好!这是你第一次使用 STM8S003K3 。如果你想学习如何使用STM8S003K3, 可以速速滚蛋,因为这一点也不好玩。理由如下:1.参考资料少2.官方资源少且混乱3
    发表于 01-27 07:05

    STM8S105K6T3(-40°C 至 125°C)和STM8S105K6T6(-40°C + 85°C)之间的产品什么区别

    STM8S105K6T3(-40°C 至 125°C)和 STM8S105K6T6(-40°C + 85°C)之间的产品什么区别,还是只是测试温度的问题?
    发表于 01-06 06:48

    如何在IMX8MP(hardknott)上将k3s安装到yocto映像中?

    我想在我的 Yocto 图像中包含 k3s。我按如下方式编辑了 local.conf,但出现了构建错误。该日志已附上。MACHINE ??= 'imx8mp-lpddr4-evk' DISTRO
    发表于 03-27 06:18

    S32K144EVB-Q100和S32K142EVB-Q100什么区别吗?

    S32K144EVB-Q100和S32K142EVB-Q100什么区别吗,我查了两块板子的datasheet,两块板子的特性没有区别。(
    发表于 03-27 06:52

    MIFARE Class EV1 1KS50什么区别,MIFARE Class EV1 2KS70什么区别

    ,MIFARE Class EV1 1KS50什么区别,MIFARE Class EV1 2KS
    发表于 06-05 11:55