]> git.apps.os.sepia.ceph.com Git - ceph.git/commit
common/config: respect POD_MEMORY_REQUEST *and* POD_MEMORY_LIMIT env vars 29511/head
authorSage Weil <sage@redhat.com>
Tue, 6 Aug 2019 16:12:43 +0000 (11:12 -0500)
committerSage Weil <sage@redhat.com>
Tue, 6 Aug 2019 17:50:36 +0000 (12:50 -0500)
commit25f28e610fe674f24eaa0a66c9ccc91b03fdcc92
tree00d0c7d554e3f2d1cb2d31cfba29a867f25e69af
parent77b634ad08e9df9953a5f5c46c1da56d87fbc98e
common/config: respect POD_MEMORY_REQUEST *and* POD_MEMORY_LIMIT env vars

If a kubernetes pod spec specifies a limit of X, then the pod gets both
the limits.memory and requests.memory resource fields set, and rook passes
those as POD_MEMORY_LIMIT and POD_MEMORY_REQUEST environment variables.

This is a problem if only the limit is set, because we will end up
setting our osd_memory_target (and, in the future, other *_memory_targets)
to the hard limit, and the daemon will inevitably reach that threshold
and get killed.

Fix this by also looking at the POD_MEMORY_LIMIT value, and applying the
ratio (default: .8) to it, and setting our actual target to the min of
that and the POD_MEMORY_REQUEST.

Also, set the "default" target to ratio*limit, so that it will apply in
general when no request is specified.

When both request and limit are 10M, we then see

        "osd_memory_target": {
            "default": "800000000000",
            "env": "800000000000",
            "final": "800000000000"
        },

In a more "normal" situation where limit is 10M and request is 5M, we get

        "osd_memory_target": {
            "default": "800000000000",
            "env": "500000000000",
            "final": "500000000000"
        },

If only limit is specified (to 10M), we get

        "osd_memory_target": {
            "default": "800000000000",
            "final": "800000000000"
        },

Fixes: https://tracker.ceph.com/issues/41037
Signed-off-by: Sage Weil <sage@redhat.com>
src/common/config.cc