Rook 部署

该文提供了在Kubernetes(K8S)版本1.27.2上部署RookCeph存储集群的详细步骤,包括安装前的设备检查、准入控制器的启用、LVM包的安装以及Rook集群的配置和验证。此外,还涵盖了Ceph仪表板的部署、块存储(RBD)和共享文件系统(CephFS)的设置,以及环境清理和磁盘清理的步骤。

部署说明

官网:https://rook.io/

  • K8S版本1.27.2
  • rook 版本1.11.9

安装前准备

  • 原始设备(无分区或格式化文件系统)
  • 原始分区(无格式化文件系统)
  • LVM 逻辑卷(无格式化文件系统)
  • block模式下存储类可用的持久卷

使用以下命令确认分区或设备是否使用文件系统进行格式化

$ lsblk -f
NAME               FSTYPE      LABEL UUID                                   MOUNTPOINT
vdb                                                                         
sr0                                                                         
sda                                                                         
├─sda2             LVM2_member       3QT28B-YeEw-xCUK-0eT2-uBkn-pPcb-2OhWba 
│ ├─rootvg-lv_swap swap              c16f275f-59a8-4093-89ba-3a79bbf0bb59   
│ └─rootvg-lv_root xfs               67894aea-4d9f-4c9d-96cf-348db01eb647   /
└─sda1             xfs               68873398-4b99-4079-b0cb-65d6b9b3b896   /boot
vda   

如果该FSTYPE字段不为空,则表示相应设备上有一个文件系统

准入控制器

建议启用 Rook 准入控制器,以提供额外级别的验证,确保 Rook 已使用自定义资源 (CR) 设置正确配置。准入控制器会在对象持久化之前、请求经过身份验证和授权之后拦截对 Kubernetes API 服务器的请求。

要部署 Rook 准入控制器,请在安装 Rook 之前安装证书管理器

kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.11.1/cert-manager.yaml

安装LVM包

yum install -y lvm2

开始安装

kubectl使用以下命令和示例清单为 Kubernetes 创建一个简单的 Rook 集群

$ git clone --single-branch --branch v1.11.9 https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml

修改cluster.yaml配置

cd rook/deploy/examples
vim cluster.yaml
#     resources   生产环境尽量配置大一点,测试环境不用动。
#     useAllNodes: false   是否用所有节点      默认用所有
#     useAllDevices: false   是否用所有设备    默认用所有
#    nodes:    # 配置使用哪些硬盘做OSD
#      - name: "master01"
#        devices:
#          - name: "vda"
#          - name: "vdb"

修改完以后开始部署

kubectl create -f cluster.yaml

查看安装日志

## 你的pod名字和我的不一样
kubectl logs -n rook-ceph rook-ceph-operator-89d55f6b-k26xb -f

部署成功以后显示如下

[root@master01 examples]# kubectl get po -n rook-ceph 
NAME                                                 READY   STATUS      RESTARTS   AGE
csi-cephfsplugin-2qct5                               2/2     Running     0          18m
csi-cephfsplugin-9xrfm                               2/2     Running     0          18m
csi-cephfsplugin-provisioner-7f7874c95d-5t6rq        5/5     Running     0          18m
csi-cephfsplugin-provisioner-7f7874c95d-8pwj2        5/5     Running     0          18m
csi-cephfsplugin-ztng5                               2/2     Running     0          18m
csi-rbdplugin-flmcp                                  2/2     Running     0          18m
csi-rbdplugin-mp986                                  2/2     Running     0          18m
csi-rbdplugin-provisioner-5fdf9c49b6-td2hj           5/5     Running     0          18m
csi-rbdplugin-provisioner-5fdf9c49b6-wvk8m           5/5     Running     0          18m
csi-rbdplugin-wvf6v                                  2/2     Running     0          18m
rook-ceph-crashcollector-master01-74469b9c96-7l62m   1/1     Running     0          15m
rook-ceph-crashcollector-master02-7bc857bd7c-d5wqb   1/1     Running     0          15m
rook-ceph-crashcollector-master03-7ff94fd7f8-vnkr5   1/1     Running     0          15m
rook-ceph-mgr-a-7c7664444c-chn79                     3/3     Running     0          17m
rook-ceph-mgr-b-86d4f654fb-nzxr4                     3/3     Running     0          17m
rook-ceph-mon-a-f5d45c975-6rqc6                      2/2     Running     0          18m
rook-ceph-operator-cb6cb456c-qt55t                   1/1     Running     0          20m
rook-ceph-osd-0-64d78fffbf-phbjk                     2/2     Running     0          15m
rook-ceph-osd-1-87b66886f-pbnb7                      2/2     Running     0          15m
rook-ceph-osd-2-7546c786f5-6p8pz                     2/2     Running     0          15m
rook-ceph-osd-3-57bfff6657-frgx6                     2/2     Running     0          15m
rook-ceph-osd-4-69864d744d-zjqgq                     2/2     Running     0          15m
rook-ceph-osd-5-74f46b6cd7-zwfgv                     2/2     Running     0          15m
rook-ceph-osd-prepare-master01-rrg5z                 0/1     Completed   0          8m48s
rook-ceph-osd-prepare-master02-jmzjc                 0/1     Completed   0          8m44s
rook-ceph-osd-prepare-master03-26d6m                 0/1     Completed   0          8m39s

