跳至主要内容

需求

K3s 非常轻量级,但有一些最低需求,如下所述。

无论您是配置 K3s 在容器中运行还是作为原生 Linux 服务运行,每个运行 K3s 的节点都应满足以下最低要求。这些要求是 K3s 及其打包组件的基线,不包括工作负载本身消耗的资源。

先决条件

两个节点不能具有相同的主机名。

如果多个节点将具有相同的主机名,或者如果主机名可能被自动配置系统重用,请使用--with-node-id选项为每个节点附加随机后缀,或设计一个唯一名称,使用--node-name$K3S_NODE_NAME传递给您添加到集群的每个节点。

架构

K3s 可用于以下架构

  • x86_64
  • armhf
  • arm64/aarch64
  • s390x
ARM64 页面大小

在 2023 年 5 月之前的版本(v1.24.14+k3s1、v1.25.10+k3s1、v1.26.5+k3s1、v1.27.2+k3s1)中,在aarch64/arm64系统上,内核必须使用 4k 页面。RHEL9UbuntuRaspberry PI OSSLES都满足此要求。

操作系统

K3s 预计可以在大多数现代 Linux 系统上运行。

某些操作系统有其他设置要求

建议关闭 firewalld

systemctl disable firewalld --now

如果您希望保持 firewalld 启用,则默认情况下需要以下规则

firewall-cmd --permanent --add-port=6443/tcp #apiserver
firewall-cmd --permanent --zone=trusted --add-source=10.42.0.0/16 #pods
firewall-cmd --permanent --zone=trusted --add-source=10.43.0.0/16 #services
firewall-cmd --reload

根据您的设置,可能需要打开其他端口。有关更多信息,请参阅入站规则。如果您更改了 Pod 或服务的默认 CIDR,则需要相应地更新防火墙规则。

有关使用 Rancher 管理的 K3s 集群测试了哪些操作系统的更多信息,请参阅Rancher 支持和维护条款。

硬件

硬件需求会根据部署规模进行调整。最低要求是

节点CPURAM
服务器2 核2 GB
代理1 核512 MB

资源分析捕获测试和分析的结果,以确定 K3s 代理、带有工作负载的 K3s 服务器以及带有单个代理的 K3s 服务器的最低资源需求。

磁盘

K3s 的性能取决于数据库的性能。为了确保最佳速度,建议尽可能使用 SSD。

如果在树莓派或其他 ARM 设备上部署 K3s,建议您使用外部 SSD。etcd 是写密集型的;SD 卡和 eMMC 无法处理 IO 负载。

服务器大小指南

当服务器(控制平面 + etcd)节点上的 CPU 和 RAM 有限时,在标准工作负载条件下可以加入的代理节点数量存在限制。

服务器 CPU服务器 RAM代理数量
24 GB0-350
48 GB351-900
816 GB901-1800
16+32 GB1800+
高可用性大小

当使用 3 个服务器节点的高可用性设置时,代理的数量可以比上表中的数量增加大约 50%。
例如:3 个服务器,每个服务器有 4 个 vCPU/8 GB,可以扩展到约 1200 个代理。

建议分批加入不超过 50 个代理节点,以允许 CPU 释放空间,因为节点加入时会出现峰值。请记住,如果需要超过 255 个节点,请修改默认的cluster-cidr

资源分析包含更多关于如何找到这些建议的信息。

网络

K3s 服务器需要所有节点都能访问端口 6443。

当使用 Flannel VXLAN 后端时,节点需要能够通过 UDP 端口 8472 访问其他节点,或者当使用 Flannel WireGuard 后端时,通过 UDP 端口 51820(如果使用 IPv6 则为 51821)访问其他节点。节点不应该监听任何其他端口。K3s 使用反向隧道,以便节点建立到服务器的出站连接,并且所有 kubelet 流量都通过该隧道运行。但是,如果您不使用 Flannel 并提供您自己的自定义 CNI,那么 Flannel 需要使用的端口就不需要 K3s。

如果您希望使用指标服务器,则所有节点都必须能够通过端口 10250 互相访问。

如果您计划使用嵌入式 etcd 实现高可用性,则服务器节点必须能够通过端口 2379 和 2380 互相访问。

重要

节点上的 VXLAN 端口不应暴露给外部世界,因为它会使您的集群网络能够被任何人访问。在防火墙/安全组后面运行您的节点,以禁用对端口 8472 的访问。

危险

Flannel 依赖于Bridge CNI 插件来创建用于切换流量的 L2 网络。具有NET_RAW功能的恶意 Pod 可以滥用该 L2 网络发起攻击,例如ARP 欺骗。因此,如Kubernetes 文档中所述,请设置一个受限配置文件,在不可信的 Pod 上禁用NET_RAW

K3s 节点的入站规则

协议端口目标描述
TCP2379-2380服务器服务器仅在使用嵌入式 etcd 的 HA 时需要
TCP6443代理服务器K3s 监督程序和 Kubernetes API 服务器
UDP8472所有节点所有节点仅在使用 Flannel VXLAN 时需要
TCP10250所有节点所有节点Kubelet 指标
UDP51820所有节点所有节点仅在使用 Flannel Wireguard 和 IPv4 时需要
UDP51821所有节点所有节点仅在使用 Flannel Wireguard 和 IPv6 时需要
TCP5001所有节点所有节点仅在使用嵌入式分布式注册表(Spegel)时需要
TCP6443所有节点所有节点仅在使用嵌入式分布式注册表(Spegel)时需要

通常,允许所有出站流量。

根据使用的操作系统,可能需要对防火墙进行其他更改。

大型集群

硬件需求取决于您的 K3s 集群大小。对于生产环境和大型集群,我们建议使用具有外部数据库的高可用性设置。以下选项建议用于生产环境中的外部数据库。

  • MySQL
  • PostgreSQL
  • etcd

CPU 和内存

以下是高可用性 K3s 服务器中节点的最低 CPU 和内存要求。

部署规模节点数vCPURAM
小型最多 10 个24 GB
中型最多 100 个48 GB
大型最多 250 个816 GB
超大型最多 500 个1632 GB
特大型500+3264 GB

磁盘

集群性能取决于数据库性能。为了确保最佳速度,我们建议始终使用 SSD 磁盘来支持您的 K3s 集群。在云提供商上,您还需要使用允许最大 IOPS 的最小尺寸。

网络

您应该考虑增加集群 CIDR 的子网大小,以便您不会耗尽 Pod 的 IP 地址。您可以在启动 K3s 服务器时通过传递 --cluster-cidr 选项来执行此操作。

数据库

K3s 支持不同的数据库,包括 MySQL、PostgreSQL、MariaDB 和 etcd。请参阅 集群数据存储 以获取更多信息。

以下是运行大型集群所需的数据库资源的尺寸指南。

部署规模节点数vCPURAM
小型最多 10 个12 GB
中型最多 100 个28 GB
大型最多 250 个416 GB
超大型最多 500 个832 GB
特大型500+1664 GB