高可用嵌入式 etcd
警告
嵌入式 etcd (HA) 在较慢的磁盘上(例如运行 SD 卡的树莓派)可能会出现性能问题。
为什么是奇数个服务器节点?
HA 嵌入式 etcd 集群必须包含奇数个服务器节点,以便 etcd 保持仲裁。对于一个有 n 个服务器的集群,仲裁为 (n/2)+1。对于任何奇数大小的集群,添加一个节点将始终增加保持仲裁所需的节点数。虽然向奇数大小的集群添加节点看起来更好,因为有更多的机器,但容错性更差,因为可以容忍相同数量的节点故障而不会失去仲裁,但可以故障的节点更多。
具有嵌入式 etcd 的 HA K3s 集群由以下部分组成:
- 三个或更多个**服务器节点**,它们将提供 Kubernetes API 服务并运行其他控制平面服务,以及托管嵌入式 etcd 数据存储。
- 可选:零个或更多个**代理节点**,这些节点被指定来运行您的应用程序和服务
- 可选:一个**固定注册地址**,代理节点用于向集群注册
注意
要快速部署大型 HA 集群,请参阅相关项目
要开始,首先使用cluster-init
标志启动一个服务器节点,以启用集群和一个将用作共享密钥的令牌,用于将其他服务器加入集群。
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \
--cluster-init \
--tls-san=<FIXED_IP> # Optional, needed if using a fixed registration address
启动第一个服务器后,使用共享密钥将第二个和第三个服务器加入集群
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \
--server https://<ip or hostname of server1>:6443 \
--tls-san=<FIXED_IP> # Optional, needed if using a fixed registration address
检查第二个和第三个服务器是否已加入集群
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
server1 Ready control-plane,etcd,master 28m vX.Y.Z
server2 Ready control-plane,etcd,master 13m vX.Y.Z
server3 Ready control-plane,etcd,master 10m vX.Y.Z
现在,您拥有一个高可用的控制平面。任何成功集群化的服务器都可以在--server
参数中使用,用于将其他服务器和代理节点加入集群。将其他代理节点加入集群的过程与服务器相同
curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - agent --server https://<ip or hostname of server>:6443
有一些配置标志必须在所有服务器节点中保持一致
- 网络相关标志:
--cluster-dns
、--cluster-domain
、--cluster-cidr
、--service-cidr
- 控制某些组件部署的标志:
--disable-helm-controller
、--disable-kube-proxy
、--disable-network-policy
,以及传递给--disable
的任何组件 - 功能相关标志:
--secrets-encryption
现有单节点集群
版本门
从v1.22.2+k3s1开始可用
如果您有一个使用默认嵌入式 SQLite 数据库的现有集群,只需重新启动您的 K3s 服务器并使用--cluster-init
标志即可将其转换为 etcd。完成此操作后,您将能够按照上述方法添加其他实例。
如果在磁盘上找到 etcd 数据存储,无论是该节点已初始化或已加入集群,则数据存储参数(--cluster-init
、--server
、--datastore-endpoint
等)将被忽略。