]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: Support Docker Live Restore 59933/head
authorMichal Nasiadka <mnasiadka@gmail.com>
Wed, 11 Sep 2024 12:26:37 +0000 (14:26 +0200)
committerAdam King <adking@redhat.com>
Mon, 23 Sep 2024 15:45:27 +0000 (11:45 -0400)
Currently with Docker Live Restore [1] enabled and while restarting
Docker Engine - all Ceph container images will get restarted,
while the feature allows restarting docker.service without
containers downtime.

This is due to Requires=docker.service in systemd units templates,
which mandates that on docker.service restart - the ceph container
systemd units will be restarted as well.

Reworking Requires= to Wants= that is a weaker version of the former,
see [2].

Leaving After= entries, because they should allow systemd to correctly
order the startup (first docker, then ceph containers).

[1]: https://docs.docker.com/engine/daemon/live-restore/
[2]: https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html#Wants=

Fixes: https://tracker.ceph.com/issues/68028
Signed-off-by: Michal Nasiadka <mnasiadka@gmail.com>
(cherry picked from commit e0f77686523337f37e3ddbbe40eaa92c68947195)

doc/cephadm/install.rst
src/cephadm/cephadmlib/templates/ceph.service.j2
src/cephadm/cephadmlib/templates/init_ctr.service.j2
src/cephadm/cephadmlib/templates/sidecar.service.j2
src/cephadm/tests/test_unit_file.py

index 640c2fe0db6cf4e1edc784208e6d504126a52e9e..19f477c2cecd223009ec1cbec4c2108ac5e17ca0 100644 (file)
@@ -24,6 +24,10 @@ Requirements
 Any modern Linux distribution should be sufficient.  Dependencies
 are installed automatically by the bootstrap process below.
 
+See `Docker Live Restore <https://docs.docker.com/engine/daemon/live-restore/>`_
+for an optional feature that allows restarting Docker Engine without restarting
+all running containers.
+
 See the section :ref:`Compatibility With Podman
 Versions<cephadm-compatibility-with-podman>` for a table of Ceph versions that
 are compatible with Podman. Not every version of Podman is compatible with
index 1c043dcdd6ad1f6d383c139efe1051b8a47e4ca6..c2c4c778be63547009362b53fa91313d86cf48ca 100644 (file)
@@ -9,7 +9,7 @@ Description=Ceph %i for {{fsid}}
 After=network-online.target local-fs.target time-sync.target{% if has_docker_engine %} docker.service{% endif %}
 Wants=network-online.target local-fs.target time-sync.target
 {%- if has_docker_engine %}
-Requires=docker.service
+Wants=docker.service
 {%- endif %}
 
 PartOf=ceph-{{fsid}}.target
index e23a72be40f593c71a011a587565d0aa6f194808..6bf4304e38c0dbdb478c2e3e9fff984ff87ab839 100644 (file)
@@ -5,7 +5,7 @@ After=network-online.target local-fs.target time-sync.target
 Wants=network-online.target local-fs.target time-sync.target
 {%- if has_docker_engine %}
 After=docker.service
-Requires=docker.service
+Wants=docker.service
 {%- endif %}
 Before=ceph-{{ identity.fsid }}@%i.service
 
index 74e92cf6333c09546ada28d407fa992fb1c795d7..62d7337be8c1addf3fc375a456810741b2dce662 100644 (file)
@@ -5,7 +5,7 @@ After=network-online.target local-fs.target time-sync.target
 Wants=network-online.target local-fs.target time-sync.target
 {%- if has_docker_engine %}
 After=docker.service
-Requires=docker.service
+Wants=docker.service
 {%- endif %}
 After={{ primary.service_name }}
 
index a1d49c93c20184d561b2af2e049a9f1067159296..74cd89c1a82338d08a3585548eebdf5640070480 100644 (file)
@@ -27,11 +27,11 @@ def _get_unit_file(ctx, fsid):
     return str(systemd_unit._get_unit_file(ctx, fsid))
 
 
-def test_docker_engine_requires_docker():
+def test_docker_engine_wants_docker():
     ctx = context.CephadmContext()
     ctx.container_engine = mock_docker()
     r = _get_unit_file(ctx, '9b9d7609-f4d5-4aba-94c8-effa764d96c9')
-    assert 'Requires=docker.service' in r
+    assert 'Wants=docker.service' in r
 
 
 def test_podman_engine_does_not_req_docker():
@@ -80,7 +80,7 @@ def test_new_docker():
         '# configuration.',
         'After=network-online.target local-fs.target time-sync.target docker.service',
         'Wants=network-online.target local-fs.target time-sync.target',
-        'Requires=docker.service',
+        'Wants=docker.service',
         'PartOf=ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9.target',
         'Before=ceph-9b9d7609-f4d5-4aba-94c8-effa764d96c9.target',
         '[Service]',