我有一个23节点集群在AWS上运行CoreOS Stable 681.2.0,跨越4个可用区域。所有节点都在运行etcd2和flannel。在23个节点中,8个是专用的etcd2节点,其余节点专门指定为etcd2代理。
计划到集群的是3个nginx plus容器,一个私有Docker注册表,SkyDNS和我们的4个应用程序容器。应用程序容器使用etcd2注册自己,nginx容器接收任何更改,呈现必要的文件,最后重新加载。
这一切都很完美,直到一个单一的etd2节点因任何原因无法使用。
如果投票集群etcd2成员失去与甚至单个其他投票etcd2成员的连接,则计划到机队的所有服务都变得不稳定。计划服务在没有我干预的情况下开始停止和启动。
作为测试,我开始停止主持投票etcd2节点的EC2实例,直到法定人数丢失为止。第一个etcd2节点停止后,上述症状开始。在第二个节点之后,服务变得不稳定,没有可观察到的变化。然后,在第三个停止后,法定人数丢失,所有单位都没有计划。然后我再次启动了所有三个etcd2节点,并在60秒内集群恢复到稳定状态。
后续测试产生相同的结果。
我是否遇到过etcd2,fleet或CoreOS中的已知错误?
是否有我可以修改的设置,即使etcd因任何原因不可用,也可以将单位安排到节点上?
答案 0 :(得分:2)
我经历过同样的事情。就我而言,当我运行1个特定单位时,它会导致一切爆炸。预定的和完美的运行单元在没有任何通知的情况下突然丢失,甚至机器从集群中退出。
我仍然不确定究竟是什么问题,但我认为它可能与etcd vs etcd2有关。我在单元文件中有etd.service的依赖,这(我认为,不确定)导致CoreOS尝试启动etcd.service,而etcd2.service已经运行。这可能会导致我的情况发生冲突,并搞砸了单位和机器的etcd注册表。
可能会发生类似的情况,因此我建议您检查每个主机是否正在运行etcd或etcd2并检查您的单元文件,看看它们依赖于哪个。