官方网站:https://rook.io/docs/rook/v1.10/Getting-Started/intro/

Ceph 部署条件

为了配置 Ceph 存储集群,至少需要以下本地存储类型之一:
- 原始设备(无分区或格式化文件系统)
- 原始分区(无格式化文件系统)
- LVM 逻辑卷(无格式化文件系统)
- block模式下存储类可用的持久卷
---
#如果该FSTYPE字段不为空,则表示相应设备上有一个文件系统。在此示例中,您可以使用vdb但不能使用vda或其分区。
$ lsblk -f
NAME                  FSTYPE      LABEL UUID                                   MOUNTPOINT
vda
└─vda1                LVM2_member       >eSO50t-GkUV-YKTH-WsGq-hNJY-eKNf-3i07IB
  ├─ubuntu--vg-root   ext4              c2366f76-6e21-4f10-a8f3-6776212e2fe4   /
  └─ubuntu--vg-swap_1 swap              9492a3dc-ad75-47cd-9596-678e8cf17ff9   [SWAP]
vdb

安装LVM包(Ceph OSD部分场景依赖)

sudo yum install -y lvm2

加载RBD模块

1.加载 rbd 模块后,你就可以使用 rbd 命令行工具或相关的库来管理和操作 RBD 块设备。

2.RBD 块设备可以用于各种用途,包括创建虚拟机磁盘镜像、分布式文件系统等。加载 rbd 内核模块后,系统就能够识别和处理与 RBD 块设备相关的请求和操作。

modprobe rbd
lsmod | grep rbd

部署 Rook Operator

$ git clone --single-branch --branch v1.10.13 https://github.com/rook/rook.git
cd rook/deploy/examples
#关闭自动发现新增磁盘
vim operator.yaml
ROOK_ENABLE_DISCOVERY_DAEMON: "false"

#扫描发现磁盘间隔
- name: ROOK_DISCOVER_DEVICES_INTERVAL
value: "60s"
kubectl create -f crds.yaml -f common.yaml -f operator.yaml

# verify the rook-ceph-operator is in the `Running` state before proceeding
kubectl -n rook-ceph get pod |grep operator

拉取镜像

#查看需要的镜像列表
cat rook/deploy/examples/images.txt
#docker pull quay.io/ceph/ceph:v17.2.5
#docker pull quay.io/cephcsi/cephcsi:v3.7.2
#docker pull quay.io/csiaddons/k8s-sidecar:v0.5.0

#docker pull rook/ceph:v1.10.13
#docker pull registry.k8s.io/sig-storage/csi-attacher:v4.1.0
#docker pull registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.7.0
#docker pull registry.k8s.io/sig-storage/csi-provisioner:v3.4.0
#docker pull registry.k8s.io/sig-storage/csi-resizer:v1.7.0
#docker pull registry.k8s.io/sig-storage/csi-snapshotter:v6.2.1
--------------------


#!/bash/bin
docker pull quay.io/ceph/ceph:v17.2.5
docker pull quay.io/cephcsi/cephcsi:v3.7.2
docker pull quay.io/csiaddons/k8s-sidecar:v0.5.0

docker pull rook/ceph:v1.10.13
image_list=(
csi-attacher:v4.1.0
csi-node-driver-registrar:v2.7.0
csi-provisioner:v3.4.0
csi-resizer:v1.7.0
csi-snapshotter:v6.2.1
)

aliyuncs="registry.aliyuncs.com/it00021hot"
google_gcr="registry.k8s.io/sig-storage"
for image in ${image_list[*]}
do
  docker image pull ${aliyuncs}/${image}
  docker image tag ${aliyuncs}/${image} ${google_gcr}/${image}
  docker image rm ${aliyuncs}/${image}
  echo "${aliyuncs}/${image} ${google_gcr}/${image} downloaded."
done

配置集群磁盘信息

[root@test11 examples]# vim cluster.yaml
【1】修改useAllNodes和useAllDevices的true为false
  storage: # cluster level storage configuration and selection
    useAllNodes: false
    useAllDevices: false
#useAllNodes: true 表示将使用集群中的所有节点作为存储节点。这意味着存储将在集群中的每个节点上进行分布,以提供更好的容量和冗余。(比如有5台节点,只需要其中三台作为存储节点)
#useAllDevices: true 表示将使用节点上的所有设备作为存储设备。这包括节点上的所有硬盘、SSD 或其他可用的存储设备。通过使用所有设备,可以最大化存储资源的利用和性能。

