K3s - 轻量级Kubernetes的详细指南

1,045 阅读6分钟

K3s - 轻量级Kubernetes

轻量级Kubernetes。生产准备就绪,易于安装,一半的内存,所有的二进制文件小于100MB。

很适合:

  • 边缘
  • 物联网
  • CI
  • 开发
  • ARM
  • 嵌入k8s
  • k8s集群学博士不可行的情况

这是什么?

K3s是一个完全符合生产条件的Kubernetes发行版,有以下变化:

  1. 它被打包成一个单一的二进制文件。
  2. 它增加了对 sqlite3 的支持,作为默认的存储后端。还支持Etcd3、MySQL和Postgres。
  3. 它将Kubernetes和其他组件封装在一个简单的启动器中。
  4. 它在默认情况下是安全的,对轻量级环境有合理的默认值。
  5. 它对操作系统的依赖性很小,甚至没有(只需要一个正常的内核和cgroup挂载)。
  6. 它消除了在Kubernetes工作节点上为kubelet API暴露端口的需要,通过websocket隧道将该API暴露给Kubernetes控制平面节点。

K3s将以下技术捆绑在一起,形成一个单一的凝聚力分布:

这些技术可以被禁用或换成你选择的技术。

此外,K3s通过保持以下功能简化了Kubernetes的操作:

  • 管理Kubernetes组件的TLS证书
  • 管理工作节点和服务器节点之间的连接
  • 当Kubernetes资源发生变化时,实时从本地清单中自动部署。
  • 管理一个嵌入式etcd集群(正在进行中)

这个名字是怎么回事?

我们希望安装的Kubernetes在内存占用方面只有一半大小。Kubernetes是一个10个字母的单词,风格为k8s。因此,只有Kubernetes一半大小的东西将是一个5个字母的单词,样式为K3s。既没有K3s的长式,也没有官方发音。

这是一个分叉吗?

不,它是一个发行版。叉子意味着继续与原版有分歧。这不是K3s的目标或做法。K3s明确表示不打算改变任何Kubernetes的核心功能。我们寻求尽可能地保持与上游Kubernetes的接近。然而,我们维护了一小部分对K3s的用例和部署模型很重要的补丁(远低于1000行)。我们也维护其他组件的补丁。在可能的情况下,我们会将这些变化贡献给上游项目,例如,containerd中的SELinux支持。这在软件发行版中是一种常见的做法。

K3s是一个发行版,因为它打包了一个完整功能的集群所需的额外组件和服务,超越了vanilla Kubernetes。这些都是对诸如入口、存储类、网络策略、服务负载平衡器,甚至是容器运行时间等组件的技术的意见选择。这些选择和技术将在 "这是什么?"一节中更详细地阐述。

这比上游的Kubernetes如何轻量级或更小?

K3s比上游的Kubernetes更轻,主要有两个方面:

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

主要通过在单个进程中运行许多组件来减少内存占用。这消除了大量的开销,否则每个组件都会重复出现。

通过删除第三方存储驱动和云供应商,二进制文件更小,下面会详细解释。

你从上游的Kubernetes中删除了什么?

这是一个常见的混淆点,因为它已经随着时间的推移而改变。早期版本的K3s比现在的版本删除的东西要多得多。K3s目前删除了两样东西:

  1. 树内存储驱动
  2. 树内云提供商

这两样东西都有树外的替代方案,即CSICCM,它们在K3s中都可以使用,而且上游也在朝这个方向发展。

我们删除这些,以实现更小的二进制大小。由于它们都不影响Kubernetes的核心功能,因此可以在保持一致的情况下删除。它们还依赖于第三方的云或数据中心技术/服务,而这些技术/服务在许多K3s的用例中可能并不存在。

下一步是什么?

查看我们的路线图,看看我们有什么前进的计划。

发布节奏

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

我们的发布版本反映了正在发布的上游Kubernetes的版本。例如,K3s版本v1.18.6+k3s1映射到v1.18.6 Kubernetes版本。我们以+k3s<number> 的形式添加一个后缀,以允许我们使用相同版本的上游Kubernetes进行额外的发布,同时保持semver兼容。例如,如果我们在v1.18.6+k3s1 中发现了一个严重的错误,并需要立即发布修复,我们会发布v1.18.6+k3s2

文档

请参阅官方文档网站以获取完整的文档。

快速启动 - 安装脚本

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 K3S_URL K3S_TOKEN K3S_CLUSTER_SECRET

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

手动下载

  1. 从最新版本下载k3s ,支持x86_64、armhf和arm64。
  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 来报告请不要提交关于安全问题的问题。