基于docker部署ceph以及修改docker image

前言

容器和ceph的结合已经在一些生产环境当中做了尝试,容器的好处就是对运行环境的一个封装,传统的方式是集成为ISO,这个需要一定的维护量,而容器的相关操作会简单很多,也就有了一些尝试,个人觉得如果玩的转容器可以考虑,当然得懂ceph,不然两套系统在一起,问题都不知道是哪个的,就比较麻烦了

本篇是基于之前我的填坑群里面的牛鹏举的一个问题,他的环境出现了创建osd的时候权限问题,我这边没遇到,现在实践了一遍,感觉应该是之前目录提前创建了的问题

实践步骤

安装docker

yum install docker

下载ceph镜像

这个镜像是sebastien维护的,他是redhat的ceph工程师,ceph-ansible的负责人,很多一线的资料都是来自他的分享,这个是一个集成好的镜像

docker pull ceph/daemon

准备好一些目录

mkdir -p /etc/ceph
mkdir -p /var/lib/ceph/

注意只需要做这个两个目录,不要创建子目录,docker内部有相关的操作

创建一个mon

sudo docker run -d --net=host  --name=mon \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \-e MON_IP=192.168.8.106 \-e CEPH_PUBLIC_NETWORK=192.168.0.0/16 \
ceph/daemon mon

MON_IP就是宿主机的IP地址

执行完了后

[root@lab8106 ceph]#  docker ps -lCONTAINER ID        IMAGE               COMMAND                CREATED              STATUS              PORTS               NAMES86ed05173432        ceph/daemon         "/entrypoint.sh mon"   About a minute ago   Up 59 seconds                           mon

可以看到退出了,我们来docker logs -f mon看下日志的输出

[root@lab8106 ceph]# docker logs -f mon/sbin/ip
creating /etc/ceph/ceph.client.admin.keyring
creating /etc/ceph/ceph.mon.keyring
creating /var/lib/ceph/bootstrap-osd/ceph.keyring
creating /var/lib/ceph/bootstrap-mds/ceph.keyring
creating /var/lib/ceph/bootstrap-rgw/ceph.keyring
monmaptool: monmap file /etc/ceph/monmap-ceph
monmaptool: set fsid to cb5df106-25b3-4f93-9f54-baca2976a47b
monmaptool: writing epoch 0 to /etc/ceph/monmap-ceph (1 monitors)
creating /tmp/ceph.mon.keyring
importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring
importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /tmp/ceph.mon.keyring
importing contents of /var/lib/ceph/bootstrap-mds/ceph.keyring into /tmp/ceph.mon.keyring
importing contents of /var/lib/ceph/bootstrap-rgw/ceph.keyring into /tmp/ceph.mon.keyring
importing contents of /etc/ceph/ceph.mon.keyring into /tmp/ceph.mon.keyring
ceph-mon: set fsid to cb5df106-25b3-4f93-9f54-baca2976a47b
ceph-mon: created monfs at /var/lib/ceph/mon/ceph-lab8106 for mon.lab81

提示成功了

我们看下生成的文件

[root@lab8106 ceph]# ll /etc/cephtotal 16-rw------- 1 root  root  137 Mar 14 17:53 ceph.client.admin.keyring
-rw-r--r-- 1 root  root  285 Mar 14 17:53 ceph.conf
-rw------- 1 64045 64045  77 Mar 14 17:53 ceph.mon.keyring
-rw-r--r-- 1 64045 64045 187 Mar 14 17:53 monmap-ceph

从这里可以看到内部的cpeh的用户的id是64045,所以在docker宿主机不要随便去给ceph权限,可能id不匹配,容器内部还是无法操作

创建一个osd

sudo docker run -d --net=host --name=myosd1 \
--privileged=true \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph \
-v /dev/:/dev/ \-e OSD_DEVICE=/dev/sdb \
ceph-daemon osd_ceph_disk

如果查询日志

docker logs -f myosd1

如果执行命令

 docker exec -it mon ceph -s

如果想进入容器内部

  docker exec -it mon  /bin/bash

修改集群的副本数

docker exec -it mon  ceph osd pool set rbd size 1

查看集群状态

[root@lab8106 ceph]# docker exec -it mon  ceph -s
    cluster cb5df106-25b3-4f93-9f54-baca2976a47b
     health HEALTH_WARN
            mon.lab8106 low disk space
     monmap e2: 1 mons at {lab8106=192.168.8.106:6789/0}
            election epoch 4, quorum 0 lab8106
        mgr no daemons active 
     osdmap e7: 1 osds: 1 up, 1 in
            flags sortbitwise,require_jewel_osds,require_kraken_osds
      pgmap v15: 64 pgs, 1 pools, 0 bytes data, 0 objects            34288 kB used, 279 GB / 279 GB avail                  64 active+clean

