# 使用Rook安装Ceph#

本文介绍了如何使用Rook在Kubernetes上部署Ceph存储解决方案。首先,阐述了Ceph和Rook的基本概念,Rook作为Ceph的管理工具简化了存储管理。接着,详细讲述了Rook部署的步骤,包括准备、修改YAML文件和部署过程。最后,讨论了RBD和CEPHFS的使用,以实现分布式存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、ROOK介绍

Ceph 是一种高度可扩展的分布式存储解决方案,适用于块存储对象存储共享文件系统,经过多年的生产部署。

Rook 使 Ceph 存储系统能够使用 Kubernetes 原语在 Kubernetes 上运行。下图展示了 Ceph Rook 如何与 Kubernetes 集成:

img

通过在 Kubernetes 集群中运行 Ceph,Kubernetes 应用程序可以挂载由 Rook 管理的块设备和文件系统,或者可以使用 S3/Swift API 进行对象存储。Rook 操作员可自动配置存储组件并监控集群,以确保存储保持可用且正常运行。

Rook Operator 是一个简单的容器,拥有引导和监控存储集群所需的一切。操作员将启动和监控Ceph 监控 pod、Ceph OSD 守护进程以提供 RADOS 存储,以及启动和管理其他 Ceph 守护进程。操作员通过初始化 Pod 和运行服务所需的其他工件来管理池、对象存储 (S3/Swift) 和文件系统的 CRD。

操作员将监控存储守护进程以确保集群健康。Ceph mon 将在必要时启动或进行故障转移,并随着集群的增长或收缩而进行其他调整。操作员还将监视 api 服务请求的所需状态更改并应用更改。

Rook 操作员还初始化消耗存储所需的代理。Rook 会自动配置 Ceph-CSI 驱动程序以将存储安装到您的 Pod。Rook 的 Flex 驱动程序也可用,但默认情况下并未启用,并且很快就会被弃用,取而代之的是 CSI 驱动程序。

img

rook/ceph映像包含管理集群所需的所有工具 - 数据路径没有变化。Rook 并不试图与 Ceph 保持完全的忠诚。许多 Ceph 概念(例如放置组和挤压图)都是隐藏的,因此您不必担心它们。相反,Rook 在物理资源、池、卷、文件系统和存储桶方面为管理员创建了更加简化的用户体验。同时,可以在需要时使用 Ceph 工具应用高级配置。

Rook是用golang实现的。Ceph 采用 C++ 实现,其中数据路径经过高度优化。我们相信这种组合可以带来两全其美的效果。

二、Rook部署

2.1准备

2.1.1先决条件

Rook 可以安装在任何现有的 Kubernetes 集群上,只要它满足最低版本并且 Rook 被授予所需的权限(更多信息请参见下文)。如果您没有 Kubernetes 集群,您可以使用Minikube、Kubeadm或CoreOS/Vagrant快速设置一个集群。

最低版本:Rook 支持Kubernetes v1.11或更高版本。如果您使用的是 K8s 1.15 或更早版本,则需要创建不同版本的 Rook CRD。

K8S集群的worker节点需要至少有一个空闲的块设备作为Ceph的OSD

2.1.2环境准备

组件名称 版本
操作系统 Kylin Linux Advanced Server V10 (Lance)
内核 Linux ky-k8s-1 4.19.90-52.22.v2207.ky10.aarch64
K8S v1.22.8
Ceph v15.2.13
Rook v1.6.11

注意:安装时间同步服务,所有节点必须保证时间一致。

2.2修改yaml文件

2.2.1修改cluster.yaml

apiVersion: ceph.rook.io/v1
kind: CephCluster
metadata:
  name: rook-ceph
  namespace: rook-ceph
