官方网站: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