概述
本文详细讲解 etcd 的启动配置参数,包括证书配置、集群配置以及两种不同的集群配置方式(一致性配置 vs 增量配置)的对比分析。
etcd 启动的证书配置
/usr/local/bin/etcd \
--cert-file=/etc/etcd/kube-etcd.pem \ # 对外提供服务的服务器证书
--key-file=/etc/etcd/kube-etcd-key.pem \ # 服务器证书对应的私钥
--peer-cert-file=/etc/etcd/kube-etcd-peer.pem \ # peer 证书,用于 etcd 节点之间的相互访问
--peer-key-file=/etc/etcd/kube-etcd-peer-key.pem \ # peer 证书对应的私钥
--trusted-ca-file=/etc/etcd/cluster-root-ca.pem \ # 用于验证访问 etcd 服务器的客户端证书的 CA 根证书
--peer-trusted-ca-file=/etc/etcd/cluster-root-ca.pem \ # 用于验证 peer 证书的 CA 根证书
...证书说明
参数 用途 --cert-file对外提供服务的服务器证书 --key-file服务器证书对应的私钥 --peer-cert-filepeer 证书,用于 etcd 节点之间的相互访问 --peer-key-filepeer 证书对应的私钥 --trusted-ca-file用于验证访问 etcd 服务器的客户端证书的 CA 根证书 --peer-trusted-ca-file用于验证 peer 证书的 CA 根证书
集群配置示例
集群包含以下三个节点:
- master-one: 192.0.2.16
- master-two: 192.0.2.17
- node-one: 192.0.2.13
master-one (192.0.2.16) 的 etcd 启动配置
etcd --advertise-client-urls=https://192.0.2.16:2379 \
--cert-file=/etc/kubernetes/pki/etcd/server.crt \
--client-cert-auth=true \
--data-dir=/var/lib/etcd \
--experimental-initial-corrupt-check=true \
--initial-advertise-peer-urls=https://192.0.2.16:2380 \
--initial-cluster=master-one=https://192.0.2.16:2380 \
--key-file=/etc/kubernetes/pki/etcd/server.key \
--listen-client-urls=https://127.0.0.1:2379,https://192.0.2.16:2379 \
--listen-metrics-urls=http://127.0.0.1:2381 \
--listen-peer-urls=https://192.0.2.16:2380 \
--name=master-one \
--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt \
--peer-client-cert-auth=true \
--peer-key-file=/etc/kubernetes/pki/etcd/peer.key \
--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt \
--snapshot-count=10000 \
--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crtmaster-two (192.0.2.17) 的 etcd 启动配置
etcd --advertise-client-urls=https://192.0.2.17:2379 \
--cert-file=/etc/kubernetes/pki/etcd/server.crt \
--client-cert-auth=true \
--data-dir=/var/lib/etcd \
--experimental-initial-corrupt-check=true \
--initial-advertise-peer-urls=https://192.0.2.17:2380 \
--initial-cluster=master-one=https://192.0.2.16:2380,master-two=https://192.0.2.17:2380 \
--initial-cluster-state=existing \
--key-file=/etc/kubernetes/pki/etcd/server.key \
--listen-client-urls=https://127.0.0.1:2379,https://192.0.2.17:2379 \
--listen-metrics-urls=http://127.0.0.1:2381 \
--listen-peer-urls=https://192.0.2.17:2380 \
--name=master-two \
--peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt \
--peer-client-cert-auth=true \
--peer-key-file=/etc/kubernetes/pki/etcd/peer.key \
--peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt \
--snapshot-count=10000 \
--trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt配置对比

关键差异
--initial-cluster: master-two 包含了两个节点的信息--initial-cluster-state: master-two 设置为existing,表示加入现有集群
etcd 集群配置方式对比
在设置 etcd 集群时,--initial-cluster 参数有两种主要的配置方式:一致性配置 和 增量配置(kubeadm 使用的方式)。
方式一:一致性配置(Consistent Configuration)
所有节点使用相同的 --initial-cluster 参数,包含集群中所有节点的信息。
优点
- 简单且可预测:每个节点配置一致,便于理解和故障排查
- 即时完整感知:所有节点立即知道完整的集群成员,有助于更快形成共识
- 防止脑裂:降低脑裂场景的风险,因为所有节点共享相同的集群视图
缺点
- 手动配置开销:添加新节点时,需要手动更新所有现有节点的配置
- 缺乏灵活性:在节点频繁添加或删除的动态环境中不够灵活
配置示例(所有节点使用相同配置):
etcd --name master-one \
--initial-advertise-peer-urls http://192.0.2.16:2380 \
--listen-peer-urls http://192.0.2.16:2380 \
--advertise-client-urls http://192.0.2.16:2379 \
--listen-client-urls http://192.0.2.16:2379 \
--initial-cluster master-one=http://192.0.2.16:2380,master-two=http://192.0.2.17:2380,master-three=http://192.0.2.13:2380 \
--initial-cluster-state new \
--data-dir /var/lib/etcd方式二:增量配置(Incremental Configuration)
Kubeadm 使用的方式。初始时每个节点配置有限的集群视图,后续节点逐步添加。
优点
- 易于引导:简化初始设置过程,节点可以逐个添加
- 自动化友好:与自动化工具和脚本配合良好,便于动态扩展集群
- 灵活性高:允许更动态地更改集群成员,无需大量重新配置
缺点
- 初始不一致:在引导过程中,节点可能对集群有不一致的视图
- 潜在错误:增量添加节点时的配置错误可能导致集群形成和稳定性问题
配置示例:
第一个节点 (master-one):
etcd --name master-one \
--initial-advertise-peer-urls http://192.0.2.16:2380 \
--listen-peer-urls http://192.0.2.16:2380 \
--advertise-client-urls http://192.0.2.16:2379 \
--listen-client-urls http://192.0.2.16:2379 \
--initial-cluster master-one=http://192.0.2.16:2380 \
--initial-cluster-state new \
--data-dir /var/lib/etcd第二个节点 (master-two):
etcd --name master-two \
--initial-advertise-peer-urls http://192.0.2.17:2380 \
--listen-peer-urls http://192.0.2.17:2380 \
--advertise-client-urls http://192.0.2.17:2379 \
--listen-client-urls http://192.0.2.17:2379 \
--initial-cluster master-one=http://192.0.2.16:2380,master-two=http://192.0.2.17:2380 \
--initial-cluster-state existing \
--data-dir /var/lib/etcd第三个节点 (master-three):
etcd --name master-three \
--initial-advertise-peer-urls http://192.0.2.13:2380 \
--listen-peer-urls http://192.0.2.13:2380 \
--advertise-client-urls http://192.0.2.13:2379 \
--listen-client-urls http://192.0.2.13:2379 \
--initial-cluster master-one=http://192.0.2.16:2380,master-two=http://192.0.2.17:2380,master-three=http://192.0.2.13:2380 \
--initial-cluster-state existing \
--data-dir /var/lib/etcd如何选择配置方式?
| 场景 | 推荐方式 |
|---|---|
| 小型集群或节点不经常变化的环境 | 一致性配置 - 提供简单性并降低配置错误风险 |
| 动态或自动化环境(如 kubeadm 管理) | 增量配置 - 简化扩展和维护,但需要在引导阶段仔细管理 |
参考资料
返回: Kubernetes
相关文档: