基于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 ...
随机推荐
- centos8平台使用ethtool配置网卡
一,ethtool命令所属的包 [root@centos8 liuhongdi]# whereis ethtool ethtool: /usr/sbin/ethtool /usr/share/man/ ...
- laravel服务容器 转
laravel框架底层解析 本文参考陈昊<Laravel框架关键技术解析>,搭建一个属于自己的简化版服务容器.其中涉及到反射.自动加载,还是需要去了解一下. laravel服务容器 建立项 ...
- Cypress系列(68)- request() 命令详解
如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 发起一个 HTTP 请求 语法格式 ...
- Luogu-2480 古代猪文
我们首先来概括一下题意,其实就是给定 \(n,g\),求: \[g^{\sum_{k\nmid n} C_n^{\frac{n}{k}}}\operatorname{mod} 999911659 \] ...
- GDB常用调试命令(二)
GDB信号处理 在GDB中使用handle命令定义一个信号处理.信号可以以SIG开头或不以 SIG开头,可以用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从SIGIO信号到SIG ...
- Spring Boot 学习摘要--关于日志框架
date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...
- ES6里class杂乱随笔
这是一篇乱七八糟的随笔.class是ES6新增的特性,用于解决JavaScript没有类的困惑. --杂谈 ES5及之前,类都是用函数来替代,包括实例. 如: 1 function Person(na ...
- eclipse之SSH配置hibernate【三】
配置hibernate,没有和spring整合,可以看成独立的部分. 在src下创建hibernate配置文件,hibernate.cfg.xml.主要是sql连接相关配置. <?xml ver ...
- Reading Face, Read Health论文阅读笔记
摘要: 随着计算技术觉.人工智能和移动技术的发展,利用计算机读脸技术去识别每个人每天的健康是可行的.怎么去设计一个基于FRT(face reading technologies)的用于得到每天的保健实 ...
- 从原生web组件到框架组件源码(一)
温馨提醒,当你觉得看我写的很乱的时候,就对了,那是因为我查阅了大量的资料提取出来的,因为有点东西不太理解,所以你会感觉有的部分重复了,也不是重复,只是后面对前面的内容进行梳理了一些,需要耐心的看到最后 ...