浅谈轻量级Kubernetes—K3s

发布时间:2024年01月12日

1.什么是K3s????

????????K3s 被设计为小于 40MB 的单个二进制文件,完全实现了 Kubernetes API。为了实现这一目标,他们删除了许多不需要成为核心一部分的额外驱动程序,并且很容易被附加组件替换。

????????K3s 是完全 CNCF(云原生计算基金会)认证的 Kubernetes?产品。这意味着你可以编写你的 YAML 来对抗常规的“全脂”Kubernetes,它们也适用于 k3s 集群。由于其资源要求低,可以在 512MB 以上的 RAM 计算机上运行集群。这意味着我们可以允许 Pod 在主节点和节点上运行。

????????因为它是一个很小的二进制文件,这意味着我们可以在启动常规 Kubernetes 集群的一小部分时间内安装它!我们通常会在不到两分钟的时间里启动具有少量节点的 k3s 集群,这意味着您可以立即部署应用程序来学习/测试。它的声誉和采用率也在快速增长,自 17 年初推出以来,超过 2019k?颗 Github?明星,而它最近被 Stackshare 评为?1 年排名第一的新开发者工具。

2.K8s的痛点

????????尽管Kubernetes(K8s)是一个强大而广泛使用的容器编排平台,但在实际使用中仍然存在一些痛点和挑战,这些可能因组织的具体需求和环境而异。

  • 复杂性: Kubernetes是一个非常强大的工具,但也因其复杂性而闻名。配置、管理和维护一个Kubernetes集群可能需要较长时间的学习曲线,尤其是对于初学者来说。
  • 学习曲线: 对于新手来说,学习Kubernetes可能是一项庞大的任务。理解概念、资源对象和Kubernetes API的使用可能需要一些时间。
  • 网络配置: Kubernetes的网络配置可能相对复杂,特别是对于需要跨多个集群、云提供商或边缘设备的复杂网络拓扑的组织。

? ? ? ? 由于上述等原因,轻量级的Kubernetes(K3s)应运而生。

3.K3s增强功能

K3s 是一个完全兼容的 Kubernetes 发行版,具有以下增强功能:

  • 打包为单个二进制文件。
  • 使用基于 sqlite3 作为默认存储机制的轻量级存储后端。同时支持使用 etcd3、MySQL 和 Postgres。
  • 封装在简单的启动程序中,可以处理很多复杂的 TLS 和选项。
  • 默认情况下是安全的,对轻量级环境有合理的默认值。
  • 添加了简单但强大的?batteries-included?功能,例如:
    • 本地存储提供程序
    • service load balancer
    • Helm controller
    • Traefik ingress controller
  • 所有 Kubernetes control plane 组件的操作都封装在单个二进制文件和进程中。因此,K3s 支持自动化和管理复杂的集群操作(例如证书分发等)。
  • 最大程度减轻了外部依赖性,K3s 仅需要现代内核和 cgroup 挂载。K3s 打包了所需的依赖,包括:
    • containerd
    • Flannel (CNI)
    • CoreDNS
    • Traefik (Ingress)
    • Klipper-lb (Service LB)
    • 嵌入式网络策略控制器
    • 嵌入式 local-path-provisioner
    • 主机实用程序(iptables、socat 等)

3.K3s与K8s的相同点

  • 容器编排: K3s和Kubernetes都是用于容器编排的平台。它们可以自动化和管理大量的容器应用程序,确保它们在集群中高效运行。
  • 容器生态系统: 两者都建立在Docker等容器技术的基础上,可以轻松部署和管理容器化的应用程序。
  • 伸缩性: K3s和Kubernetes都支持水平扩展,可以根据负载的变化动态调整集群中的资源分配。
  • 服务发现和负载均衡: 两者都提供了服务发现和负载均衡的机制,使得应用程序能够相互通信并在多个实例之间均衡分配负载。
  • 存储管理: K3s和Kubernetes都提供了存储卷的概念,允许容器访问持久化数据。

4.K3s与K8s区别

????????那么使用 k3 有什么区别呢?

????????首先,单个控制平面 k3s 集群中的默认数据库是 SQLite。性能对于小型集群来说很棒,但如果需要更大的集群,可能需要用更强大的东西替换,例如 etcd、MySQL 或 PostgreSQL!幸运的是,k3s 支持所有这些(而上游 Kubernetes 只支持 etcd)!

????????另一个真正的区别只适用于较大的云提供商之一,你可能已经在上游 Kubernetes 源代码中有很多扩展,因为 k3s 删除了所有这些扩展并依赖于标准接口(如容器存储接口 (CSI))来实现它们。不过,这对最终客户没有影响,只对服务提供商本身有影响。

如下表所示,我们分别从多个不同方面,对比了K3s与K8s的区别。

特征

K3s

K8s

大小

占用空间更小(小于 200MB)

占用空间更大(数百 MB)

依赖

更少的依赖关系

更多的依赖,包括 etcd、kube-proxy 等。

资源使用情况

使用更少的资源(CPU、RAM 等)

使用更多资源,尤其是对于大型集群

部署

更易于部署和管理

更复杂的部署和管理

配置

简化配置,选项更少

具有许多选项的更复杂的配置

可扩展性

大型群集的可扩展性有限

可扩展到更大的集群和工作负载

高可用性

可能存在高可用性限制

强大的高可用性选项,包括群集级冗余、自动故障转移等。

特征

更少的内置功能和扩展

提供广泛的功能和扩展,包括服务发现、负载平衡、自动扩展等。

安全

由于代码库较小,攻击面更少

更大的代码库,具有更多潜在的攻击面

兼容性

与某些 Kubernetes 工具和扩展的兼容性有限

与各种 Kubernetes 工具和扩展的强大兼容性

使用案例

非常适合资源受限的小型部署、边缘计算和物联网

更适合具有高资源要求的大型复杂部署,例如大数据、机器学习和高性能计算

5.K3s的安装

????????K3s 提供了一个安装脚本,可以方便地将其作为服务安装在基于 systemd 或 openrc 的系统上。该脚本可在?https://get.k3s.io?获得。要使用这种方法安装 K3s,只需运行:

curl -sfL https://get.k3s.io | sh -

还可以使用以下方法加速安装

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh |?
INSTALL_K3S_MIRROR=cn sh -

运行此安装后:

  • K3s 服务将被配置为在节点重启后或进程崩溃或被杀死时自动重启。
  • 将安装其他实用程序,包括?kubectl、crictl、ctr、k3s-killall.sh?和?k3s-uninstall.sh。
  • kubeconfig?文件将写入到?/etc/rancher/k3s/k3s.yaml,由 K3s 安装的 kubectl 将自动使用该文件。

curl -sfL https://get.k3s.io |?
K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

还可使用以下方法加速安装

curl -sfL https://rancher-mirror.rancher.cn/k3s/k3s-install.sh 
| INSTALL_K3S_MIRROR=cn K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh -

K3S_URL?参数会导致安装程序将 K3s 配置为 Agent 而不是 Server。K3s Agent 将注册到在 URL 上监听的 K3s Server。K3S_TOKEN?使用的值存储在 Server 节点上的?/var/lib/rancher/k3s/server/node-token?中。

注意:每台主机必须具有唯一的主机名。如果你的计算机没有唯一的主机名,请传递 3S JODEAE 环境变量,并为每个节点提供一个有效且唯一的主机名。

安装完成后,你可以使用以下命令检查K3s的状态:

sudo k3s kubectl get nodes

如果一切正常,你应该看到一个节点(Node)的列表,表示K3s集群已成功启动。

文章来源:https://blog.csdn.net/lovebaby1689/article/details/135556121
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。