我想知道如何为 Kubernetes 部署 ETCD 集群。似乎有两个不同的文档,我不知道必须考虑哪一个或它们各自的影响。
来自Kubernetes 文档对于多集群 etcd,建议像这样启动
etcd --listen-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379 --advertise-client-urls=http://$IP1:2379,http://$IP2:2379,http://$IP3:2379,http://$IP4:2379,http://$IP5:2379
这里--listen-client-urls--
列出了所有 ETCD 端点,与--advertise-client-urls
Kubernetes 文档中所述相同,该命令只运行一次。
来自ETCD 文档该命令必须在每个节点上运行
$ etcd --name infra0 --initial-advertise-peer-urls https://10.0.1.10:2380 \
--listen-peer-urls https://10.0.1.10:2380 \
--listen-client-urls https://10.0.1.10:2379,https://127.0.0.1:2379 \
--advertise-client-urls https://10.0.1.10:2379 \
--initial-cluster-token etcd-cluster-1 \
--initial-cluster infra0=https://10.0.1.10:2380,infra1=https://10.0.1.11:2380,infra2=https://10.0.1.12:2380 \
--initial-cluster-state new \
--client-cert-auth --trusted-ca-file=/path/to/ca-client.crt \
--cert-file=/path/to/infra0-client.crt --key-file=/path/to/infra0-client.key \
--peer-client-cert-auth --peer-trusted-ca-file=ca-peer.crt \
--peer-cert-file=/path/to/infra0-peer.crt --peer-key-file=/path/to/infra0-peer.key
我们可以注意到,它只--listen-client-urls--
包含当前节点的IP地址,其他参数在Kubernetes文档中并不存在。
它们为什么如此不同?你能帮我理解一下吗?哪一个是好的?什么时候必须使用它们?
答案1
简而言之,我建议按照etcd
文档来设置etcd
集群。
让我们首先详细了解一下这些标志的含义。
--listen-client-urls
- 这是一个member
的标志(与节点级别相关):
用于监听客户端流量的 URL 列表。此标志告知 etcd 接受来自指定方案://IP:port 组合上的客户端的传入请求。方案可以是 http 或 https。如果指定 0.0.0.0 作为 IP,etcd 将在所有接口上监听给定端口。如果指定了 IP 地址和端口,etcd 将监听给定端口和接口。可以使用多个 URL 来指定要监听的地址和端口数量。etcd 将响应来自任何列出的地址和端口的请求。
--advertise-client-url
- 这是一个cluster
范围标志(它本身就说明了这一点):
列出此成员的客户端 URL,以通告给集群的其余部分。这些 URL 可以包含域名。
另请参阅问答 - 旗帜之间的区别
至于您分享的 kubernetes 文档,这看起来不合逻辑,因为etcd
命令应该在每个节点上运行,但是在这个例子中,不清楚其他节点将如何获取这些信息。
另外,为了简单起见和快速启动,他们提供了这样的配置,并且etcd
应该忽略未使用的 IP(例如,本地端口上用于监听客户端流量的其他节点的 IP)。如果所有节点都可以通告所有节点的 IP,那就应该不错了etcd
。
然而etcd
文档明确说明首先etcd
每个节点上只有本地地址 - 我认为这是正确的方法。
我建议参考设置集群。本文档介绍了如何使用设置 HA 集群kubeadm
(可能不是最方便的方法,但我能够设置它并开始工作)。正如您在本示例中所见,配置中仅显示节点的 IP,这与文档etcd
一致。etcd
有用的链接: