From 5a922dc162bbe0a03450165da4e6aceca55073d4 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 12 Apr 2023 23:37:43 +0200 Subject: [PATCH] daemon: deprecate --oom-score-adjust for the daemon The `oom-score-adjust` option was added in a894aec8d81de5484152a76d76b80809df9edd71, to prevent the daemon from being OOM-killed before other processes. This option was mostly added as a "convenience", as running the daemon as a systemd unit was not yet common. Having the daemon set its own limits is not best-practice, and something better handled by the process-manager starting the daemon. Commit cf7a5be0f2ee8bb4a3f7961682e13b89bc625299 fixed this option to allow disabling it, and 2b8e68ef06ca3daf2b0e17e51ba72999773b6270 removed the default score adjust. This patch deprecates the option altogether, recommending users to set these limits through the process manager used, such as the "OOMScoreAdjust" option in systemd units. With this patch: dockerd --oom-score-adjust=-500 --validate Flag --oom-score-adjust has been deprecated, and will be removed in the next release. configuration OK echo '{"oom-score-adjust":-500}' > /etc/docker/daemon.json dockerd INFO[2023-04-12T21:34:51.133389627Z] Starting up INFO[2023-04-12T21:34:51.135607544Z] containerd not running, starting managed containerd WARN[2023-04-12T21:34:51.135629086Z] DEPRECATED: The "oom-score-adjust" config parameter and the dockerd "--oom-score-adjust" option will be removed in the next release. docker info Client: Context: default Debug Mode: false ... DEPRECATED: The "oom-score-adjust" config parameter and the dockerd "--oom-score-adjust" option will be removed in the next release Signed-off-by: Sebastiaan van Stijn --- cmd/dockerd/config_unix.go | 3 ++- cmd/dockerd/daemon_unix.go | 6 ++++-- daemon/config/config_linux.go | 2 +- daemon/info_unix.go | 3 +++ libcontainerd/supervisor/remote_daemon_options_linux.go | 2 ++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/cmd/dockerd/config_unix.go b/cmd/dockerd/config_unix.go index e76c962422..b0aa098edb 100644 --- a/cmd/dockerd/config_unix.go +++ b/cmd/dockerd/config_unix.go @@ -46,7 +46,8 @@ func installConfigFlags(conf *config.Config, flags *pflag.FlagSet) error { flags.StringVar(&conf.CgroupParent, "cgroup-parent", "", "Set parent cgroup for all containers") flags.StringVar(&conf.RemappedRoot, "userns-remap", "", "User/Group setting for user namespaces") flags.BoolVar(&conf.LiveRestoreEnabled, "live-restore", false, "Enable live restore of docker when containers are still running") - flags.IntVar(&conf.OOMScoreAdjust, "oom-score-adjust", 0, "Set the oom_score_adj for the daemon") + flags.IntVar(&conf.OOMScoreAdjust, "oom-score-adjust", 0, "Set the oom_score_adj for the daemon (deprecated)") + _ = flags.MarkDeprecated("oom-score-adjust", "and will be removed in the next release.") flags.BoolVar(&conf.Init, "init", false, "Run an init in the container to forward signals and reap processes") flags.StringVar(&conf.InitPath, "init-path", "", "Path to the docker-init binary") flags.Int64Var(&conf.CPURealtimePeriod, "cpu-rt-period", 0, "Limit the CPU real-time period in microseconds for the parent cgroup for all containers (not supported with cgroups v2)") diff --git a/cmd/dockerd/daemon_unix.go b/cmd/dockerd/daemon_unix.go index 8b7fe066f2..cd239522df 100644 --- a/cmd/dockerd/daemon_unix.go +++ b/cmd/dockerd/daemon_unix.go @@ -61,9 +61,11 @@ func (cli *DaemonCli) getPlatformContainerdDaemonOpts() ([]supervisor.DaemonOpt, // TODO(thaJeztah) change this to use /proc/self/oom_score_adj instead, // which would allow us to set the correct score even if dockerd's score // was set through other means (such as systemd or "manually"). - supervisor.WithOOMScore(cli.Config.OOMScoreAdjust), + supervisor.WithOOMScore(cli.Config.OOMScoreAdjust), //nolint:staticcheck // ignore SA1019 (WithOOMScore is deprecated); will be removed in the next release. + } + if cli.Config.OOMScoreAdjust != 0 { + logrus.Warn(`DEPRECATED: The "oom-score-adjust" config parameter and the dockerd "--oom-score-adjust" option will be removed in the next release.`) } - return opts, nil } diff --git a/daemon/config/config_linux.go b/daemon/config/config_linux.go index 3fd8315fc8..085d6fe478 100644 --- a/daemon/config/config_linux.go +++ b/daemon/config/config_linux.go @@ -68,7 +68,7 @@ type Config struct { Ulimits map[string]*units.Ulimit `json:"default-ulimits,omitempty"` CPURealtimePeriod int64 `json:"cpu-rt-period,omitempty"` CPURealtimeRuntime int64 `json:"cpu-rt-runtime,omitempty"` - OOMScoreAdjust int `json:"oom-score-adjust,omitempty"` + OOMScoreAdjust int `json:"oom-score-adjust,omitempty"` // Deprecated: configure the daemon's oom-score-adjust using a process manager instead. Init bool `json:"init,omitempty"` InitPath string `json:"init-path,omitempty"` SeccompProfile string `json:"seccomp-profile,omitempty"` diff --git a/daemon/info_unix.go b/daemon/info_unix.go index f8474191d1..5fbba8960f 100644 --- a/daemon/info_unix.go +++ b/daemon/info_unix.go @@ -164,6 +164,9 @@ func (daemon *Daemon) fillPlatformInfo(v *types.Info, sysInfo *sysinfo.SysInfo) if !v.BridgeNfIP6tables { v.Warnings = append(v.Warnings, "WARNING: bridge-nf-call-ip6tables is disabled") } + if daemon.configStore.OOMScoreAdjust != 0 { + v.Warnings = append(v.Warnings, `DEPRECATED: The "oom-score-adjust" config parameter and the dockerd "--oom-score-adjust" option will be removed in the next release`) + } } func (daemon *Daemon) fillPlatformVersion(v *types.Version) { diff --git a/libcontainerd/supervisor/remote_daemon_options_linux.go b/libcontainerd/supervisor/remote_daemon_options_linux.go index 9be34177ed..3ae0d6cc6c 100644 --- a/libcontainerd/supervisor/remote_daemon_options_linux.go +++ b/libcontainerd/supervisor/remote_daemon_options_linux.go @@ -1,6 +1,8 @@ package supervisor // import "github.com/docker/docker/libcontainerd/supervisor" // WithOOMScore defines the oom_score_adj to set for the containerd process. +// +// Deprecated: setting the oom-score-adjust from the daemon itself is deprecated, and should be handled by the process-manager starting the daemon instead. func WithOOMScore(score int) DaemonOpt { return func(r *remote) error { r.oomScore = score