前言

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

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

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

实践

配置docker的基础环境

拉取基础镜像

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

docker pull index.alauda.cn/library/centos

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

systemctl start docker
systemctl enable docker

查询当前机器上面的镜像

[root@lab8106 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
index.alauda.cn/library/centos latest 904d6c400333 4 months ago 196.7 MB

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

docker run -itd --name=cephbase --net=host --pid=host index.alauda.cn/library/centos /bin/bash
[root@lab8106 ~]# docker attach cephbase [root@lab8106 /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/docker-8:2-83216-dd340d1f6a68b6849b9500c4e6f9b7fb1901c3c0cb1ce0d7336f5104a1ef4a10 10G 240M 9.8G 3% /
tmpfs 24G 0 24G 0% /dev
tmpfs 24G 0 24G 0% /sys/fs/cgroup
/dev/sda2 50G 31G 20G 62% /etc/hosts
shm

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

[root@lab8106 /]# yum makecache
[root@lab8106 /]# yum install wget --nogpgcheck
[root@lab8106 /]# rm -rf /etc/yum.repos.d/*.repo
[root@lab8106 /]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@lab8106 /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@lab8106 /]# sed -i '/aliyuncs/d' /etc/yum.repos.d/CentOS-Base.repo
[root@lab8106 /]# sed -i '/aliyuncs/d' /etc/yum.repos.d/epel.repo
[root@lab8106 /]# sed -i 's/$releasever/7.2.1511/g' /etc/yum.repos.d/CentOS-Base.repo
[root@lab8106 /]# vi /etc/yum.repos.d/ceph.repo
[root@lab8106 /]# yum makecache
[root@lab8106 /]# yum install ceph ceph-deploy

检查软件版本装对了没

[root@lab8106 /]# ceph -v
ceph version 10.2.3 (ecc23778eb545d8dd55e2e4735b53cc93f92e65b)
[root@lab8106 /]# ceph-deploy --version
1.5.36

可以退出了

exit

查看之前的容器的ID

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

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

[root@lab8106 ~]# docker commit 48420c9955b5 cephbase
sha256:ffe236ee2bb61d2809bf1f4c03596f83b9c0e8a6fc2eb9013a81abb25be833e9

查看当前的镜像

