ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Rook 中的 CephRBDMirror CRD 完全指南:在 Kubernetes 中部署与配置 RBD 异步镜像守护进程

Rook 中的 CephRBDMirror CRD 完全指南:在 Kubernetes 中部署与配置 RBD 异步镜像守护进程 云原生存储容器编排运维【免费下载链接】rookStorage Orchestration for Kubernetes项目地址https://gitcode.com/gh_mirrors/roo/rook点击查看免费下载Rook 通过自定义资源定义CRDCephRBDMirror允许用户以声明式方式创建和更新 rbd-mirror 守护进程从而在两个 Ceph 集群之间实现 RBD块设备镜像的异步复制。本文基于仓库中的 ceph-rbd-mirror-crd.md 展开并结合 Rook 操作器源码与部署示例系统讲解CephRBDMirror的字段含义、最小部署、完整配置示例、镜像对等体的配置方法以及底层控制器的工作机制帮助你快速上手基于 Rook 的 RBD 跨集群灾备方案。背景什么是 RBD 镜像为什么要用 CephRBDMirrorRBD 镜像是 Ceph 提供的一种块级异步复制机制主集群primary中写入的 RBD 镜像数据会被持续、异步地复制到对端集群secondary/peer实现跨集群的数据冗余与灾难恢复。在 Kubernetes 环境中Rook 将这一能力封装为CephRBDMirror自定义资源操作器rook-ceph operator负责在集群中创建并维护 rbd-mirror 守护进程的 Deployment、Service、ConfigMap 等相关资源。从 API 定义看CephRBDMirror属于ceph.rook.io/v1组并注册了短名cephrbdm同时支持.status.phase列输出见 pkg/apis/ceph.rook.io/v1/types.go// kubebuilder:printcolumn:namePhase,typestring,JSONPath.status.phase // kubebuilder:printcolumn:nameAge,typedate,JSONPath.metadata.creationTimestamp // kubebuilder:subresource:status // kubebuilder:resource:shortNamecephrbdm type CephRBDMirror struct { metav1.TypeMeta json:,inline metav1.ObjectMeta json:metadata Spec RBDMirroringSpec json:spec Status *RBDMirrorStatus json:status,omitempty }关于 RBD 镜像的用户管理、能力capabilities与 Ceph 层面的概念细节请参考 Ceph 官方关于 rbd-mirroring 的文档本文聚焦 Rook 的 CRD 用法。快速开始创建一个最小 CephRBDMirror以下是一个最简单的示例部署 1 个 rbd-mirror 守护进程apiVersion: ceph.rook.io/v1 kind: CephRBDMirror metadata: name: my-rbd-mirror namespace: rook-ceph spec: count: 1应用后操作器会在rook-ceph命名空间内创建对应的 Deployment副本数即count的值。仓库自带的示例文件 deploy/examples/rbdmirror.yaml 给出了可kubectl create -f直接使用的完整版本。前置条件已按官方 Quickstart guide 创建好一个可用的 Rook Ceph 集群集群中已安装ceph.rook.io/v1的 CRD由 Rook operator 安装示例见 deploy/examples/crds.yaml两个集群之间的网络可达并且已互相交换镜像对等信息peer token见下文配置镜像对等体。CephRBDMirror 完整配置字段解析如果某个字段未指定Rook 会自动使用合适的默认值。完整的可用字段定义在 pkg/apis/ceph.rook.io/v1/types.go 的RBDMirroringSpec中同时 deploy/examples/rbdmirror.yaml 提供了带注释的实战样例。metadata名称与命名空间nameCephRBDMirror 资源的名称用于标识该 rbd-mirror 守护进程组也是生成下属资源名称的依据。namespaceRook 集群所在的 Kubernetes 命名空间。操作器创建的服务、Pod 及其他资源都会放入该命名空间通常与CephCluster同命名空间如rook-ceph。specRBDMirror 设置spec下各字段含义如下字段类型说明默认行为countint要运行的 rbd-mirror 实例数量必填最小值 1CRD 校验Minimum1peersobject对等体配置见下文配置镜像对等体可选placementobject标准 Kubernetes 调度约束nodeAffinity、tolerations、podAffinity、podAntiAffinity用法与 CephCluster CRD 中 daemon 的 placement 一致默认放置到任意可用节点annotationsmap要添加到 Pod 相关对象上的键值对注解可选labelsmap要添加到 Pod 相关对象上的键值对标签可选resourcesobjectrbd-mirror Pod 的资源请求与限制requests/limits可选priorityClassNamestring设置到 rbd-mirror Pod 上的 PriorityClass 名称可选完整示例取自 deploy/examples/rbdmirror.yamlapiVersion: ceph.rook.io/v1 kind: CephRBDMirror metadata: name: my-rbd-mirror namespace: rook-ceph # namespace:cluster spec: # 要部署的 rbd-mirror 守护进程数量 count: 1 # 存放 peer token 的 Kubernetes Secret 名称列表 # 关于 bootstrap peers 的更多细节见 Ceph 官方文档 #peers: # secretNames: # - secondary-cluster-peer # 应用到 rbd-mirror Deployment 的亲和性规则 placement: # nodeAffinity: # requiredDuringSchedulingIgnoredDuringExecution: # nodeSelectorTerms: # - matchExpressions: # - key: role # operator: In # values: # - rbd-mirror-node # tolerations: # - key: rbd-mirror-node # operator: Exists # podAffinity: # podAntiAffinity: # 键值对形式的注解列表 annotations: # key: value resources: # requests 与 limits例如允许 rbd-mirror Pod 使用半个 CPU 核心和 1GiB 内存 limits: memory: 1Gi requests: cpu: 500m memory: 1Gi # priorityClassName: my-priority-class字段的实际生效路径源码视角从控制器实现看spec中各个字段会直接映射到底层 Deployment 的构建过程。在 pkg/operator/ceph/cluster/rbd/spec.go 的makeDeployment中count被转换为 Deployment 的Replicasreplicas : int32(rbdMirror.Spec.Count)placement通过rbdMirror.Spec.Placement.ApplyToPodSpec(podSpec.Spec)应用到 Pod 模板annotations/labels分别应用到 Pod 模板对象元数据与 Deployment 对象元数据priorityClassName直接写入 Pod 模板的PriorityClassName同时还会自动追加不可达节点容忍AddUnreachableNodeToleration若集群开启了日志采集LogCollector.Enabled则会注入日志收集 sidecar 容器镜像守护进程的日志文件过滤规则为*-client.rbd-mirror*。配置镜像对等体Mirroring Peersrbd-mirror 守护进程本身并不直接决定镜像哪些数据、镜像到哪里——真正的镜像策略peer 关系、镜像模式是在存储池级别配置的。Rook 将 peer 配置分别挂载到两类资源上CephBlockPool为每个块存储池单独配置镜像对等体详见 CephBlockPool 文档 中的 mirroring 小节CephBlockPoolRadosNamespace为池内每个 RADOS 命名空间单独配置镜像对等体详见 CephBlockPoolRadosNamespace 文档 中的 mirroring 小节。在 CephRBDMirror 中引用 peer Secret在CephRBDMirror的spec.peers.secretNames中列出包含 peer token 的 Kubernetes Secret 名称操作器便会尝试将这些 Secret 中的对等信息引导bootstrap到守护进程。MirroringPeerSpec的定义如下见 types.go// MirroringPeerSpec represents the specification of a mirror peer type MirroringPeerSpec struct { // SecretNames represents the Kubernetes Secret names to add rbd-mirror or cephfs-mirror peers SecretNames []string json:secretNames,omitempty }对应的辅助方法HasPeers()见 pkg/apis/ceph.rook.io/v1/mirror.go通过检查SecretNames是否非空来判断是否存在需要连接的 peer// HasPeers returns whether the RBD mirror daemon has peer and should connect to it func (m *MirroringPeerSpec) HasPeers() bool { return len(m.SecretNames) ! 0 }在控制器协调流程中见 pkg/operator/ceph/cluster/rbd/controller.go操作器会先调用reconcileAddBootstrapPeer完成 peer 引导再创建守护进程 Deployment。因此如果使用池级镜像pool mode必须先通过CephBlockPool/CephBlockPoolRadosNamespace配置好 peer 与镜像模式再部署或更新CephRBDMirror使守护进程接入对端集群。在存储池上启用镜像配套操作虽然CephRBDMirror只负责守护进程本身但完整的镜像方案离不开池侧配置。在 deploy/examples/pool.yaml 中可以看到CephBlockPool的镜像与健康检查配置mirroring: enabled: false # 镜像模式pool池级或 image每镜像 # 更多细节见 Ceph 官方 rbd-mirroring 文档 mode: image # 指定快照的调度计划 # snapshotSchedules: # - interval: 24h # 每日快照 # startTime: 14:00:00-05:00 # 开启时上报池镜像状态 statusCheck: mirror: disabled: false interval: 60s对应 API 类型MirroringSpec见 types.go支持enabled是否启用池镜像mode镜像模式合法值为pool、image、init-onlyCRD 枚举校验snapshotSchedules镜像快照调度计划SnapshotScheduleSpec包含interval周期如24h、startTime起始时间含时区偏移如14:00:00-05:00、path仅 CephFS 有效peers池级 peer 配置。当snapshotSchedules非空时SnapshotSchedulesEnabled()返回 true见 pool.go操作器会据此创建对应的快照调度。控制器工作原理从 CR 到运行中的守护进程CephRBDMirror由名为ceph-rbd-mirror-controller的 controller-runtime 控制器驱动见 pkg/operator/ceph/cluster/rbd/controller.go。它 watch 以下对象CephRBDMirrorCR 本身变化触发协调由该 CR 拥有的Service、ConfigMap、Deploymentowned 资源变化时通过TypedEnqueueRequestForOwner触发父对象重新协调。每次Reconcile的核心步骤见 controller.go获取并初始化状态拉取CephRBDMirror对象若Status为空则初始化Cephx状态字段。校验 spec调用validateSpec不合法则立即重试并上报失败状态。等待 CephCluster 就绪如果同命名空间的CephCluster尚未就绪则延迟重试。加载集群信息与版本检测读取ClusterInfo对比运行中与期望的 Ceph 版本若集群正处于升级过程中mon 版本与期望版本不一致则等待升级完成再继续避免在升级窗口创建守护进程外部集群模式除外。引导 peerreconcileAddBootstrapPeer将peers.secretNames指向的 Secret 中的对端 token 引导进守护进程。cephx 密钥轮换检查根据CephCluster的安全配置判断是否需要对守护进程密钥进行轮换。创建/更新 DeploymentreconcileCreateCephRBDMirror→start→makeDeployment生成最终 Deployment 并应用到集群。更新状态将Status.Phase置为 Ready写入ObservedGeneration与 cephx 状态。这一流程保证了 CR 声明与集群实际状态的一致性修改count、placement、resources等字段后操作器会自动滚动更新对应 Deployment无需人工干预。验证与运维建议使用kubectl -n rook-ceph get cephrbdm或完整名cephrbdmirror查看 CR 状态其中Phase列反映协调结果使用kubectl -n rook-ceph get deployment -l approok-ceph-rbd-mirror检查守护进程副本是否就绪池级镜像的健康状态可通过CephBlockPool的statusCheck.mirror默认每 60s 上报一次配合 Ceph 监控体系 观察排障时可借助 Ceph toolbox 执行rbd mirror pool status pool查看对端状态与延迟。小结CephRBDMirror是 Rook 承载 RBD 跨集群异步镜像能力的核心 CRD它以count声明守护进程规模以placement/resources/annotations/labels/priorityClassName控制调度与资源并通过peers.secretNames接入对端集群而具体的镜像策略模式、快照调度、peer 关系由CephBlockPool与CephBlockPoolRadosNamespace在池级别配置。两者配合即可在 Kubernetes 上构建一套声明式、可版本控制的 RBD 灾备复制方案。赞分享云原生存储容器编排运维【免费下载链接】rookStorage Orchestration for Kubernetes项目地址https://gitcode.com/gh_mirrors/roo/rook点击查看免费下载相关推荐Rook 中 CephFilesystemMirror CRD 完全指南在 Kubernetes 上部署与配置 cephfs-mirror 异步复制守护进程Rook 中 CephFilesystemMirror CRD 完全指南在 Kubernetes 上部署与配置 cephfs mirror 异步复制守护进程云原生存储容器编排运维Rook CephBlockPool CRD 完全指南Ceph RBD 存储池的声明式配置、副本/纠删码与镜像实践Rook CephBlockPool CRD 完全指南Ceph RBD 存储池的声明式配置、副本/纠删码与镜像实践 导读 本文以 Rook 项目中的 Ceph云原生存储容器编排运维FoundationDB Kubernetes Monitor 完全指南在 Kubernetes 中启动与守护 fdbserver 进程FoundationDB Kubernetes Monitor 完全指南在 Kubernetes 中启动与守护 fdbserver 进程 导读 fdb kub分布式数据库KV存储数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表