Deployment ceph cluster within docker

22 Aug 2019

Create specific network for ceph nodes

$ docker network create --driver bridge ceph-net
$ docker network inspect ceph-net
{
    "Subnet": "172.18.0.0/16",
    "Gateway": "172.18.0.1/16"
}

Deploy the first monitor daemon

$ docker run -d --net=ceph-net \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-e MON_IP=172.18.0.2 \
-e CEPH_PUBLIC_NETWORK=172.18.0.0/16 \
--name mon1 \
ceph/daemon:latest-luminous mon

Check if the monitor daemon is ok

$ docker exec -ti mon1 ceph -v
ceph version 12.2.12 (1436006594665279fe734b4c15d7e08c13ebd777) luminous (stable)
$ docker exec -ti mon1 ceph -s
  cluster:
    id:     60e46743-3cf3-43fb-bd5f-c70cc3390280
    health: HEALTH_OK
 
  services:
    mon: 1 daemons, quorum 0dcaba64ad8d
    mgr: no daemons active
    osd: 0 osds: 0 up, 0 in
 
  data:
    pools:   0 pools, 0 pgs
    objects: 0 objects, 0B
    usage:   0B used, 0B / 0B avail
    pgs:     

Deploy the second monitor daemon

$ docker run -d --net=ceph-net \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-e MON_IP=172.18.0.3 \
-e CEPH_PUBLIC_NETWORK=172.18.0.0/16 \
--name mon2 \
ceph/daemon:latest-luminous mon

Deploy the third monitor daemon

$ docker run -d --net=ceph-net \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-e MON_IP=172.18.0.4 \
-e CEPH_PUBLIC_NETWORK=172.18.0.0/16 \
--name mon3 \
ceph/daemon:latest-luminous mon

Deploy a Manager daemon

$ docker run -d –net=ceph-net
-v /etc/ceph:/etc/ceph
-v /var/lib/ceph/:/var/lib/ceph/
-v /var/log/ceph/:/var/log/ceph/
–name mgr1
ceph/daemon:latest-luminous mgr

Deploy the first OSD daemon

$ docker run -d --net=ceph-net \
--privileged=true --pid=host \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-v /dev/:/dev/ \
-e OSD_DEVICE=/dev/sdb \
--name osd1 \
ceph/daemon:latest-luminous osd

Perhaps occure error, you could zap the disk before try again.

$ docker run -d --privileged=true \
-v /dev/:/dev/ \
-e OSD_DEVICE=/dev/sdb \
ceph/daemon:latest-luminous zap_device

Deploy the second OSD daemon

$ docker run -d --net=ceph-net \
--privileged=true --pid=host \
-v /etc/ceph:/etc/ceph \
-v /var/lib/ceph/:/var/lib/ceph/ \
-v /var/log/ceph/:/var/log/ceph/ \
-v /dev/:/dev/ \
-e OSD_DEVICE=/dev/sdc \
--name osd2 \
ceph/daemon:latest-luminous osd

Deploy a Rados Gateway

$ docker run -d –net=ceph-net
-v /etc/ceph:/etc/ceph
-v /var/lib/ceph/:/var/lib/ceph/
-v /var/log/ceph/:/var/log/ceph/
-p 8080:8080
–name rgw1
ceph/daemon:latest-luminous rgw