验证集群是否可用

# 部署工具箱
kubectl create -f deploy/examples/toolbox.yaml

# 等待工具箱 Pod 下载其容器并进入以下running状态
kubectl -n rook-ceph rollout status deploy/rook-ceph-tools

# rook-ceph-tools pod 运行后,您可以使用以下命令连接到它
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash

工具箱中的所有可用工具均已准备好满足您的故障排除需求。

示例:
ceph status
ceph osd status
ceph df
rados df

使用完工具箱后,您可以删除部署

kubectl -n rook-ceph delete deploy/rook-ceph-tools

或者直接敲命令也可以验证ceph集群是否可用

[root@master01 ~]# kubectl get CephCluster -n rook-ceph 
NAME        DATADIRHOSTPATH   MONCOUNT   AGE   PHASE   MESSAGE                        HEALTH      EXTERNAL   FSID
rook-ceph   /data/rook        3          200d   Ready   Cluster created successfully   HEALTH_OK              ac9b64f0-c26c-424e-8efe-fd561fbe0379

部署 Ceph 仪表板

下面几种方式任选一种

kubectl create -f deploy/examples/dashboard-ingress-https.yaml
kubectl create -f deploy/examples/dashboard-loadbalancer.yaml
kubectl create -f deploy/examples/dashboard-external-http.yaml

账号密码

# 默认账号:admin
# 密码通过下面的命令获取
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}" | base64 --decode && echo

部署块存储(RBD)

注意修改pvc回收方式

kubectl create -f rook/deploy/examples/csi/rbd/storageclass.yaml

部署共享文件系统(CephFS)

kubectl create -f rook/deploy/examples/filesystem.yaml
kubectl create -f rook/deploy/examples/csi/cephfs/storageclass.yaml

在K8S集群查看sc动态存储

[root@master01 examples]# kubectl get sc
NAME                  PROVISIONER                     RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
rook-ceph-rbd         rook-ceph.rbd.csi.ceph.com      Retain          Immediate           true                   150m
rook-cephfs           rook-ceph.cephfs.csi.ceph.com   Retain          Immediate           true                   7m39s
[root@master01 examples]#

清理CEPH环境

删除块和文件工件

cd rook/deploy/examples
kubectl delete -f ../wordpress.yaml
kubectl delete -f ../mysql.yaml
kubectl delete -n rook-ceph cephblockpool replicapool
kubectl delete storageclass rook-ceph-block
kubectl delete -f csi/cephfs/kube-registry.yaml
kubectl delete storageclass csi-cephfs

删除存储环境

kubectl delete -f cluster.yaml
kubectl delete -f crds.yaml -f common.yaml -f operator.yaml

删除K8S资源的时候如果卡到Termination这个状态

kubectl -n rook-ceph patch configmap rook-ceph-mon-endpoints --type merge -p '{"metadata":{"finalizers": []}}'
kubectl -n rook-ceph patch secrets rook-ceph-mon --type merge -p '{"metadata":{"finalizers": []}}'

删除所有节点配置文件

rm -rf /var/lib/rook/rook-ceph

重置所有存储节点的磁盘

DISK="/dev/sdX"

