什么是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
节点建立连接。
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
。