之前搭建好了k8s集群,现在在此基础上部署ceph集群以用于项目数据的存储备份,其实并不是说必须在k8s集群上才能部署ceph集群,在Centos上直接部署ceph集群也是可以的,因为我之后要将所有的应用容器化,所以k8s集群上的数据就直接放到了ceph集群中。
参考博客为 初试 Centos7 上 Ceph 存储集群搭建

一、环境说明

centos的版本信息:CentOS Linux release 7.6.1810 (Core)
主机信息:

服务器名称服务器ipk8s集群角色
k8s-master111.30.30.30master,worker
k8s-node1111.30.30.31worker
k8s-node2111.30.30.32worker

ceph集群中节点的分配安排:
在这里插入图片描述

说明:原文章安装的是jewel版本的ceph,其实这个版本是比较老的,并且这个版本的ceph缺少了很多的功能,比如没有mgr服务,而该服务可以查看ceph集群的健康状态。所以我比较推荐大家安装Luminous或者mimic版本的ceph。但是,我接下来演示的仍然是jewel版本的ceph安装(因为我最初是安装的这个jewel版本的ceph),并且Luminous或者mimic版本的ceph集群的安装过程与jewel版本的ceph安装过程差别不大,在以下的安装过程中我会具体说明。
在这里插入图片描述

在这里插入图片描述

二、安装部署ceph集群前的准备工作

因为之后会涉及配置文件的同步以及ceph相关资源的部署安装,所以配置节点间的免密登陆会方便之后的操作。
以下操作在所有服务器节点上执行:

1、关闭防火墙和selinux模式
//关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
//查看防火墙状态
systemctl status firewalld
//临时关闭selinux
setenforce  0
//查看selinux状态,SELinux status参数为enabled即为开启状态
/usr/sbin/sestatus -v 

其中我们也可以通过sed -i 's/SELINUX=.*/SELINUX=disabled/' /etc/selinux/config命令来永久关闭selinux模式,注意关闭selinux需要reboot重启服务器才能使之生效,慎用!!慎用!!因为有可能服务器上在跑着其他的服务,所以一般情况下不要重启服务器。

2、配置各节点间的/etc/hosts文件

比如在k8s-master节点上设置内容为:

::1	localhost	localhost.localdomain	localhost6	localhost6.localdomain6
127.0.0.1	localhost	localhost.localdomain	localhost4	localhost4.localdomain4
111.30.30.30 k8s-master
111.30.30.31 k8s-node1
111.30.30.32 k8s-node2

其余的k8s-node1和k8s-node2按照此文件中的内容设置即可,主要是配置ip与节点名称之间的映射。
说明:大家可以通过hostname命令查看一下自己的主机名,注意/etc/hosts文件中的主机名称最好与hostname查出来的主机名一致,假如不一致的话后面在进行mon节点初始化的时候可能会出现节点找不到的问题,所以两者最好一致。
大家也可以通过hostnamectl set-hostname your_hostname设置主机名,其中your_hostname就是你所设置的主机的新名称。

3、安装NTP服务

因为无论是k8s集群还是ceph集群,都是要求集群中各服务器节点的时间是要同步的,否则可能会导致时钟漂移的问题。

# yum 安装 ntp
sudo yum install ntp ntpdate ntp-doc

# 校对系统时钟
ntpdate 0.cn.pool.ntp.org

除此之外也可以使用第三方软件工具chrony实现时钟同步。

4、安装部署ssh免密登陆

此步骤主要是为了k8s-master节点即ceph-deploy节点能够免密登陆到其他的节点上,然后进行ceph集群相关资源的部署安装。
此过程的安装过程参考初试 Centos7 上 Ceph 存储集群搭建,参考该博客的3.3和3.4即可。
最终应该达到的效果是:在k8s-master节点上在使用root用户或者cephd用户登陆的情况下,使用ssh k8s-node1或者k8s-node2命令能够直接登录到k8s-node1和k8s-node2节点上,使用exit命令即可退出k8s-node1或者k8s-node2节点的登陆。
如下图验证的效果一样:
在这里插入图片描述
注意:我还是建议大家配置一下这个ssh免密登陆,因为之后ceph集群的配置文件或者密钥需要同步到ceph集群的所有节点上,所以ssh免密登陆的话对于配置文件或者密钥文件的分发来说非常方便。