# Zap the disk to a fresh, usable state (zap-all is important, b/c MBR has to be clean)
sgdisk --zap-all $DISK

# Wipe a large portion of the beginning of the disk to remove more LVM metadata that may be present
dd if=/dev/zero of="$DISK" bs=1M count=100 oflag=direct,dsync

# SSDs may be better cleaned with blkdiscard instead of dd
blkdiscard $DISK

# Inform the OS of partition table changes
partprobe $DISK

Ceph 可以留下可以锁定磁盘的 LVM 和设备映射器数据,从而防止磁盘再次被使用。这些步骤有助于释放旧的 Ceph 磁盘以供重复使用。请注意,这只需要在每个节点上运行一次。如果您只有一个Rook 集群并且所有Ceph 磁盘都将被擦除,请运行以下命令。

# This command hangs on some systems: with caution, 'dmsetup remove_all --force' can be used
ls /dev/mapper/ceph-* | xargs -I% -- dmsetup remove %

# ceph-volume setup can leave ceph-<UUID> directories in /dev and /dev/mapper (unnecessary clutter)
rm -rf /dev/ceph-*
rm -rf /dev/mapper/ceph--*
<think>嗯,用户之前已经询问过关于Rook部署Ceph时出现的超时问题,现在他又问“rook部署ceph”,看起来可能是想了解更详细的部署步骤或者解决之前的问题。需要先回顾之前的对话,用户提到在云主机上使用三节点集群,遇到超时问题,可能资源不足或者网络配置问题。现在用户可能希望得到更全面的部署指南,或者确认之前的解决方案是否正确。 首先,用户可能对RookCeph的关系不太清楚,需要简要介绍Rook的作用,以及它在Kubernetes部署Ceph的优势。然后,分步骤说明部署流程,确保用户能够按部就班操作。同时,考虑到用户之前遇到的超时问题,应该在部署指南中强调资源需求、网络配置和存储准备的注意事项,这些都是之前问题可能的原因。 用户的环境是云主机的三节点,每个节点4核8G,可能在资源分配上存在瓶颈,所以在部署步骤中需要提醒用户调整资源配置,比如限制CPU和内存的使用,避免资源争抢。另外,云主机的网络设置可能比较复杂,需要确保端口开放和安全组规则正确,这也是之前日志中出现mon节点无法加入集群的原因之一。 用户可能还遇到存储配置的问题,比如是否使用了未格式化的磁盘,或者云盘性能不足。在部署指南中需要明确说明存储设备的准备,避免使用网络附加存储,推荐本地SSD,并给出示例配置。 另外,用户可能需要一些验证步骤,确认部署是否成功,比如检查Ceph集群状态、各个组件的Pod状态,以及如何通过工具Pod执行Ceph命令。这些步骤能帮助用户自主排查问题,减少后续的疑问。 最后,用户可能对常见问题比较关注,所以需要列出一些可能遇到的问题及解决方法,比如资源不足、网络不通、存储设备未识别等,特别是之前提到的超时问题,可以再次强调调整超时时间和资源配置的建议。 总结来说,用户的真实需求可能是希望获得一份详细的Rook部署Ceph的指南,同时包含之前遇到问题的解决方案,确保在部署过程中能够顺利执行,避免再次出现超时或其他错误。需要结构清晰,步骤明确,并针对云环境给出特定的注意事项,帮助用户顺利完成部署。</think>以下是使用 Rook 部署 Ceph 的完整指南,针对云主机环境优化,包含常见问题解决方案: --- ### 一、Rook/Ceph 架构核心组件 1. **Rook Operator**:Kubernetes 控制器,管理 Ceph 集群生命周期 2. **Ceph 核心服务**: - **MON** (Monitor):集群状态管理(需奇数节点,推荐 3 节点) - **OSD** (Object Storage Daemon):数据存储引擎 - **MGR** (Manager):监控和指标 - **MDS** (Metadata Server):为 CephFS 提供元数据服务 --- ### 二、部署前环境检查(云主机重点) #### 1. 硬件资源要求 | 组件 | 每节点最低要求 | 推荐配置 (生产) | |--------|----------------|------------------| | CPU | 2 核 | 4 核 | | 内存 | 4GB | 8GB | | 存储 | 1 块未格式化磁盘 | 3 块本地 SSD | *你的 4 核 8GB ×3 节点可运行测试集群,但需限制资源* #### 2. 网络要求 ```bash # 必须开放的端口 sudo ufw allow 6789/tcp # MON sudo ufw allow 6800-7300/tcp # OSD sudo ufw allow 9283/tcp # MGR # 检查节点间延迟(应 <1ms) ping <其他节点IP> -c 4 ``` #### 3. 存储准备 ```bash # 确认裸设备状态(示例输出) lsblk -f # 正确输出应显示无文件系统: NAME FSTYPE LABEL UUID MOUNTPOINT vdb ``` --- ### 三、部署步骤(Kubernetes 环境) #### 1. 部署 Rook Operator ```yaml # rook-operator.yaml apiVersion: v1 kind: Namespace metadata: name: rook-ceph --- apiVersion: helm.cattle.io/v1 kind: HelmChart metadata: name: rook-ceph namespace: kube-system spec: repo: https://charts.rook.io/release chart: rook-ceph version: v1.11.3 targetNamespace: rook-ceph ``` #### 2. 创建 Ceph 集群配置 ```yaml # cluster.yaml apiVersion: ceph.rook.io/v1 kind: CephCluster metadata: name: rook-ceph namespace: rook-ceph spec: dataDirHostPath: /var/lib/rook mon: count: 3 allowMultiplePerNode: false cephVersion: image: ceph/ceph:v17.2.6 dashboard: enabled: true storage: useAllNodes: false useAllDevices: false nodes: - name: "node1" devices: [{name: "vdb"}] - name: "node2" devices: [{name: "vdb"}] - name: "node3" devices: [{name: "vdb"}] resources: # 资源限制(适配你的配置) mon: limits: cpu: "1" memory: "2Gi" osd: limits: cpu: "1" memory: "4Gi" ``` #### 3. 应用配置 ```bash kubectl apply -f cluster.yaml ``` --- ### 四、部署后验证 #### 1. 检查 Pod 状态 ```bash watch kubectl -n rook-ceph get pods # 预期输出(部分): rook-ceph-mon-a-xxx 1/1 Running rook-ceph-osd-prepare-node1 0/1 Completed rook-ceph-mgr-a-xxx 1/1 Running ``` #### 2. 查看 Ceph 状态 ```bash kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- ceph -s # 健康状态应显示: health: HEALTH_OK mon: 3 daemons, quorum a,b,c osd: 3 osds: 3 up, 3 in ``` --- ### 五、云环境特殊配置 #### 1. 使用本地存储优化 ```yaml # 在 cluster.yaml 中添加: storageClass: allowUnsupported: true topologyAware: true nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/zone operator: In values: [ "us-west-2a" ] # 替换为实际区域 ``` #### 2. 调整超时参数 ```yaml healthCheck: daemonHealth: mon: interval: 45s timeout: 1200s # 云环境网络可能延迟较高 ``` --- ### 六、常见问题解决 #### 1. OSD 未启动 **现象**:`osd: X osds: X up, Y in` **解决**: ```bash # 检查设备权限 kubectl -n rook-ceph logs <osd-pod-name> # 若出现 "permission denied",添加特权模式: securityContext: privileged: true ``` #### 2. Dashboard 无法访问 ```bash # 创建 NodePort 服务 kubectl -n rook-ceph expose service rook-ceph-mgr-dashboard \ --name rook-ceph-dashboard-external --type NodePort ``` #### 3. 存储卷无法扩容 ```yaml # 修改 StorageClass 参数 allowVolumeExpansion: true parameters: csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner ``` --- ### 七、性能优化建议 1. **Bluestore 调参**(SSD 适用): ```yaml osd: storeType: bluestore databaseSizeMB: "2048" walSizeMB: "512" ``` 2. **网络优化**: ```bash # 设置 MTU(需所有节点一致) ip link set dev eth0 mtu 1400 ``` 3. **CRUSH Map 调整**: ```bash ceph osd crush tunable optimal ceph osd crush set-device-class ssd osd.0 osd.1 osd.2 ``` --- 通过以上步骤,可在云主机环境稳定部署 Rook/Ceph。若遇到具体错误,请提供完整日志和 `kubectl describe pod/<pod-name>` 输出进一步分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值