基于k8s的ceph集群搭建
环境
- master-139 mon,osd 既做管理节点又做子节点
- node1-140 mon,osd 做子节点
- node2-141 mon,osd 做子节点
- ceph 版本 13.2.10 mimic (stable)
系统配置
系统配置工作, 三台节点依次执行
1、修改主机名称
1
2
| [root@master-139 ~]# vi /etc/hostname
master-139
|
2、编辑hosts文件
1
2
3
| 10.4.7.139 master-139
10.4.7.140 node1-140
10.4.7.141 node2-141
|
注意, 这里面的主机名称要和节点名称保持一致, 否则安装的时候会出现问题
3.修改yum源
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| cat << EOF > /etc/yum.repos.d/ceph.repo
[ceph]
name=Ceph packages for $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/x86_64/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-noarch]
name=Ceph noarch packages
# 官方源
#baseurl=http://download.ceph.com/rpm-mimic/el7/noarch
# 清华源
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/noarch/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
[ceph-source]
name=Ceph source packages
baseurl=https://mirrors.tuna.tsinghua.edu.cn/ceph/rpm-mimic/el7/SRPMS/
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
EOF
|
4、安装ceph与ceph-deploy组件
1
2
3
| yum clean all && yum makecache
yum -y install python-setuptools epel-release
yum -y install python2-pip ceph-deploy ceph
|
5.安装NTP时间同步工具
1
| yum install ntp ntpdate ntp-doc -y
|
确保时区是正确, 设置开机启动:
并将时间每隔1小时自动校准同步。编辑 vi /etc/rc.d/rc.local 追加:
1
| /usr/sbin/ntpdate ntp1.aliyun.com > /dev/null 2>&1; /sbin/hwclock -w
|
配置定时任务, 执行crontab -e 加入:
免密码SSH登陆
6.开放端口, 非生产环境, 可以直接禁用防火墙:
1
2
| systemctl stop firewalld.service
systemctl disable firewalld.service
|
7.SELINUX设置
SELinux 设为禁用:
永久生效:
编辑 vi /etc/selinux/config 修改:
8.生成密钥
1
| 执行 ssh-keygen ,一直按默认提示点击生成 RSA 密钥信息。
|
9.分发密钥至各机器节点
1
2
3
| ssh-copy-id root@master-139
ssh-copy-id root@node1-140
ssh-copy-id root@node2-141
|
注意:以上1-9步骤在所有节点上执行!!
集群搭建配置
1.采用root身份进行安装,在管理节点创建集群配置目录
1
2
3
| cd /usr/local/
mkdir ceph-cluster
cd ceph-cluster
|
注意: 此目录作为 ceph 操作命令的基准目录, 会存储处理配置信息。
2.创建集群, 包含三台机器节点:
1
| ceph-deploy new master-139 node1-140 node2-141
|
创建成功后, 会生一个配置文件。
1
2
3
4
5
| [root@master-139 ceph-cluster]# ll
total 16
-rw-r--r-- 1 root root 242 May 15 03:15 ceph.conf
-rw-r--r-- 1 root root 5559 May 15 03:15 ceph-deploy-ceph.log
-rw------- 1 root root 73 May 15 03:15 ceph.mon.keyring
|
3.如果接下来集群的安装配置出现问题, 可以执行以下命令清除, 再重新安装(可选)
1
2
3
| ceph-deploy purge master-139 node1-140 node2-141
ceph-deploy purgedata master-139 node1-140 node2-141
ceph-deploy forgetkeys
|
4.将三台节点的mon信息也删除(可选)
5.修改配置文件, 有些配置后面需用到
1
2
3
4
5
6
7
8
9
10
11
12
| vi /usr/local/ceph-cluster/ceph.conf
[global]
# 设置pool池默认分配数量 默认副本数为3
osd pool default size = 3
# 容忍更多的时钟误差
mon clock drift allowed = 2
mon clock drift warn backoff = 30
# 允许删除pool
mon_allow_pool_delete = true
[mgr]
# 开启WEB仪表盘
mgr modules = dashboard
|
第一项为副本数, 设为 3 份。
第二、三项为允许一定时间的漂移误差。
设置完成后的配置如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| [global]
fsid = 67dcaf50-275b-442f-b69d-677fd8afcc94
mon_initial_members = master-139, node1-140, node2-141
mon_host = 10.4.7.139,10.4.7.140,10.4.7.141
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
# 设置pool池默认分配数量 默认副本数为3
osd pool default size = 3
# 容忍更多的时钟误差
mon clock drift allowed = 2
mon clock drift warn backoff = 30
# 允许删除pool
mon_allow_pool_delete = true
[mgr]
# 开启WEB仪表盘
mgr modules = dashboard
|
6.执行安装
1
| ceph-deploy install master-139 node1-140 node2-141
|
如果出现错误:
1
| ceph_deploy][ERROR ] RuntimeError: Failed to execute command: ceph --version
|
可以在各节点上单独进行安装:
如果没有仓库文件 ceph.repo , 按上面的步骤手工创建。
7.初始monitor信息
1
| ceph-deploy mon create-initial ## ceph-deploy --overwrite-conf mon create-initial
|
初始化后生成以下信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| [ceph_deploy.gatherkeys][INFO ] Storing ceph.client.admin.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mds.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-mgr.keyring
[ceph_deploy.gatherkeys][INFO ] keyring 'ceph.mon.keyring' already exists
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-osd.keyring
[ceph_deploy.gatherkeys][INFO ] Storing ceph.bootstrap-rgw.keyring
[ceph_deploy.gatherkeys][INFO ] Destroy temp directory /tmp/tmpuBxetx
[root@master-139 ceph-cluster]# ll
total 220
-rw------- 1 root root 113 May 15 03:29 ceph.bootstrap-mds.keyring
-rw------- 1 root root 113 May 15 03:29 ceph.bootstrap-mgr.keyring
-rw------- 1 root root 113 May 15 03:29 ceph.bootstrap-osd.keyring
-rw------- 1 root root 113 May 15 03:29 ceph.bootstrap-rgw.keyring
-rw------- 1 root root 151 May 15 03:29 ceph.client.admin.keyring
-rw-r--r-- 1 root root 529 May 15 03:22 ceph.conf
-rw-r--r-- 1 root root 167370 May 15 03:29 ceph-deploy-ceph.log
-rw------- 1 root root 73 May 15 03:22 ceph.mon.keyring
|
8.同步管理信息
下发配置文件和管理信息至各节点:
1
| ceph-deploy admin master-139 node1-140 node2-141
|
9.安装mgr(管理守护进程), 大于12.x版本需安装, 我们装的是最新版,需执行:
1
| ceph-deploy mgr create master-139 node1-140 node2-141
|
10.查看当前ceph版本
1
2
| # ceph -v
ceph version 13.2.10 (564bdc4ae87418a232fc901524470e1a0f76d641) mimic (stable)
|
以上操作都在管理节点master-139上执行!!
安装OSD(对象存储设备)
注意: 新版本的 OSD 没有 prepare 与 activate 命令。
这里需要新的硬盘作为 OSD 存储设备, 关闭虚拟机, 增加一块硬盘, 不用格式化。
各节点都添加100G硬盘。
重启, fdisk -l 查看新磁盘名称:
1
2
3
4
| Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
|
1.执行创建OSD命令
1
2
3
| ceph-deploy osd create --data /dev/sdb master-139
ceph-deploy osd create --data /dev/sdb node1-140
ceph-deploy osd create --data /dev/sdb node2-141
|
三台节点都需分别依次执行。
都切换到/usr/local/ceph-cluster下执行
1
| ceph-deploy gatherkeys master-139
|
2.验证节点:
输入 ceph health 或 ceph -s 查看, 出现 HEALTH_OK 代表正常。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| [root@master-139 ceph-cluster]# ceph -s
cluster:
id: 4f74ac9a-b5f5-4bf5-9107-15ab8ea41f76
health: HEALTH_OK
services:
mon: 3 daemons, quorum master-139,node1-140,node2-141
mgr: master-139(active), standbys: node1-140, node2-141
osd: 3 osds: 3 up, 3 in
data:
pools: 0 pools, 0 pgs
objects: 0 objects, 0 B
usage: 3.0 GiB used, 297 GiB / 300 GiB avail
pgs:
|
3.如果出现错误,各节点上执行,确保时间一致。
1
| ntpdate ntp1.aliyun.com
|
安装管理后台(可选)
1.开启dashboard模块
1
| ceph mgr module enable dashboard
|
2.生成签名
1
| ceph dashboard create-self-signed-cert
|
3.创建目录
1
2
3
| mkdir mgr-dashboard
[root@master-139 mgr-dashboard]# pwd
/usr/local/ceph-cluster/mgr-dashboard
|
4.生成密钥对
1
2
| cd /usr/local/ceph-cluster/mgr-dashboard
openssl req -new -nodes -x509 -subj "/O=IT/CN=ceph-mgr-dashboard" -days 3650 -keyout dashboard.key -out dashboard.crt -extensions v3_ca
|
5.启动dashboard
1
2
| ceph mgr module disable dashboard
ceph mgr module enable dashboard
|
6.设置IP与PORT
1
2
| ceph config set mgr mgr/dashboard/server_addr 10.4.7.139
ceph config set mgr mgr/dashboard/server_port 18843
|
注意:ip为管理节点的主IP
7.关闭HTTPS
1
| ceph config set mgr mgr/dashboard/ssl false
|
8.查看服务信息
1
2
3
4
| [root@master-139 mgr-dashboard]# ceph mgr services
{
"dashboard": "https://master-139:8443/"
}
|
9.设置管理用户与密码
1
| ceph dashboard set-login-credentials admin admin
|
10.访问
1
| http://10.4.7.139:18843
|
创建Cephfs
集群创建完后, 默认没有文件系统, 我们创建一个 Cephfs 可以支持对外访问的文件系统。
1.创建两个存储池, 执行两条命令
1
2
| ceph osd pool create cephfs_data 128
ceph osd pool create cephfs_metadata 64
|
少于 5 个 OSD 可把 pg_num 设置为 128
OSD 数量在 5 到 10 ,可以设置 pg_num 为 512
OSD 数量在 10 到 50 ,可以设置 pg_num 为 4096
OSD 数量大于 50 ,需要计算 pg_num 的值
通过下面命令可以列出当前创建的存储池:
1
2
3
| [root@master-139 ceph-cluster]# ceph osd lspools
1 cephfs_data
2 cephfs_metadata
|
2.创建fs, 名称为cephfs
1
| ceph fs new cephfs cephfs_metadata cephfs_data
|
3.状态查看, 以下信息代表正常
1
2
3
4
| [root@master-139 ceph-cluster]# ceph fs ls
name: cephfs, metadata pool: cephfs_metadata, data pools: [cephfs_data ]
[root@haproxy ceph-cluster]# ceph mds stat
cephfs-1/1/1 up {0=haproxy=up:active}, 1 up:standby
|
这里mds如果只显示cephfs-1/1/1 up 后面没内容说明mds没创建需要手动创建。如果不创建后面ceph挂载会报错。提示mds不存在。
1
2
3
4
5
6
7
8
| [root@master-139 ceph-cluster]# ceph mds stat
cephfs-0/0/1 up
#挂载时报错信息
[root@node1-140 ceph-cluster]# ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 10.4.7.139:6789 /usr/local/cephfs_directory
ceph-fuse[42676]: starting ceph client
2022-05-15 03:43:48.136 7f84eb7cac00 -1 init, newargv = 0x561dca3c0240 newargc=7
ceph-fuse[42676]: probably no MDS server is up?
ceph-fuse[42676]: ceph mount failed with (65536) Unknown error 65536
|
手动创建mds
1
| ceph-deploy mds create master-139 node1-140 node2-141
|
附: 如果创建错误, 需要删除, 执行:
1
2
| ceph fs rm cephfs --yes-i-really-mean-it
ceph osd pool delete cephfs_data cephfs_data --yes-i-really-really-mean-it
|
确保在ceph.conf中开启以下配置:
1
| [mon] mon allow pool delete = true
|
采用fuse挂载
先确定 ceph-fuse 命令能执行, 如果没有, 则安装:
1
| yum -y install ceph-fuse
|
1.创建挂载目录
1
| mkdir -p /usr/local/cephfs_directory
|
2.挂载cephfs
1
| ceph-fuse -k /etc/ceph/ceph.client.admin.keyring -m 10.4.7.139:6789 /usr/local/cephfs_directory
|
3.查看磁盘挂载信息
/usr/local/cephfs_directory 目录已成功挂载。
1
2
| [root@node1-140 ceph-cluster]# df -hT | grep cephfs
ceph-fuse fuse.ceph-fuse 94G 0 94G 0% /usr/local/cephfs_directory
|
注意查看当前ceph 的主节点是谁。三台机器中如果有一台突然宕机,然后又恢复了。此时出问题的那台将成为主节点。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [root@node1-140 ceph-cluster]# ceph -s
cluster:
id: 4f74ac9a-b5f5-4bf5-9107-15ab8ea41f76
health: HEALTH_OK
services:
mon: 3 daemons, quorum master-139,node1-140,node2-141
mgr: master-139(active), standbys: node1-140, node2-141
mds: cephfs-1/1/1 up {0=master-139=up:active}, 2 up:standby
osd: 3 osds: 3 up, 3 in
data:
pools: 2 pools, 192 pgs
objects: 21 objects, 2.2 KiB
usage: 3.0 GiB used, 297 GiB / 300 GiB avail
pgs: 192 active+clean
io:
client: 5.0 KiB/s wr, 0 op/s rd, 9 op/s wr
|
active的是主节点, standbys是备用节点。
ceph常用命令
ceph
1
2
3
4
5
6
7
8
| # 查看机器的监控状态
ceph health
# 查看ceph的实时运行状态
ceph -w
# 检查信息状态信息
ceph -s
# 查看ceph存储空间
ceph df
|
ceph认证
创建管理用户
为ceph创建一个admin用户并为admin用户创建一个密钥,把密钥保存到/etc/ceph目录下:
1
2
3
| ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' > /etc/ceph/ceph.client.admin.keyring
或
ceph auth get-or-create client.admin mds 'allow' osd 'allow *' mon 'allow *' -o /etc/ceph/ceph.client.admin.keyring
|
为osd.0创建一个用户并创建一个key
1
| ceph auth get-or-create osd.0 mon 'allow rwx' osd 'allow *' -o /var/lib/ceph/osd/ceph-0/keyring
|
为mds.node1创建一个用户并创建一个key
1
| ceph auth get-or-create mds.node1 mon 'allow rwx' osd 'allow *' mds 'allow *' -o /var/lib/ceph/mds/ceph-node1/keyring
|
查看ceph集群中的认证用户及相关的key
删除集群中的一个认证用户
集群相关
1
2
3
4
5
6
| # 查看集群的详细配置
ceph daemon mon.node1 config show | more
# 查看集群健康状态细节
ceph health detail
# 查看ceph log日志所在的目录
ceph-conf --name mon.node1 --show-config-value log_file
|
mon命令
1
2
3
4
5
6
7
8
9
10
11
| ceph mon stat#查看mon的状态信息
ceph mon dump#查看你ceph映射信息
ceph mon remove node1 #删除一个mon节点 ceph-deploy mon destroy {host-name [host-name]...}
ceph mon add node1 node1_ip #添加一个mon节点 ceph-deploy mon create {host-name [host-name]...}
mon节点的/var/lib/ceph/mon/ceph-node2/store.db文件内容一致,添加mon注意先改配置目录配置文件,再推送到所有节点
ceph-deploy --overwrite-conf config push node1 node2 node3
|
mds命令
1
2
3
4
5
6
7
| ceph mds stat #查看msd状态
ceph mds dump #msd的映射信息
ceph mds rm 0 mds.node1#删除一个mds节点
ceph-deploy mds create {host-name}[:{daemon-name}] [{host-name}[:{daemon-name}] ...]
|
osd命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
| ceph osd stat #查看osd状态
ceph osd dump #osd的映射信息
ceph osd tree#查看osd目录树
ceph osd down 0 #down掉osd.0节点
ceph osd rm 0#集群删除一个osd硬盘
ceph osd crush remove osd.4#删除标记
ceph osd getmaxosd#查看最大osd个数
ceph osd setmaxosd 10#设置osd的个数
ceph osd out osd.3#把一个osd节点逐出集群
ceph osd in osd.3#把逐出的osd加入集群
ceph osd pause#暂停osd (暂停后整个集群不再接收数据)
ceph osd unpause#再次开启osd (开启后再次接收数据)
ceph osd lspools#查看ceph集群中的pool数量
ceph osd pool create jiayuan 100#创建一个pool 这里的100指的是PG组
ceph osd pool delete jiayuan jiayuan --yes-i-really-really-mean-it #集群名字需要重复两次
rados df#显示集群中pool的详细信息
ceph osd pool get data pg_num #查看data池的pg数量
ceph osd pool set data target_max_bytes 100000000000000#设置data池的最大存储空间为100T(默认是1T)
ceph osd pool set data size 3 #设置data池的副本数是3
ceph osd pool set data min_size 2 #设置data池能接受写操作的最小副本为2
ceph osd pool set data pg_num 100#设置一个pool的pg数量
ceph osd pool set data pgp_num 100#设置一个pool的pgp数量
|
pg命令
1
2
3
4
5
6
7
8
9
| ceph pg stat#查看pg状态
ceph pg dump#查看pg组的映射信息
ceph pg map 0.3f#查看一个pg的map
ceph pg 0.26 query#查看pg详细信息
ceph pg dump --format plain#显示一个集群中的所有的pg统计
|
rados和rbd命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| rados lspools#查看ceph集群中有多少个pool (只是查看pool)
rados df #查看ceph集群中有多少个pool,并且每个pool容量及利用情况
rados mkpool test#创建一个pool
rados create test-object -p test#创建一个对象object
rados rm test-object-1 -p test#删除一个对象object
rados -p test ls
rbd ls pool_name#查看ceph中一个pool里的所有镜像
rbd info -p pool_name --image 74cb427c-cee9-47d0-b467-af217a67e60a #查看ceph pool中一个镜像的信息
rbd create -p test --size 10000 zhanguo#在test池中创建一个命名为zhanguo的10000M的镜像
rbd rm -p test lizhanguo #删除一个镜像
rbd resize -p test --size 20000 zhanguo #调整一个镜像的尺寸
|
CRUSH映射
1
2
3
4
5
6
7
| ceph osd getcrushmap -o MAP #获取一个CRUSH映射
crushtool -d MAP -o MAP.TXT #反编译一个CRUSH映射
crushtool -c MAP.TXT -o MAP #编译一个CRUSH映射
ceph osd setcrushmap -i MAP #设置一个CRUSH映射
|
块设备的一些命令
单位为M,默认在rbd pool中
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| 创建块设备:rbd create {image-name} --size {megabytes} --pool {pool-name}
列出块设备:rbd ls {poolname} -l
检索块信息:rbd --image {image-name} info
更改块大小:rbd resize --image {image-name} --size {megabytes}
删除块设备:rbd rm {image-name}
映射块设备:rbd map {image-name} --pool {pool-name} --id {user-name}
查看已映射块设备:rbd showmapped
取消映射:rbd unmap /dev/rbd/{poolname}/{imagename}
|
快照和克隆相关命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| 创建快照:
rbd --pool {pool-name} snap create --snap {snap-name} {image-name}
rbd snap create {pool-name}/{image-name}@{snap-name}
快照回滚:
rbd --pool {pool-name} snap rollback --snap {snap-name} {image-name}
rbd snap rollback {pool-name}/{image-name}@{snap-name}
清除快照:
rbd --pool {pool-name} snap purge {image-name}
rbd snap purge {pool-name}/{image-name}
删除快照:
rbd --pool {pool-name} snap rm --snap {snap-name} {image-name}
rbd snap rm {pool-name}/{image-name}@{snap-name}
列出快照:
rbd --pool {pool-name} snap ls {image-name}
rbd snap ls {pool-name}/{image-name}
保护快照:
rbd --pool {pool-name} snap protect --image {image-name} --snap {snapshot-name}
rbd snap protect {pool-name}/{image-name}@{snapshot-name}
取消保护快照:
rbd --pool {pool-name} snap unprotect --image {image-name} --snap {snapshot-name}
rbd snap unprotect {pool-name}/{image-name}@{snapshot-name}
快照克隆
rbd clone {pool-name}/{parent-image}@{snap-name} {pool-name}/{child-image-name}
查看快照的克隆
rbd --pool {pool-name} children --image {image-name} --snap {snap-name}
rbd children {pool-name}/{image-name}@{snapshot-name}
|
快照克隆相关例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| 创建快照:rbd snap create vms/yjk01@yjk01_s1
列出快照:rbd snap list --pool vms yjk01
快照回滚:rbd snap rollback vms/yjk01@yjk01_s1(先卸载已挂载目录)
删除快照:rbd snap rm vms/yjk01@yjk01_s2(单个)
清除快照:rbd snap purge vms/yjk01(所有)
保护快照:rbd snap protect vms/yjk01@yjk01_s1
取消保护:rbd snap unprotect vms/yjk01@yjk01_s1
快照克隆:rbd clone vms/yjk01@yjk01_s3 vms/yjk01_s3_clone1
查看克隆:rbd children vms/yjk01@yjk01_s3
克隆只能基于快照,并且只能快照处于保护状态,而且ceph仅支持克隆format 2映像。
|
日志文件汇总
mon ,mgr , osd 等安装报错信息均在对应日志文件中。
1
2
3
4
5
6
7
8
9
10
11
12
| /usr/local/ceph-cluster/ceph-deploy-ceph.log
# tree /var/log/ceph/
/var/log/ceph/
├── ceph.audit.log
├── ceph-client.admin.log
├── ceph.log
├── ceph-mds.haproxy.log
├── ceph-mgr.haproxy.log
├── ceph-mon.haproxy.log
├── ceph-osd.0.log
└── ceph-volume.log
|
参考文档
1
2
3
警告
本文最后更新于 July 22, 2023,文中内容可能已过时,请谨慎使用。