etcd集群设置与主厨确定初始集群状态

我正在写厨师脚本来设置一个etcd集群。 节点列表(包括它们的IP)将在chef脚本中硬编码(作为一个属性),并使用静态引导将它们传递给etcd –initial-cluster–initial-cluster-state新参数。 因此,厨师脚​​本使用这些参数调用etcd,他们将设置集群,并在将来的运行(例如重启)忽略这些 – 初始集群参数。

首次设置,这个效果很好。 现在假设我想稍后向etcd集群添加一个新节点。 我首先添加另一个节点到厨师属性的硬编码列表中,并引导新节点。 当脚本调用etcd时,– initial-cluster参数也将包含附加节点,但是etcd要求使用–initial-cluster-state而不是–initial-cluster-state new来调用。 所以我需要一个单独的厨师脚本来添加新节点,而不是启动前几个节点。 这对我来说似乎不是一个好的解决办法。

一个解决scheme的第一个想法是在厨师脚本中区分大小写。 我们保留初始节点的IP的单独的硬编码列表。 如果自举节点属于初始集,则会使用–initial-cluster-state new ,否则将使用–initial-cluster-state 。 但是,当初始节点中的一个死亡时,这不起作用。 当删除并重新引导它时,它将获得与以前相同的IP(将其限定为初始节点),并尝试使用–initial-cluster-state new连接到群集。

如果etcd中有某种自动识别会自动select–initial-cluster-state参数,那就太好了。 但据我所知,etcd不提供这个。

推荐使用大厨设置etcd群集的方法是什么?