k3s:基于 Kubernetes 生态的轻量级容器编排平台项目

Lightweight Kubernetes

分支36Tags1072
文件最后提交记录最后更新时间
1 个月前
26 分钟前
2 个月前
6 个月前
5 个月前
28 天前
7 天前
20 小时前
26 分钟前
26 分钟前
10 天前
1 年前
2 年前
9 个月前
28 天前
13 天前
7 天前
5 年前
1 年前
1 个月前
5 年前
7 天前
2 天前
2 天前
9 个月前
7 年前
1 个月前
7 天前
11 个月前
9 个月前
13 天前
2 年前
9 天前
9 天前
30 天前
30 天前
5 年前
2 年前
2 个月前

K3s - 轻量级 Kubernetes

FOSSA Status Nightly CI Build Status Integration Test Coverage Unit Test Coverage OpenSSF Best Practices OpenSSF Scorecard Releases CLOMonitor

轻量级 Kubernetes。生产就绪,易于安装,内存占用减半,整体二进制文件小于 100 MB。

适用于:

  • 边缘计算
  • 物联网(IoT)
  • 持续集成(CI)
  • 开发环境
  • ARM 架构
  • Kubernetes 嵌入式场景
  • 无需深入掌握 Kubernetes 集群管理技术的场景

这是什么?

K3s 是一个完全符合标准的生产级 Kubernetes 发行版,具有以下特点:

  1. 打包为单个二进制文件。
  2. 增加了对 sqlite3 作为默认存储后端的支持。同时也支持 Etcd3、MariaDB、MySQL 和 Postgres。
  3. 通过一个简单的启动程序封装 Kubernetes 和其他组件。
  4. 默认安全配置,为轻量级环境提供合理的默认设置。
  5. 对操作系统的依赖极少(仅需正常的内核和 cgroup 挂载)。
  6. 通过 websocket 隧道将 kubelet API 暴露给 Kubernetes 控制平面节点,无需在 Kubernetes 工作节点上暴露端口。

K3s 将以下技术整合到一个统一的发行版中:

这些技术可以被禁用,或替换为您选择的其他技术。

此外,K3s 通过维护以下功能简化了 Kubernetes 操作:

  • 管理 Kubernetes 组件的 TLS 证书
  • 管理工作节点与服务器节点之间的连接
  • 实时自动部署本地清单中的 Kubernetes 资源(在资源发生更改时)
  • 管理嵌入式 etcd 集群

名称由来?

我们希望打造一款内存占用减半的 Kubernetes 安装版本。Kubernetes 是一个 10 个字母的单词,通常简称为 k8s。那么,比 Kubernetes 小一半的东西,就应该是一个 5 个字母的单词,简称为 K3s。另外,数字“3”也可以看作是数字“8”垂直切分后的一半。K3s 没有完整形式,也没有官方发音。

这是一个分支版本吗?

不,它是一个发行版。分支意味着会持续与原始版本产生差异,而这并非 K3s 的目标或做法。K3s 明确旨在不改变任何核心 Kubernetes 功能。我们力求尽可能贴近上游 Kubernetes。不过,我们会维护一小部分补丁(远少于 1000 行代码),这些补丁对 K3s 的使用场景和部署模型至关重要。我们也会为其他组件维护补丁。在可能的情况下,我们会将这些变更贡献回上游项目,例如 containerd 中的 SELinux 支持。这是软件发行版的常见做法。

K3s 之所以是发行版,是因为它打包了使集群能够完全正常运行所需的额外组件和服务,这超出了 vanilla Kubernetes 的范畴。这些是对 ingress、存储类、网络策略、服务负载均衡器甚至容器运行时等组件所采用技术的倾向性选择。这些选择和技术将在这是什么?部分中详细介绍。

K3s 为何比上游 Kubernetes 更轻量或体积更小?

K3s 比上游 Kubernetes 更轻量主要体现在两个方面:

  1. 运行它所需的内存占用更小
  2. 包含运行集群所需的所有非容器化组件的二进制文件体积更小

