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),仅供参考

相关新闻

CMake 3.31 策略 CMP0178:测试命令行保留空参数(TEST_LAUNCHER 与 CROSSCOMPILING_EMULATOR)

CMake 3.31 策略 CMP0178:测试命令行保留空参数(TEST_LAUNCHER 与 CROSSCOMPILING_EMULATOR)

构建工具开发工具CLI 【免费下载链接】CMake Mirror of CMake upstream repository 项目地址: https://gitcode.com/gh_mirrors/cm/CMake 点击查看 免费下载 导读 CMP0178 是 CMake 3.31 引入的兼容性策略,核心变化是:由 add_test()、Exter…

2026/10/10 5:55:45 阅读更多 →
TVA具身智能系统简介(16):推演机制与数字物理融合逻辑

TVA具身智能系统简介(16):推演机制与数字物理融合逻辑

前沿技术探索:TVA智能体(简称TVA,亦称“TVA视觉智能体”或“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它深度融合深度强化学习(DRL)、卷积神经网络(C…

2026/10/10 5:55:45 阅读更多 →
TVA具身智能系统简介(18):高频柔顺与注意力协同原理

TVA具身智能系统简介(18):高频柔顺与注意力协同原理

前沿技术探索:TVA智能体(简称TVA,亦称“TVA视觉智能体”或“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的通用视觉技术框架。它深度融合深度强化学习(DRL)、卷积神经网络(C…

2026/10/10 5:55:45 阅读更多 →

最新新闻

从环境到上线:Vue项目实战与踩坑全指南

从环境到上线:Vue项目实战与踩坑全指南

干 Vue 这些年,见得最多的就是新手把环境配到一半就卡住,然后跑来问“为什么我 npm run dev 直接报错”“为什么 devtools 不显示”。其实 Vue 本身不难,难的是把生态里的一堆配套工具摸清楚,再踩过几个经典的坑。这篇文章我就按实…

2026/10/11 8:52:41 阅读更多 →
弹性扩容实战:流量洪峰下如何弹性伸缩与避坑

弹性扩容实战:流量洪峰下如何弹性伸缩与避坑

“老板,客户那边流量爆了,凌晨三点服务器扛不住,赶紧想想办法!”做云渠道这些年,这种电话我接过不止一次。所谓“业务流量洪峰”从来不是某个固定时刻准时到来,它可能来自一次大促、一场直播、一个热点事件…

2026/10/11 8:52:41 阅读更多 →
天地图403排查实战:Vue3部署与Nginx反代避坑指南

天地图403排查实战:Vue3部署与Nginx反代避坑指南

上周把vue3项目部署到线上服务器,第二天同事就找过来:“地图白屏了,控制台一片403。”我看了一眼浏览器Network面板,天地图的瓦片请求齐刷刷返回403 Forbidden。这个场景我太熟了,本地开发时地图还好好的,一…

2026/10/11 8:52:41 阅读更多 →
OpenClaw开源重制引擎:让经典老游戏在现代系统上重生

OpenClaw开源重制引擎:让经典老游戏在现代系统上重生

作为一个从小在街机厅和奔腾MMX电脑前泡大的老玩家,我太清楚那些经典老游戏如今有多难伺候了。系统不兼容、分辨率撕裂、画面抖得像中风,更别提把手里的手柄映射到一堆莫名其妙DirectDraw错误上。今天要聊的OpenClaw(圈子里的朋友们喜欢叫它“…

2026/10/11 8:52:41 阅读更多 →
Unity C#进阶:从缓存、对象池到事件驱动的性能优化实战

Unity C#进阶:从缓存、对象池到事件驱动的性能优化实战

在 Unity 项目里,“代码能跑”和“代码能撑住项目”是两回事。很多人写了一阵子 C# 脚本,功能都做出来了,但项目一到真机就发热、掉帧,或者场景稍微复杂一点就卡顿。这时候回头看代码,往往能找到一堆Update里反复GetCo…

2026/10/11 8:52:41 阅读更多 →
2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评

2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评

实时数据同步,是这两年企业数据建设里绕不开的一环。业务对实时性的要求越来越高——库存要实时、订单要实时、设备状态要实时,T1 的离线数仓在很多场景下已经不够用了。于是选型的问题摆在了面前:GoldenGate、Striim、SeaTunnel、FineDataLi…

2026/10/11 8:51:41 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →