十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
在kubernetes 中,想实现 pod 数据的持久化。在调研的过程中,发现 ceph 在最近几年发展火热,也有很多案例落地企业。在选型方面,个人更加倾向于社区火热的项目,GlusterFS、Ceph 都在考虑的范围之内,但是由于 GlusterFS 只提供对象存储和文件系统存储,而 Ceph 则提供对象存储、块存储以及文件系统存储。怀着对新事物的向往,果断选择 Ceph 来实现 Ceph 块存储对接 kubernetes 来实现 pod 的数据持久化。
创新互联公司是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的10余年时间我们累计服务了上千家以及全国政企客户,如VR全景等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞扬。ceph是无中心化的存储,它没有管理节点、计算节点的之分。
ceph的文件是被分片的,每一个数据块是 一个对象,对象保存在不同的服务器上。当节点失效,自动迁移数据,重新复制副本。可以动态的添加元数据服务器和存储节点,容量可以动态扩展。
ceph分为mon监视器节点(至少一个)、osd对象存储节点(至少2个)、mds元数据节点。
osd 进程负责存储数据、处理数据的复制、恢复、回填、再平衡。并通过其他的osd守护进程的心跳,来向mon提供一些监控信息。当你设置osd有2个副本的时候,至少需要2个osd守护进程才能达到archive+clean的状态,默认有3个副本。
mon 负责维护集群状态的各种图表,包括监视图和osd图等。
mds 负责为ceph文件系统存储数据的时候才使用。
存储的过程 :存储的文件数据归类为对象object;对象放在对应的池子里面(pool);pool由若干个pg组成;pg是由若干个osd组成;osd是由硬盘组成。
k8s-node1 172.16.1.201 管理节点 数据节点
k8s-node2 172.16.1.202 数据节点
k8s-node3 172.16.1.203 数据节点
上述要加入/etc/hosts文件里面。
该实验的操作系统为centos 7,ceph k版本。
1、关闭系统上的防火墙 以及selinux
2、拷贝管理节点的秘钥到其他节点实现无密码登录
ssh-keygen -t rsa ssh-copy-id root@ceph-node1 .....
3、在各个节点上配置需要的yum源
[Ceph] name=Ceph packages for $basearch baseurl=http://mirrors.163.com/ceph/rpm-kraken/el7/$basearch enabled=1 priority=1 gpgcheck=1 gpgkey=/tupian/20230522/release.asc [Ceph-noarch] name=Ceph noarch packages baseurl=/tupian/20230522/ enabled=1 priority=1 gpgcheck=1 gpgkey=/tupian/20230522/release.asc [ceph-source] name=Ceph source packages baseurl=/tupian/20230522/ enabled=0 priority=1 gpgcheck=1 gpgkey=/tupian/20230522/release.asc
4、管理节点安装ceph-deploy工具
[root@k8s-node1 yum.repos.d]# yum -y install ceph-deploy
5、管理节点创建工作目录
[root@k8s-node1 ~]# mkdir -p /etc/ceph
6 、创建两个mon
[root@k8s-node1 ~]# cd /etc/ceph [root@k8s-node1 ceph]# ls [root@k8s-node1 ceph]# ceph-deploy new k8s-node1 k8s-node2 ##这个意思是在k8s-node1和k8s-node2上分别创建一个mon, [root@k8s-node1 ceph]# ls ceph.conf ceph-deploy-ceph.log ceph.mon.keyring
7、默认情况下最少是需要一个mon、 2个osd
在配置文件ceph.conf 中加入我们的业务网段配置public network =172.16.22.0/24,结果如下:
[root@k8s-node1 ceph]# vim ceph.conf [global] fsid = 2e6519d9-b733-446f-8a14-8622796f83ef mon_initial_members = k8s-node1,k8s-node2 mon_host = 172.16.22.201,172.16.22.202 auth_cluster_required = cephx auth_service_required = cephx auth_client_required = cephx public network =172.16.22.0/24
8、 安装ceph 集群
[root@k8s-node1 ceph]# ceph-deploy install k8s-node1 k8s-node2
9、 初始化mon 并收集所有的秘钥
[root@k8s-node1 ceph]# ceph-deploy mon create-initial [root@k8s-node1 ceph]# ls ceph.bootstrap-mds.keyring ceph.bootstrap-osd.keyring ceph.client.admin.keyring ceph-deploy-ceph.log rbdmap ceph.bootstrap-mgr.keyring ceph.bootstrap-rgw.keyring ceph.conf ceph.mon.keyring
10、查看创建的集群用户
[root@k8s-node1 ceph]# ceph auth list installed auth entries: client.admin key: AQBavtVb2irGJBAAsbJcna7p5fdAXykjVbxznA== caps: [mds] allow * caps: [mgr] allow * caps: [mon] allow * caps: [osd] allow * client.bootstrap-mds key: AQBavtVbbNgXOxAAkvfj6L49OUfFX5XWd651AQ== caps: [mon] allow profile bootstrap-mds client.bootstrap-mgr key: AQBbvtVbwiRJExAAdsh2uG+nL8l3UECzLT4+vw== caps: [mon] allow profile bootstrap-mgr client.bootstrap-osd key: AQBbvtVbUV0NJxAAJAQ/yBs0c37C7ShBahwzsw== caps: [mon] allow profile bootstrap-osd client.bootstrap-rgw key: AQBbvtVb/h/pOhAAmwK9r8DeqlOpQHxz9F/9eA== caps: [mon] allow profile bootstrap-rgw mgr.k8s-node1 key: AQBXvtVbeW/zKBAAfntYBheS7AkCwimr77PqEQ== caps: [mon] allow *
11、创建osd
创建osd有两种方式
a、使用系统裸盘,作为存储空间;
b、使用现有文件系统,以目录或分区作为存储空间,官方建议为 OSD 及其日志使用独立硬盘或分区作为存储空间
1)、使用分区
[root@k8s-node1 ceph]#ceph-deploy disk zap k8s-node1:/dev/sdb k8s-node2:/dev/sdb ##通过zap命令清除分区及磁盘内容 [root@k8s-node1 ceph]#ceph-deploy osd prepare k8s-node1:/dev/sdb k8s-node2:/dev/sdb [root@k8s-node1 ceph]#ceph-deploy osd activate k8s-node1:/dev/sdb k8s-node2:/dev/sdb
2)、 使用目录
[root@k8s-node1 ceph]#ssh k8s-node1 “mkdir /data/osd0;chown -R ceph:ceph /data/osd0" [root@k8s-node1 ceph]#ssh k8s-node2 “mkdir /data/osd0;chown -R ceph:ceph /data/osd0
[root@k8s-node1 ceph]# ceph-deploy osd prepare k8s-node1:/data/osd0 k8s-node2:/data/osd0 [root@k8s-node1 ceph]# ceph-deploy osd activate k8s-node1:/data/osd0 k8s-node2:/data/osd0
12、使用ceph-deploy把配置文件和admin 秘钥下发到所有节点
[root@k8s-node1 ceph]# ceph-deploy admin k8s-node1 k8s-node2
13 、给每一个节点的keyring 增加 r 权限
chmod +r /etc/ceph/ceph.client.admin.keyring
14、 检查集群的健康状况
[root@k8s-node1 ceph]# ceph -s cluster 2e6519d9-b733-446f-8a14-8622796f83ef health HEALTH_WARN #这个警告可以忽略 64 pgs degraded 64 pgs stuck unclean 64 pgs undersized monmap e2: 1 mons at {k8s-node1=172.16.22.201:6789/0} election epoch 4, quorum 0 k8s-node1 mgr active: k8s-node1 osdmap e9: 2 osds: 2 up, 2 in ##看这,个数是否对 flags sortbitwise,require_jewel_osds,require_kraken_osds pgmap v21: 64 pgs, 1 pools, 0 bytes data, 0 objects 22761 MB used, 15722 MB / 38484 MB avail 64 active+undersized+degraded [root@k8s-node1 ceph]# ceph health HEALTH_WARN 64 pgs degraded; 64 pgs stuck unclean; 64 pgs undersized
[root@k8s-node1 ceph]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.03677 root default -2 0.01839 host k8s-node1 0 0.01839 osd.0 up 1.00000 1.00000 -3 0.01839 host k8s-node2 1 0.01839 osd.1 up 1.00000 1.00000
[root@k8s-node1 ceph]# ceph df GLOBAL: SIZE AVAIL RAW USED %RAW USED 38484M 15719M 22764M 59.15 POOLS: NAME ID USED %USED MAX AVAIL OBJECTS rbd 0 0 0 4570M 0
这样,我们就搭建完了两个节点的ceph集群,其中1个mon,2个osd。
下面我们再介绍mon和osd的扩展
1、以下操作,大部分命令是在k8s-node1上执行的(前面我们让k8s-node1充当管理节点)
#切换到k8s-node1的/etc/ceph目录下 [root@k8s-node1 ~]# cd /etc/ceph/ #给k8s-node3上安装ceph-deploy软件,但是如下命令要在k8s-node1上执行 [root@k8s-node1 ceph]# ceph-deploy install k8s-node3 #下面这个命令在k8s-node3上执行 [root@k8s-node3 ceph]# mkdir /data/osd0 -p [root@k8s-node3 ceph]# chown -R ceph:ceph /data/osd0 #给k8s-node3创建osd [root@k8s-node1 ceph]# ceph-deploy osd prepare k8s-node3:/data/osd0 [root@k8s-node1 ceph]# ceph-deploy osd activate k8s-node3:/data/osd0 #查看k8s-node3已经被加入集群里面了 [root@k8s-node1 ceph]# ceph -s cluster 2e6519d9-b733-446f-8a14-8622796f83ef health HEALTH_OK monmap e2: 1 mons at {k8s-node1=172.16.22.201:6789/0} election epoch 4, quorum 0 k8s-node1 mgr active: k8s-node1 osdmap e14: 3 osds: 3 up, 3 in flags sortbitwise,require_jewel_osds,require_kraken_osds pgmap v7372: 64 pgs, 1 pools, 0 bytes data, 0 objects 35875 MB used, 21850 MB / 57726 MB avail 64 active+clean [root@k8s-node1 ceph]# [root@k8s-node1 ceph]# [root@k8s-node1 ceph]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIMARY-AFFINITY -1 0.05516 root default -2 0.01839 host k8s-node1 0 0.01839 osd.0 up 1.00000 1.00000 -3 0.01839 host k8s-node2 1 0.01839 osd.1 up 1.00000 1.00000 -4 0.01839 host k8s-node3 2 0.01839 osd.2 up 1.00000 1.00000
在k8s-node1上执行
[root@k8s-node1 ceph]# ceph-deploy mon add k8s-node3 [root@k8s-node1 ceph]# ceph -s cluster 2e6519d9-b733-446f-8a14-8622796f83ef health HEALTH_OK monmap e4: 3 mons at {k8s-node1=172.16.22.201:6789/0,k8s-node2=172.16.22.202:6789/0,k8s-node3=172.16.22.203:6789/0} election epoch 8, quorum 0,1,2 k8s-node1,k8s-node2,k8s-node3 mgr active: k8s-node1 standbys: k8s-node3, k8s-node2 osdmap e14: 3 osds: 3 up, 3 in flags sortbitwise,require_jewel_osds,require_kraken_osds pgmap v7517: 64 pgs, 1 pools, 0 bytes data, 0 objects 35890 MB used, 21835 MB / 57726 MB avail 64 active+clean
[root@k8s-node1 ceph]# ceph mon stat e4: 3 mons at {k8s-node1=172.16.22.201:6789/0,k8s-node2=172.16.22.202:6789/0,k8s-node3=172.16.22.203:6789/0}, election epoch 10, quorum 0,1,2 k8s-node1,k8s-node2,k8s-node3
元数据是在文件系统时才有用,而我们用的是块设备,所以就没用了
[root@k8s-node1 ceph]#ceph-deploy mds create k8s-node1