Docker Swarm 集群 使用ceph做存储配置

在前面文章(基于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 这个页面值得去看看。

上面都是鬼扯,看下么开始正式步骤。

  1. 安装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节点高可用,搞好就可以在环境实操了。

Leave a Comment

电子邮件地址不会被公开。 必填项已用*标注