Project

General

Profile

Feature #44205

Updated by Joshua Schmid 11 months ago

Having a push/apply-config option would enable us to define multiple services/daemons before the actual deployment.
This may be helpful for one-button deployments such as POCs or reproducer environments.

For the technical side:

We have to define a structure that the orchestrator understands.
Since we have *ServiceSpec*[0] and *PlacementSpec*[1] that can parse *from_json/yaml()*
this shouldn't be too hard.

After parsing the SeriveSpecs we have to call the corresponding *_add_$component()*
functions in order. We have to take care that:

* We execute in the right order (not services that create pools before OSDs exist)
** and respect dependencies (mds before NFS/RGW if specified)
* aggregate the completion objects and wait/track progress if async

The config will probably be saved in the persistent mon store and should be inspectable

example config.yaml:

<pre><code class="yaml">

mon:
placement:
count: 1 #optional (mutex with hosts)
label: foo #optional (mutex with hosts)
hosts: #optional (mutex with label and count)
- x
- y
- z

osd:
drivegroups:
default_drivegroup:
host_pattern: foo*
data_devices:
all: True

rgw: #more rgw_custom entries if more than one realm/zone
placement:
count: 1 #optional (mutex with hosts)
label: foo #optional (mutex with hosts)
hosts: #optional (mutex with label and count)
- x
- y
- z
rgw_realm: realm1
rgw_zone: zone1

# Similar options for mds/nfs/mgr etc

</code></pre>

CLI:

<pre>
ceph <orch> apply -i config.yaml
ceph <orch> show -i config.yaml
</pre>

The actual syntax is totally up for discussion. Please leave your suggestions in the comments.



[0] https://github.com/ceph/ceph/blob/e5933d5e47fb2e2b77f37678ce770a1887d54c08/src/pybind/mgr/orchestrator/_interface.py#L1338

[1] https://github.com/ceph/ceph/blob/e5933d5e47fb2e2b77f37678ce770a1887d54c08/src/pybind/mgr/orchestrator/_interface.py#L1112

Back