Deis store-metadata 组件定制指南:Ceph MDS 元数据服务与 etcd 键调优

发布时间:2026/10/10 5:55:37
Deis store-metadata 组件定制指南:Ceph MDS 元数据服务与 etcd 键调优
后端云原生【免费下载链接】deisDeis v1, the CoreOS and Docker PaaS: Your PaaS. Your Rules.项目地址https://gitcode.com/gh_mirrors/de/deis点击查看免费下载store-metadata 是 Deis v1 平台内置 Ceph 存储栈store 组件中负责元数据服务的容器对应 Ceph 中的元数据服务器守护进程MDS为共享文件系统 CephFS 提供元数据读写能力。本文以官方定制文档 docs/customizing_deis/store_metadata_settings.rst 为主体结合 store/metadata/bin/boot 启动脚本、deisctl 配置实现与 systemd unit 定义完整讲解该组件的依赖关系、etcd 键的读写约定以及如何用自定义 Docker 镜像替换内置镜像。组件定位Deis 存储栈中的元数据服务Deis 的 store 组件基于 Ceph 构建为平台提供对象存储与共享文件系统能力。根据 store/README.md 的说明store 由四个容器组成store-daemon服务数据的守护进程对应 Ceph 的对象存储守护进程 OSDstore-gateway提供 Swift 与 S3 兼容 bucket API 的 blob 存储网关store-metadata使用 CephFS 共享文件系统所必需的元数据服务对应 Ceph 的元数据服务器守护进程 MDSstore-monitor维护集群状态的服务对应 Ceph 的 monitorstore-metadata 是 store-volume 服务运行在全部主机上、不属于 Deis 组件能够使用 CephFS 的前提。从启动入口看store/metadata/Dockerfile.template 将容器入口定义为ENTRYPOINT [/app/bin/boot]即每次容器启动都会执行 store/metadata/bin/boot 脚本来完成初始化与 MDS 进程拉起。依赖关系官方文档明确了该组件的依赖矩阵方向组件说明前置依赖store-monitor、store-daemon必须先于 store-metadata 就绪被依赖store-volume 服务运行在所有主机上非 Deis 组件依赖 CephFS 元数据可用其他考量无—这一依赖顺序在 store/Makefile 的install/start目标中有直接体现install: check-deisctl deisctl install store-monitor deisctl install store-daemon deisctl install store-metadata deisctl install store-volume deisctl scale store-gateway1monitor → daemon → metadata → volume 的安装顺序保证了 store-metadata 启动时 monitor 已经完成 Ceph 集群初始化写入monSetupComplete等键daemon 已具备 OSD 数据面。而卸载时uninstall目标则按 volume → metadata → daemon → monitor 逆序执行。store-metadata 写入的 etcd 键store-metadata 组件在初始化完成后会在 etcd 中写入一个键通常发生在它的/bin/boot脚本中settingdescription/deis/store/filesystemSetupCompleteSet when the Ceph filesystem setup is completeCeph 文件系统初始化完成时写入在 store/metadata/bin/boot 中该键的写入发生在 data/metadata 存储池创建、CephFS 文件系统创建完成之后# mark setup as complete echo store-metadata: filesystem setup complete. etcdctl --no-sync -C $ETCD set ${ETCD_PATH}/filesystemSetupComplete youBetcha /dev/null写入值为固定的youBetcha占位值仅表示“已完成”这一布尔语义。其他 store-metadata 实例在启动时首先检查该键是否存在若已存在则直接跳过文件系统初始化流程避免重复建池。store-metadata 使用的 etcd 键以下 etcd 键由 store-metadata 组件读取全部由 store-monitor 组件写入详见 store-monitor 定制文档settingdescription/deis/store/adminKeyringkeyring for an admin user to access the Ceph clusterset by store-monitor/deis/store/fsidCeph filesystem IDset by store-monitor/deis/store/hosts/*deis-monitor hostsset by store-monitor/deis/store/maxPGsPerOSDWarningthreshold for warning on number of placement groups per OSDset by store-monitor/deis/store/monKeyringkeyring for the monitor to access the Ceph clusterset by store-monitor/deis/store/monSetupCompleteset when the Ceph cluster setup is completeset by store-monitor/deis/store/monSetupLockhost of store-monitor that completed setupset by store-monitor/deis/store/minSizeminimum number of store-daemons necessary for the cluster to accept writesset by store-monitor/deis/store/pgNumnumber of Ceph placement groups for the storage poolsset by store-monitor/deis/store/sizenumber of replicas for data stored in Cephset by store-monitor这些键的消费方式分为两类1. 启动脚本直接读取/deis/store/pgNum被 boot 脚本直接用于创建存储池时的 PG 数量参数PG_NUMetcdctl --no-sync -C $ETCD get /deis/store/pgNum if ! ceph osd lspools | grep data, ; then ceph osd pool create data ${PG_NUM} fi if ! ceph osd lspools | grep metadata ; then ceph osd pool create metadata ${PG_NUM} fi2. confd 模板间接消费adminKeyring、monKeyring、fsid、hosts/*、minSize、size、maxPGsPerOSDWarning等键通过 confd 模板机制写入 Ceph 配置文件。boot 脚本启动时会先等待 confd 完成模板渲染until confd -onetime -node $ETCD --confdir /app --log-level error; do echo store-metadata: waiting for confd to write initial templates... sleep 5 donestore/base/conf.d/ceph.conf.toml 声明了模板渲染规则将/etc/ceph/ceph.conf与整个/deis/store键空间绑定[template] src ceph.conf dest /etc/ceph/ceph.conf uid 0 gid 0 mode 0644 keys [ /deis/store, ]base 镜像中还存在admin_keyring.toml、mon_keyring.toml、etc_hosts.toml等模板配置见 store/base/conf.d分别将 keyring 与 monitor 主机信息渲染进/etc/ceph/相关文件与/etc/hostsstore-metadata 由此获得访问 Ceph 集群所需的认证凭据与对端地址。启动流程源码解析boot 脚本逐步拆解store/metadata/bin/boot脚本灵感来自 Seán C. McCord 的 docker-ceph 项目完整定义了 store-metadata 的生命周期可拆解为六个阶段渲染配置模板循环执行confd -onetime直至成功确保/etc/ceph/ceph.conf、keyring 等文件就绪检测文件系统状态读取/deis/store/filesystemSetupComplete若已存在则跳过初始化获取初始化锁通过 etcd 原子操作etcdctl mk ${ETCD_PATH}/filesystemSetupLock $HOSTNAME竞争锁或确认当前主机已持有该锁兼容锁持有者即本机的情况保证只有一个 metadata 实例执行文件系统初始化if etcdctl --no-sync -C $ETCD mk ${ETCD_PATH}/filesystemSetupLock $HOSTNAME /dev/null 21 \ || [[ etcdctl --no-sync -C $ETCD get ${ETCD_PATH}/filesystemSetupLock $HOSTNAME ]] ; then初始化 CephFS依次完成data池、metadata池的创建均使用$PG_NUM个 placement group并通过ceph fs new deis metadata data创建名为deis的 CephFS 文件系统脚本注释特别说明这一步骤兼容“老集群升级”场景——集群可能已有存储池但缺少filesystemSetupComplete键因此每个池创建前都会用ceph osd lspools | grep做幂等检查标记完成写入/deis/store/filesystemSetupComplete未抢到锁的实例则循环等待该键出现每 5 秒重试一次启动 MDS 守护进程为当前主机生成或复用 MDS keyring优先拷贝/etc/ceph/ceph.mds.keyring否则通过ceph auth get-or-create mds.$MDS_NAME ...生成最后以exec /usr/bin/ceph-mds -d -i ${MDS_NAME}方式将 MDS 进程提升为容器主进程。值得注意的是boot 脚本通过${ETCD_PATH:-/deis/store}支持 etcd 路径覆盖通过${ETCD_PORT:-4001}与$HOST组合出 etcd 服务地址运行环境由 systemd unit 注入。使用自定义 store-metadata 镜像官方文档提供了两种替换内置镜像的方式。从公共 Docker registry 拉取自定义镜像$ deisctl config store-metadata set imagemyaccount/myimage:latest从私有 registry 拉取自定义镜像$ deisctl config store-metadata set imageregistry.mydomain.org:5000/myaccount/myimage:latestdeisctl config命令把镜像地址写入 etcd 键/deis/store-metadata/image。从 deisctl/config/config.go 的实现看doConfig会以/deis/ target /作为根路径doConfigSet用正则^(.)([\s\S])$解析keyvar形式的参数后通过 etcd backend 写入。镜像的实际拉取与运行由 deisctl/units/deis-store-metadata.service 完成ExecStartPre/bin/sh -c IMAGE/run/deis/bin/get_image /deis/store-metadata docker history $IMAGE /dev/null 21 || flock -w 1200 /var/run/lock/store-pull docker pull $IMAGE ExecStart/bin/sh -c IMAGE/run/deis/bin/get_image /deis/store-metadata docker run --name deis-store-metadata --rm -e HOST$COREOS_PRIVATE_IPV4 --net host $IMAGE即 unit 从 etcd 读取/deis/store-metadata下的镜像配置先做拉取带 flock 锁防止并发拉取冲突再以--net host方式运行容器并把本机私网 IP 注入HOST环境变量。该 unit 带有Globaltruedeisctl/units/units.go与MachineMetadatacontrolPlanetruedecorators/deis-store-metadata.service.decorator约束即 store-metadata 只在控制平面节点上运行。自定义镜像的兼容性要求官方文档强调自定义镜像必须与 Deis 内置的 store-metadata 镜像仓库内实现位于 store/metadata行为一致核心约束是正确读写约定的 etcd 键。具体而言自定义镜像至少需要做到读取/deis/store/pgNum、adminKeyring、monKeyring、fsid、hosts/*、minSize、size等由 store-monitor 写入的键完成 Ceph 客户端配置与认证以/deis/store/filesystemSetupComplete作为 CephFS 初始化完成标记写入该键初始化者或等待该键非初始化者最终以 MDS 守护进程作为容器主进程否则 deis-store-metadata.service 的Restarton-failure策略会在主进程退出后反复重启容器。此外store/Makefile 的set-image目标展示了开发场景下如何将本地构建的镜像推送到私有 registry 并切换到自定义镜像set-image: check-deisctl deisctl config store-admin set image$(ADMIN_DEV_IMAGE) ... deisctl config store-metadata set image$(METADATA_DEV_IMAGE)其中METADATA_DEV_IMAGE $(REGISTRY)$(IMAGE_PREFIX)store-metadata:$(BUILD_TAG)。验证与运维参考集成测试覆盖了 store-metadata 的部署链路store/tests/store_test.go 中会以deis-store-metadata-tag名称创建并验证容器平台级安装/卸载/启动/停止命令在 deisctl/cmd/cmd.go 中统一调度store-metadata与其他 store 组件如deisctl start按 publisher → store-monitor → store-daemon → store-metadata 的顺序拉起见 deisctl/cmd/cmd_test.go 中的期望顺序断言组件整体定制文档还涉及 store-daemon、store-gateway、store-monitor 与 store_metadata 等姊妹篇调优 Ceph 集群参数时建议联动阅读。通过本文的 etcd 键约定与 boot 脚本流程分析你可以安全地替换 store-metadata 镜像、理解 CephFS 初始化时序并在排查“store-volume 无法挂载/写入”类问题时快速定位到/deis/store/filesystemSetupComplete这一关键状态键。赞分享后端云原生【免费下载链接】deisDeis v1, the CoreOS and Docker PaaS: Your PaaS. Your Rules.项目地址https://gitcode.com/gh_mirrors/de/deis点击查看免费下载相关推荐palera1n 完整教程A8 到 A11 设备如何快速越狱 iOS 15rootless 与 rootful 双模式指南palera1n 完整教程A8 到 A11 设备如何快速越狱 iOS 15rootless 与 rootful 双模式指南 palera1n 是基于 c后端云原生Deis deis-store Ceph 存储组件故障排查实战指南Deis deis store Ceph 存储组件故障排查实战指南 store 是 Deis v1 平台中最复杂的组件它将 Ceph 分布式存储的多个服务封装后端云原生Ceph MDS Journaling 深度解析CephFS 元数据日志机制、事件类型与配置调优Ceph MDS Journaling 深度解析CephFS 元数据日志机制、事件类型与配置调优 导读 本文以 Ceph 官方文档 doc/cephfs/md存储分布式文件系统对象存储后端高可用上一篇终极键盘重映射指南用SharpKeys免费定制你的Windows键盘布局下一篇Pyrite64逐对象材质覆盖实战同一个盒子模型如何做出3种不同颜色创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考