本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

体系结构

服务器和代理

  • 服务器节点被定义为运行`k3s server`命令的主机,控制平面和数据存储组件由K3s管理。

  • 代理节点被定义为运行`k3s agent`命令的主机,没有任何数据存储或控制平面组件。

  • 服务器和代理都运行kubelet、容器运行时和CNI。有关无代理服务器运行的更多信息,请参见高级选项文档。

how it works k3s revised

带嵌入式数据库的单服务器设置

下图显示了一个示例集群,该集群具有一个单节点K3s服务器和一个嵌入式SQLite数据库。

在此配置中,每个代理节点都注册到同一个服务器节点。K3s用户可以通过在服务器节点上调用K3s API来操作Kubernetes资源。

单服务器的K3s架构

高可用性K3s

单服务器集群可以满足多种用例,但对于Kubernetes控制平面正常运行时间至关重要的环境,您可以以HA配置运行K3s。HA K3s集群包括:

  • Embedded DB

  • 外部数据库

  • 三个或更多*服务器节点*,将提供Kubernetes API并运行其他控制平面服务

  • 一个*嵌入式etcd数据存储*(与单服务器设置中使用的嵌入式SQLite数据存储相对)

K3s架构与高可用性服务器

  • 两个或更多*服务器节点*,将提供Kubernetes API并运行其他控制平面服务

  • 一个*外部数据存储*(例如 MySQL、PostgreSQL 或 etcd)

具有高可用性服务器和外部数据库的 K3s 架构

代理节点的固定注册地址

在高可用性服务器配置中,每个节点还可以通过使用固定注册地址向 Kubernetes API 注册,如下图所示。

注册后,代理节点直接与其中一个服务器节点建立连接。

代理注册 HA

代理节点注册的工作原理

代理节点通过 k3s agent 进程发起的 websocket 连接进行注册,连接由作为代理进程一部分运行的客户端负载均衡器维护。最初,代理通过本地负载均衡器在 6443 端口连接到主管(和 kube-apiserver)。负载均衡器维护可连接的可用端点列表。默认(并且最初唯一)端点由 --server 地址的主机名提供。一旦连接到集群,代理会从默认命名空间的 Kubernetes 服务端点列表中检索 kube-apiserver 地址列表。这些端点被添加到负载均衡器中,负载均衡器随后维护与集群中所有服务器的稳定连接,提供一个能够容忍单个服务器故障的 kube-apiserver 连接。

代理将使用节点集群密钥和存储在 /etc/rancher/node/password 的随机生成的节点密码向服务器注册。服务器将把单个节点的密码存储为 Kubernetes 秘密,任何后续尝试必须使用相同的密码。节点密码秘密存储在 kube-system 名称空间中,名称使用模板 <host>.node-password.k3s。这样做是为了保护节点 ID 的完整性。

如果代理的 /etc/rancher/node 目录被删除,或者您希望使用现有名称重新加入节点,则应从集群中删除该节点。这将清理旧的节点条目和节点密码秘密,并允许节点(重新)加入集群。

如果您经常重用主机名,但无法删除节点密码秘密,可以通过使用 --with-node-id 标志启动 K3s 服务器或代理,自动将唯一的节点 ID 附加到主机名。启用时,节点 ID 也会存储在 /etc/rancher/node/ 中。