UDN-企业互联网技术人气社区

板块导航

浏览  : 2188
回复  : 0

[资源分享] Docker与Ceph的分与合

[复制链接]
哥屋恩的头像 楼主
发表于 2016-11-3 20:41:59 | 显示全部楼层 |阅读模式
  一、前言

  Docker是一个管理工具,在操作系统之上提供了一个新的独立轻环境,好处是本地提供了一个基础镜像,然后基于镜像再运行环境,也可以把环境重新打包为镜像,管理起来类似于git,感觉非常的方便,并且能够做到一处提交,处处可以取到相同的环境,大大的减少了因为环境偏差造成的系统不稳定

  目前有不少生成环境已经把ceph和Docker结合在一起运行了,这个有的是确实能够理解Docker的好处,也能够有技术力量去进行维护,这个地方相当于两套系统了,并且关于技术的传递也增加了难度,特别是一套系统是Docker+ceph的环境,并且又出现相关人员离职的情况,新来的人如果不是技术很熟,之前的技术文档没有记录很全的话,再去运维这一套系统还是比较有难度的

  本篇目的是记录一下Docker与ceph的结合的方式,关于ceph和Docker的分与合,只有做到能剥离的系统,才不会因为技术原因受限

  二、实践

  2.1、配置Docker的基础环境

  拉取基础镜像

  这个是拉取的灵雀云的Docker仓库的centos

  
  1. Docker pull index.alauda.cn/library/centos
复制代码

  启动Docker进程,并且设置自启动

  1.  systemctl start Docker
  2. systemctl enable Docker
复制代码


  查询当前机器上面的镜像

  1. [root@lab8106 ~]# Docker images
  2. REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
  3. index.alauda.cn/library/centos   latest              904d6c400333        4 months ago        196.7 MB
复制代码


  我们先对我们的镜像做一些基本的设置

  1. Docker run -itd --name=cephbase --net=host --pid=host index.alauda.cn/library/centos /bin/bash
  2. [root@lab8106 ~]# Docker attach cephbase

  3. [root@lab8106 /]# df -h
  4. Filesystem                                                                                     Size  Used Avail Use% Mounted on
  5. /dev/mapper/Docker-8:2-83216-dd340d1f6a68b6849b9500c4e6f9b7fb1901c3c0cb1ce0d7336f5104a1ef4a10   10G  240M  9.8G   3% /
  6. tmpfs                                                                                           24G     0   24G   0% /dev
  7. tmpfs                                                                                           24G     0   24G   0% /sys/fs/cgroup
  8. /dev/sda2                                                                                       50G   31G   20G  62% /etc/hosts
  9. shm
