管理 etcd¶
Kolla Ansible 可以管理 etcd 集群的生命周期,并支持以下操作:
引导一个干净的多节点 etcd 集群。
向 etcd 集群添加新成员。
可选地,自动从 etcd 集群中删除已删除的节点。
强烈建议阅读集群中部署的 etcd 版本的操作员文档。
注意
一旦 etcd 集群被引导,etcd 服务会从 etcd 数据库本身获取大部分配置。
这种模式与许多其他 Kolla Ansible 服务非常不同,并且是让不熟悉 etcd 的操作员感到困惑的根源。
集群引导与节点引导¶
Kolla Ansible 在 etcd 集群中区分两种形式的引导:
同时引导多个节点以启动新的集群。
引导单个节点以将其添加到现有集群。
这些对应于上游文档中 ETCD_INITIAL_CLUSTER_STATE 参数的 new 和 existing 参数。一旦 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