在前面文章(基于docker部署ceph)的基础之上,我们可以搭建一个可以让swarm集群来使用ceph存储了。
本文配置在你已经有一个swarm集群的基础上进行
大概需要的步骤如下:
– 安装Ceph相关组件(The ceph and rbd binary executables must be installed on the host)
– 安装rex-ray https://rexray.readthedocs.io/en/stable/user-guide/storage-providers/ceph/
– 安装rexray/rbd插件https://rexray.readthedocs.io/en/stable/user-guide/schedulers/docker/plug-ins/ceph/
需要注意的是,我在尝试安装rex-ray时,在启动rexray服务的时候反复会报一个错误:
ERRO[0001] Error running command args=[ceph-conf --lookup mon_host] error=exit status 1 host=unix:///var/run/rexray/621001432.sock server=scythe-wizard-by service=rbd stderr= storageDriver=libstorage time=1539863997403 txCR=1539863997 txID=7deaf994-4f4e-4f31-7f46-a8c9456022e0
Oops, an error occured!
error initializing instance ID cache
To correct the error please review:
查了半天无果,开始因为报错没看懂,然后看到这个文章https://github.com/rexray/rexray/issues/1219
里面的哥么在执行这个命令,感觉好像在我的报错里面见过:
core@coreos ~ $ ceph-conf --lookup mon_host
172.20.0.45
还是我自己对ceph掌握不足,ceph提供ceph-conf这个指令做一些配置查询的,再反看我的报错,好像就是这个指令报错了。
然后我又在我的环境上执行了下这个指令,果然是有问题,返回了个空。我又查询了官方文档http://docs.ceph.org.cn/rados/configuration/ceph-conf/#ceph-metavariables
里面的共有选项,好像是可以配置这个mon_host,我看了下我之前用容器起的ceph集群的配置文件/etc/ceph/ceph.conf里面,这块配置果然是缺失的,果断加上。
[global]
fsid = bed081fd-29da-47ab-98b8-4cd294c5143e
initial_members = swarm1
mon_host = 10.255.255.131
别忘记rexray的配置文件
增加配置文件
/etc/rexray/config.yml
libstorage:
# The libstorage.service property directs a libStorage client to direct its
# requests to the given service by default. It is not used by the server.
service: rbd
server:
services:
rbd:
driver: rbd
rbd:
defaultPool: rbd
cephArgs: --id myuser
然后赶紧试下,能不能启动 rexray start , 我擦,开心的一米 ,一堆控制台输出之后,那只熟悉的小狗出现了。
⌐▄Q▓▄Ç▓▄,▄_
Σ▄▓▓▓▓▓▓▓▓▓▓▄π
╒▓▓▌▓▓▓▓▓▓▓▓▓▓▀▓▄▄.
,_▄▀▓▓ ▓▓ ▓▓▓▓▓▓▓▓▓▓▓█
│▄▓▓ _▓▓▓▓▓▓▓▓▓┌▓▓▓▓▓█
_J┤▓▓▓▓▓▓▓▓▓▓▓▓▓├█▓█▓▀Γ
,▄▓▓▓▓▓▓^██▓▓▓▓▓▓▓▓▓▓▓▓▄▀▄▄▓▓Ω▄
F▌▓▌█ⁿⁿⁿ ⁿ└▀ⁿ██▓▀▀▀▀▀▀▀▀▀▀▌▓▓▓▌
'ⁿ_ ,▄▄▄▄▄▄▄▄▄█_▄▄▄▄▄▄▄▄▄ⁿ▀~██
Γ ├▓▓▓▓▓█▀ⁿ█▌▓Ω]█▓▓▓▓▓▓ ├▓
│ ├▓▓▓▓▓▌≡,__▄▓▓▓█▓▓▓▓▓ ╞█~ Y,┐
╞ ├▓▓▓▓▓▄▄__^^▓▓▓▌▓▓▓▓▓ ▓ /▓▓▓
├▓▓▓▓▓▓▓▄▄═▄▓▓▓▓▓▓▓▓▓ π ⌐▄▓▓█║n
_ ├▓▓▓▓▓▓▓▓▓~▓▓▓▓▓▓▓▓▓▓ ▄4▄▓▓▓██
µ ├▓▓▓▓█▀█▓▓_▓▓███▓▓▓▓▓ ▓▓▓▓▓Ω4
µ ├▓▀▀L └ⁿ ▀ ▀ ▓▓█w ▓▓▓▀ìⁿ
⌐ ├_ τ▀▓ Σ⌐└
~ ├▓▓ ▄ _ ╒ ┌▄▓▓ Γ
├▓▓▓▌█═┴▓▄╒▀▄_▄▌═¢▓▓▓ ╚
⌠ ├▓▓▓▓▓ⁿ▄▓▓▓▓▓▓▓┐▄▓▓▓▓ └
Ω_.└██▓▀ⁿÇⁿ▀▀▀▀▀▀█≡▀▀▀▀▀ µ
ⁿ .▄▄▓▓▓▓▄▄┌ ╖__▓_▄▄▄▄▄*Oⁿ
û▌├▓█▓▓▓██ⁿ ¡▓▓▓▓▓▓▓▓█▓╪
╙Ω▀█ ▓██ⁿ └█▀██▀▓█├█Å
ⁿⁿ ⁿ ⁿ^
:::::::.. .,:::::: .,:: .::::::::.. :::. .-:. ::-.
;;;;'';;;; ;;;;'''' ';;;, .,;; ;;;;'';;;; ;;';; ';;. ;;;;'
[[[,/[[[' [[cccc '[[,,[[' [[[,/[[[' ,[[ '[[, '[[,[[['
$$$$$$c $$"""" Y$$$Pcccc $$$$$$c c$$$cc$$$c c$$"
888b "88bo,888oo,__ oP"''"Yo, 888b "88bo,888 888,,8P"'
MMMM "W" """"YUMMM,m" "Mm, MMMM "W" YMM ""'mM"
REX-Ray
-------
Binary: /usr/bin/rexray
Flavor: client+agent+controller
SemVer: 0.11.3
OsArch: Linux-x86_64
Commit: 3afc7942dd8b1a88ed902344b4ece89374be87f7
Formed: Tue, 12 Jun 2018 11:45:51 EDT
先把当前控制台任务停掉,用服务的方式启动rexray,并把服务设置为开机启动。
systemctl start rexray
systemctl enable rexray
systemctl status rexray
趁热打铁铁,赶紧装rexray/rbd插件。
docker plugin install rexray/rbd RBD_DEFAULTPOOL=rbd LINUX_VOLUME_FILEMODE=0777
由于rexray是启动好的,这个插件才可以正常安装启动,否则,会失败。
至此,插件完成安装,现在要做的就是想个办法优雅的把ceph配置文件同步到所有docker节点上,然后写个脚本在每个节点重复上面的工作。
然后就可以需要的使用rexray/rbd插件来建我们的网络存储卷了。
稍等我会写个完整的配置命令脚本,然后回头我想到优雅的共享ceph配置,再会写一篇文章
http://docs.ceph.org.cn/rados/configuration/ceph-conf 这个页面值得去看看。
上面都是鬼扯,看下么开始正式步骤。
- 安装ceph必要组件,
这里有点坑,需要和大家说下。由于我的ceph用docker启动的,用的版本应该较新,然后我根据网上教程 直接安装ceph组件yum -y install ceph-common
,然后你知道嘛,坑死我了,ceph指令用不了,看日志不停的报错, 说什么 version miss match, 好像说的什么版本号对不上,也不知道啥原因。然后查了一堆也没查出个啥。后来不知道咋的灵机一动,鬼使神差的,看了下我用 ceph-common装的ceph版本,然后去容器里面看看我容器的ceph版本,我靠果然差很多。所以结论是,不能直接这样装ceph-common,然后又查了网上资料,有一篇文章看着满靠谱,照着配置下来,果然不报错了,在容器外面 ceph -s 能正常看到集群状态,开心,等下把这篇文章摘抄到我的博客上。
2.安装rex-ray
这个就很简单了,根据上面鬼扯的内容,修复好ceph配置文件,安装还是很顺利的。
启动之前需要先增加配置文件
curl -sSL https://rexray.io/install | sh
# 然后别忘记 rexray的组件的配置文件
systemctl start rexray
systemctl enable rexray
systemctl status rexray
3.安装rexray/rbd插件
docker plugin install rexray/rbd RBD_DEFAULTPOOL=rbd LINUX_VOLUME_FILEMODE=0777
完成。
安装脚本
# create ceph config directory
mkdir -p /etc/ceph/
# touch ceph config
tee /etc/ceph/ceph.client.admin.keyring <<-'EOF'
[client.admin]
key = AQBdnsRbt7KbBBAAZGCROUB1uHVKs72LnD8fDA==
auid = 0
caps mds = "allow"
caps mgr = "allow *"
caps mon = "allow *"
caps osd = "allow *"
EOF
tee /etc/ceph/ceph.conf <<-'EOF'
# Created and Maintained by Confd
[global]
fsid = bed081fd-29da-47ab-98b8-4cd294c5143e
initial_members = swarm1
mon_host = 10.255.255.131
[mon]
[mon.swarm1]
host = swarm1
mon_addr = 10.255.255.131
[osd]
osd_journal_size = 100
[mds]
[client]
EOF
# install ceph-common
tee /etc/yum.repos.d/ceph.repo <<-'EOF'
[Ceph]
name=Ceph packages for $basearch
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/$basearch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1
[Ceph-noarch]
name=Ceph noarch packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/noarch
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1
[ceph-source]
name=Ceph source packages
baseurl=http://mirrors.163.com/ceph/rpm-jewel/el7/SRPMS
enabled=1
gpgcheck=0
type=rpm-md
gpgkey=https://mirrors.163.com/ceph/keys/release.asc
priority=1
EOF
yum install -y yum-utils && \
yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && \
yum install --nogpgcheck -y epel-release && \
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && \
rm -f /etc/yum.repos.d/dl.fedoraproject.org*
yum -y install ceph-common
# install rexray
curl -sSL https://rexray.io/install | sh
tee /etc/rexray/config.yml <<-'EOF'
rexray:
logLevel: debug
libstorage:
logging:
level: debug
httpRequests: true
httpResponses: true
libstorage:
service: rbd
rbd:
defaultPool: docker1
EOF
systemctl start rexray
systemctl enable rexray
systemctl status rexray
# install rexray/rbd docker plugin
docker plugin install rexray/rbd RBD_DEFAULTPOOL=rbd LINUX_VOLUME_FILEMODE=0777
后记,
我刚才又研究了下,之所以 我前面ceph-conf –lookup mon_host报错,缺失配置,是因为我的配置都是用的etcd了,配置文件里面真的就没相关配置了。我去etcd里面找了下,mon_host是能查到的, 我要研究下如何将etcd配置同步到本地ceph也能用。
刚才看了一会儿ceph/daemon的镜像,发现他支持kv存储配置也是用了一些叫脚本通过etcd来写配置,读配置。我们自己完全照样子搞个全局的docker服务,然后在每个节点上把配置搞到节点本地的配置目录,思路这样,明天开搞。
一天之后。。。
我想明白了,mon初始化完成之后,一般不会动,然后配置文件一般也不会动,把这个配置写到节点初始化脚本里面,也不是不行,先这样吧。然后研究下 ceph容器化安装的 mon节点高可用,搞好就可以在环境实操了。