写点什么

46 K8S 之集群高可用

  • 2021 年 12 月 16 日
  • 本文字数:944 字

    阅读完需:约 3 分钟

46 K8S之集群高可用

Kubernetes 具有自愈能力,它跟踪到某工作节点发生故障时,控制平面可以将离线节点上的 Pod 对象重新编排至其他可用工作节点运行,因此,更多的工作节点也意味着更好的容错能力,它使得 Kubernetes 在实现工作节点故障转移时拥有更加灵活的自由度。而当管理员检测到集群负载过重或无法容纳更多的 Pod 对象时,要么手动添加新节点到集群中,要么为云计算环境中的 Kubernetes 启用 cluster-autoscaler 以支持集群节点规模的自动缩放


一般来说,高可用控制平面至少需要 3 个 Master 节点来承受最多 1 个 Master 节点的丢失,才能保证处于等待状态的 Master 节点保持半数以上,以满足节点选举时的法定票数。


etcd 基于 Go 语言开发,内部采用 Raft 协议作为共识算法进行分布式协作,通过将数据同步存储在多个独立的服务实例上从而提高数据的可靠性,避免了单点故障导致的数据丢失。Raft 协议通过选举出的 leader 节点实现数据一致性,由 leader 节点负责所有的写入请求并同步给集群中的所有节点,在半数以上 follower 节点确认后予以持久存储。这种需要半数以上节点投票的机制要求集群数量最好是奇数个节点,推荐的数量为 3 个、5 个或 7 个。建立 etcd 集群有 3 种方式


静态集群:事先规划并提供所有节点的固定 IP 地址以组建集群,仅适合于能够为节点分配静态 IP 地址的网络环境,好处是它不依赖任何外部服务。


基于 etcd 发现服务构建集群:通过一个事先存在的 etcd 集群进行服务发现来组建新集群,支持集群的动态构建,它依赖一个现存可用的 etcd 服务。


基于 DNS 的服务资源记录构建集群:通过在 DNS 服务上的某域名下为每个节点创建一条 SRV 记录,而后基于此域名进行服务发现来动态组建新集群,它依赖于 DNS 服务及事先管理妥当的资源记录。


一般说来,对于 etcd 分布式存储集群来说,3 节点集群可容错一个节点,5 节点集群可容错两个节点,7 节点集群可容错 3 个节点,依此类推,但通常多于 7 个节点的集群规模是不必要的,而且对系统性能也会产生负面影响。


堆叠式 etcd 集群拓扑将相同节点上的控制平面同 etcd 成员耦合在一起,每个控制平面节点分别运行一个 etcd、kube-apiserver、kube-scheduler 和 kube-controller-manager 实例。而以 kubeadm 部署的该类控制平面中,各 kube-apiserver 实例仅与本地节点上的 etcd 成员通信,而各 kube-scheduler 和 kube-controller-manager 也仅与本地节点上的 kube-apiserver 通信


发布于: 刚刚阅读数: 3
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
46 K8S之集群高可用