【2】添加osd磁盘
    config:
      # crushRoot: "custom-root" # specify a non-default root label for the CRUSH map
      # metadataDevice: "md0" # specify a non-rotational storage so ceph-volume will use it as block db device of bluestore.
      ###磁盘小于100G取消注释###
      databaseSizeMB: "1024" # uncomment if the disks are smaller than 100 GB
      ###磁盘小于20G取消注释###
      journalSizeMB: "1024"  # uncomment if the disks are 20 GB or smaller
      # osdsPerDevice: "1" # this value can be overridden at the node or device level
      # encryptedDevice: "true" # the default value for this option is "false"
# Individual nodes and their config can be specified as well, but 'useAllNodes' above must be set to false. Then, only the named
# nodes below will be used as storage resources.  Each node's 'name' field should match their 'kubernetes.io/hostname' label.
    nodes:
    ###添加磁盘,name添加hostname,磁盘为没有格式化的裸盘###
    - name: "test11"
      devices:
      - name: "sdc"
    - name: "test12"
      devices:
      - name: "sdb"
    - name: "test13"
      devices:
      - name: "sdb"
    onlyApplyOSDPlace ment: false
    
    
【3】关闭dashboard的ssl选项
  dashboard:
    enabled: true
    # serve the dashboard under a subpath (useful when you are accessing the dashboard via a reverse proxy)
    # urlPrefix: /ceph-dashboard
    # serve the dashboard at the given port.
    # port: 8443
    ###如果使用http端口配置为7000,使用https不用修改,默认8443。
    port: 7000
    # serve the dashboard using SSL   
    #改成false 
    ssl: false

数据存储类型

- name: "test11"
        device:
        - name: "sdc"
          config:
            storeType: bluestore
filestore(默认)
: 这是 Ceph 的传统存储后端,默认情况下在 Rook Ceph 中不推荐使用。它将数据存储在文件系统中,并使用对象存储的方式来管理数据。
bluestore
: 这是 Rook Ceph 推荐的存储后端,默认情况下在 Rook Ceph 中使用。它直接将数据存储在块设备中,提供更好的性能、可靠性和可扩展性。

创建 Ceph 集群

kubectl create -f cluster.yaml

安装客户端工具

kubectl  create -f toolbox.yaml -n rook-ceph

查看集群状态

kubectl  get po -n rook-ceph -l app=rook-ceph-tools
kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
ceph status

安装ceph dashboard

#可以选择创建http和https的svc
#kubectl apply -f dashboard-external-https.yaml
kubectl apply -f  dashboard-external-http.yaml
#账户admin,获取密码
kubectl -n rook-ceph get secret rook-ceph-dashboard-password -o jsonpath="{['data']['password']}"|base64 --decode && echo

###块存储方案###

#这个配置文件包含了两个资源:CephBlockPool和StorageClass
kubectl  create -f rook/deploy/examples/csi/rbd/storageclass.yaml
kubectl get CephBlockPool -n rook-ceph && kubectl get StorageClass |grep rook-ceph-block
#创建pvc测试
kubectl  create -f rook/deploy/examples/csi/rbd/pvc.yaml
kubectl  create -f rook/deploy/examples/csi/rbd/pod.yaml

###分布式文件存储方案###

kubectl apply -f rook/deploy/examples/filesystem.yaml
kubectl apply -f rook/deploy/examples/csi/cephfs/storageclass.yaml
#创建pvc测试
kubectl apply -f rook/deploy/examples/csi/cephfs/pvc.yaml
kubectl apply -f rook/deploy/examples/csi/cephfs/pod.yaml
kubectl -n rook-ceph get pod -l app=rook-ceph-mds

常用命令

#获取 Ceph 存储集群的整体状态信息
ceph status
#获取 Ceph 存储集群中 OSD 的状态信息
ceph osd status
#查看osd的树状结构
ceph osd tree
#查看osd详细信息,上一步查出来的,比如0,可以看到那块磁盘<bluestore_bdev_dev_node>
ceph osd metadata <osd-id>
#获取 Ceph 存储集群的分布式文件系统(CephFS)的容量和使用情况
ceph df 
#获取 Ceph 存储集群中 RADOS的容量和使用情况。PS:RADOS是 Ceph 存储集群的核心组件,它是一个高度可扩展、分布式的对象存储系统,用于存储和管理 Ceph 存储集群中的数据
rados df
#查看osd磁盘信息
ceph osd df