Disabling scenarios in ceph-docker
I recently completed a full resync from Kraken to Jewel in ceph-docker in which I introduced a new feature to disable scenarios. Running an application on bleeding edge technology can be tough and challenging for individuals and also for companies. Even me, as a developer and for bleeding edge testers I’m tempted to release unstable features (understand not recommended for production). So sometimes it’s handy to have the ability to restrict the use of a software by disabling some of its functionality. This is exactly what I did for ceph-docker, in this article I’ll explain how that works.
We currently have a lot of scenarios to deployment, I refer a scenario sometimes as a daemon or an osd scenario. Let me clarify this. In ceph-docker, we have a single container image that holds all the Ceph daemons. So by calling it, you can run any of the Ceph daemons.
All the scenarios are contained into the ALL_SCENARIOS
variable:
populate_kvstore
: will populate etcd with key and value written into the ceph.defaults file.mon
: will deploy a monitor.osd
: will deploy an OSD and try to determine which OSD scenario is desired based on the variables passed at runtime.osd_directory
: will deploy an OSD by simply consuming a directory, this assumes that the OSD store has been populated earlier. You can run multi-osd process into this container.osd_directory_single
: identical as theosd_directory
scenario, the only difference is that only one OSD will be picked up and started.osd_ceph_disk
: will deploy an OSD using ceph-disk, it will prepare and activate a given device.osd_ceph_disk_prepare
: will only prepare an OSD disk on a given device.osd_ceph_disk_activate
: will only activate an OSD disk on a given device.osd_ceph_activate_journal
: will only activate a journal device.mds
: will deploy a Ceph metadata server.rgw
: will deploy a Ceph Rados Gateway.rgw_user
: will create a Rados Gateway user.restapi
: will deploy the ceph-rest-api.nfs
: will deploy Ceph Rados Gateway NFS.zap_device
: will zap a given block device (many can be passed).mon_health
: check the health of all the monitors (used when deploying on Kubernetes).
So now thanks to the disabled_scenario file you can disable any of the scenarios above. Disabling a daemon will be done during the image build. Instead of removing portions of the code we call a specific function that tells you the chosen scenario is disabled (at runtime).
Here is an example, I edited my disabled_scenario
file like this:
EXCLUDED_TAGS="nfs"
Then I built my container Ubuntu 16.04 container image on Ceph Jewel like this:
ceph-docker - [master] $ ./generate-dev-env.sh jewel ubuntu 16.04 |
And then I ran my container image like so:
$ sudo docker run -d --name ceph-nfs ceph/daemon nfs |
Now let’s look at this container logs:
$ sudo docker logs -f ceph-nfs |
As you can see, I’m getting an error and the container won’t run.
In a feature version, I might introduce the support of Docker
--build-arg
to setEXCLUDED_TAGS
as a build-time variable. So it will be easier for automated CI to quickly build more images with different scenarios available.
Comments