内存占用的减少主要是通过在单个进程内运行多个组件实现的。这消除了原本每个组件都会重复产生的大量开销。

二进制文件体积更小是因为移除了第三方存储驱动程序和云提供商,下面将详细解释。

你从上游 Kubernetes 中移除了哪些内容?

这是一个常见的困惑点,因为情况随着时间发生了变化。早期版本的 K3s 比当前版本移除的内容要多得多。K3s 当前移除了两项内容:

  1. 内置存储驱动程序
  2. 内置云服务提供商

这两项都有树形外替代方案,分别是 CSICCM,它们在 K3s 中可以正常工作,并且上游 Kubernetes 也正朝着这个方向发展。

我们移除这些内容是为了减小二进制文件的大小。移除它们后仍能保持合规性,因为这两项都不会影响 Kubernetes 的核心功能。此外,它们还依赖第三方云或数据中心技术/服务,而在 K3s 的许多使用场景中,这些技术/服务可能并不存在。

快速开始

社区

  • Slack

加入 Slack,与 K3s 开发人员和其他 K3s 用户交流。这是学习和提问的好地方:#k3s#k3s-contributor 以及 CNCF Slack 中的 #k3s 频道。

  • 参与方式

GitHub Issues - 通过 GitHub 提交你的问题和功能请求。

  • 社区会议和办公时间

K3s 开发者社区会在 Zoom 上进行交流。欢迎所有人参加。

Linux Foundation iCal 添加到你的日历

  • 阿姆斯特丹/欧洲、中东和非洲时区 太平洋标准时间上午 10:00 - 每月第二个星期二
  • 欧洲、中东和非洲/亚太时区友好时间 - 每月第三个星期二

会议记录和议程https://hackmd.io/@k3s/meet-notes/

会议录制K3s 频道

你也可以在网站上查看完整详情:https://k3s.io/community

接下来做什么?

查看我们的路线图,了解我们未来的规划。

发布节奏

K3s 与上游 Kubernetes 版本保持同步。我们的目标是在一周内发布补丁版本,在 30 天内发布新的次要版本。

我们的发布版本号反映了所基于的上游 Kubernetes 版本。例如,K3s 版本 v1.27.4+k3s1 对应 Kubernetes 的 v1.27.4 版本。我们添加 +k3s<数字> 形式的后缀,以便能够在使用相同上游 Kubernetes 版本的情况下进行额外发布,同时保持语义化版本规范。例如,如果我们在 v1.27.4+k3s1 中发现一个高严重性漏洞,需要立即发布修复版本,我们会发布 v1.27.4+k3s2

文档

完整文档请参见官方文档网站

快速入门 - 安装脚本

install.sh 脚本提供了一种便捷的方式来下载 K3s 并将服务添加到 systemd 或 openrc。

要将 k3s 安装为服务,请运行:

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

kubeconfig 文件将写入 /etc/rancher/k3s/k3s.yaml,并且服务会自动启动或重启。 安装脚本将安装 K3s 及其他实用工具,例如 kubectlcrictlk3s-killall.shk3s-uninstall.sh

sudo kubectl get nodes

K3S_TOKEN 在服务器上的 /var/lib/rancher/k3s/server/node-token 路径下创建。 要在工作节点上进行安装,请传递 K3S_URL 以及 K3S_TOKEN 环境变量,例如:

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

手动下载

  1. 从最新的发布版本下载 k3s,支持 x86_64、armhf、arm64 和 s390x 架构。
  2. 运行服务器。
sudo k3s server &
# Kubeconfig is written to /etc/rancher/k3s/k3s.yaml
sudo k3s kubectl get nodes

# On a different node run the below. NODE_TOKEN comes from
# /var/lib/rancher/k3s/server/node-token on your server
sudo k3s agent --server https://myserver:6443 --token ${NODE_TOKEN}

贡献指南

如果您有兴趣为 K3s 贡献代码,请查阅我们的贡献指南

安全说明

K3s 的安全问题可通过发送邮件至 security@k3s.io 进行报告。 请勿就安全问题提交 issue。