Deployment of Multi-Monitor Ceph
With Quincy, Ubuntu 22.04 and host-labels
In a previous article, we described how to deploy a Ceph cluster with one monitor node and two OSD nodes. We used Ubuntu 20.04 and docker.io package and installed the Ceph pacific version.
Here, we will deploy Ceph quincy version with multiple monitors and OSD nodes. We will use Ubuntu 22.04 and docker.io.
In this article we assume you are familiar to the basic deployment steps in the previous article.
First we need to prepare the nodes for deployment: a user with sudo permission, dns entries (optional, but preferable), and container runtime (docker or podman). Please note that password-less ssh configuration for this user is unnecessary. Time-sync among nodes are also necessary.
Now, let’s start with getting a cephadm for quincy.
curl --silent --remote-name --location https://github.com/ceph/ceph/raw/quincy/src/cephadm/cephadm
sudo ./cephadm add-repo --release quincy # Install cephadmAs of 2023/06/27, installing cephadm will produce this error.
The repository 'https://download.ceph.com/debian-quincy jammy Release' does not have a Release file.If this happens, we can remove /etc/apt/sources.list.d/ceph.list and run sudo apt update. Please note that installing cephadm is optional and the downloaded executable is good enough for deployment.
Here, we have three monitor nodes: ceph-mon1, ceph-mon2 and ceph-mon3. We have 4 OSD nodes: ceph-osd01, ceph-osd02, ceph-osd03 and ceph-osd04. This time we will use labels for the deployment.
sudo ceph orch host label add ceph-mon1 mon sudo ceph orch host label add ceph-mon2 mon sudo ceph orch host label add ceph-mon3 mon sudo ceph orch host label add ceph-osd01 osd sudo ceph orch host label add ceph-osd02 osd sudo ceph orch host label add ceph-osd03 osd sudo ceph orch host label add ceph-osd04 osd
After these commands, we will have these hosts with labels.

To deploy more monitors on the mon nodes, run this command.
sudo ceph orch apply mon --placement="3 label:mon"The placement with labels can be applied for any daemons.
sudo ceph orch apply prometheus --placement 'count:1 label:mon'
sudo ceph orch apply alertmanager --placement 'count:1 label:mon'
sudo ceph orch apply grafana --placement 'count:1 label:mon'
sudo ceph orch apply mgr --placement="2 ceph-mon1 ceph-mon2" # hostname can be used as well.After these configurations are applied, we have the following. The exact placement is left to the Ceph cluster. As you see, the most daemons are on ceph-mon1. The output were trimmed for conciseness.

It is worthwhile to pay attention on _admin label. When we bootstrap ceph-mon1 node, the label was created automatically and it is a special label. Once this label is applied to a node, two files will be created in /etc/ceph directory: ceph.conf and ceph.client.admin.keyring. Once the ceph-common package is installed, this can access the Ceph cluster.
In this article, we explained how to deploy a Ceph cluster where
- Ceph version is Quincy
- The OS is Ubuntu 22.04 and the container runtime is docker.io
- host labels are used for daemon placement. This placement will give freedom to move daemon in case some hosts are down.
