本文发布已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
kubeadm:使用 etcd Learner 安全地加入控制平面节点
现在,kubeadm
工具支持 etcd learner 模式,您可以通过利用 etcd 3.4 版本中引入的 learner 模式 功能来增强 Kubernetes 集群的弹性和稳定性。本指南将引导您了解如何使用 kubeadm 的 etcd learner 模式。默认情况下,kubeadm 在每个控制平面节点上运行一个本地 etcd 实例。
在 v1.27 中,kubeadm 引入了一个新的特性门 EtcdLearnerMode
。启用此特性门后,当加入新的控制平面节点时,将创建一个新的 etcd 成员作为 learner,并且只有在 etcd 数据完全对齐后才会提升为投票成员。
使用 etcd learner 模式的优势是什么?
etcd learner 模式提供了几个令人信服的理由,促使您考虑在 Kubernetes 集群中采用它
- 增强的弹性:etcd learner 节点是非投票成员,它们会先赶上领导者的日志,然后才能完全运行。这可以防止新的集群成员扰乱仲裁或导致领导者选举,从而使集群在成员资格更改期间更具弹性。
- 减少集群不可用时间:添加新成员的传统方法通常会导致集群不可用时间,尤其是在基础设施缓慢或配置错误的情况下。etcd learner 模式可以最大限度地减少此类中断。
- 简化的维护:Learner 节点提供了一种更安全且可逆的方式来添加或替换集群成员。这降低了由于成员添加过程中的配置错误或失误而导致意外集群中断的风险。
- 改进的网络容错能力:在涉及网络分区的场景中,learner 模式允许更优雅地处理。根据新成员落入的分区,它可以与现有集群无缝集成,而不会造成中断。
总而言之,etcd learner 模式提高了 Kubernetes 集群在成员添加和更改期间的可靠性和可管理性,使其成为集群运营商的宝贵功能。
节点如何加入使用新模式的集群
创建以 learner 模式下 etcd 为后盾的 Kubernetes 集群
有关使用 kubeadm 创建高可用集群的一般说明,您可以参考 使用 kubeadm 创建高可用集群。
要使用 kubeadm 创建以 learner 模式下 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 设置为使用 learner 模式。
将节点加入 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=
并检查节点是否就绪。
注意
建议在 etcd 集群中使用奇数个成员。在将工作节点加入新的 Kubernetes 集群之前,请确保控制平面节点正常运行。
下一步是什么
- 特性门
EtcdLearnerMode
在 v1.27 中是 alpha 版本,我们预计它将在 Kubernetes 的下一个次要版本(v1.29)中升级到 beta 版本。 - etcd 有一个未解决的问题,可能会使该过程更加自动化:支持将 learner 成员自动提升为投票成员。
- 了解有关 kubeadm 配置格式的更多信息。
反馈
本指南是否有帮助?如果您有任何反馈或遇到任何问题,请告知我们。欢迎您提出宝贵意见!参加每两周一次的 SIG Cluster Lifecycle 会议 或每周一次的 kubeadm 办公时间。或者通过 Slack(频道 #kubeadm)或 SIG 的邮件列表 与我们联系。