K3S架构设计

什么是K3S

k3s是完全兼容的Kubernetes发行版,有以下更改:

  • 移除过时的功能、Alpha功能、非默认功能,这些功能在大多数Kubernetes集群中已不可用。
  • 删除内置插件(比如云供应商插件和存储插件),可用外部插件程序替换。
  • 添加SQLite3作为默认的数据存储。etcd3仍然可用,但并非默认项。
  • 包含在一个简单的启动程序当中,可以处理复杂的TLS和其他选项。
  • 几乎没有操作系统依赖性(仅需要健全的内核和cgroup挂载)。k3s软件包所需的依赖:
    • containerd
    • Flannel
    • CoreDNS
    • CNI
    • 主机系统服务 (iptables, socat, etc)

K3S架构

server节点被定义为运行k3s server命令的主机(裸机或虚拟机)。worker节点被定义为运行k3s agent命令的主机。

1. 具有嵌入式数据库的单server架构

下图展示了一个单server集群示例,该集群具有带嵌入式SQLite数据库的单节点K3s server。

在此架构中,每个worker节点都注册到同一个server节点,K3s用户可以通过在server节点上调用K3s API来操作Kubernetes资源。

架构

2. 具有外部数据库的高可用K3s server架构

单个server集群已经可以满足各种使用需求,但是对于重要的环境,需要k3s集群的长时间正常运行,您需要以HA配置运行K3s。

HA K3s集群包括:

  • 两个或更多server节点
  • 一个外部数据存储

架构

2.1. 固定的worker节点注册地址

在高可用架构中,每个worker节点必须使用固定的注册地址向Kubernetes API进行注册,如下图所示。注册后,worker节点与任意一个server节点建立连接。

k3s HA

2.2 worker节点的注册方式

worker节点通过k3s agent启动时发起的Websocket连接进行注册.

worker节点将使用节点集群密钥以及存储在/etc/rancher/node/password的节点随机密码向server注册。server将在单个节点的/var/lib/rancher/k3s/server/cred/node-passwd路径存储密码,后续任何操作都必须使用相同的密码。如果删除了worker节点目录/etc/rancher/node,则应该为该worker节点重新创建密码文件,或者从服务器中删除该节点。

通过使用该--with-node-id标志启动K3s server或agent,可以将唯一的节点ID添加到hostname

发表评论