spec:
  cephVersion:
    image: hb-arm.test.cs/rook/ceph:v15.2.13
    allowUnsupported: false
  dataDirHostPath: /var/lib/rook
  skipUpgradeChecks: false
  continueUpgradeAfterChecksEvenIfNotHealthy: false
  waitTimeoutForHealthyOSDInMinutes: 10
  mon:
    count: 3
    allowMultiplePerNode: false
  mgr:
    count: 1
    modules:
      - name: pg_autoscaler
        enabled: true
  dashboard:
    enabled: true
    ssl: false
  monitoring:
    enabled: false
    rulesNamespace: rook-ceph
  network:
  crashCollector:
    disable: false
  cleanupPolicy:
    confirmation: ""
    sanitizeDisks:
      method: quick
      dataSource: zero
      iteration: 1
    allowUninstallWithVolumes: false
  placement:
    mon:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-mon
              operator: In
              values:
              - enabled
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      - key: ceph-mon
        operator: Exists
     
    osd:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: ceph-osd
              operator: In
              values:
              - enabled
      toleration
<think>好的,用户现在想了解Rook安装Ceph组件的解释。之前他遇到了删除Ceph集群时存储池卡在Progressing状态的问题,现在可能是在尝试重新安装或理解各个组件的作用。需要先回顾之前的对话,确保回答的一致性和连贯性。 首先,用户现在的问题是关于Rook安装Ceph各个组件的功能,这可能是因为他在重建集群时想更深入了解各个部分的作用,以便避免之前的问题再次发生。需要详细解释RookCeph的关系,以及每个组件在Kubernetes中的角色。 接下来,用户可能希望了解每个组件的作用,比如Operator、Monitor、OSD、Manager等,这些是Ceph集群的核心部分。同时,用户可能对存储池、工具容器、CSI驱动等辅助组件也感兴趣,因为这些可能影响集群的运作和问题排查。 需要注意的是,用户之前遇到了删除存储池的问题,因此在解释组件时,可以适当关联到之前的问题,比如Finalizer的作用,或者存储池如何被Rook管理。此外,用户可能需要知道如何正确安装和配置这些组件,以避免再次出现卡住的情况。 在回答结构上,应该分层次介绍每个组件,说明其功能和在Kubernetes中的部署方式。同时,可以补充安装后的验证步骤,帮助用户确认安装是否成功。如果有常见问题或注意事项,也应该提及,比如资源需求、数据持久化等,帮助用户避免常见错误。 最后,需要确保语言清晰,技术术语解释到位,但不过于复杂。用户可能具备一定的Kubernetes和Ceph知识,但作为运维人员,可能需要直接的解决方案和明确的组件职责说明。需要保持回答的实用性和指导性,帮助用户顺利重建集群并理解各个部分的作用。</think>--- ### **Rook 部署 Ceph 的组件解析** Rook 是一个 Kubernetes 原生的存储编排工具,用于自动化部署和管理 Ceph 集群。以下是 Rook 安装 Ceph 时涉及的核心组件及其作用: --- #### **1. Rook Operator** - **功能**: - 核心控制器,负责监听 Kubernetes 中 Ceph 相关的自定义资源(CRD),如 `CephCluster`、`CephBlockPool` 等。 - 协调 Ceph 集群的生命周期(创建、扩缩容、升级、修复)。 - **部署形式**: ```yaml Deployment:rook-ceph-operator(位于 `rook-ceph` 命名空间) ``` - **关键行为**: - 根据 `CephCluster` CR 配置生成 Ceph 的 `ceph.conf` 和密钥环。 - 自动创建 Monitors、OSDs、Managers 等 Ceph 守护进程的 Pod。 --- #### **2. Ceph Monitors (MON)** - **功能**: - Ceph 集群的“大脑”,维护集群状态(Cluster Map)和元数据。 - 通过 Paxos 算法保证一致性,处理客户端连接请求。 - **部署形式**: ```yaml Pod:rook-ceph-mon-<id>(例如 `rook-ceph-mon-a`, `rook-ceph-mon-b`) ``` - **配置要点**: - 通常部署奇数个(如 3 个)以实现高可用。 - 数据存储在 `rook-ceph-mon` 的 PersistentVolume 中(默认使用 `hostPath` 或 StorageClass)。 --- #### **3. Ceph OSDs(对象存储守护进程)** - **功能**: - 实际存储数据的组件,管理物理磁盘或存储设备。 - 负责数据副本、恢复和再平衡。 - **部署形式**: ```yaml Pod:rook-ceph-osd-<id>-<hash>(例如 `rook-ceph-osd-0-abcde`) ``` - **配置要点**: - 每个 OSD 对应一个磁盘或目录(通过 `spec.storage.nodes` 定义)。 - OSD 数据持久化到 PV(需预先准备裸磁盘或 StorageClass)。 --- #### **4. Ceph Manager (MGR)** - **功能**: - 提供集群监控和管理接口(如 Dashboard、Prometheus 指标)。 - 处理计费、日志记录等扩展功能。 - **部署形式**: ```yaml Pod:rook-ceph-mgr-a-<hash> ``` - **关键组件**: - **Dashboard**:通过 Service `rook-ceph-mgr-dashboard` 暴露 Web 界面。 - **Prometheus Exporter**:提供 `/metrics` 端点供监控系统采集。 --- #### **5. Ceph Metadata Server (MDS)** - **功能**: - 仅当使用 **CephFS**(文件存储)时部署。 - 管理文件系统的元数据(目录结构、权限等)。 - **部署形式**: ```yaml Pod:rook-ceph-mds-<fs_name>-<id>(例如 `rook-ceph-mds-myfs-a`) ``` --- #### **6. Ceph RGW(对象存储网关)** - **功能**: - 提供兼容 S3 和 Swift 的 API,用于对象存储。 - 通过 Service `rook-ceph-rgw-<store_name>` 暴露服务。 - **部署形式**: ```yaml Pod:rook-ceph-rgw-<store_name>-<hash> ``` --- ### **辅助组件** #### **1. Ceph 工具箱(Tools Pod)** - **功能**: - 提供 `ceph`、`rbd`、`rados` 等命令行工具,用于手动管理集群。 - **部署形式**: ```bash Deployment:rook-ceph-tools ``` - **访问方式**: ```bash kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash ``` #### **2. CSI 驱动** - **功能**: - 提供 Kubernetes CSI 接口,动态创建 PVC/PV。 - 包含以下组件: - **Provisioner**:`csi-rbdplugin-provisioner-*` - **Node Plugin**:`csi-rbdplugin-*` - **存储类型支持**: - **RBD**(块存储):用于 PVC 动态供给。 - **CephFS**(文件存储):需额外部署 `csi-cephfsplugin-*`。 --- #### **3. 存储池(Pool)** - **定义方式**: - 通过 `CephBlockPool` CR 创建(块存储池)。 - 示例: ```yaml apiVersion: ceph.rook.io/v1 kind: CephBlockPool metadata: name: replicapool namespace: rook-ceph spec: failureDomain: host # 故障域级别(host/rack/zone) replicated: size: 3 # 副本数 ``` --- ### **安装流程概述** 1. **部署 Rook Operator** ```bash kubectl apply -f rook-operator.yaml ``` 2. **创建 CephCluster CR** - 定义集群规模、存储设备、网络等配置。 3. **Rook Operator 自动创建组件** - 按顺序启动 Monitors → OSDs → Managers → 其他组件(如 MDS/RGW)。 4. **验证集群健康状态** ```bash kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s ``` --- ### **关键注意事项** 1. **资源需求**: - MON Pod 需要至少 2GB 内存;OSD 每个进程需 2-4GB 内存。 2. **存储准备**: - 提前为 OSD 准备好裸磁盘或独立 StorageClass。 3. **网络配置**: - Ceph 的公共网络(`public_network`)和集群网络(`cluster_network`)需分离以提升性能。 4. **数据持久化**: - 避免使用 `hostPath` 存储 MON 数据(生产环境推荐 PVC)。 --- ### **常见问题排查方向** 1. **OSD 未启动**: - 检查节点磁盘是否已初始化(未被文件系统占用)。 - 查看 OSD 日志:`kubectl -n rook-ceph logs -l app=rook-ceph-osd` 2. **MON 选举失败**: - 确认时钟同步(NTP 服务正常)。 3. **PVC 挂载失败**: - 检查 CSI Driver 日志:`kubectl -n rook-ceph logs -l app=csi-rbdplugin` 如果需要进一步分析您的集群状态,请提供以下信息: 1. `kubectl -n rook-ceph get pods` 的输出 2. `CephCluster` CR 的完整 YAML 定义 3. Ceph 工具箱中 `ceph health detail` 的结果
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值