在我的项目中,我们在Kubernetes上部署了etcd DB (此etcd用于应用程序,与Kubernetes etcd分开)。因此,我使用bitnami头盔图表作为状态集来部署它。最初,在部署时,副本的数量是1,因为我们之前想要一个etcd DB的实例。
真正的问题是,当我们将其缩放到3时,我更新了配置,通过用两个新成员的DNS名称更新ETCD_INITIAL_CLUSTER来扩展它:
etcd-0=http://etcd-0.etcd-headless.wallet.svc.cluster.local:2380,etcd-1=http://etcd-1.etcd-headless.wallet.svc.cluster.local:2380,etcd-2=http://etcd-2.etcd-headless.wallet.svc.cluster.local:2380现在,当我进入任何一个etcd荚并运行etcdctl成员列表时,我只得到一个成员列表,没有一个成员被选为领导者,这是错误的。三个人中应该有一个是领导者。
此外,在运行了一段时间之后,这些吊舱开始发出心跳超过错误和服务器超载错误:
W | etcdserver: failed to send out heartbeat on time (exceeded the 950ms timeout for 593.648512ms, to a9b7b8c4e027337a
W | etcdserver: server is likely overloaded
W | wal: sync duration of 2.575790761s, expected less than 1s我相应地更改了心跳默认值,错误数量减少了,但是,我还是和其他人一起得到了一些心跳超过错误。
不知道这里的问题是什么,是i/o造成的问题吗?如果是的话,我不知道如何确定。
会很感激你在这方面的任何帮助。
发布于 2020-07-21 20:29:07
我不认为心跳是主要的问题,它也似乎你看到的日志是警告日志。因此,这里和那里都有可能错过了一些心跳,但是您的节点是节点,没有崩溃或镜像。
很可能您更改了副本号,并且您的新副本没有加入集群。因此,我建议您按照这个指南将新成员添加到集群中。基本上,对于etcdctl,类似这样的东西:
etcdctl member add node2 --peer-urls=http://node1:2380
etcdctl member add node3 --peer-urls=http://node1:2380,http://node2:2380请注意,您必须在一个能够访问集群中所有etcd节点的荚中运行这些命令。
您还可以考虑使用etcd算子管理您的etcd集群,该集群应该能够处理节点的缩放和删除/添加。
✌️
发布于 2020-07-30 12:20:41
好吧,我有两个问题:
第二天我发现了第二个问题的原因,其实我在pod定义中设置了启动参数。ETCDCTL_API: 3
因此,当我使用APIv3运行"etcdctl成员列表“时,它没有提到选择哪个成员作为读取器。
$ ETCDCTL_API=3 etcdctl member list
3d0bc1a46f81ecd9, started, etcd-2, http://etcd-2.etcd-headless.wallet.svc.cluster.local:2380, http://etcd-2.etcd-headless.wallet.svc.cluster.local:2379, false
b6a5d762d566708b, started, etcd-1, http://etcd-1.etcd-headless.wallet.svc.cluster.local:2380, http://etcd-1.etcd-headless.wallet.svc.cluster.local:2379, false
$ ETCDCTL_API=2 etcdctl member list
3d0bc1a46f81ecd9, started, etcd-2, http://etcd-2.etcd-headless.wallet.svc.cluster.local:2380, http://etcd-2.etcd-headless.wallet.svc.cluster.local:2379, false
b6a5d762d566708b, started, etcd-1, http://etcd-1.etcd-headless.wallet.svc.cluster.local:2380, http://etcd-1.etcd-headless.wallet.svc.cluster.local:2379, true因此,当我使用APIv2时,我可以看到哪个节点被选举为领导者,并且领导者选举没有问题。仍然在做心跳警告,但我想我需要调优配置,以避免这一点。
注意:我有3个节点,停止一个进行测试。
https://stackoverflow.com/questions/63021675
复制相似问题