云原生-rook-ceph
Rook 是 CNCF 孵化的 Kubernetes 存储编排项目,通过 Operator 模式将 Ceph 等存储系统与 Kubernetes 深度整合。本文介绍使用 Rook 在 Kubernetes 集群上部署 Ceph 存储,并创建 RBD 块存储和 CephFS 文件系统的操作步骤。
安装
$ git clone --single-branch --branch v1.14.0 https://github.com/rook/rook.git
cd rook/deploy/examples
kubectl create -f crds.yaml -f common.yaml -f operator.yaml
kubectl create -f cluster.yaml创建RBD存储
$ kubectl create -f deploy/examples/csi/rbd/storageclass.yaml创建CpehFS文件系统
- 创建文件系统
# filesystem.yaml
apiVersion: ceph.rook.io/v1
kind: CephFilesystem
metadata:
name: myfs
namespace: rook-ceph
spec:
metadataPool:
replicated:
size: 3
dataPools:
- name: replicated
replicated:
size: 3
preserveFilesystemOnDelete: true
metadataServer:
activeCount: 1
activeStandby: true$ kubectl create -f filesystem.yaml
# 要确认文件系统已配置,请等待 mds pod 启动
$ kubectl -n rook-ceph get pod -l app=rook-ceph-mds
NAME READY STATUS RESTARTS AGE
rook-ceph-mds-myfs-7d59fdfcf4-h8kw9 1/1 Running 0 12s
rook-ceph-mds-myfs-7d59fdfcf4-kgkjp 1/1 Running 0 12s
# 调配存储,创建storageclass
$ kubectl create -f deploy/examples/csi/cephfs/storageclass.yaml创建RGW存储
- 创建本地对象存储
创建对象存储
$ kubectl create -f object.yamlobject.yaml
apiVersion: ceph.rook.io/v1
kind: CephObjectStore
metadata:
name: my-store
namespace: rook-ceph
spec:
metadataPool:
failureDomain: host
replicated:
size: 3
dataPool:
failureDomain: host
# For production it is recommended to use more chunks, such as 4+2 or 8+4
erasureCoded:
dataChunks: 2
codingChunks: 1
preservePoolsOnDelete: true
gateway:
sslCertificateRef:
port: 80
# securePort: 443
instances: 1要确认对象存储已配置,请等待 RGW pod 启动:
$ kubectl -n rook-ceph get pod -l app=rook-ceph-rgw创建存储桶
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: rook-ceph-bucket
# Change "rook-ceph" provisioner prefix to match the operator namespace if needed
provisioner: rook-ceph.ceph.rook.io/bucket
reclaimPolicy: Delete
parameters:
objectStoreName: my-store
objectStoreNamespace: rook-ceph$ kubectl create -f storageclass-bucket-delete.yaml创建桶的回收策略
apiVersion: objectbucket.io/v1alpha1
kind: ObjectBucketClaim
metadata:
name: ceph-bucket
spec:
generateBucketName: ceph-bkt
storageClassName: rook-ceph-bucket$ kubectl create -f object-bucket-claim-delete.yaml告警记录
最近有一个或多个Ceph守护进程崩溃,管理员尚未对该崩溃进行存档(确认)。这可能表示软件错误、硬件问题(例如,故障磁盘)或某些其它问题。
[root@master ~]# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
bash-4.4$ ceph status
cluster:
id: 2517bd08-ceed-40ad-9e90-44dbfd3e6968
health: HEALTH_WARN
2 daemons have recently crashed
services:
mon: 3 daemons, quorum a,b,c (age 2h)
mgr: a(active, since 2h), standbys: b
mds: 1/1 daemons up, 1 hot standby
osd: 3 osds: 3 up (since 2h), 3 in (since 13d)
rgw: 1 daemon active (1 hosts, 1 zones)
data:
volumes: 1/1 healthy
pools: 12 pools, 169 pgs
objects: 2.12k objects, 6.2 GiB
usage: 23 GiB used, 277 GiB / 300 GiB avail
pgs: 169 active+clean
io:
client: 1.2 KiB/s rd, 1.2 MiB/s wr, 2 op/s rd, 67 op/s wr系统中所有的崩溃可以通过以下方式列出:
bash-4.4$ ceph crash ls
ID ENTITY NEW
2024-04-10T13:16:13.626137Z_f7c0ffe9-a989-46ef-9118-73d198416610 mds.myfs-a *
2024-04-15T22:44:59.790580Z_4f5bfed0-b8fa-46f8-bdcd-99ab9a6f51aa client.ceph-exporter * 新的崩溃可以通过以下方式列出:
bash-4.4$ ceph crash ls-new有关特定崩溃的信息可以通过以下方式检查:
bash-4.4$ ceph crash info 2024-04-10T13:16:13.626137Z_f7c0ffe9-a989-46ef-9118-73d198416610
{
"backtrace": [
"/lib64/libpthread.so.0(+0x12d20) [0x7f804afa8d20]",
"pthread_getname_np()",
"(ceph::logging::Log::dump_recent()+0x4b8) [0x7f804c5d13f8]",
"(MDSDaemon::respawn()+0x12b) [0x55f29e036bdb]",
"(Context::complete(int)+0xd) [0x55f29e03d5fd]",
"(MDSRank::respawn()+0x1c) [0x55f29e047b8c]",
"ceph-mds(+0x1c193c) [0x55f29e04e93c]",
"(Context::complete(int)+0xd) [0x55f29e03d5fd]",
"(Finisher::finisher_thread_entry()+0x18d) [0x7f804c29cabd]",
"/lib64/libpthread.so.0(+0x81ca) [0x7f804af9e1ca]",
"clone()"
],
"ceph_version": "18.2.2",
"crash_id": "2024-04-10T13:16:13.626137Z_f7c0ffe9-a989-46ef-9118-73d198416610",
"entity_name": "mds.myfs-a",
"os_id": "centos",
"os_name": "CentOS Stream",
"os_version": "8",
"os_version_id": "8",
"process_name": "ceph-mds",
"stack_sig": "815ea341707935b686a2542f788995258f33af401574b0f9475fed8863812dd1",
"timestamp": "2024-04-10T13:16:13.626137Z",
"utsname_hostname": "rook-ceph-mds-myfs-a-944c69db9-bxx4d",
"utsname_machine": "x86_64",
"utsname_release": "5.4.273-1.el7.elrepo.x86_64",
"utsname_sysname": "Linux",
"utsname_version": "#1 SMP Wed Mar 27 15:58:08 EDT 2024"
}可以通过“存档”崩溃(可能是在管理员检查之后)来消除此警告,从而不会生成此警告:
bash-4.4$ ceph crash archive 2024-04-10T13:16:13.626137Z_f7c0ffe9-a989-46ef-9118-73d198416610同样,所有新的崩溃都可以通过以下方式存档:
bash-4.4$ ceph crash archive-all通过ceph crash ls仍然可以看到已存档的崩溃,但不是ceph crash ls-new即可看到。
默认 recent 是两周,这个参数可以通过 mgr/crash/warn_recent_interval 修改
检查ceph crash配置的recent间隔值
bash-4.4$ ceph config get mgr mgr/crash/warn_recent_interval
1209600彻底关闭ceph crash记录近期告警
bash-4.4$ ceph config set mgr mgr/crash/warn_recent_interval 0磁盘空间不足报错,已用空间大于70%
[root@master ~]# kubectl -n rook-ceph exec -it deploy/rook-ceph-tools -- bash
bash-4.4$ ceph status
cluster:
id: 2517bd08-ceed-40ad-9e90-44dbfd3e6968
health: HEALTH_WARN
mon c is low on available space
services:
mon: 3 daemons, quorum a,b,c (age 90m)
mgr: a(active, since 4w), standbys: b
mds: 1/1 daemons up, 1 hot standby
osd: 3 osds: 3 up (since 4w), 3 in (since 6w)
rgw: 1 daemon active (1 hosts, 1 zones)
data:
volumes: 1/1 healthy
pools: 12 pools, 169 pgs
objects: 3.16k objects, 10 GiB
usage: 33 GiB used, 267 GiB / 300 GiB avail
pgs: 169 active+clean
io:
client: 1.2 KiB/s rd, 2 op/s rd, 0 op/s wr最后更新于