[root@lab8106 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cephbase latest ffe236ee2bb6 About a minute ago 1.39 GB

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

我们来创建mon的容器

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

进入到容器当中去

[root@lab8106 ~]# docker exec -it monnode /bin/bash

在容器当中执行

[root@lab8106 deploy]# ceph-deploy mon create lab8106

我们来创建osd的容器

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的常用操作

查询镜像

[root@lab8106 ~]# docker images

查询容器

[root@lab8106 ~]# docker ps
[root@lab8106 ~]# docker ps -l

删除容器

[root@lab8106 ~]# docker rm 64f617dfada5

删除镜像

[root@lab8106 ~]# docker rmi node

进入容器内部

[root@lab8106 ~]# docker exec -it monnode /bin/bash

让容器执行命令

[root@lab8106 ~]# docker exec monnode uptime

退出容器,不停止容器

ctrl+p然后ctrl+q

Docker与Ceph的分与合的更多相关文章

  1. DevOps的分与合

    一.抽象的 DevOps DevOps 是使软件开发和 IT 团队之间的流程自动化的一组实践,以便他们可以更快,更可靠地构建,测试和发布软件.DevOps 的概念建立在建立团队之间协作文化的基础上,这 ...

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

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

  3. 基于docker部署ceph以及修改docker image

    前言 容器和ceph的结合已经在一些生产环境当中做了尝试,容器的好处就是对运行环境的一个封装,传统的方式是集成为ISO,这个需要一定的维护量,而容器的相关操作会简单很多,也就有了一些尝试,个人觉得如果 ...

  4. docker创建ceph集群

    背景 Ceph官方现在提供两类镜像来创建集群,一种是常规的,每一种Ceph组件是单独的一个镜像,如ceph/daemon.ceph/radosgw.ceph/mon.ceph/osd等:另外一种是最新 ...

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

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

  6. ceph运维命令合集

    一.集群 1.启动一个ceph进程 启动mon进程 [root@ceph-adm ~]#203.109 service ceph start mon.ceph-mon1 启动msd进程 [root@c ...

  7. Docker daemon.json 的配置项目合集

    这几天看了一点docker相关的东西, 在学习中: 看了下园友的blog 感觉很好 这里 学习一下. https://www.cnblogs.com/pzk7788/p/10180197.html 其 ...

  8. Paper | 学习多任务中的最佳分/ 合结构(十字绣结构)

    目录 1. 问题 2. 十字绣结构(Cross-stitch architecture) 3. 实验设计 论文:Cross-stitch Networks for Multi-task Learnin ...

  9. 以Docker容器方式安装Ceph

    获取Ceph的Docker镜像 因为公司对于网络环境的限制,安装ceph时使用ceph-deploy反而很不方便,且ssh免密码方式也不适用,所以使用docker方式安装. Git地址 https:/ ...

随机推荐

  1. [Leetcode题解]2. 两数相加-链表遍历和重构

    1. 审题leetcode 02 add-two-numbers​ 我们先看一下题目,如下  : 链表的从前往后为数字的低位到高位,模拟加法手算过程,从前往后遍历即可, 注意每个数字0-9,进位要处理 ...

  2. docker-阿里云加速

    系统版本 centos7 阿里云登录 ->容器镜像服务->镜像加速器 复制下面的直接执行即可     sudo mkdir -p /etc/docker sudo tee /etc/doc ...

  3. PHP7下的协程实现 转

        前言 相信大家都听说过『协程』这个概念吧. 但是有些同学对这个概念似懂非懂,不知道怎么实现,怎么用,用在哪,甚至有些人认为yield就是协程! 我始终相信,如果你无法准确地表达出一个知识点的话 ...

  4. 不死的小强 .net core 微服务 快速开发框架 Viper 限流

    1.Viper是什么? Viper 是.NET平台下的Anno微服务框架的一个示例项目.入门简单.安全.稳定.高可用.全平台可监控.底层通讯可以随意切换thrift grpc. 自带服务发现.调用链追 ...

  5. sentinel控制台与应用通信原理

    1,应用程序配置中的port选项用于指定在应用端启动的http server的端口,默认8719 sentinel: transport: dashboard: localhost:8080 port ...

  6. docker容器学习资料

    现在说起docker容器,你应该不会太陌生了吧?如果你是真的不懂或者是太久没有用到已经忘记的差不多了,那么你需要这一波的干货了,这波的干货刚刚好可以满足你的需要! 话不多说,直接上干货

  7. Graph-GCN

    前言 在大型图中,节点的低维向量embedding被证明了作为各种各样的预测和图分析任务的特征输入是非常有用的.顶点embedding最基本的基本思想是使用降维技术从高维信息中提炼一个顶点的邻居信息, ...

  8. 存算分离下写性能提升10倍以上,EMR Spark引擎是如何做到的?

    ​引言 随着大数据技术架构的演进,存储与计算分离的架构能更好的满足用户对降低数据存储成本,按需调度计算资源的诉求,正在成为越来越多人的选择.相较 HDFS,数据存储在对象存储上可以节约存储成本,但与此 ...

  9. Linux 环境编程:dirfd参数 有关解析

    背景 在Unix环境编程中,系统提供了很多以at结尾的函数,如openat.fstatat等,而这类函数通常有一个特点,就是形参列表中多了int dirfd 例如: int open(const ch ...

  10. SAP S/4HANA 2020安装实录

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 今天开始试着安装SAP S/4HANA 2020版本,也是目前SAP ERP最高的版本,总安装文件大小大概50GB,数据库版本必须是HANA ...