复制代码


  可以看到我们已经进入了容器内部了,下面需要做的事情,就是将ceph运行需要的一些软件装上去

  1. [root@lab8106 /]# yum makecache
  2. [root@lab8106 /]# yum install wget --nogpgcheck
  3. [root@lab8106 /]# rm -rf /etc/yum.repos.d/*.repo
  4. [root@lab8106 /]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  5. [root@lab8106 /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  6. [root@lab8106 /]# sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
  7. [root@lab8106 /]# sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
  8. [root@lab8106 /]# sed -i 's/$releasever/7.2.1511/g' /etc/yum.repos.d/CentOS-Base.repo
  9. [root@lab8106 /]# vi /etc/yum.repos.d/ceph.repo
  10. [root@lab8106 /]# yum makecache
  11. [root@lab8106 /]# yum install ceph ceph-deploy
复制代码


  检查软件版本装对了没

  1. [root@lab8106 /]# ceph -v
  2. ceph version 10.2.3 (ecc23778eb545d8dd55e2e4735b53cc93f92e65b)
  3. [root@lab8106 /]# ceph-deploy --version
  4. 1.5.36
复制代码


  可以退出了

 
  1.  exit
复制代码

  查看之前的容器的ID

 
  1. [root@lab8106 ~]# Docker ps -l
  2. CONTAINER ID        IMAGE                            COMMAND             CREATED             STATUS                      PORTS               NAMES
  3. 48420c9955b5        index.alauda.cn/library/centos   "/bin/bash"         About an hour ago   Exited (0) 14 seconds ago                       cephbase
复制代码


  将容器保存为一个新的镜像,cephbase

 
  1.  [root@lab8106 ~]# Docker commit 48420c9955b5 cephbase
  2. sha256:ffe236ee2bb61d2809bf1f4c03596f83b9c0e8a6fc2eb9013a81abb25be833e9
复制代码


  查看当前的镜像

 
  1.  [root@lab8106 ~]# Docker images
  2. REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
  3. cephbase                         latest              ffe236ee2bb6        About a minute ago   1.39 GB
复制代码


  基础镜像就完成,包括了ceph运行需要的软件

  我们来创建mon的容器

 
  1.  Docker run --privileged -itd --name=monnode --net=host -v /var/log/ceph:/var/log/ceph -v /var/run/ceph:/var/run/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v /etc/ceph:/etc/ceph -v /sys/fs/cgroup:/sys/fs/cgroup ceph /sbin/init
复制代码


  进入到容器当中去

 
  1.  [root@lab8106 ~]# Docker exec -it monnode /bin/bash
复制代码

  在容器当中执行

 
  1.  [root@lab8106 deploy]# ceph-deploy mon create lab8106
复制代码


  我们来创建osd的容器

 
  1.  Docker run --privileged -itd --name=osd0 --net=host -v /var/log/ceph:/var/log/ceph -v /var/run/ceph:/var/run/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v /etc/ceph:/etc/ceph -v /var/lib/ceph/osd/ceph-0:/var/lib/ceph/osd/ceph-0 -v /sys/fs/cgroup:/sys/fs/cgroup ceph /sbin/init
复制代码


  我们将网络映射到主机上,也就是容器和主机公用网络和主机名,然后把本地的一个数据盘的目录映射进去用于osd的部署,这里都是使用-v进行映射

  这个地方因为是centos7,所以systemctl内部是无法使用的,而ceph是需要这个来控制服务的,所以需要提权,并且把入口改为/sbin/init

  三、回顾流程

  下载centos基础镜像

  修改镜像的内容并提交为新的镜像

  基于新的镜像启动容器(采用host映射,目录映射,所有数据都是留在物理机)

  进入容器进行ceph的部署

  进入容器启动相关进程

  这样ceph是运行到了Docker中,即使把Docker容器销毁掉,因为基于主机名和网络的配置跟宿主机是一致的,所以直接在宿主机上也是能马上启动起来的

  四、为何用容器

  基于容器的技术是最近几年开始火起来的,目前的云计算还处于火热期,openstack还是显得比较重型的,很多时候我们只需要的是一个能够运行我们web服务的环境,然后容器技术就应运而生了,直接启动一个容器,就能实现,这个对于宿主机来说方便的只是启动一个进程那么简单

  对于庞大复杂的服务来说,如何做到环境一致也是一直很难做到的,一排物理机,因为各种各样的原因,升级,重装系统,很难保证整套系统基础环境的一致性,而基于Docker的环境就能很方便的实现这个,相当于把整个运行环境打了一个包,所有的宿主机能够很方便的统一到相同的环境,即使重装了宿主机,也能方便的用一两条命令将环境部署到统一,比如上面所说的ceph,升级了基础镜像内的软件包,然后将所有的运行进程进行一次重启,就相当于运行了一个新的环境

  容器还能够做的事情就是能够很便捷的把一个复杂环境运行起来,特别对于web类的服务,一台机器上可以跑一排的对外服务,即使出了问题,也能很快的再运行起来,这个对于传统的环境来说就是很难实现的,这里讲一下calamari,这个监控系统不是很复杂,但是因为依赖的软件的问题,造成很多人无法正常运行起来,这个后面我会出一个集成好calamari的Docker环境,实现一键运行

  在低版本的os上能够运行高版本的服务,比如在centos6上运行centos7的Docker环境

  五、总结

  本篇的文章的标题为Docker与ceph的分与合,一套系统除了自身需要稳定性以外,系统自身最好不要受制于其他系统,需要在设计初期就能保证,各个模块都能轻松的剥离,否则很容易受制于另外一套系统,所以基于上面的方案来说,Docker和ceph既是合在一起的,也是分开的,本篇只是讲了一个框架,实际部署ceph的过程当中还是有一些小问题需要具体处理的,不是很难,权限问题,目录问题

  六、变更记录

Why
Who
When
创建
武汉-运维-磨渣
2016-10-19

  附录:

  Docker的常用操作

  查询镜像

 
  1.  [root@lab8106 ~]# Docker images
复制代码

  查询容器

 
  1.  [root@lab8106 ~]# Docker ps[root@lab8106 ~]# Docker ps -l
复制代码


  删除容器

 
  1.  [root@lab8106 ~]# Docker rm 64f617dfada5
复制代码


  删除镜像

 
  1.  [root@lab8106 ~]# Docker rmi node
复制代码


  进入容器内部

 
  1.  [root@lab8106 ~]# Docker exec -it monnode /bin/bash
复制代码

  让容器执行命令

 
  1.  [root@lab8106 ~]# Docker exec monnode uptime
复制代码


  退出容器,不停止容器

 
  1.  ctrl+p然后ctrl+q
复制代码


原文作者:zphj1987 来源:开发者头条
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部