基于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 -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的更多相关文章
- Docker部署Nginx并修改配置文件
Docker部署Nginx并修改配置文件 一.拉取nginx镜像 docker pull nginx 二.在宿主机中创建挂载目录 mkdir -p /data/nginx/{conf,conf.d,h ...
- docker(部署常见应用):docker部署redis
上节回顾:docker(部署常见应用):docker部署mysql docker部署redis:4.0 # 下载镜像 docker pull redis:4.0 # 查看下载镜像 docker ima ...
- docker(部署常见应用):docker部署mysql
上节回顾:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql: # 查看镜像 docker image ...
- docker部署Ceph分布式存储集群
1.环境准备 3台virtualbox虚拟机,用来安装ceph集群,已用docker-machine安装上了docker,每台虚拟机虚拟创建一个5G的硬盘,用于存储osd数据,例如:/dev/sdb ...
- Ubuntu 16.04下使用docker部署ceph集群
ceph集群docker部署 通过docker可以快速部署小规模Ceph集群的流程,可用于开发测试. 以下的安装流程是通过linux shell来执行的:假设你只有一台机器,装了linux(如Ubun ...
- 【转载】Docker部署nginx并修改配置文件
docker 部署个nginx docker run \ --name nginx-health-web-pc \ -d -p 6800:80 \ -v /usr/docker/nginx/html: ...
- Docker部署注册中心、Docker创建私有镜像库、自签名证书、Deploy a registry server
这是我在内部部署Docker Registry时记录下来的笔记,操作环境是Centos 7.Docker 18.06.1-ce 1.运行registry 我当前所使用的主机的IP是192.168.1. ...
- Docker系列06:Linux修改docker镜像和容器数据存储位置
指定镜像和容器存放路径的参数是--graph=/var/lib/docker,其默认存储位置为/var/lib/docker, Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的 ...
- docker(部署常见应用):docker部署nginx
上回说到centos安装docker. 这次用实战,docker部署运行常见的应用. docker常用命令 参看:docker命令大全.这里不做赘述. docker部署nginx 1.docker h ...
随机推荐
- 【C语言学习笔记】C语言函数执行成功时,返回1和返回0,究竟哪个好?
基本上,没有人会将大段的C语言代码全部塞入 main() 函数,更好的做法是按照复用率高,耦合性低的原则,尽可能的将代码拆分不同的功能模块,并封装成函数.C语言代码的组合千变万化,因此函数的功能可能会 ...
- 华为路由器配置OSPF
OSPF是什么 OSPF(Open Shortest Pass First,开放最短路径优先协议),是一个最常用的内部网管协议,是一个链路状态协议. 使用场景:适用于运营商.政府机构等大型网络中多节点 ...
- Tomcat6.0 支持 https
环境信息 Linux系统 + Tomcat (程序页面可以运行前提下) 条件:安装了JDK 查看指定版本信息 1 进入$JAVA_HOME/bin目录 (一般是这个目录 /usr/java ...
- LinkageSel无限级联动下拉菜单
http://files.cnblogs.com/files/chenghu/LinkageSel-master.zip
- js 判断客户端 和 asp.net/C#判断客户端类型
1.js 判断客户端 <script language="JavaScript"> <!-- onload = function browserRedirect( ...
- maven中pom.xml文件配置
<properties> <spring.version>4.3.18.RELEASE</spring.version> ...
- JS里的小细节,持续更新
判断把值定为 false 集合 JavaScript里把 null.undefined.0.''.NaN 都视为false,而其他值一概为 true Map Map是一组键值对的结构,具有极快的查找速 ...
- ceil中有-0啊
这里主要是有一点: 1 Math.ceil(d1) ceil 方法上有这么一段注释:If the argument value is less than zero but greater ...
- forword与redirect
1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地 ...
- bash xshell 特性
1.tab键补全 2.命令行常用快捷键: ctrl键+ c #取消当前操作 ctrl键+ d #退出当前用户登录 ctrl键+ a #光标移动到光标所在行的行首 ctrl键+ e ...