手记

K3s和K8s的区别、使用场景及替代方案

Kubernetes (K8s) 是管理生产环境中容器化应用程序运行的领先容器编排器。它自动化关键的容器管理任务,例如部署、扩展和容错能力。

然而,并不存在单一的Kubernetes发行版本。就像Linux有多种发行版一样,比如Ubuntu和Fedora这样的版本,你可以根据需求选择多个Kubernetes发行版本。

在这篇指南中,我们将探讨 K8s 和 K3s 的区别:K3s 是一个流行的轻量级 Kubernetes 分发版本。

Kubernetes 是什么?

Kubernetes(https://kubernetes.io/)是一个开源系统,用于部署和管理容器(有关用例,请访问 https://spacelift.io/blog/kubernetes-use-cases)。集群由一个集中的控制平面(Control Plane)和多个工作节点(Worker Node)组成。控制平面负责管理您的容器并将新实例调度到可用的节点上。

所有的 Kubernetes 集群都会运行一组实现这些功能的一组核心组件,包括 Kubernetes API 服务器、控制器和调度器,以及一个存储集群数据的存储库和一个在节点上实际运行容器的容器运行时环境。这些组件可以以不同的方式打包或根据不同的使用场景被替换为其他选项,具体取决于特定发行版的目标。

Kubernetes项目维护了一个基础发行版,但这种设置和维护可能较为复杂。第三方厂商提供了自己的发行版,实现了所有核心的Kubernetes功能,但使用起来更为简单,针对特定环境进行了优化,或具有额外的内置功能。

什么是K3s?

K3s 是由 SUSE 主要维护和支持的 CNCF(云原生计算基金会)沙盒项目。它通常被认为已经准备好用于生产环境,并且已经建立了一个作为轻量级的生产级 Kubernetes 发行版的稳固声誉。

这个名字来源于其最初的目的,即提供一个仅需一半常规内存占用量的完整Kubernetes安装;就像Kubernetes这个10字母的单词简写为K8s一样,K3s则代表了这个“减半”的目标。

K3s 是一个经过认证的发行版,这意味着它完全兼容所有标准的 Kubernetes 功能。你可以编写常规的 Kubernetes YAML 文件,并使用 Kubectl 和 Helm 等标准工具将它们部署到你的集群中。不过,K3s 与其他 Kubernetes 版本和发行版有一些不同之处。

与标准的Kubernetes安装不同的是,K3s被打包为一个单一的二进制文件,支持x86、ARM和S390X架构,并且下载大小不到70MB。你只需在任何你使用的机器上运行该二进制文件就可以启动一个新的集群——无需额外的依赖。这使得K3s非常适合资源受限的物联网和边缘计算场景中的使用,同时也适合开发者在本地工作站上使用。

尽管占用空间小,K3s 还提供了开箱即用的 Kubernetes 体验。它包含了容器运行时 containerd,Flannel 用于容器网络连接,支持本地存储的持久卷供应。

K3s 还集成了 Traefik Ingress 控制器,让你可以直接使用 Kubernetes Ingress 资源,无需额外配置,并且自带了一个 Helm 控制器,让你可以在不使用 Helm CLI 的情况下,以声明式方式管理 Helm charts。

K3s和K8s有什么区别?

总之,K8s 是 Kubernetes 的简称,Kubernetes 是一个开源系统,用于在分布式环境中操作容器化应用。K3s 是一个经过认证的 K8s 版本,它将上游组件打包成一个自包含的二进制文件,并针对 IoT、边缘计算和本地开发等场景提供了定制优化。

这些更改意味着 K3s 集群并不完全等同于运行标准 K8s 的集群。尽管 K3s 可以做到标准 Kubernetes 所有事情,它精简了以减少外部依赖并保持其二进制文件小巧。

例如,Kubernetes 默认使用 etcd 来存储集群状态信息,而 K3s 则使用一个更简单的 SQLite 数据库。然而,这些差异不太可能影响你在日常使用 K3s 时体验 K8s 的功能。

我们深入看看吧。

1. 设计:

(设计部分)

K8s 是一个全功能的容器编排平台,为企业环境设计,通常需要大量的资源来高效运作,而 K3s 是 Kubernetes 的简化版本,旨在资源有限的环境中运行,例如边缘设备、物联网和较小规模的集群。

2. 资源需求情况

K3s 专为资源受限的环境设计;它消耗较少的内存和 CPU 资源。由于其复杂性和丰富的功能集,K8s 通常需要较多的资源,包括内存、CPU 和存储空间。

3. 组件(Components)

K8s 有许多外部依赖项,例如用于数据存储的 etcd 服务,以及其他组件,如 kube-apiserver、kube-controller-manager 和 kube-scheduler,这些组件都作为独立的服务运行。

K3s 去除了许多不必要的组件,并使用单个二进制文件,从而使其更易部署,速度更快。它减少了对额外云提供商的依赖,并默认使用嵌入式 SQLite 数据库取代了 K8s 的 etcd(分布式键值存储),如果需要,也可以配置使用 etcd。

4. 安装和维护

K3s采用单二进制架构简化了升级过程,使其成为寻求最少维护的理想选择。相比之下,K8s以其更复杂的安装步骤而闻名,该流程需要一系列复杂的步骤和配置,对于初学者来说,这可能颇具挑战。

管理的 Kubernetes 服务可以让你更轻松地安装 K8s,但如果没有这些服务,你可能需要更深入地了解 Kubernetes 的各个组件。

5. 使用案例

K8s 主要是为了满足大型企业级应用在生产环境中对高扩展性、健壮性及其他高级特性如自动扩展和高可用性的需求。K3s 则更适合边缘计算环境、开发测试和小型部署。它常用于在物联网设备上运行 Kubernetes、在网络边缘部署或本地开发中。

在测试和本地开发的环境中,K3s也很有用,可以利用较少资源来模拟Kubernetes,允许开发人员在不需完整K8s环境的情况下测试Kubernetes的功能。

6. 安全:

K8s 设计时充分考虑了多租户环境和企业级的安全需求。它包括了诸如基于角色的访问控制 (RBAC)、网络策略,以及管理和加密密钥的丰富选项等安全特性。

尽管 K3s 支持 RBAC 和网络策略,但它默认不包含一些安全功能以最小化资源使用。它也支持 Helm 图表和其他原生 Kubernetes 安全工具,如有需要。它通常被优化以适应单租户环境或边缘部署,其中攻击面较小。

K3s 与 K8s 对比表

下表列出了 K3s 和 K8s(这两个管理系统)的关键差异:

K3s比K8s好吗?

K3s 在轻量级且资源受限的环境(比如边缘计算、物联网或本地开发这些场景)中比 K8s 更好,因为它需要更少的内存、CPU 和设置难度。相比之下,K8s 更适合企业级多租户环境,这些环境需要高度的可扩展性及高级功能。

选择取决于您的部署需求和可用资源:K3s 更适合较小的环境,因其更简单且更高效;而 K8s 则更适合较大且需要生产级别的应用程序,因其更强大且更灵活。

💡 你可能也会喜欢:

K3s 的优点

使用 K3s 来运行您的 Kubernetes 集群相比标准的 K8s 或其他版本具有多种优势:

  • 简易的安装体验: 作为自包含的二进制文件,K3s 非常容易上手。提供了一个安装脚本,用来自动完成下载 K3s、注册系统服务、创建新集群的过程。
  • 方便的额外功能: 容器运行时 containerd、Flannel 和 Traefik Ingress 在集群中预先安装好,因此你可以直接运行工作负载,无需任何额外配置。也可以禁用这些功能并用自己的偏好替换。
  • 支持多节点部署: K3s 无缝支持涉及数百或数千节点的多节点部署。只需在每个新节点上运行安装脚本,并提供作为为你集群的控制平面服务的 K3s 节点生成的令牌,即可轻松添加新节点。
  • 适用于资源受限的部署: K3s 让你可以在原本无法运行 Kubernetes 集群的情况下运行 Kubernetes 集群。它足够小巧,可以在边缘设备和嵌入式设备中运行,但仍然与所有 Kubernetes 功能完全兼容。
  • 小的攻击面提高了安全性: 其可移植性也有助于提高其安全性。所有组件都被封装在一个单一的二进制文件中并作为一个进程运行,从而限制了可能的攻击面。默认设置也进行了安全调整。
  • 使每个环境都能使用同一 K8s 发行版: 如果你希望为所有部署使用相同的 K8s 发行版,K3s 是理想的选择。K3s 同样适用于本地开发、物联网部署以及运行公开应用程序的大型云托管集群。
  • 易于管理和控制: K3s 让你能够按需停止和启动集群,并通过重复运行安装脚本,可以轻松升级到新版本的 Kubernetes。它还包含了一个嵌入的 Kubectl 二进制文件,支持将集群数据备份到 S3 存储。
K3s有哪些缺点?

尽管我们已经看到K3s对于各种用例来说很有吸引力,但在其他情况下,其他替代方案会更合适。

K3s 的设置和管理非常简单,但你仍然需要自己负责维护集群。云管理服务,比如 Amazon EKS 和 Google GKE,通过让你只需点击几次就能启动和管理集群,减少了操作复杂性。或者使用IaC工具全自动化管理。另外,K3s 让你需要自己负责配置和维护计算节点,相比之下,托管解决方案会把这些任务包含在它们的服务中。

靠近上游的K8s可能更好,特别是如果你的环境资源充足。K3s已获认证,但它包含了一些你可能不希望看到的组件变更,如果你也在运行标准的K8s环境。

此外,在你构建自己的定制功能时,使用标准的Kubernetes能提供最大的稳定性。

指南:用 K3s 创建 K8s 集群

准备试试 K3s 呢?特别好上手。

你可以通过下载并执行安装脚本,如下所示,来创建一个集群(或称为群集)。

    $ curl -sfL https://get.k3s.io | sh -  
    ...  
    [INFO, ]systemd: 启动 k3s 服务

脚本完成后几秒钟,你会看到Starting K3s的日志行——此时服务还在启动中。过一会儿,你的集群就可以用Kubectl进行管理了。

将 K3s 的 Kubeconfig 文件复制到你的主目录下的 .kube 文件夹中,再将文件的所有权改为你的用户账户的,这样设置完成后:

    $ sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/k3s.yaml  (复制文件)
    $ sudo chown $USER:$USER ~/.kube/k3s.yaml  (将文件的所有权更改为当前用户)

设置 KUBECONFIG 环境变量为文件路径,在命令行中使用 export KUBECONFIG=文件路径,这样 Kubectl 就会读取配置文件了。

export KUBECONFIG=文件路径
    $ export KUBECONFIG=~/.kube/k3s.yaml

现在试着用 Kubectl 列出你的集群中的节点——你应该只看到一个,即运行你集群的主机节点。

    $ kubectl get nodes  
    NAME         状态:   角色:                  AGE     版本:  
    ubuntu2204   Ready    control-plane,master   3m30 s  v1.30.5+k3s1

如果你还没有安装 Kubectl,可以试试 K3s 自带的那个版本

    $ k3s kubectl get nodes (获取节点信息)

现在,你可以开始将工作负载部署到你的集群。如果你想继续测试,可以看看我们博客上的其他Kubernetes教程,比如这篇关于Deployment对象的文章。

你可以通过其systemd单元来停止或启动你的K3s集群。

运行以下命令来停止k3s服务:

$ sudo systemctl stop k3s  

运行以下命令来启动k3s服务:

$ sudo systemctl start k3s

要更新到未来的 K3s 版本,请先查看文档中的升级说明,然后重新运行安装脚本。

其他 Kubernetes 发行版:例如 K3s 的替代品

如果你觉得 K3s 不符合你的口味,可以看看这些替代方案:

  • Minikube: 这个流行且自包含的发行版作为 Kubernetes 项目的一部分进行维护。它允许你在 Docker 容器或虚拟机内运行集群。
  • MicroK8s: MicroK8s 是由 Canonical 维护的纯粹的上游 Kubernetes 发行版,具有可定制的功能和简化的打包方式。
  • K0s: Mirantis 提供的单文件发行版,注重快速和简单的安装。
  • K3d: 这不是一个发行版,而是一个围绕 K3s 的工具,可以在 Docker 容器内运行你的集群。它可以让你更轻松和安全地部署 K3s。
  • Kind (Kubernetes 在 Docker): 这是一个使用 Docker 容器节点运行本地 Kubernetes 集群的工具,主要为测试和开发目的设计的工具。它提供了一个轻量级且易于丢弃的 Kubernetes 集群实验环境,无需使用虚拟机或云基础设施。
  • Amazon EKS、Google GKE、Azure AKS 等: 云托管的 Kubernetes 服务允许你按需启动新的集群,通常提供与您的其他云资源的直接连接。它们还使集群的自动扩展变得简单,当利用率变化时,可以轻松地添加新节点以满足需求,从而简化生产应用程序的高可用性。

最后一个选项是使用Kubeadm工具启动标准Kubernetes集群来运行纯正的K8s。尽管较新版本已经简化了设置流程,但设置过程依旧相对复杂。维护起来也要比使用上述第三方发行版更复杂。纯正的Kubernetes通常在你想构建自己高级定制功能时最有用。

K3s 对比 K8s 对比 K0s

如上所述,K3s 并不是唯一一个名字让人想起主项目的 K8s 发行版。这里再提醒一下 K8s、K3s 和 K0s 的比较。

  • K8s: 上游的 Kubernetes 或任何实现其标准功能的版本
  • K3s: 来自 SUSE 的紧凑型单文件 K8s 发行版,主要针对 IoT 和边缘计算工作负载
  • K0s: 由 Mirantis 开发的单文件 K8s 发行版,除了边缘计算,还强调云运营

无论是 K3s 还是 K0,都是你 K8s 集群不错的选择——只需要记住,虽然名字听起来差不多,它们实际上是完全独立的项目。

使用 Spacelift 来管理 Kubernetes

如果你需要帮助管理 Kubernetes 项目,可以看看Spacelift。它带有 GitOps 流程,因此你的 Kubernetes 部署会与 Kubernetes 堆栈保持一致,并且拉取请求会显示预览,让你了解它们计划进行的变更。

更进一步地,你可以通过添加自定义策略来增强配置和部署的安全性和可靠性。Spacelift 提供了多种可以轻松定制以适应所有用例的策略和工作流。例如,你可以添加计划策略来限制或提醒安全或合规性违规,或者添加批准策略来增加部署过程中的审批步骤。

你可以免费试用Spacelift,方式是创建试用账户预约演示与我们的一位工程师。

重点

我们已经了解了 K3s 的功能和优势,这是一个经过认证的 Kubernetes 发行版,旨在便携、灵活且方便使用。无论您需要本地运行 Kubernetes,还是计划部署新的物联网设备,K3s 都可以为您的集群提供稳定的基础环境。

K3s不太适用的情况包括,当您的工作负载主要在云上运行,且您正在寻找声明式的基础设施和配置管理方法时。

选择一个像 Amazon EKS 或 Google GKE 这样的托管云 Kubernetes 服务可能是一个更有效率的选择方法,你可以使用 IaC 工具(如 Terraform 或 Ansible)和像 Spacelift 这样的编排平台来完全自动化你的集群配置流程。

由詹姆斯·沃克(James Walker)撰写。原文发表在网站 spacelift.io .

0人推荐
随时随地看视频
慕课网APP