一 概述
1.1 背景
近期进行公司业务容器化改造,在为 kubernetes 提供存储选型方面,在选型中本地存储不可跨 node,NFS 共享存储不好做高可用,因此选型 Ceph 来为 k8s 提供存储类。特此笔记以备后用。
1.2 概述
Ceph 是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。Ceph 是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架 openstack 或 cloudstack 整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN 存储、NAS 存储等。可以作为 k8s 的存储类,来方便容器持久化存储。
1.3 支持格式
1.4 优势
1.5 核心组件
二 安装部署
2.1 主机信息
| 主机名 | 操作系统 | 配置 | K8S 组件 | CEPH 组件 | 私网 IP | SSH 端口 | 用户名密码 |
| ------ | ---------------- | --------------- | ------- | -------------- | ----------- | ------- | --------------------- |
| master | CentOS 7.4 64bit | 4C8G + 500G 硬盘 | | admin,osd, mon | 172.16.60.2 | 2001/22 | root/uWWKxxxxxxcuh |
| node01 | CentOS 7.4 64bit | 4C8G + 500G 硬盘 | | osd, mon | 172.16.60.3 | 2002/22 | root/IZ5lxxxxxxxQOkLh |
| node02 | CentOS 7.4 64bit | 4C8G + 500G 硬盘 | | osd, mon | 172.16.60.4 | 2003/22 | root/nUMFxxxxxxzDMcE |
2.2 磁盘准备
需要在三台主机创建磁盘,并挂载到主机的/var/local/osd{0,1,2}
[root@master ~]# mkfs.xfs /dev/vdc[root@master ~]# mkdir -p /var/local/osd0[root@master ~]# mount /dev/vdc /var/local/osd0/
[root@node01 ~]# mkfs.xfs /dev/vdc[root@node01 ~]# mkdir -p /var/local/osd1[root@node01 ~]# mount /dev/vdc /var/local/osd1/
[root@node02 ~]# mkfs.xfs /dev/vdc [root@node02 ~]# mkdir -p /var/local/osd2[root@node02 ~]# mount /dev/vdc /var/local/osd2/
将磁盘添加进入fstab中,确保开机自动挂载
复制代码
2.3 配置各主机 hosts 文件
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4::1 localhost localhost.localdomain localhost6 localhost6.localdomain6172.16.60.2 master172.16.60.3 node01172.16.60.4 node02
复制代码
2.4 管理节点 ssh 免密钥登录 node1/node2
[root@master ~]# ssh-keygen -t rsa[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node01[root@master ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub root@node02
复制代码
2.5 master 节点安装 ceph-deploy 工具
# 各节点均更新ceph的yum源vim /etc/yum.repos.d/ceph.repo
[ceph]name=cephbaseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/gpgcheck=0priority =1[ceph-noarch]name=cephnoarchbaseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/gpgcheck=0priority =1[ceph-source]name=Ceph source packagesbaseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/SRPMSgpgcheck=0priority=1
# 安装ceph-deploy工具yum clean all && yum makecacheyum -y install ceph-deploy
复制代码
2.6 创建 monitor 服务
创建 monitor 服务,指定 master 节点的 hostname
[root@master ~]# mkdir /etc/ceph && cd /etc/ceph[root@master ceph]# ceph-deploy new master[root@master ceph]# lltotal 12-rw-r--r-- 1 root root 195 Sep 3 10:56 ceph.conf-rw-r--r-- 1 root root 2915 Sep 3 10:56 ceph-deploy-ceph.log-rw------- 1 root root 73 Sep 3 10:56 ceph.mon.keyring
[root@master ceph]# cat ceph.conf [global]fsid = 5b9eb8d2-1c12-4f6d-ae9c-85078795794bmon_initial_members = mastermon_host = 172.16.60.2auth_cluster_required = cephxauth_service_required = cephxauth_client_required = cephxosd_pool_default_size = 2
配置文件的默认副本数从3改成2,这样只有两个osd也能达到active+clean状态,把下面这行加入到[global]段(可选配置)
复制代码
2.7 所有节点安装 ceph
# 各节点安装软件包yum -y install yum-plugin-priorities epel-release# master节点利用ceph-deply 部署ceph
[root@master ceph]# ceph-deploy install master node01 node02
[root@master ceph]# ceph --versionceph version 10.2.11 (e4b061b47f07f583c92a050d9e84b1813a35671e)
复制代码
2.8 部署相关服务
# 安装ceph monitor[root@master ceph]# ceph-deploy mon create master
# 收集节点的keyring文件[root@master ceph]# ceph-deploy gatherkeys master
# 创建osd[root@master ceph]# ceph-deploy osd prepare master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2
# 权限修改[root@master ceph]# chmod 777 -R /var/local/osd{0..2}[root@master ceph]# chmod 777 -R /var/local/osd{0..2}/*
# 激活osd[root@master ceph]# ceph-deploy osd activate master:/var/local/osd0 node01:/var/local/osd1 node02:/var/local/osd2
# 查看状态[root@master ceph]# ceph-deploy osd list master node01 node02
复制代码
2.9 统一配置
用 ceph-deploy 把配置文件和 admin 密钥拷贝到所有节点,这样每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了
[root@master ceph]# ceph-deploy admin master node01 node02
# 各节点修改ceph.client.admin.keyring权限:[root@master ceph]# chmod +r /etc/ceph/ceph.client.admin.keyring
# 查看状态[root@master ceph]# ceph healthHEALTH_OK[root@master ceph]# ceph -s cluster 5b9eb8d2-1c12-4f6d-ae9c-85078795794b health HEALTH_OK monmap e1: 1 mons at {master=172.16.60.2:6789/0} election epoch 3, quorum 0 master osdmap e15: 3 osds: 3 up, 3 in flags sortbitwise,require_jewel_osds pgmap v27: 64 pgs, 1 pools, 0 bytes data, 0 objects 15681 MB used, 1483 GB / 1499 GB avail 64 active+clean
复制代码
2.10 部署 MDS 服务
我们在 node01/node02 上安装部署 MDS 服务
[root@master ceph]# ceph-deploy mds create node01 node02
# 查看状态[root@master ceph]# ceph mds state3:, 2 up:standby[root@master ~]# ceph mon state1: 1 mons at {master=172.16.60.2:6789/0}, election epoch 4, quorum 0 master
# 查看服务[root@master ceph]# systemctl list-unit-files |grep cephceph-create-keys@.service static ceph-disk@.service static ceph-mds@.service disabledceph-mon@.service enabled ceph-osd@.service enabled ceph-radosgw@.service disabledceph-mds.target enabled ceph-mon.target enabled ceph-osd.target enabled ceph-radosgw.target enabled ceph.target enabled
复制代码
至此,基本上完成了 ceph 存储集群的搭建。
三 创建 ceph 文件系统
3.1 创建文件系统
关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:
少于 5 个 OSD 时可把 pg_num 设置为 128
OSD 数量在 5 到 10 个时,可把 pg_num 设置为 512
OSD 数量在 10 到 50 个时,可把 pg_num 设置为 4096
OSD 数量大于 50 时,你得理解权衡方法、以及如何自己计算 pg_num 取值
自己计算 pg_num 取值时可借助 pgcalc 工具
随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显著地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。
[root@master ceph]# ceph osd pool create cephfs_data <pg_num> [root@master ceph]# ceph osd pool create cephfs_metadata <pg_num>
[root@master ~]# ceph osd pool ls rbd[root@master ~]# ceph osd pool create kube 128pool 'kube' created[root@master ~]# ceph osd pool ls rbdkube
# 查看证书[root@master ~]# ceph auth listinstalled auth entries:
mds.node01 key: AQB56m1dE42rOBAA0yRhsmQb3QMEaTsQ71jHdg== caps: [mds] allow caps: [mon] allow profile mds caps: [osd] allow rwxmds.node02 key: AQB66m1dWuhWKhAAtbiZN7amGcjUh6Rj/HNFkg== caps: [mds] allow caps: [mon] allow profile mds caps: [osd] allow rwxosd.0 key: AQA46W1daFx3IxAAE1esQW+t1fWJDfEQd+167w== caps: [mon] allow profile osd caps: [osd] allow *osd.1 key: AQBA6W1daJG9IxAAQwETgrVc3awkEZejDSaaow== caps: [mon] allow profile osd caps: [osd] allow *osd.2 key: AQBI6W1dot4/GxAAle3Ii3/D38RmwNC4yTCoPg== caps: [mon] allow profile osd caps: [osd] allow *client.admin key: AQBu4W1d90dZKxAAH/kta03cP5znnCcWeOngzQ== caps: [mds] allow * caps: [mon] allow * caps: [osd] allow *client.bootstrap-mds key: AQBv4W1djJ1uHhAACzBcXjVoZFgLg3lN+KEv8Q== caps: [mon] allow profile bootstrap-mdsclient.bootstrap-mgr key: AQCS4W1dna9COBAAiWPu7uk3ItJxisVIwn2duA== caps: [mon] allow profile bootstrap-mgrclient.bootstrap-osd key: AQBu4W1dxappOhAA5FanGhQhAOUlizqa5uMG3A== caps: [mon] allow profile bootstrap-osdclient.bootstrap-rgw key: AQBv4W1dpwvsDhAAyp58v08XttJWzLoHWVHZow== caps: [mon] allow profile bootstrap-rgw
复制代码
3.2 创建客户端密钥
# 创建keyring[root@master ~]# ceph auth get-or-create client.kube mon 'allow r' osd 'allow rwx pool=kube' -o /etc/ceph/ceph.client.kube.keyring[root@master ~]# ceph auth list
# 将密钥拷贝到node1和node2[root@master ceph]# scp ceph.client.kube.keyring root@node01:/etc/ceph/
复制代码
四 卸载
清理机器上的ceph相关配置:停止所有进程: stop ceph-all卸载所有ceph程序:ceph-deploy uninstall [{ceph-node}]删除ceph相关的安装包:ceph-deploy purge {ceph-node} [{ceph-data}]删除ceph相关的配置:ceph-deploy purgedata {ceph-node} [{ceph-data}]删除key:ceph-deploy forgetkeys
卸载ceph-deploy管理:yum -y remove ceph-deploy
复制代码
参考链接
评论