Kubernetes: 高可用方案

Posted on Feb 21, 2025

高可用方案

Kubernetes的高可用方案有两种:

  1. 使用堆叠(stacked)控制平面节点,其中 etcd 节点与控制平面节点共存
  2. 使用外部 etcd 节点,其中 etcd 在与控制平面不同的节点上运行

堆叠(Stacked)etcd 拓扑

alt text

堆叠(Stacked)HA集群拓扑把etcd集群堆叠在kubeadm管理的控制平面节点上,作为控制平面的一个组件运行。

每个控制平面节点运行 kube-apiserverkube-schedulerkube-controller-manager 实例。 kube-apiserver使用负载均衡器暴露给工作节点。

每个控制平面节点创建一个本地 etcd 成员(member),这个 etcd 成员只与该节点的 kube-apiserver 通信。 这同样适用于本地 kube-controller-manager 和 kube-scheduler 实例。

优点:

  • 这种拓扑将控制平面和 etcd 成员耦合在同一节点上。相对使用外部 etcd 集群, 设置起来更简单,而且更易于副本管理。

缺点:

  • 堆叠集群存在耦合失败的风险。
    • 如果一个节点发生故障,则 etcd 成员和控制平面实例都将丢失, 并且冗余会受到影响。你可以通过添加更多控制平面节点来降低此风险。
    • HA集群运行至少三个堆叠的控制平面节点。

外部etcd拓扑

外部etcd

外部etcd的HA集群把etcd存储集群在独立于控制平面节点的其他节点上运行。

就像堆叠的etcd拓扑一样,外部etcd拓扑中的每个控制平面节点都会运行 kube-apiserverkube-schedulerkube-controller-manager 实例。

同样,kube-apiserver 使用负载均衡器暴露给工作节点。但是etcd成员在不同的主机上运行, 每个etcd主机与每个控制平面节点的kube-apiserver通信。

优点:

  • 这种拓扑结构解耦了控制平面和etcd成员。因此它提供了一种HA设置, 其中失去控制平面实例或者 etcd 成员的影响较小,并且不会像堆叠的 HA 拓扑那样影响集群冗余。

缺点:

  • 此拓扑需要两倍于堆叠HA拓扑的主机数量。 具有此拓扑的HA集群至少需要三个用于控制平面节点的主机和三个用于 etcd 节点的主机。

参考

  1. Options for Highly Available Topology