上面的操作都很顺利,但是某些情况可能出现异常情况,或者镜像内部本身就有问题需要自己修改,这个怎么处理

碰上问题想修改image

我们看下我们运行的docker

[root@lab8106 ceph]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES874d78ccae55        ceph/daemon         "/entrypoint.sh osd_c"   14 hours ago        Up 14 hours                             myosd186ed05173432        ceph/daemon         "/entrypoint.sh mon"     15 hours ago        Up 15 hours                             mon

COMMAND这里有个/entrypoint.sh

如果存在ENTRYPOINT和CMD,那么CMD就是ENTRYPOINT的参数,如果没有ENTRYPOINT,则CMD就是默认执行指令 也就是容器启动的时候默认是会去执行/entrypoint.sh 这个了

我们不需要他执行这个,就需要加参数了

[root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemon

比如我上次做的一个操作,把ceph用户绑定到root的id

root@9b269bf751f9:/# cat /etc/passwd|grep cephceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/bin/falseroot@9b269bf751f9:/# sed -i 's/64045/0/g' /etc/passwdroot@9b269bf751f9:/# cat /etc/passwd|grep cephceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false

退出容器

root@9b269bf751f9:/# exit

查询我们最后运行的容器,我们把容器修改提交到基础image

[root@lab8106 ceph]# docker ps -lCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES9b269bf751f9        ceph/daemon         "/bin/bash"         2 minutes ago       Exited (0) 15 seconds ago                       angry_hawking

[root@lab8106 ceph]# docker commit 9b269bf751f9 ceph/daemon

再次启动容器,并且检查内容,可以看到已经修改好了

[root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemonroot@65b538fdc61e:/# cat /etc/passwd|grep cephceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false

如果需要做其他的改动,这样改下就行

总结

本篇主要是根据sebastien的镜像做的部署,并且给出一些常用的命令,以及如何进入固化的容器的内部进行修改,方便自己调试环境

相关资料

见原文链接中的相关链接

原文发布于微信公众号 - 磨磨谈(momotan1987)

原文发表时间:2017-03-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏云计算教程系列

如何在CentOS 7上安装和使用Docker

Docker是一个应用程序,它使得在容器中运行应用程序进程变得简单易行,就像虚拟机一样,只是更便携,更加资源友好,更依赖于主机操作系统。

72300
来自专栏有困难要上,没有困难创造困难也要上!

Docker使用Swarm组建集群Docker使用Swarm组建集群

41180
来自专栏搜云库

Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测...

25260
来自专栏散尽浮华

Docker容器学习梳理--基础知识(2)

之前已经总结了Docker容器学习梳理--基础知识(1),但是不够详细,下面再完整补充下Docker学习的一些基础。 Docker是个什么东西 Docker是一...

307100
来自专栏IT笔记

Docker学习之CentOS 7安装配置

Docker 是一个开源工具,它可以让创建和管理 Linux 容器变得简单。容器就像是轻量级的虚拟机,并且可以以毫秒级的速度来启动或停止。Docker 帮助系统...

1.2K90
来自专栏搜云库

Ubuntu 17.04 x64 安装 Docker CE 初窥 Dockerfile 部署 Nginx

Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的运行效率,降低了云计算资源供应的成本!使用 Docker,可以让应用的部署、测...

24350
来自专栏Java架构

微服务架构基于Nginx、Node.js和Redis的Docker工作流

29250
来自专栏史上最简单的Spring Cloud教程

史上最简单的SpringCloud教程 | 第十一篇: docker部署spring cloud项目

一、docker简介 Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地...

50360
来自专栏Hadoop实操

如何基于CDSW基础镜像定制Docker

CDSW中提供的基础镜像中已有R的环境,但是在真实使用过程中往往需要安装更多R的包。我们在创建一个新的Project时如果使用CDSW基础镜像,每次都需要重新安...

44960
来自专栏架构师小秘圈

\bdocker容器极简教程

一,小王对于容器的困惑 小王刚开始学习Docker的时候,找资料在网上看到最多的是Docker的好处。比如: 1、Docker 容器的启动可以在秒级实现,这相比...

41050

扫码关注云+社区

领取腾讯云代金券