mirror of https://github.com/k3s-io/k3s
OOM protected docker processes (-900)
parent
ecc3abdf83
commit
ebbb130af8
|
@ -39,7 +39,8 @@ type containerManagerImpl struct {
|
|||
dockerContainerName string
|
||||
|
||||
// The manager of the resource-only container Docker should be in.
|
||||
manager fs.Manager
|
||||
manager fs.Manager
|
||||
dockerOomScoreAdj int
|
||||
}
|
||||
|
||||
var _ containerManager = &containerManagerImpl{}
|
||||
|
@ -55,6 +56,7 @@ func newContainerManager(dockerDaemonContainer string) (containerManager, error)
|
|||
AllowAllDevices: true,
|
||||
},
|
||||
},
|
||||
dockerOomScoreAdj: -900,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -103,6 +105,11 @@ func (cm *containerManagerImpl) ensureDockerInContainer() error {
|
|||
errs = append(errs, fmt.Errorf("failed to move PID %q (in %q) to %q", pid, cont, cm.dockerContainerName))
|
||||
}
|
||||
}
|
||||
|
||||
// Also apply oom_score_adj to processes
|
||||
if err := util.ApplyOomScoreAdj(pid, cm.dockerOomScoreAdj); err != nil {
|
||||
errs = append(errs, fmt.Errorf("failed to apply oom score %q to PID %q", cm.dockerOomScoreAdj, pid))
|
||||
}
|
||||
}
|
||||
|
||||
return errors.NewAggregate(errs)
|
||||
|
|
|
@ -1293,7 +1293,8 @@ func (dm *DockerManager) createPodInfraContainer(pod *api.Pod) (kubeletTypes.Doc
|
|||
if containerInfo.State.Pid == 0 {
|
||||
return "", fmt.Errorf("failed to get init PID for Docker pod infra container %q", string(id))
|
||||
}
|
||||
return id, util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj)
|
||||
util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj)
|
||||
return id, nil
|
||||
}
|
||||
|
||||
// TODO(vmarmol): This will soon be made non-public when its only use is internal.
|
||||
|
|
|
@ -214,8 +214,13 @@ func ApplyOomScoreAdj(pid int, value int) error {
|
|||
pidStr = strconv.Itoa(pid)
|
||||
}
|
||||
|
||||
if err := ioutil.WriteFile(path.Join("/proc", pidStr, "oom_score_adj"), []byte(strconv.Itoa(value)), 0700); err != nil {
|
||||
fmt.Errorf("failed to set oom_score_adj to %d: %v", value, err)
|
||||
oom_value, err := ioutil.ReadFile(path.Join("/proc", pidStr, "oom_score_adj"))
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to read oom_score_adj: %v", err)
|
||||
} else if string(oom_value) != strconv.Itoa(value) {
|
||||
if err := ioutil.WriteFile(path.Join("/proc", pidStr, "oom_score_adj"), []byte(strconv.Itoa(value)), 0700); err != nil {
|
||||
return fmt.Errorf("failed to set oom_score_adj to %d: %v", value, err)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
Loading…
Reference in New Issue