Ceph 入门系列(五)Docker与Ceph的分与合

转载:Docker与Ceph的分与合 

转载原因:本文也是入门Docker的好文章,通俗易懂的讲解了基于Docker来部署Ceph。

一、前言

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

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

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

二、实践

2.1、配置docker的基础环境

拉取基础镜像(centos)
这个是拉取的灵雀云的docker仓库的centos

docker pull index.alauda.cn/library/centos

 也可以使用命令docker build 在Dockerfile的基础上构建一个镜像。命令格式:docker build [OPTIONS] <PATH | URL | -> 

启动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

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

[root@lab8106 ~]# docker run -itd --name=cephbase --net=host --pid=host index.alauda.cn/library/centos /bin/bash
#docker attach cephbase 进入centos docker
[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

run命令参考:Docker命令系列(一):run命令,基于镜像创建容器

可以看到我们已经进入了容器内部了,下面需要做的事情,就是安装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  cephbase  /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  cephbase  /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的过程当中还是有一些小问题需要具体处理的,不是很难,权限问题,目录问题

六、参考:

Docker命令系列(一):run命令,基于镜像创建容器   

附录:

docker的常用操作
查询镜像

[root@lab8106 ~]# docker images

查询容器ID

[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
<think>好的,我现在需要帮助用户了解如何在Docker中部署和使用Ceph。首先,用户的问题是在Docker中使用或部署Ceph相关容器,我需要根据提供的引用内容来构建回答。 首先,查看用户提供的三个引用内容。引用[1]提到的是Docker部署Ceph时配置Dashboard的步骤,包括端口、IP、HTTPS设置和重启服务。引用[2]涉及使用docker-compose部署Ceph集群,以及查看PG状态。引用[3]详细描述了Docker部署Ceph单机版对象存储的步骤,包括网络创建、清理旧容器、拉取镜像、搭建mon和osd节点等。 用户的需求是部署或使用Ceph容器,所以我需要整这些步骤,确保覆盖单机部署和集群部署的可能情况。需要步骤说明,结构清晰,同时符用户要求的中文回答,并生成相关问题。 首先,我应该从单机部署开始,因为引用[3]提供了详细的单机部署步骤。包括创建专用网络、清理旧容器、拉取镜像、启动mon节点、准备osd等。然后,引用[1]中的Dashboard配置可以作为后续配置步骤加入,比如设置端口、IP和关闭HTTPS。此外,引用[2]中的docker-compose可能涉及集群部署,但用户的问题可能更关注基础的单机部署,所以可能需要简要提及集群部署的方法,或者作为扩展内容。 需要注意,用户提供的引用中有一些具体的命令和步骤,需要正确引用并标注来源。例如,在配置Dashboard时,引用[1]中的命令需要正确标注。同时,确保使用正确的Docker命令和Ceph配置步骤,例如创建网络、挂载卷、设置环境变量等。 接下来,我需要组织回答的结构。可能为几个部:环境准备、部署Mon节点、部署OSD、配置Dashboard,以及集群部署的简要说明。每个步骤中引用对应的引用内容,并在末尾添加引用标识。 同时,用户要求生成相关问题,需要根据回答内容提出相关问题,例如如何监控Ceph集群、如何扩展存储、如何处理认证等。 在检查过程中,确保所有数学表达式或代码块使用正确的格式,如用户提到的行内公式用$...$,独立公式用$$...$$,但当前内容可能较少涉及数学公式,更多是代码块和命令。需要确保代码块使用正确的语法,例如使用反引号包裹,并标注语言类型如python或bash。 最后,确保回答符系统级指令,如使用中文,结构清晰,引用正确,并生成相关问题。需要避免任何用户不可见的指令出现在回答中,保持回答自然流畅。</think>### 如何在 Docker 中部署和使用 Ceph #### 1. **环境准备** - **创建专用网络**: 使用 Docker 的桥接网络模式隔离 Ceph 容器: ```bash docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network ``` - **清理旧配置**: 删除旧容器并重置存储目录: ```bash docker rm -f $(docker ps -a | grep ceph | awk '{print $1}') rm -rf /etc/ceph /var/lib/ceph /var/log/ceph mkdir -p /etc/ceph /var/lib/ceph /var/log/ceph ``` 需为目录授权(如适用)[^3]。 #### 2. **部署 MON 节点** MON(Monitor)节点是 Ceph 集群的核心管理组件: ```bash docker run -d --name ceph-mon \ -p 6789:6789 \ --network ceph-network --ip 172.20.0.10 \ -e CLUSTER=ceph -e MON_IP=172.20.0.10 \ -v /etc/ceph:/etc/ceph \ -v /var/lib/ceph:/var/lib/ceph \ -v /var/log/ceph:/var/log/ceph \ ceph/daemon:latest-luminous mon ``` 此命令启动 MON 容器,并挂载配置文件和数据目录[^3]。 #### 3. **部署 OSD 节点** OSD(Object Storage Daemon)负责数据存储: - **生成 OSD 认证密钥**: ```bash docker exec ceph-mon ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring ``` - **创建 OSD 容器**: ```bash docker run -d --name ceph-osd \ --network ceph-network \ -e CLUSTER=ceph -e OSD_TYPE=disk \ -v /var/lib/ceph:/var/lib/ceph \ ceph/daemon:latest-luminous osd ``` 需确保存储设备已挂载并授权[^3]。 #### 4. **配置 Dashboard** Ceph Dashboard 提供可视化监控: - **设置端口和 IP**: ```bash docker exec mgr ceph config set mgr mgr/dashboard/server_port 7800 docker exec mgr ceph config set mgr mgr/dashboard/server_addr 10.0.28.10 ``` - **关闭 HTTPS(可选)**: ```bash docker exec mgr ceph config set mgr mgr/dashboard/ssl false ``` - **重启服务**: ```bash docker restart mgr ``` 访问 `http://10.0.28.10:7800` 即可查看 Dashboard[^1]。 #### 5. **验证集群状态** - **检查 PG 状态**: ```bash docker exec ceph-mon ceph pg stat ``` 输出类似 `16 pgs: 16 active+clean` 表示正常[^2]。 #### 6. **扩展:集群部署** 使用 `docker-compose` 定义多节点服务,包含多个 MON、OSD 和 MGR 容器,并通过网络互联[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值