前言

容器和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 -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86ed05173432 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/ceph
total 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 NAMES
874d78ccae55 ceph/daemon "/entrypoint.sh osd_c" 14 hours ago Up 14 hours myosd1
86ed05173432 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 ceph
ceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/bin/false
root@9b269bf751f9:/# sed -i 's/64045/0/g' /etc/passwd
root@9b269bf751f9:/# cat /etc/passwd|grep ceph
ceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false

退出容器

root@9b269bf751f9:/# exit

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

[root@lab8106 ceph]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9b269bf751f9 ceph/daemon "/bin/bash" 2 minutes ago Exited (0) 15 seconds ago angry_hawking [root@lab8106 ceph]# docker commit 9b269bf751f9 ceph/daemon [root@lab8106 ~]# docker run -i -t --entrypoint /entrypoint.sh ceph/daemon
[root@lab8106 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c2ea602c18ac ceph/daemon "/entrypoint.sh" 10 seconds ago Exited (1) 7 seconds ago ecstatic_bartik [root@lab8106 ceph]# docker commit c2ea602c18ac ceph/daemon

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

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

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

总结

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

相关资料

bootstrap-your-ceph-cluster-in-docker/

变更记录

Why Who When
创建 武汉-运维-磨渣 2017-03-15

基于docker部署ceph以及修改docker image的更多相关文章

  1. Docker部署Nginx并修改配置文件

    Docker部署Nginx并修改配置文件 一.拉取nginx镜像 docker pull nginx 二.在宿主机中创建挂载目录 mkdir -p /data/nginx/{conf,conf.d,h ...

  2. docker(部署常见应用):docker部署redis

    上节回顾:docker(部署常见应用):docker部署mysql docker部署redis:4.0 # 下载镜像 docker pull redis:4.0 # 查看下载镜像 docker ima ...

  3. docker(部署常见应用):docker部署mysql

    上节回顾:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql: # 查看镜像 docker image ...

  4. docker部署Ceph分布式存储集群

    1.环境准备 3台virtualbox虚拟机,用来安装ceph集群,已用docker-machine安装上了docker,每台虚拟机虚拟创建一个5G的硬盘,用于存储osd数据,例如:/dev/sdb ...

  5. Ubuntu 16.04下使用docker部署ceph集群

    ceph集群docker部署 通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的:假设你只有一台机器,装了linux(如Ubun ...

  6. 【转载】Docker部署nginx并修改配置文件

    docker 部署个nginx docker run \ --name nginx-health-web-pc \ -d -p 6800:80 \ -v /usr/docker/nginx/html: ...

  7. Docker部署注册中心、Docker创建私有镜像库、自签名证书、Deploy a registry server

    这是我在内部部署Docker Registry时记录下来的笔记,操作环境是Centos 7.Docker 18.06.1-ce 1.运行registry 我当前所使用的主机的IP是192.168.1. ...

  8. Docker系列06:Linux修改docker镜像和容器数据存储位置

    指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...

  9. docker(部署常见应用):docker部署nginx

    上回说到centos安装docker. 这次用实战,docker部署运行常见的应用. docker常用命令 参看:docker命令大全.这里不做赘述. docker部署nginx 1.docker h ...

随机推荐

  1. Linux系统编程 —线程同步概念

    同步概念 同步,指对在一个系统中所发生的事件之间进行协调,在时间上出现一致性与统一化的现象. 但是,对于不同行业,对于同步的理解略有不同.比如:设备同步,是指在两个设备之间规定一个共同的时间参考:数据 ...

  2. empty()和size() == 0有区别吗

    empty()和size() 这里说的empty()和size()都是STL的容器中提供的接口,分别用来判断当前容器是否为空和获取当前包含的元素个数 区别 其实按道理来说两者应该是相等的,而且STL容 ...

  3. 编程语言那么多,为什么偏偏是C语言成了大学的必修课?

    谁叫你不幸生在中国了?--何祚庥(中国科学院院士) 这是一本给非计算机专业的大学生的C语言的书."我不是学计算机的,为啥要学C语言?"这个问题每年在中华大地都会被问上几百万次. 被 ...

  4. 【C语言入门】"为什么这个又错了啊"来自编程初学者常见错误合辑!

    C语言的最大特点是:功能强,使用方便灵活. C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下"灵活的 余地",但还是由于这个灵活给程序的调试带来了许多不便,尤其 ...

  5. 迎难而上,QPS提高22+倍

    简介 记录1次性能提升的经历,它最大的挑战不在于性能提升,而在于时间急,涉及的面广(比如:机房F5的SSL/TLS性能,机房互联网流量费和项目投入产出比等).性能指标:至少支持10K QPS,10ms ...

  6. 逆向so文件调试工具ida基础知识点

    1.界面介绍 https://www.freebuf.com/column/157939.html 2.IDA常用快捷键 切换文本视图与图表视图 空格键 返回上一个操作地址 ESC 搜索地址和符号 G ...

  7. 对于app监测root权限或者强制升级

    只做分享学习 以下方法对于大多数Root检测的App (不限于仅银行类App),均适用. 另,"主用户 + Island用户" 情况下: 如果App仅安装在 Island下,当绕不 ...

  8. 1024|推荐一个开源免费的Spring Boot教程

    2020-1024=996! 今天,星期六,你们是否加班了?我反正加了!早上去公司开了一早上会,中午回家写下了这篇文章. 今天,我要推荐一个开源免费的Spring Boot项目,就是我最近日更的Spr ...

  9. Vue 学习第二部

    目录 通过axios实现数据请求 json json数据的语法 js中是提供的接送数据转换方法 ajax 数据接口 ajax的使用 同源策略 ajax跨域(跨源)方案之cors 组件化开发 组件[co ...

  10. cao 啥时候能系统地复习一下数据结构 我光学数学去了

    最近有功夫的话再敲敲数据结构复习复习