前言

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

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

实践步骤

安装docker

  1. yum install docker

下载ceph镜像

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

  1. docker pull ceph/daemon

准备好一些目录

  1. mkdir -p /etc/ceph
  2. mkdir -p /var/lib/ceph/

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

创建一个mon

  1. sudo docker run -d --net=host --name=mon \
  2. -v /etc/ceph:/etc/ceph \
  3. -v /var/lib/ceph/:/var/lib/ceph \
  4. -e MON_IP=192.168.8.106 \
  5. -e CEPH_PUBLIC_NETWORK=192.168.0.0/16 \
  6. ceph/daemon mon

MON_IP就是宿主机的IP地址

执行完了后

  1. [root@lab8106 ceph]# docker ps -l
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 86ed05173432 ceph/daemon "/entrypoint.sh mon" About a minute ago Up 59 seconds mon

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

  1. [root@lab8106 ceph]# docker logs -f mon
  2. /sbin/ip
  3. creating /etc/ceph/ceph.client.admin.keyring
  4. creating /etc/ceph/ceph.mon.keyring
  5. creating /var/lib/ceph/bootstrap-osd/ceph.keyring
  6. creating /var/lib/ceph/bootstrap-mds/ceph.keyring
  7. creating /var/lib/ceph/bootstrap-rgw/ceph.keyring
  8. monmaptool: monmap file /etc/ceph/monmap-ceph
  9. monmaptool: set fsid to cb5df106-25b3-4f93-9f54-baca2976a47b
  10. monmaptool: writing epoch 0 to /etc/ceph/monmap-ceph (1 monitors)
  11. creating /tmp/ceph.mon.keyring
  12. importing contents of /etc/ceph/ceph.client.admin.keyring into /tmp/ceph.mon.keyring
  13. importing contents of /var/lib/ceph/bootstrap-osd/ceph.keyring into /tmp/ceph.mon.keyring
  14. importing contents of /var/lib/ceph/bootstrap-mds/ceph.keyring into /tmp/ceph.mon.keyring
  15. importing contents of /var/lib/ceph/bootstrap-rgw/ceph.keyring into /tmp/ceph.mon.keyring
  16. importing contents of /etc/ceph/ceph.mon.keyring into /tmp/ceph.mon.keyring
  17. ceph-mon: set fsid to cb5df106-25b3-4f93-9f54-baca2976a47b
  18. ceph-mon: created monfs at /var/lib/ceph/mon/ceph-lab8106 for mon.lab81

提示成功了

我们看下生成的文件

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

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

创建一个osd

  1. sudo docker run -d --net=host --name=myosd1 \
  2. --privileged=true \
  3. -v /etc/ceph:/etc/ceph \
  4. -v /var/lib/ceph/:/var/lib/ceph \
  5. -v /dev/:/dev/ \
  6. -e OSD_DEVICE=/dev/sdb \
  7. ceph/daemon osd_ceph_disk

如果查询日志

  1. docker logs -f myosd1

如果执行命令

  1. docker exec -it mon ceph -s

如果想进入容器内部

  1. docker exec -it mon /bin/bash

修改集群的副本数

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

查看集群状态

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

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

碰上问题想修改image

我们看下我们运行的docker

  1. [root@lab8106 ceph]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 874d78ccae55 ceph/daemon "/entrypoint.sh osd_c" 14 hours ago Up 14 hours myosd1
  4. 86ed05173432 ceph/daemon "/entrypoint.sh mon" 15 hours ago Up 15 hours mon

COMMAND这里有个/entrypoint.sh

如果存在ENTRYPOINT和CMD,那么CMD就是ENTRYPOINT的参数,如果没有ENTRYPOINT,则CMD就是默认执行指令

也就是容器启动的时候默认是会去执行/entrypoint.sh 这个了

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

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

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

  1. root@9b269bf751f9:/# cat /etc/passwd|grep ceph
  2. ceph:x:64045:64045:Ceph storage service:/var/lib/ceph:/bin/false
  3. root@9b269bf751f9:/# sed -i 's/64045/0/g' /etc/passwd
  4. root@9b269bf751f9:/# cat /etc/passwd|grep ceph
  5. ceph:x:0:0:Ceph storage service:/var/lib/ceph:/bin/false

退出容器

  1. root@9b269bf751f9:/# exit

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

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

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

  1. [root@lab8106 ceph]# docker run -i -t --entrypoint /bin/bash ceph/daemon
  2. root@65b538fdc61e:/# cat /etc/passwd|grep ceph
  3. 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. centos8平台使用ethtool配置网卡

    一,ethtool命令所属的包 [root@centos8 liuhongdi]# whereis ethtool ethtool: /usr/sbin/ethtool /usr/share/man/ ...

  2. laravel服务容器 转

    laravel框架底层解析 本文参考陈昊<Laravel框架关键技术解析>,搭建一个属于自己的简化版服务容器.其中涉及到反射.自动加载,还是需要去了解一下. laravel服务容器 建立项 ...

  3. Cypress系列(68)- request() 命令详解

    如果想从头学起Cypress,可以看下面的系列文章哦 https://www.cnblogs.com/poloyy/category/1768839.html 作用 发起一个 HTTP 请求 语法格式 ...

  4. Luogu-2480 古代猪文

    我们首先来概括一下题意,其实就是给定 \(n,g\),求: \[g^{\sum_{k\nmid n} C_n^{\frac{n}{k}}}\operatorname{mod} 999911659 \] ...

  5. GDB常用调试命令(二)

    GDB信号处理 在GDB中使用handle命令定义一个信号处理.信号可以以SIG开头或不以 SIG开头,可以用定义一个要处理信号的范围(如:SIGIO-SIGKILL,表示处理从SIGIO信号到SIG ...

  6. Spring Boot 学习摘要--关于日志框架

    date: 2020-01-05 16:20:00 updated: 2020-01-08 15:50:00 Spring Boot 学习摘要--关于日志框架 学习教程来自:B站 尚硅谷 1. 关于日 ...

  7. ES6里class杂乱随笔

    这是一篇乱七八糟的随笔.class是ES6新增的特性,用于解决JavaScript没有类的困惑. --杂谈 ES5及之前,类都是用函数来替代,包括实例. 如: 1 function Person(na ...

  8. eclipse之SSH配置hibernate【三】

    配置hibernate,没有和spring整合,可以看成独立的部分. 在src下创建hibernate配置文件,hibernate.cfg.xml.主要是sql连接相关配置. <?xml ver ...

  9. Reading Face, Read Health论文阅读笔记

    摘要: 随着计算技术觉.人工智能和移动技术的发展,利用计算机读脸技术去识别每个人每天的健康是可行的.怎么去设计一个基于FRT(face reading technologies)的用于得到每天的保健实 ...

  10. 从原生web组件到框架组件源码(一)

    温馨提醒,当你觉得看我写的很乱的时候,就对了,那是因为我查阅了大量的资料提取出来的,因为有点东西不太理解,所以你会感觉有的部分重复了,也不是重复,只是后面对前面的内容进行梳理了一些,需要耐心的看到最后 ...