|
本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。 |
体系结构
服务器和代理
-
服务器节点被定义为运行`k3s server`命令的主机,控制平面和数据存储组件由K3s管理。
-
代理节点被定义为运行`k3s agent`命令的主机,没有任何数据存储或控制平面组件。
-
服务器和代理都运行kubelet、容器运行时和CNI。有关无代理服务器运行的更多信息,请参见高级选项文档。
带嵌入式数据库的单服务器设置
下图显示了一个示例集群,该集群具有一个单节点K3s服务器和一个嵌入式SQLite数据库。
在此配置中,每个代理节点都注册到同一个服务器节点。K3s用户可以通过在服务器节点上调用K3s API来操作Kubernetes资源。
高可用性K3s
单服务器集群可以满足多种用例,但对于Kubernetes控制平面正常运行时间至关重要的环境,您可以以HA配置运行K3s。HA K3s集群包括:
-
Embedded DB
-
外部数据库
-
三个或更多*服务器节点*,将提供Kubernetes API并运行其他控制平面服务
-
一个*嵌入式etcd数据存储*(与单服务器设置中使用的嵌入式SQLite数据存储相对)
-
两个或更多*服务器节点*,将提供Kubernetes API并运行其他控制平面服务
-
一个*外部数据存储*(例如 MySQL、PostgreSQL 或 etcd)
代理节点注册的工作原理
代理节点通过 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/ 中。