三、安装部署ceph集群

(注意!注意!)以下步骤仅在k8s-master节点上执行,即仅在自己所指定的mon节点和ceph-deploy节点上执行以下步骤:

1、安装ceph集群所需的依赖资源

下载安装其他配置资源,直接执行此命令即可(此命令非常重要,如若不执行此步骤则之后会出现很多依赖错误的报错)

sudo yum install -y yum-utils && sudo yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && sudo yum install --nogpgcheck -y epel-release && sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && sudo rm /etc/yum.repos.d/dl.fedoraproject.org*
2、修改ceph源配置文件/etc/yum.repos.d/ceph.repo

(此文件不存在创建即可),注意文件编辑修改后使用:wq!命令保存退出。

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

在这里插入图片描述

注意:有关此配置文件,我有一些东西想说一下。
说明一:执行完此步骤后,我所参考的博客 初试 Centos7 上 Ceph 存储集群搭建中接下来会执行sudo yum update && sudo yum install ceph-deploy这个命令,其实这个命令包含两个命令:sudo yum update这个命令不是随意就能执行的,这个命令会升级所有包的同时也升级软件和系统内核,我之前没注意,所以我的k8s组件的版本都被升级了,额,也怪自己没有看清楚,因为有的时候软件或者服务安装包升级的话可能会引起服务器上不同组件或服务之间的不适配,所以一般情况下我都是不升级已经安装的软件包的版本的,所以不用执行 sudo yum update命令,仅执行sudo yum install ceph-deploy这个命令进行ceph-deploy的安装即可。


说明二:这个ceph源配置文件即/etc/yum.repos.d/ceph.repo这个文件的内容会影响所下载的ceph-deploy和ceph的版本,比如上面我所编辑的配置文件内容就是jewel版的ceph的下载源,按照上面的ceph源配置文件下载下来的ceph版本一般是如下图所示的版本:
在这里插入图片描述
在这里插入图片描述
一般所下载的jewel版的ceph的版本都是10.2.x,如果说大家已经安装好了jewel版本的ceph集群,因为在文章的开头也是说过,这个版本的ceph还是比较老的,有很多新的ceph的特性在这个版本中是没有的,所以现在应该如何操作呢?如何将其升级到Luminous版本(12.2.12)的ceph集群呢?我建议大家参考一下这篇文章Ceph集群由Jewel版本(10.2.10)升级到Luminous版本(12.2.12),经本人实测,升级步骤准确可行。这一块就是Ceph集群由Jewel版本(10.2.x)升级到Luminous版本(12.2.12) 的解决方法,那么如何直接安装Luminous版本的ceph集群呢?实现方法就是修改ceph源配置文件:
/etc/yum.repos.d/ceph.repo配置文件修改为以下内容,注意使用:wq!退出编辑并保存,

[ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/$basearch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc

[ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch
enabled=1
gpgcheck=1
priority=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc

[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/SRPMS
enabled=0
gpgcheck=1
type=rpm-md
gpgkey=http://mirrors.163.com/ceph/keys/release.asc
priority=1


补充说明:使用此ceph源配置文件安装部署Luminous版本的ceph集群时,以下的操作步骤与安装部署jewel版本的ceph集群的流程完全一样,仅在之后的”激活osd节点“上有所不同(仅有这一个地方不同),所以即使是打算安装Luminous版本的ceph集群的朋友也可以参考我的这篇文章。

3、安装ceph-deploy(仅在k8s-master节点上执行)

ceph-deploy服务对应的是deploy部署节点,因为ceph-deploy服务可以很方便地实现在不同节点上安装ceph,所以先下载ceph-deploy服务。

//安装部署ceph-deploy节点
sudo yum install ceph-deploy
4、创建一个新的ceph集群

因为之后在这个ceph集群的admin-node节点上(比如,按照我自己的规划我指定了k8s集群中的k8s-maste节点作为ceph集群的admin-node节点)会放置一些资源,所以大家需要在自己的admin-node的服务器节点上创建一个文件夹,用于保存ceph集群创建时产生的配置文文件和密钥文件等。
创建文件夹mkdir toyourpath/ceph-cluster/ceph-cluster,进入到自己所创建的这个文件夹cd toyourpath/ceph-cluster/ceph-cluster

//创建新的ceph集群,一定要提前进入自己之前所创建的ceph-cluster文件夹
ceph-deploy new k8s-master

注意:执行创建新的ceph集群的命令后,会发现自己的ceph-cluster文件夹下多了几个文件,这几个文件分别是ceph.conf,ceph-deploy-ceph.log和ceph.mon.keyring文件。
在这里插入图片描述
其中,ceph.conf文件是ceph集群的配置文件,我们只需要修改编辑其中的一些地方就可以了,将mon_host修改为admin_node节点的内网ip地址;将osd pool default size设置为osd节点的个数(osd节点是什么,下文会讲到,这里大家先理解成ceph集群的存储节点就好,比如我设置了3个osd节点,所以此处我填写的该字段的值就是3);public network字段用于设置ceph集群的public网络的公共网段,比如我的mon_host字段的值(即admin_node节点的内网ip地址为10.10.7.212),把最后的212替换为0,再加上/24即可,即10.10.7.212->10.10.7.0/24

[global]
fsid = 45c8a6a6-525c-44c5-9009-69dad92eb3af
mon_initial_members = k8s-master
mon_host = 10.10.7.212
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
osd pool default size = 3
public network = 10.10.7.0/24

将ceph.conf文件配置好之后我们就可以安装ceph服务了,由于我们之前仅在k8s-master(即ceph集群的admin_node节点、mon节点、ceph-depoy节点)上编辑了ceph源配置文件/etc/yum.repos.d/ceph.repo,所以我们先通过ceph-deploy来直接安装各服务器节点上的ceph服务。

5、使用ceph-deploy安装ceph服务
//安装ceph服务,注意将ceph-deploy install后添加自己的服务器节点名称
ceph-deploy install k8s-master k8s-node1 k8s-node2  

说明:在安装ceph服务的时候,可能会遇到如下几个安装报错的问题。
报错一:[k8s-master][DEBUG ] connection detected need for sudo
在这里插入图片描述
如图所示在使用ceph-deploy安装ceph服务的时候虽然我输入正确了cephd@k8s-master的密码,但是依旧报错:[ceph_deploy] [ERROR] KeyboardInterrupt的错误。
解决方案:将安装命令修改为图中所提示的那样:sudo ceph-deploy install k8s-master k8s-node1 k8s-node2再次进行ceph服务的安装。
报错二:[k8s-master][WARNIN] ensuring that /etc/yum.repos.d/ceph.repo contains a high priority
[ceph_deploy][ERRO R ] RuntimeError: NoSectionError: No section: ‘ceph’
在这里插入图片描述
解决方案:使用命令sudo ceph-deploy install k8s-master k8s-node1 k8s-node2安装失败的话就在k8s-master节点上单独使用yum -y install ceph进行安装(接下来会讲如何在每个服务器节点上单独安装ceph服务),注意修改 /etc/yum.repos.d/ceph.repo配置文件(查看一下该配置文件的内容是否与上文中所提及的ceph源文件的内容一致,如果内容一致仍然报错的话就参考一下"报错三"中所提及的有关ceph源配置文件的操作方法)。
报错三:使用命令ceph-deploy install k8s-master k8s-node1 k8s-node2安装ceph时报错,安装过程卡在Downloading packages,提示报错信息No data was received after 300 seconds, disconnecting...
经历过以上的两个报错,按理说接下来就能够下载安装ceph服务了,这时候你所看到的界面可能是这样的,
在这里插入图片描述
这个时候开始下载相关的软件包了,可是过了好一会儿可能还是这样,耐心等待一会可能就出现了以下的界面:
在这里插入图片描述
但是我的心里异常的难受啊,这,,安装步骤,坑有点儿多啊。
在这里插入图片描述
大家不要放弃,坚持就是胜利!
原因:出现这个错误的原因应该是未能从ceph源下载所需要的ceph资源,是ceph源的问题。
解决方案:修改ceph源为国内镜像源,执行以下操作即可:

export CEPH_DEPLOY_REPO_URL=http://mirrors.163.com/ceph/rpm-jewel/el7
export CEPH_DEPLOY_GPG_URL=http://mirrors.163.com/ceph/keys/release.asc

报错四:在报错三解决之后,接下来再次执行ceph-deploy install k8s-master k8s-node1 k8s-node2可能报错,
Loaded plugins: fastestmirror, langpacks
Repository cr is listed more than once in the configuration
Repository fasttrack is listed more than once in the configuration
Existing lock /var/run/yum.pid: another copy is running as pid 115367.
Another app is currently holding the yum lock; waiting for it to exit…

原因:这个报错就是说服务器中已经有一个yum ceph的进程在运行中了,这个就是ceph-deploy之前安装ceph服务的进程,虽然资源下载失败了,但是进程还是存在的,这个进程可能阻碍了ceph-deploy安装ceph。
解决方案:使用命令kill -9 115367把这个进程kill掉即可。
接下来再次使用ceph-deploy install k8s-master k8s-node1 k8s-node2进行ceph的安装即可,然后我们就应该能看到ceph服务的正常安装界面了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


这里我想说一下,ceph-deploy安装ceph集群中所有节点的ceph服务还是有很多的问题的,我比较推荐使用yum -y install ceph命令在每个ceph集群的服务器节点上分别手动安装ceph服务,注意执行此安装命令的前提是需要提前在每个服务器节点上配置 /etc/yum.repos.d/ceph.repo配置文件,建议大家在每个服务器节点将此ceph源配置文件的内容修改为如下内容,注意使用:wq!保存编辑并退出。

[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://download.ceph.com/rpm-jewel/el7/noarch
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

[ceph-source]
name=Ceph source packages
baseurl=http://download.ceph.com/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=1
type=rpm-md
gpgkey=https://download.ceph.com/keys/release.asc
priority=1

准备好这个ceph源配置文件后就可以进行ceph服务的安装部署了。

6、初始化ceph集群中的monitor节点
#初始化monitor节点并收集ceph的密钥环
sudo ceph-deploy mon create-initial

注意:此命令一定要在上文提到的ceph-cluster文件夹下执行此操作,否则会报"找不到ceph.conf文件"的错误。
其实在这一步也会出现很多问题的,但是大家不要慌,跟紧我。
在这里插入图片描述
报错一:假如大家没有像上面我所提到的那样修改ceph.conf文件,会出现这样一个错误,
[ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
monitor: mon.k8s-master, might not be running yet
monitor k8s-master does not exist in monmap
neither public_addr nor public_network keys are defined for monitors
monitors may not be able to form quorum
在这里插入图片描述

原因:ceph.conf文件中没有配置public_network字段。
解决方案:修改/data/deployfile/ceph-cluster/ceph.conf文件,在文件最后添加内容public network = 10.10.7.0/24(参考上文的第4步,注意根据自己的admin_node的内网ip设置public networ字段的值)。注意:在ceph集群的admin_node节点上设置完/data/deployfile/ceph-cluster/ceph.conf文件之后一定要把这个文件推送到其他节点,使用下面的命令ceph-deploy --overwrite-conf config push k8s-node1 k8s-node2将ceph集群的monitor节点(同时也是admin_node节点)上的配置文件同步到其他的ceph集群的节点上(我这里对应的就是k8s-node1节点和k8s-node2节点),注意此推送同步命令一定要在大家的ceph集群的monitor节点上的ceph-cluster目录下执行,否则会报错的。
报错二:执行ceph-deploy mon create-initial命令报错,RuntimeError: config file /etc/ceph/ceph.conf exists with different content; use --overwrite-conf to overwrite
在这里插入图片描述
解决方案:使用 --overwrite-conf参数覆盖原有的配置文件,修改初始化monitor节点的命令为ceph-deploy --overwrite-conf mon create-initial,继续进行mon节点的初始化操作。
报错三:使用命令(sudo) ceph-deploy mon create-initial初始化mon节点卡住

[k8s-master][INFO ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --admin-daemon=/var/run/ceph/ceph-mon.xlab-node4.asok mon_status
[k8s-masterx][INFO ] Running command: /usr/bin/ceph --connect-timeout=25 --cluster=ceph --name mon. --keyring=/var/lib/ceph/mon/ceph-xlab-node4/keyring auth get client.admin
使用ceph -s看到报错信息如下:
auth: unable to find a keyring on /etc/ceph/ceph.client.admin.keyring,/etc/ceph/ceph.keyring,/etc/ceph/keyring,/etc/ceph/keyring.bin: (2) No such file or directory
monclient(hunting): ERROR: missing keyring, cannot use cephx for authentication
librados: client.admin initialization error (2) No such file or directory
Error connecting to cluster: ObjectNotFound

在这里插入图片描述
解决方案:暂时没找到。
其实这个问题卡了我很长时间,我暂时还没有找到解决方案,如果大家有知道的话欢迎在评论区沟通交流。我对这个问题采取的做法是比较暴力的:把原先安装的ceph集群卸载,然后重新安装ceph,重新初始化monitor节点即可。
卸载已经安装的ceph集群,注意依次执行清理ceph集群的步骤

ceph-deploy forgetkeys
ceph-deploy purge k8s-master k8s-node1 k8s-node2
ceph-deploy purgedata k8s-master k8s-node1 k8s-node2

报错四:这是在卸载ceph集群的时候遇到的错误,如果大家首先执行ceph-deploy purgedata k8s-master k8s-node1 k8s-node2命令的话可能会报错,
[ceph_deploy.install][ERROR ] Ceph is still installed on: [‘k8s-master’, ‘k8s-node1’, ‘k8s-node2’]
[ceph_deploy][ERROR ] RuntimeError: refusing to purge data while Ceph is still installed

在这里插入图片描述

解决方案:注意卸载集群的3条指令的执行顺序,修改清理ceph集群的指令执行顺序:

ceph-deploy forgetkeys
ceph-deploy purge k8s-master k8s-node1 k8s-node2
ceph-deploy purgedata k8s-master k8s-node1 k8s-node2

没有以上报错的话,monitotr节点应该是可以正常初始化了,不出意外的话大家应该是可以看到以下的界面的:

在这里插入图片描述
在这里插入图片描述
在原先的ceph-cluster文件夹下大家可以看到这个时候是多了几个文件的,就像下面这样,是多了几个密钥文件。
在这里插入图片描述
如果大家也得到了这几个文件那么说明ceph集群的monitor节点是安装好了的。ceph存储集群至少是需要一个Monitor(监视器)才能运行的,为了达到ceph集群的高可用,一般会在ceph集群中运行多个monitor。像我们这个地方只是初始化了一个monitor节点,之后如果要扩展新的monnitor直接使用ceph-deploy mon add k8s-node1 k8s-node2即可完成monitor监视器的新增。

四、osd节点的安装部署

osd就是ceph集群最终存储数据的地方,放两张图片大家感受以下。
在这里插入图片描述
在这里插入图片描述
这里就不详细解释了,之后我会单独写篇博客来介绍ceph集群存储的这块儿内容的,现在大家知道这是用于ceph集群存储的就可以了。
这个osd的目录可以是一块儿独立磁盘上的唯一分区,也可以是一块儿磁盘上的某个分区,不过我还是建议大家单独准备独立的磁盘,将其格式化后形成一个分区,然后将其设置为osd的目录即可。这样的话,osd节点使用单独磁盘有利于保证数据的独立性,也方便之后osd节点的扩展(直接使用一块儿新的数据磁盘就能完成osd节点的添加)。
注意:以下的操作仅在k8s-master(即仅在ceph集群的admin_node节点上执行即可),一定要在之前的ceph-cluster文件夹下执行以下命令。

1、通过ceph-deploy执行osd节点激活之前的准备工作
#分别在每个节点上为osd目录设置用户组和用户,这一步骤一定要执行,如果不执行的话在之后的"激活osd"节点时会报权限的错误
#k8s-master节点上执行
sudo chown -R ceph:ceph /data1/osd0  
#k8s-node1节点上执行
sudo chown -R ceph:ceph /opt/osd1
#k8s-node2节点上执行
sudo chown -R ceph:ceph /opt/osd2

ceph-deploy osd prepare k8s-master:/data1/osd0  k8s-node1:/opt/osd1 k8s-node2:/opt/osd2
//如果还是报配置文件已经存在的错误,直接覆盖掉配置文件即可
ceph-deploy --overwrite-conf osd prepare k8s-master:/data1/osd0  k8s-node1:/opt/osd1 k8s-node2:/opt/osd2

说明:上面代码中的k8s-master:/data1/osd0指定的就是k8s-master节点上的/data1/osd0目录,也就是说这个osd0节点目录就是k8s-master节点的/data1/osd0。(如果是使用服务器上已经存在这个文件目录比如/data1/osd0的话)在执行osd prepare之前最好把这个/data1/osd0目录清空一下,或者可以在k8s-master节点上直接使用一块儿新的磁盘划分出一个新的分区挂载到k8s-master节点(即ceph集群的admin_node节点)上的/data1/osd0目录即可。
一般情况下不会有什么错误出现,执行osd prepare操作之后的正常结果如下图所示:
在这里插入图片描述

在这里插入图片描述

2、激活osd节点
ceph-deploy osd activate k8s-master:/data1/osd0  k8s-node1:/opt/osd1 k8s-node2:/opt/osd2

一般情况下这一步是没有什么错误的,大家可以看到如下界面:
在这里插入图片描述
在这里插入图片描述
这样的话,这个osd节点的初始化以及激活的工作就完成了。
说明:现在高版本的ceph集群,比如Luminous和mimic版本的ceph集群使用ceph-deploy osd create {node-name}:{disk}[:{path/to/journal}]命令来创建osd,具体可以参考Ceph Documention——增加/删除osd

3、同步ceph集群的配置文件和admin密钥
//将ceph集群admin节点上的密钥和配置文件同步到各节点
ceph-deploy admin k8s-master k8s-node1 k8s-node2

说明:因为之后会在ceph集群的admin_node节点上执行一些ceph的操作,其他的ceph集群节点如果没有这个admin_node节点上的配置文件和admin密钥的话可能会出现ceph集群连接不上的问题,所以这个地方最好还是同步一下。同步完成的话应该是下面界面所展示的这样:
在这里插入图片描述
接下来需要在各个ceph集群的节点上设置admin密钥文件的读取权限,在每个ceph集群的节点上执行一下即可(比如此处我的ceph集群有3个节点,分别是k8s-master、k8s-node1、k8s-node2,在这些节点上设置admin密钥文件的读取权限)。

#所有服务器节点上执行该文件的权限授予操作
sudo chmod +r /etc/ceph/ceph.client.admin.keyring

到现在为止,整个ceph集群的安装部署就已经完成了,但是,
在这里插入图片描述
我们还需要验证一下ceph集群的健康状态。

4、验证ceph集群的健康状态
//查看整个ceph集群的健康状态,包含详细的集群信息
ceph -s
//查看ceph集群中osd节点的状态
ceph osd tree
//仅查看集群的状态是否健康,不含详细的集群信息
ceph health

我当时查看ceph集群的状态是这样的,
在这里插入图片描述
在这里插入图片描述
图片名称

从上图可以看出是osd节点没有启动成功,我使用了命令systemctl restart ceph-osd@1(由于osd.1服务部署在了k8s-node1节点上,所以这里需要在k8s-node1节点上执行这个命令)重启了一下服务.
在这里插入图片描述
额,我重启osd服务后好像并没有什么作用,这个报错信息也不够明显,我还是不能找到具体的报错原因,去看一下ceph集群的日志。执行命令cd /var/log/ceph进入ceph集群的日志目录并查看相应的osd服务的日志,
在这里插入图片描述
报错一:这里的报错信息是,** ERROR: unable to open OSD superblock on /var/lib/ceph/osd/ceph-1: (2) No such file or directory,即ceph-osd守护程序无法读取基础文件系统
原因:我看了一下 k8s-master节点上/var/lib/ceph/osd/目录下的文件,确实是缺少内容,缺少ceph-1文件(夹)
解决方案:从k8s-node1和k8s-node2节点上将相应文件文件拷贝到k8s-master节点的该目录下(建议通过通过ssh的scp文件拷贝命令实现)
在这里插入图片描述
可以看到在k8s-node1节点上是有这个文件夹的,额,我也不怎么清楚作为ceph集群admin_node节点的k8s-master节点上为什么没有这个文件夹?先把这个k8s-node1节点上的文件拷贝到k8s-master节点上,这里大家可以用很多方法比如ssh下的scp来拷贝或者通过winscp、Royal TSX等工具来传输文件。这样,就不会再报上面的"文件缺失"的错误了,然后我通过命令systemctl start ceph-osd@1 再次手动启动osd.1的osd服务,结果又遇到了错误,


报错二:通过systemctl start ceph-osd@1命令启动osd.1失败,报错为filestore(/var/lib/ceph/osd/ceph-1) FileStore::mount: error opening ‘/var/lib/ceph/osd/ceph-1/fsid’: (13) Permission denied
osd.2 0 OSD:init: unable to mount object store
** ERROR: osd init failed: (13) Permission denied

在这里插入图片描述
原因:这里是文件夹的访问权限的问题
解决方案:通过chown -R ceph:ceph /var/lib/ceph/osd/ceph-1/*命令开放该文件的权限,注意对于osd.2的osd服务也需要这样开放文件的权限。

chown -R ceph:ceph /var/lib/ceph/osd/ceph-1/*
chown -R ceph:ceph /var/lib/ceph/osd/ceph-2/*

可以通过ll -ls命令查看关于文件权限的分配是否到位,
在这里插入图片描述
之后在启动osd服务的时候可能害会遇到一个启动osd服务的错误,


报错三:启动ceph集群中的osd节点报错,
Job for ceph-osd@1.service failed because start of the service was attempted too often. See “systemctl status ceph-osd@1.service” and “journalctl -xe” for details.
To force a start use “systemctl reset-failed ceph-osd@1.service” followed by “systemctl start ceph-osd@1.service” again.

在这里插入图片描述
原因:默认情况下,一个服务在10秒内最多允许启动5次,启动次数超过5次后,就会报该错误信息
解决方案:使用命令systemctl reset-failed ceph-osd@1重置osd.1 单元的启动频率计数器,清除该单元的启动限制,然后就可以继续通过systemctl restart ceph-osd@1命令重启osd服务了。


报错四:处理完以上可能出现的错误,还有可能遇到ERROR: osd init failed: (36) File name too long的报错问题,
在这里插入图片描述
解决方案:修改ceph-cluster集群下的ceph.conf文件,在文件末尾添加内容:

osd max object name len = 256
osd max object namespace len = 64

最后使用:wq!保存编辑并退出。有关这个问题的详细解释,大家可以参考一下这篇文章Ceph osd启动报错osd init failed (36) File name too long,此处我就不再赘述了。


在k8s-node1节点上使用`systemctl start ceph-osd@1`命令启动osd.1服务,在k8s-node2节点上使用`systemctl start ceph-osd@2`命令启动osd.2服务,

在这里插入图片描述

在这里插入图片描述

这一次启动起来了。
在这里插入图片描述
在这里插入图片描述
至此,我们的ceph集群就已经安装部署成功了,并且ceph集群也是处于健康状态的,osd节点也是已经都处于up状态了,下一步的话我们主要是讨论ceph存储集群的使用了,欢迎有需要的朋友移步到我的其他博客。

说明:这里介绍几个与osd服务相关的命令
手动启动osd节点服务:systemctl start ceph-osd@1 (这个后面的数字1就是osd的编号)
在这里插入图片描述
重新启动osd节点服务:systemctl restart ceph-osd@1
查看osd节点服务的状态:systemctl status ceph-osd@1


在文章的最后,我想说明一下为什么在文章中我一直在强调要在ceph-cluster文件夹的目录下执行ceph-deploy命令,因为不在这个文件夹下执行命令的话就会报一个错误,[ceph_deploy][ERROR ] ConfigError: Cannot load config: [Errno 2] No such file or directory: ‘ceph.conf’; has ceph-deploy new been run in this directory?,所以执行与ceph-deploy有关的命令一点要在包含ceph.conf文件的ceph-cluster文件夹目录下执行。
最后,如果大家在安装ceph集群过程中遇到了问题,那么欢迎大家在评论区留言,大家一起讨论交流!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