ubuntu:18.04
0.拉取镜像
docker pull ceph/daemon
- ceph/mon、ceph/osd…等一个一个镜像拉取是比较旧的方法
1.初始化ceph挂载目录
rm -rf /etc/ceph /var/lib/ceph /var/log/ceph
mkdir -p /etc/ceph /var/lib/ceph /var/log/ceph
2.创建Ceph专用网络
docker network create --driver bridge --subnet 172.20.0.0/16 ceph-network
docker network inspect ceph-network
3.启动mon节点
docker run -itd
--name monnode --network ceph-network --ip 172.20.0.10 --restart always -v
/etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ -v
/var/log/ceph/:/var/log/ceph/ -e CLUSTER=ceph -e WEIGHT=1.0 -e
MON_IP=172.20.0.10 -e MON_NAME=monnode -e CEPH_PUBLIC_NETWORK=172.20.0.0/16
ceph/daemon mon
- –ip:设置的是容器的IP
- ceph/daemon mon:中的mon是参数,不可随意更改
- 学习中,参数配置可能会有多余的
docker logs monnode # 查看日志
docker exec monnode ceph -s # 查看集群的健康状态
4.创建osd节点
- 创建osd节点前先执行,不然会报错(执行一次即可)
docker exec monnode ceph auth get client.bootstrap-osd -o /var/lib/ceph/bootstrap-osd/ceph.keyring
docker run -itd
--privileged=true --name osdnode1 --network ceph-network -e CLUSTER=ceph -e
WEIGHT=1.0 -e MON_NAME=monnode -e MON_IP=172.20.0.10 -v /etc/ceph:/etc/ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /var/lib/ceph/osd/1:/var/lib/ceph/osd -e
OSD_TYPE=directory -v /etc/localtime:/etc/localtime:ro ceph/daemon osd
- 创建三个(分别为:osdnode0、osdnode1、osdnode2)
- 每次修改参数:–name、-v /var/lib/ceph/osd/1
- 每次创建完与mon同样查看相应的log和集群状态,以便及时发现错误
- osd节点启动可能会慢一些
docker logs osdnode0
可能会有报错如下,改错应该是无伤大雅
ceph-0.1 | 2020-02-27 18:25:51.787 7f5aa2934700 -1 osd.0 4 set_numa_affinity unable to identify public interface 'eth0' numa node: (2) No such file or directory
5.创建mgr节点
docker run -itd --privileged=true --restart=always --name mgrnode
--network ceph-network -e CLUSTER=ceph --pid=container:monnode -v
/etc/ceph:/etc/ceph -v /var/lib/ceph/:/var/lib/ceph/ ceph/daemon mgr
- 需要注意的参数:–pid
6.创建gateway节点
docker exec monnode ceph auth get client.bootstrap-rgw -o /var/lib/ceph/bootstrap-rgw/ceph.keyring
docker run -itd
--privileged=true --name rgwnode --network ceph-network -e CLUSTER=ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /etc/ceph:/etc/ceph -v
/etc/localtime:/etc/localtime:ro -e RGW_NAME=rgw0 ceph/daemon rgw
7.再创建两个mon节点
- monnode1节点,IP为172.20.0.13
docker run -itd
--privileged=true --name monnode1 --ip 172.20.0.13 --network ceph-network -e
CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=monnode1 -e MON_IP=172.20.0.13 -e
CEPH_PUBLIC_NETWORK=172.20.0.0/16 -v /etc/ceph:/etc/ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /var/log/ceph/:/var/log/ceph/ ceph/daemon mon
- monnode2节点,IP为172.20.0.11
- IP是随便设置的
docker run -itd
--privileged=true --name monnode2 --ip 172.20.0.11 --network ceph-network -e
CLUSTER=ceph -e WEIGHT=1.0 -e MON_NAME=monnode2 -e MON_IP=172.20.0.11 -e
CEPH_PUBLIC_NETWORK=172.20.0.0/16 -v /etc/ceph:/etc/ceph -v
/var/lib/ceph/:/var/lib/ceph/ -v /var/log/ceph/:/var/log/ceph/ ceph/daemon mon
8.查看集群状态
docker exec monnode ceph -s
9.后续问题
9.1 mon节点启动失败
- monnode2节点重启失败
docker logs monnode2
查看日志,发现
Existing mon, trying to rejoin cluster...
- 解决方法:
复制容器的脚本:
docker cp monnode2:/opt/ceph-container/bin/start_mon.sh .
修改以下内容:
# 注释此行,直接将v2v1复制为2,代表是走V2协议, 以指定IP方式加入集群
#v2v1=$(ceph-conf -c /etc/ceph/${CLUSTER}.conf 'mon host' | tr ',' '\n' | grep -c ${MON_IP})
v2v1=2
再将脚本复制到容器内:
docker cp start_mon.sh monnode2:/opt/ceph-container/bin/start_mon.sh
再重启monode2即可!!!
参考:
https://blog.csdn.net/hxx688/article/details/103440967