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

    文章

    3244

    浏览量

    42384
  • 容器
    +关注

    关注

    0

    文章

    494

    浏览量

    22043
  • IOT
    IOT
    +关注

    关注

    186

    文章

    4175

    浏览量

    196187
  • go语言
    +关注

    关注

    1

    文章

    158

    浏览量

    9028
  • kubernetes
    +关注

    关注

    0

    文章

    223

    浏览量

    8695

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

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

收藏 人收藏

    评论

    相关推荐

    k8s核心原理学习指南3

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

    如何利用K8S全面拥抱微服务架构?

    K8S是第一个将“一切以服务为中心,一切围绕服务运转”作为指导思想的创新型产品,它的功能和架构设计自始至终都遵循了这一指导思想,构建在K8S上的系统不仅可以独立运行在物理机、虚拟机集群或者企业私有云上,也可以被托管在公有云中。
    的头像 发表于 10-08 15:59 2.7w次阅读

    OpenStack与K8s结合的两种方案的详细介绍和比较

    OpenStack与K8S结合主要有两种方案。一是K8S部署在OpenStack平台之上,二是K8S和OpenStack组件集成。
    的头像 发表于 10-14 09:38 2.7w次阅读

    如何使用kubernetes client-go实践一个简单的与K8s交互过程

    【导读】Kubernetes项目使用Go语言编写,对Go api原生支持非常便捷。 本篇文章介绍了如何使用kubernetes client-go实践一个简单的与K8s交互过程
    的头像 发表于 02-02 11:16 6770次阅读
    如何使用kubernetes client-go实践一个简单的与<b class='flag-5'>K8s</b>交互过程

    Docker不香吗为什么还要用K8s

    Docker 虽好用,但面对强大的集群,成千上万的容器,突然感觉不香了。 这时候就需要我们的主角 Kubernetes 上场了,先来了解一下 K8s 的基本概念,后面再介绍实践,由浅入深步步为营
    的头像 发表于 06-02 11:56 3409次阅读

    简单说明k8s和Docker之间的关系

    这篇文章主要介绍了k8s和Docker关系简单说明,本文利用图文讲解的很透彻,需要的同学可以研究下 最近项目用到kubernetes(以下简称k8sk
    的头像 发表于 06-24 15:48 3346次阅读

    K8S集群服务访问失败怎么办 K8S故障处理集锦

    。 kubectl delete svc nginx-deployment 问题3K8S集群服务暴露失败? Error from server (AlreadyExists): services “nginx-deployment” already exists 原因分
    的头像 发表于 09-01 11:11 1.6w次阅读
    <b class='flag-5'>K8S</b>集群服务访问失败怎么办 <b class='flag-5'>K8S</b>故障处理集锦

    K8S(kubernetes)学习指南

    K8S(kubernetes)学习指南
    发表于 06-29 14:14 0次下载

    mysql部署在k8s上的实现方案

    的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。这里主要讲 mysql 部署在 k8s 上,mysql 部署在 k8s 上的优势主要有以下几点。
    的头像 发表于 09-26 10:39 2471次阅读

    切换k8s上下文多快

    use-context 命令就会很低效。 今天介绍3个工具会让你在多k8s集群环境中工作的很轻松。我将从以下几个方面来评估工具实用性: 速度 如果你多个k8s集群可选择,你切换
    的头像 发表于 05-29 15:26 722次阅读
    切换<b class='flag-5'>k8s</b>上下文<b class='flag-5'>有</b>多快

    k8s是什么意思?kubeadm部署k8s集群(k8s部署)|PetaExpres

    k8s是什么意思? kubernetes简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful
    发表于 07-19 13:14 1090次阅读

    k8s生态链包含哪些技术

    1. Apache APISIX Ingress 定义   在 K8s 生态中,Ingress 作为表示 K8s 流量入口的一种资源,想要让其生效,就需要有一个 Ingress Controller
    的头像 发表于 08-07 10:56 1178次阅读
    <b class='flag-5'>k8s</b>生态链包含哪些技术

    K8S落地实践经验分享

    k8s 即 Kubernetes,是一个开源的容器编排引擎,用来对容器化应用进行自动化部署、 扩缩和管理。
    的头像 发表于 01-02 11:45 1032次阅读
    <b class='flag-5'>K8S</b>落地实践经验分享

    k8s云原生开发要求

    Kubernetes(K8s)云原生开发对硬件一定要求。CPU方面,建议至少配备2个逻辑核心,高性能CPU更佳。内存至少4GB,但8GB或更高更推荐。存储需至少20-30GB可用空间,SSD提升
    的头像 发表于 10-24 10:03 165次阅读
    <b class='flag-5'>k8s</b>云原生开发要求

    混合云部署k8s集群方法哪些?

    混合云部署k8s集群方法是首先需在本地与公有云分别建立K8s集群,并确保网络连接。接着,配置kubeconfig文件连接两集群,并安装云服务插件以实现资源互通。然后,编写Deployment文件部署应用,并使用kubectl命令应用至集群。最后,验证应用状态并监控集群性能
    的头像 发表于 11-07 09:37 102次阅读