k3s-io/k3s

GitHub: k3s-io/k3s

轻量级 Kubernetes 发行版,打包为单个小于 100MB 的二进制文件,适用于边缘、IoT 和资源受限场景。

Stars: 32331 | Forks: 2605

# K3s - 轻量级 Kubernetes [![FOSSA Status](https://app.fossa.com/api/projects/custom%2B25850%2Fgithub.com%2Fk3s-io%2Fk3s.svg?type=shield)](https://app.fossa.com/projects/custom%2B25850%2Fgithub.com%2Fk3s-io%2Fk3s?ref=badge_shield) [![Nightly CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/84dda4ae77172705.svg)](https://github.com/k3s-io/k3s/actions/workflows/nightly-install.yaml) [![Build Status](https://drone-publish.k3s.io/api/badges/k3s-io/k3s/status.svg)](https://drone-publish.k3s.io/k3s-io/k3s) [![Integration Test Coverage](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/9d4a6cab1b172706.svg)](https://github.com/k3s-io/k3s/actions/workflows/integration.yaml) [![Unit Test Coverage](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/4d1cdde6d1172708.svg)](https://github.com/k3s-io/k3s/actions/workflows/unitcoverage.yaml) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/6835/badge)](https://www.bestpractices.dev/projects/6835) [![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/k3s-io/k3s/badge)](https://scorecard.dev/viewer/?uri=github.com/k3s-io/k3s) [![Releases](https://img.shields.io/github/downloads/k3s-io/k3s/total.svg)](https://github.com/k3s-io/k3s/tags?label=Downloads) [![CLOMonitor](https://img.shields.io/endpoint?url=https://clomonitor.io/api/projects/cncf/k3s/badge)](https://clomonitor.io/projects/cncf/k3s) 轻量级 Kubernetes。生产可用,易于安装,内存占用减半,所有功能打包在一个小于 100 MB 的二进制文件中。 适用于: * Edge * IoT * CI * Development * ARM * 嵌入式 k8s * 不需要 k8s 集群学博士学位的场景 ## 这是什么? K3s 是一个[完全合规](https://github.com/cncf/k8s-conformance/pulls?q=is%3Apr+k3s)的生产级 Kubernetes 发行版,具有以下变更: 1. 打包为单个二进制文件。 2. 增加了对 sqlite3 作为默认存储后端的支持。同时也支持 Etcd3、MariaDB、MySQL 和 Postgres。 3. 将 Kubernetes 和其他组件封装在一个简单单一的启动器中。 4. 默认安全,为轻量级环境提供了合理的默认值。 5. 极少甚至没有操作系统依赖(仅需正常的内核和 cgroup 挂载)。 6. 通过 websocket 隧道将 kubelet API 暴露给 Kubernetes 控制平面节点,从而消除了在 Kubernetes worker 节点上暴露端口的需求。 K3s 将以下技术捆绑到一个统一的发行版中: * 用于 CNI 的 [Containerd](https://containerd.io/) & [runc](https://github.com/opencontainers/runc) * [Flannel](https://github.com/flannel-io/flannel) * [CoreDNS](https://coredns.io/) * [Metrics Server](https://github.com/kubernetes-sigs/metrics-server) * 用于 ingress 的 [Traefik](https://containo.us/traefik/) * 作为嵌入式服务负载均衡器提供者的 [Klipper-lb](https://github.com/k3s-io/klipper-lb) * 用于网络策略的 [Kube-router](https://www.kube-router.io/) netpol 控制器 * 允许 CRD 驱动部署 helm manifests 的 [Helm-controller](https://github.com/k3s-io/helm-controller) * 作为数据存储 shim 的 [Kine](https://github.com/k3s-io/kine),允许用其他数据库替换 etcd * 用于使用本地存储配置卷的 [Local-path-provisioner](https://github.com/rancher/local-path-provisioner) * [Host utilities](https://github.com/k3s-io/k3s-root),例如 iptables/nftables、ebtables、ethtool 和 socat 这些技术可以根据您的选择禁用或替换。 此外,K3s 通过维护以下功能简化了 Kubernetes 操作: * 管理 Kubernetes 组件的 TLS 证书 * 管理 worker 和 server 节点之间的连接 * 实时自动部署本地 manifests 中更改的 Kubernetes 资源 * 管理嵌入式 etcd 集群 ## 名字的由来? 我们想要一个内存占用减半的 Kubernetes 安装。Kubernetes 是一个 10 个字母的单词,简写为 k8s。所以只有 Kubernetes 一半大的东西就是一个 5 个字母的单词,简写为 K3s。‘3’也是将‘8’垂直切分的一半。K3s 既没有全称也没有官方发音。 ## 这是一个 fork 吗? 不,它是一个发行版。Fork 意味着持续偏离原始代码。这不是 K3s 的目标或做法。K3s 明确打算不更改任何核心 Kubernetes 功能。我们寻求尽可能保持与上游 Kubernetes 接近。然而,我们维护了一小部分对 K3s 用例和部署模型非常重要的补丁(远少于 1000 行)。我们也维护其他组件的补丁。在可能的情况下,我们会将这些更改贡献回上游项目,例如 [containerd 中的 SELinux 支持](https://github.com/containerd/cri/pull/1487/commits/24209b91bf361e131478d15cfea1ab05694dc3eb)。这是软件发行版中的常见做法。 K3s 之所以是一个发行版,是因为它打包了超越原生 Kubernetes 的、全功能集群所需的额外组件和服务。这些是对 ingress、存储类、网络策略、服务负载均衡器甚至容器运行时等组件技术的坚定选择。这些选择和技术在[这是什么?](#what-is-this)一节中有更详细的介绍。 ## 为什么它比上游 Kubernetes 更轻量或更小? K3s 比上游 Kubernetes 更轻量主要有两个方面: 1. 运行它的内存占用更小 2. 包含运行集群所需的所有非容器化组件的二进制文件更小 内存占用的减少主要通过在单个进程中运行许多组件来实现。这消除了否则每个组件都会重复产生的显著开销。 二进制文件更小是因为移除了第三方存储驱动和云提供商,下文将详细解释。 ## 从上游 Kubernetes 中移除了什么? 这是一个常见的混淆点,因为它随着时间的推移发生了变化。早期版本的 K3s 移除的内容比当前版本多得多。K3s 目前移除了两样东西: 1. In-tree 存储驱动 2. In-tree 云提供商 这两者都有 [CSI](https://github.com/container-storage-interface/spec/blob/master/spec.md) 和 [CCM](https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/) 形式的 out-of-tree 替代方案,它们可以在 K3s 中工作,也是上游正在发展的方向。 我们移除这些是为了实现更小的二进制文件大小。它们可以在保持合规的情况下被移除,因为两者都不影响核心 Kubernetes 功能。它们也依赖于第三方云或数据中心技术/服务,这在许多 K3s 的用例中可能不可用。 ## 快速开始 - [快速安装](https://docs.k3s.io/quick-start) - [架构](https://docs.k3s.io/architecture) - [常见问题](https://docs.k3s.io/faq) - [贡献](CONTRIBUTING.md) ## 社区 - Slack 加入 [Slack](https://slack.rancher.io/) 与 K3s 开发者和其他 K3s 用户聊天。这是学习和提问的好地方:[CNCF Slack](https://cloud-native.slack.com) 中的 [#k3s](https://rancher-users.slack.com/archives/CGGQEHPPW)、[#k3s-contributor](https://rancher-users.slack.com/archives/CGXR87T8B) 和 [#k3s](https://cloud-native.slack.com/archives/C0196ULKX8S) 频道 - 参与其中 [GitHub Issues](https://github.com/k3s-io/k3s/issues) - 通过 GitHub 提交您的问题和功能请求。 - 社区会议和办公时间 K3s 开发者社区在 Zoom 上聊天。欢迎所有人参加。 **将 [Linux Foundation iCal](https://webcal.prod.itx.linuxfoundation.org/lfx/a092M00001IkYIjQAN) 添加到您的日历**: - AMS/EMEA 时区 太平洋时间上午 10:00 - 每月*第二个*星期二 - 适合 EMEA/APA 时区 - 每月*第三个*星期二 **会议记录和议程**:https://hackmd.io/@k3s/meet-notes/ **会议录像**:[K3s Channel](https://www.youtube.com/watch?v=HRuJROA6Z3k&list=PLlBG85HKlLE9KFDqJ_K6NOpup-zVw8ANl&pp=gAQB) 您也可以在网站上查看完整详情:https://k3s.io/community ## 接下来是什么? 查看我们的[路线图](ROADMAP.md)以了解我们要推进的计划。 ## 发布节奏 K3s 与上游 Kubernetes 发布保持同步。我们的目标是在一周内发布补丁版本,在 30 天内发布新的次要版本。 我们的发布版本号反映了正在发布的上游 Kubernetes 版本。例如,K3s 发布 [v1.27.4+k3s1](https://github.com/k3s-io/k3s/releases/tag/v1.27.4%2Bk3s1) 对应于 `v1.27.4` Kubernetes 发布。我们添加 `+k3s` 形式的后缀,以便我们可以使用相同版本的上游 Kubernetes 进行额外发布,同时保持符合 [semver](https://semver.org/)。例如,如果我们在 `v1.27.4+k3s1` 中发现了一个高严重性漏洞,并且需要为此发布立即修复,我们将发布 `v1.27.4+k3s2`。 ## 文档 完整文档请参阅[官方文档站点](https://docs.k3s.io)。 ## 快速开始 - 安装脚本 `install.sh` 脚本提供了一种便捷的方式来下载 K3s 并将服务添加到 systemd 或 openrc。 要将 k3s 作为服务安装,请运行: ``` curl -sfL https://get.k3s.io | sh - ``` kubeconfig 文件写入到 `/etc/rancher/k3s/k3s.yaml`,服务会自动启动或重启。 安装脚本将安装 K3s 和附加工具,例如 `kubectl`、`crictl`、`k3s-killall.sh` 和 `k3s-uninstall.sh`,例如: ``` sudo kubectl get nodes ``` `K3S_TOKEN` 创建于您服务器上的 `/var/lib/rancher/k3s/server/node-token`。 要在 worker 节点上安装,请传递 `K3S_URL` 以及 `K3S_TOKEN` 环境变量,例如: ``` curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=XXX sh - ``` ## 手动下载 1. 从最新[发布](https://github.com/k3s-io/k3s/releases/latest)下载 `k3s`,支持 x86_64、armhf、arm64 和 s390x。 2. 运行 server。 ``` sudo k3s server & # Kubeconfig 写入到 /etc/rancher/k3s/k3s.yaml sudo k3s kubectl get nodes # 在另一个节点上运行以下命令。NODE_TOKEN 来自 # 服务器上的 /var/lib/rancher/k3s/server/node-token sudo k3s agent --server https://myserver:6443 --token ${NODE_TOKEN} ``` ## 贡献 如果您有兴趣为 K3s 做贡献,请查看我们的[贡献指南](CONTRIBUTING.md)。 ## 安全 K3s 中的安全问题可以通过发送电子邮件至 [security@k3s.io](mailto:security@k3s.io) 报告。 请勿提交关于安全问题的 issue。
标签:ARM 支持, CNCF, EVTX分析, EVTX分析, Go 语言, IoT, K3s, K8s 发行版, SQLite, web渗透, 单二进制文件, 容器编排, 嵌入式系统, 开源框架, 持续集成, 提示注入, 日志审计, 服务器代理, 生产就绪, 资源节约, 轻量级 Kubernetes, 边缘计算, 集群管理