容器化、容器化、容器化。。。都说重要的事情说三遍,那么Ceph部署有必要容器化吗?
有必要,非常有必要。容器化以后,不仅不会损失性能,而且对以后更新、回退都很方便。而且一个物理机(或虚拟机)上可以跑多个Ceph集群。对于一个开发人员,修改调试都实在是太方便了~~~~~!
闲言碎语不要讲,先拉个集群起来看看吧。
mimic
镜像
网络
使用docker bridge网络,每个容器指定静态IP。
1 | docker network create --subnet 192.168.44.0/24 cephnet |
拉起Ceph集群
MON
1 | docker run -d --net cephnet --ip 192.168.44.11 -v /Users/zhoub/temp/etc_ceph/:/etc/ceph -v /Users/zhoub/temp/var_lib_ceph/:/var/lib/ceph -e MON_IP=192.168.44.11 -e CEPH_PUBLIC_NETWORK=192.168.44.0/24 --name mon --hostname mon ceph/daemon:latest-mimic mon |
MGR
MGR节点很重要,如果没有MGR节点,你就看不到OSD的使用量了。现在的MON真是翻身农奴把歌唱啊,一心只做心跳了。
1 | docker run -d --net cephnet --ip 192.168.44.12 -v /Users/zhoub/temp/etc_ceph/:/etc/ceph -v /Users/zhoub/temp/var_lib_ceph/:/var/lib/ceph --name mgr --hostname mgr ceph/daemon:latest-mimic mgr |
OSD
OSD有两种部署方式,一种是将硬盘部署;另一种是目录部署。由于本人使用mac版本docker,所以在映射硬盘过程不太方便,所以使用目录部署。后面会给出硬盘部署的方式。
目录
1 | docker run -d --net cephnet --ip 192.168.44.13 -v /Users/zhoub/temp/etc_ceph/:/etc/ceph -v /Users/zhoub/temp/var_lib_ceph/:/var/lib/ceph --name osd --hostname osd -e OSD_TYPE=directory ceph/daemon:latest-mimic osd |
由于mac上的docker是运行在一个虚拟机中的,目前不太清楚该虚拟机使用的文件系统是什么,所以osd会暴如下错误:
1 | docker logs -f osd |
硬盘
在硬盘部署以前,需要先对硬盘进行格式化
1 | docker run -d --privileged=true --rm -v /dev/:/dev/ -e OSD_DEVICE=/dev/sdb ceph/daemon:latest-mimic zap_device |
格式化后再启动容器
1 | docker run -d --net cephnet --ip 192.168.44.13 --hostname osd --name=osd --privileged -v /Users/zhoub/temp/etc_ceph/:/etc/ceph -v /Users/zhoub/temp/var_lib_ceph/:/var/lib/ceph -v /dev/:/dev/ -e OSD_DEVICE=/dev/sdb ceph/daemon:latest-mimic osd |
总结
集群除OSD服务外其它服务均可以正常容器化
1 | [root@mon /]# ceph -s |
OSD目录部署不能正常提供服务主要是因为宿主机的文件系统类型未知,若宿主机可正常登录操作,此问题可解;
OSD硬盘部署不能正常提供服务主要是因为宿主机不能增加硬盘设备,若宿主机可以添加硬盘,此问题可解。
综上所述,问题根本在于对宿主机的操作了解不够清晰。