本文共 5009 字,大约阅读时间需要 16 分钟。
“我不知道自己为什么做这个,我只知道有人需要这个功能(当然,他们可能也不知道为什么想要)。我只是觉得想进行技术尝试,那就试试看!”当然上述想法听起来并不乐观,但这确实是我当时真实的想法。我的观点随后有了一些变化,我来解释下为什么是值得的。希望这个解释也能改变你的看法(我的解释不仅仅是“Docker很酷,所以我们要把所有东西都跑在Docker里!”)。
yum
或 apt-get
不同,容器使得软件的升级和回卷变得容易:我们可以通过 docker stop
或者 docker run
来发布新的daemons版本。我们甚至可以在一台物理机器上运行多个相互隔离的集群。这些都为开发过程提供了极大的便利。 daemon
的镜像中。这个镜像包含了所有的模块,你可以在运行 docker run
的时候通过命令行选择性地激活不同模块。如果你想试用我们的镜像,我们推荐使用 ceph/daemon
镜像。下面我就举例说明如何运行。 --net=host
来将主机的网络层开放给容器: $ sudo docker run -d --net=host \-v /etc/ceph:/etc/ceph \-v /var/lib/ceph/:/var/lib/ceph \-e MON_IP=192.168.0.20 \-e CEPH_PUBLIC_NETWORK=192.168.0.0/24 \ceph/daemon mon
MON_IP
是运行Docker的主机IPMON_NAME
是你监测模块的名称(默认为$(hostname))CEPH_PUBLIC_NETWORK
是运行Docker的主机的CIDR。它和MON_IP
必须是同一个网络。CEPH_CLUSTER_NETWORK
是运行Docker的主机的备用网口的CIDR,为OSD的备份流量使用。--privileged=true
来使得容器中的进程可以访问 /dev
等其他内核功能。然后,我们在开放OSD的目录的基础上也支持其他配置,开放OSD的目录可以让operators来对设备做合适的准备工作。这样我们就可以简单地开放OSD目录,配置OSD( ceph-osd mkfs
)的工作就会通过Entry Point来完成。我下面介绍的配置方法是最简单的,因为它只需要你指定一个block device,剩下的事情都会由Entry Point完成。 --privileged=true
可以采用我的第二个例子。 $ sudo docker run -d --net=host \--privileged=true \-v /etc/ceph:/etc/ceph \-v /var/lib/ceph/:/var/lib/ceph \-v /dev/:/dev/ \-e OSD_DEVICE=/dev/vdd \ceph-daemon osd_ceph_disk
--privileged=true
,你也可以使用你喜欢的配置管理工具来手动配置OSD。 docker run -v /osds/1:/var/lib/ceph/osd/ceph-1 -v /osds/2:/var/lib/ceph/osd/ceph-2$ sudo docker run -d --net=host \-v /etc/ceph:/etc/ceph \-v /var/lib/ceph/:/var/lib/ceph \-v /osds/1:/var/lib/ceph/osd/ceph-1 \ceph-daemon osd_disk_directory
OSD_DEVICE i
是OSD设备,例如:/dev/sdb
OSD_JOURNAL
使用来储存OSD journal的设备,例如:/dev/sdz
HOSTNAME
是运行OSD的主机(默认为$(hostname)OSD_FORCE_ZAP
会强制将制定的设备内容zapping(默认为 0,设为1去开启)OSD_JOURNAL_SIZE
是OSD journal的大小(默认为 100)$ sudo docker run -d --net=host \-v /var/lib/ceph/:/var/lib/ceph \-v /etc/ceph:/etc/ceph \-e CEPHFS_CREATE=1 \ceph-daemon mds
MDS_NAME
是Metadata服务器的名字(默认为mds-$(hostname))。CEPHFS_CREATE
会为Metadata服务器生成文件系统(默认为0,设为1 去开启)。CEPHFS_NAME
是Metadata文件系统的名字(默认为cephfs)。CEPHFS_DATA_POOL
是Metadata服务器data pool的名字(默认为cephfs_data)。CEPHFS_DATA_POOL_PG
是data pool的placement groups的数量 (默认为8)。CEPHFS_DATA_POOL
是Metadata服务器metadata pool的名字(默认为cephfs_metadata)。CEPHFS_METADATA_POOL_PG
是metadata pool的placement groups的数量(默认为 8)。civetweb
。当然,我们也可以通过指定地址和端口来使用不同的CGI前端: $ sudo docker run -d --net=host \-v /var/lib/ceph/:/var/lib/ceph \-v /etc/ceph:/etc/ceph \ceph-daemon rgw
RGW_REMOTE_CGI
指定是否使用嵌入的web服务器(默认为0,设为1去关闭)。RGW_REMOTE_CGI_HOST
指定运行CGI进程的远程主机。RGW_REMOTE_CGI_PORT
是运行CGI进行的远程主机端口。RGW_CIVETWEB_PORT
是civetweb的监听端口(默认为80)。RGW_NAME
是RADOS gateway实例的名字(默认为$(hostname))。ceph.conf
和所有的Ceph密钥都会在监测模块启动阶段生成。这个过程假定了你必须在将集群扩展到多节点的时候去把这些配置传送到所有节点上。这个操作并不灵活,我们希望去改善它。我马上要提出的一个方案就是利用Ansible来生成这些配置文件和密码,并将他们安装到所有机器上。 转载地址:http://gsdeo.baihongyu.com/