本文已发表超过一年。较旧的文章可能包含过期内容。请检查页面中的信息自发布以来是否已不再准确。
kubeadm:安全地使用 etcd Learner 加入控制平面节点
kubeadm
工具现在支持 etcd 学习模式,使你能够利用 etcd 3.4 版本中引入的学习模式功能,增强 Kubernetes 集群的韧性和稳定性。本指南将带你了解如何在 kubeadm 中使用 etcd 学习模式。默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。
在 v1.27 版本中,kubeadm 引入了一个新的功能门 EtcdLearnerMode
。启用此功能门后,在加入新的控制平面节点时,一个新的 etcd 成员将作为学习者创建,并且只有在 etcd 数据完全同步后,才会提升为投票成员。
使用 etcd 学习模式有哪些优势?
etcd 学习模式提供了几个令人信服的理由,值得在 Kubernetes 集群中考虑采用:
- 增强的韧性:etcd 学习者节点是非投票成员,它们在完全投入运行之前会与领导者的日志同步。这可以防止新的集群成员扰乱法定人数或导致领导者选举,使集群在成员变更期间更具韧性。
- 减少集群不可用:传统的添加新成员方法通常会导致集群不可用时期,特别是在基础设施缓慢或配置错误的情况下。etcd 学习模式最大程度地减少此类中断。
- 简化维护:学习者节点提供了一种更安全、可逆的方式来添加或替换集群成员。这降低了由于配置错误或成员添加过程中的失误而导致意外集群中断的风险。
- 提高网络容错能力:在涉及网络分区的情况下,学习模式可以实现更平稳的处理。根据新成员所处的网络分区,它可以与现有集群无缝集成,而不会造成中断。
总而言之,etcd 学习模式在成员添加和变更期间提高了 Kubernetes 集群的可靠性和可管理性,使其成为集群操作员的一项宝贵功能。
使用新模式的节点如何加入集群
创建一个由 etcd 学习模式支持的 Kubernetes 集群
有关使用 kubeadm 创建高可用集群的一般说明,可以参考使用 kubeadm 创建高可用集群。
要使用 kubeadm 创建一个由 etcd 学习模式支持的 Kubernetes 集群,请按照以下步骤操作:
# kubeadm init --feature-gates=EtcdLearnerMode=true ...
kubeadm init --config=kubeadm-config.yaml
kubeadm 配置文件如下所示:
apiVersion: kubeadm.k8s.io/v1beta3
kind: ClusterConfiguration
featureGates:
EtcdLearnerMode: true
kubeadm 工具部署了一个单节点 Kubernetes 集群,并将 etcd 设置为使用学习模式。
将节点加入 Kubernetes 集群
在将控制平面节点加入新的 Kubernetes 集群之前,请确保现有控制平面节点和所有 etcd 成员都健康。
使用 etcdctl
检查集群健康状况。如果 etcdctl
不可用,可以在容器镜像内运行此工具。你可以使用 crictl run
等工具直接通过容器运行时执行此操作,而不是通过 Kubernetes。
以下是一个客户端命令示例,它使用安全通信检查 etcd 集群的健康状况:
ETCDCTL_API=3 etcdctl --endpoints 127.0.0.1:2379 \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
member list
...
dc543c4d307fadb9, started, node1, https://10.6.177.40:2380, https://10.6.177.40:2379, false
要检查 Kubernetes 控制平面是否健康,运行 kubectl get node -l node-role.kubernetes.io/control-plane=
并检查节点是否为 Ready 状态。
注意
推荐 etcd 集群成员数量为奇数。在将 worker 节点加入新的 Kubernetes 集群之前,请确保控制平面节点健康。
后续计划
- 功能门
EtcdLearnerMode
在 v1.27 中处于 Alpha 阶段,我们预计它将在 Kubernetes 的下一个 minor 版本 (v1.29) 中升级到 Beta。 - etcd 有一个开放议题,可能会使此过程更加自动化:支持自动将学习者成员提升为投票成员。
- 了解更多关于 kubeadm 配置格式的信息。
反馈
本指南有帮助吗?如果您有任何反馈或遇到任何问题,请告诉我们。随时欢迎您的反馈!加入双周一次的 SIG Cluster Lifecycle 会议或每周的 kubeadm 办公时间。或者通过 Slack (频道 #kubeadm) 或 SIG 的邮件列表联系我们。