管理 etcd

Kolla Ansible 可以管理 etcd 集群的生命周期,并支持以下操作:

  • 引导一个干净的多节点 etcd 集群。

  • 向 etcd 集群添加新成员。

  • 可选地,自动从 etcd 集群中删除已删除的节点。

强烈建议阅读集群中部署的 etcd 版本的操作员文档。

注意

一旦 etcd 集群被引导,etcd 服务会从 etcd 数据库本身获取大部分配置。

这种模式与许多其他 Kolla Ansible 服务非常不同,并且是让不熟悉 etcd 的操作员感到困惑的根源。

集群引导与节点引导

Kolla Ansible 在 etcd 集群中区分两种形式的引导:

  • 同时引导多个节点以启动新的集群。

  • 引导单个节点以将其添加到现有集群。

这些对应于上游文档中 ETCD_INITIAL_CLUSTER_STATE 参数的 newexisting 参数。一旦 etcd 节点完成引导,即使配置发生更改,引导配置也会被忽略。

Kolla Ansible 会检测 etcd 节点上是否存在现有数据,如果不存在,则决定执行新的集群引导。否则,它假定存在健康的 etcd 集群,并将添加一个新节点到其中。

强制引导

Kolla Ansible 会在节点上查找 kolla_etcd 卷。如果此卷可用,它假定引导过程已在该节点上运行,并且该卷包含所需的配置。

但是,如果该过程被中断(外部或由于错误),则此卷可能会被错误配置。为了防止数据丢失,需要手动干预。

在重新触发引导之前,请确保卷上没有有价值的数据。这可能是因为该节点未投入使用,或者数据已在其他地方持久化。

要重新触发引导(对于集群或单个节点),请通过运行以下命令从所有受影响的节点中删除该卷:

docker volume rm kolla_etcd

重新运行 Kolla Ansible 将触发适当的工作流程,并引导一个空白集群,或者将一个空成员添加到现有集群。

手动命令

为了手动管理 etcd,可以使用 etcdctl 命令在 etcd 容器内。

etcdctl 默认配置为使用 json 输出,如果您自行运行它,可以覆盖该配置。

# list cluster members in a human-readable table
docker exec -it etcd etcdctl -w table member list

删除死节点

如果 globals.yml 具有值 etcd_remove_deleted_members: "yes",则不在清单中的 etcd 节点将被从 etcd 集群中删除。

因此,清单中的任何错误都可能导致意外删除。

要手动从 etcd 集群中删除死节点,请使用以下命令:

# list cluster members and identify dead member
docker exec -it etcd etcdctl -w table member list
# remove dead member
docker exec -it etcd etcdctl member remove MEMBER_ID_IN_HEX