k3s-io/k3s
GitHub: k3s-io/k3s
轻量级 Kubernetes 发行版,打包为单个小于 100MB 的二进制文件,适用于边缘、IoT 和资源受限场景。
Stars: 32331 | Forks: 2605
# K3s - 轻量级 Kubernetes
[](https://app.fossa.com/projects/custom%2B25850%2Fgithub.com%2Fk3s-io%2Fk3s?ref=badge_shield)
[](https://github.com/k3s-io/k3s/actions/workflows/nightly-install.yaml)
[](https://drone-publish.k3s.io/k3s-io/k3s)
[](https://github.com/k3s-io/k3s/actions/workflows/integration.yaml)
[](https://github.com/k3s-io/k3s/actions/workflows/unitcoverage.yaml)
[](https://www.bestpractices.dev/projects/6835)
[](https://scorecard.dev/viewer/?uri=github.com/k3s-io/k3s)
[](https://github.com/k3s-io/k3s/tags?label=Downloads)
[](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, 边缘计算, 集群管理