mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 02:09:56 +00:00
Merge pull request #9824 from dchen1107/clean
explicitly applying oom_score_adj(0) to processes of user containers
This commit is contained in:
commit
80c48aedb2
@ -48,9 +48,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// The oom_score_adj of the POD infrastructure container. The default is 0, so
|
// The oom_score_adj of the POD infrastructure container. The default is 0 for
|
||||||
// any value below that makes it *less* likely to get OOM killed.
|
// any other docker containers, so any value below that makes it *less* likely
|
||||||
podOomScoreAdj = -100
|
// to get OOM killed.
|
||||||
|
podOomScoreAdj = -100
|
||||||
|
userContainerOomScoreAdj = 0
|
||||||
|
|
||||||
maxReasonCacheEntries = 200
|
maxReasonCacheEntries = 200
|
||||||
|
|
||||||
@ -1195,6 +1197,28 @@ func (dm *DockerManager) runContainerInPod(pod *api.Pod, container *api.Containe
|
|||||||
if err = dm.os.Symlink(containerLogFile, symlinkFile); err != nil {
|
if err = dm.os.Symlink(containerLogFile, symlinkFile); err != nil {
|
||||||
glog.Errorf("Failed to create symbolic link to the log file of pod %q container %q: %v", podFullName, container.Name, err)
|
glog.Errorf("Failed to create symbolic link to the log file of pod %q container %q: %v", podFullName, container.Name, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set OOM score of POD container to lower than those of the other containers
|
||||||
|
// which have OOM score 0 by default in the pod. This ensures that it is
|
||||||
|
// killed only as a last resort.
|
||||||
|
containerInfo, err := dm.client.InspectContainer(string(id))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the PID actually exists, else we'll move ourselves.
|
||||||
|
if containerInfo.State.Pid == 0 {
|
||||||
|
return "", fmt.Errorf("failed to get init PID for Docker container %q", string(id))
|
||||||
|
}
|
||||||
|
if container.Name == PodInfraContainerName {
|
||||||
|
util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj)
|
||||||
|
} else {
|
||||||
|
// Children processes of docker daemon will inheritant the OOM score from docker
|
||||||
|
// daemon process. We explicitly apply OOM score 0 by default to the user
|
||||||
|
// containers to avoid daemons or POD containers are killed by oom killer.
|
||||||
|
util.ApplyOomScoreAdj(containerInfo.State.Pid, userContainerOomScoreAdj)
|
||||||
|
}
|
||||||
|
|
||||||
return kubeletTypes.DockerID(id), err
|
return kubeletTypes.DockerID(id), err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1249,19 +1273,6 @@ func (dm *DockerManager) createPodInfraContainer(pod *api.Pod) (kubeletTypes.Doc
|
|||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set OOM score of POD container to lower than those of the other
|
|
||||||
// containers in the pod. This ensures that it is killed only as a last
|
|
||||||
// resort.
|
|
||||||
containerInfo, err := dm.client.InspectContainer(string(id))
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure the PID actually exists, else we'll move ourselves.
|
|
||||||
if containerInfo.State.Pid == 0 {
|
|
||||||
return "", fmt.Errorf("failed to get init PID for Docker pod infra container %q", string(id))
|
|
||||||
}
|
|
||||||
util.ApplyOomScoreAdj(containerInfo.State.Pid, podOomScoreAdj)
|
|
||||||
return id, nil
|
return id, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -898,7 +898,7 @@ func TestSyncPodCreateNetAndContainer(t *testing.T) {
|
|||||||
// Create pod infra container.
|
// Create pod infra container.
|
||||||
"create", "start", "inspect_container",
|
"create", "start", "inspect_container",
|
||||||
// Create container.
|
// Create container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
fakeDocker.Lock()
|
fakeDocker.Lock()
|
||||||
@ -947,7 +947,7 @@ func TestSyncPodCreatesNetAndContainerPullsImage(t *testing.T) {
|
|||||||
// Create pod infra container.
|
// Create pod infra container.
|
||||||
"create", "start", "inspect_container",
|
"create", "start", "inspect_container",
|
||||||
// Create container.
|
// Create container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
fakeDocker.Lock()
|
fakeDocker.Lock()
|
||||||
@ -999,7 +999,7 @@ func TestSyncPodWithPodInfraCreatesContainer(t *testing.T) {
|
|||||||
// Inspect pod infra container (but does not create)"
|
// Inspect pod infra container (but does not create)"
|
||||||
"inspect_container",
|
"inspect_container",
|
||||||
// Create container.
|
// Create container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
fakeDocker.Lock()
|
fakeDocker.Lock()
|
||||||
@ -1040,7 +1040,7 @@ func TestSyncPodDeletesWithNoPodInfraContainer(t *testing.T) {
|
|||||||
// Create pod infra container.
|
// Create pod infra container.
|
||||||
"create", "start", "inspect_container",
|
"create", "start", "inspect_container",
|
||||||
// Create container.
|
// Create container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
// A map iteration is used to delete containers, so must not depend on
|
// A map iteration is used to delete containers, so must not depend on
|
||||||
@ -1165,7 +1165,7 @@ func TestSyncPodBadHash(t *testing.T) {
|
|||||||
// Check the pod infra container.
|
// Check the pod infra container.
|
||||||
"inspect_container",
|
"inspect_container",
|
||||||
// Kill and restart the bad hash container.
|
// Kill and restart the bad hash container.
|
||||||
"inspect_container", "stop", "create", "start",
|
"inspect_container", "stop", "create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
if err := fakeDocker.AssertStopped([]string{"1234"}); err != nil {
|
if err := fakeDocker.AssertStopped([]string{"1234"}); err != nil {
|
||||||
@ -1225,7 +1225,7 @@ func TestSyncPodsUnhealthy(t *testing.T) {
|
|||||||
// Kill the unhealthy container.
|
// Kill the unhealthy container.
|
||||||
"inspect_container", "stop",
|
"inspect_container", "stop",
|
||||||
// Restart the unhealthy container.
|
// Restart the unhealthy container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
if err := fakeDocker.AssertStopped([]string{"1234"}); err != nil {
|
if err := fakeDocker.AssertStopped([]string{"1234"}); err != nil {
|
||||||
@ -1410,7 +1410,7 @@ func TestSyncPodWithRestartPolicy(t *testing.T) {
|
|||||||
// Check the pod infra container.
|
// Check the pod infra container.
|
||||||
"inspect_container",
|
"inspect_container",
|
||||||
// Restart both containers.
|
// Restart both containers.
|
||||||
"create", "start", "create", "start",
|
"create", "start", "inspect_container", "create", "start", "inspect_container",
|
||||||
},
|
},
|
||||||
[]string{"succeeded", "failed"},
|
[]string{"succeeded", "failed"},
|
||||||
[]string{},
|
[]string{},
|
||||||
@ -1421,7 +1421,7 @@ func TestSyncPodWithRestartPolicy(t *testing.T) {
|
|||||||
// Check the pod infra container.
|
// Check the pod infra container.
|
||||||
"inspect_container",
|
"inspect_container",
|
||||||
// Restart the failed container.
|
// Restart the failed container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
},
|
},
|
||||||
[]string{"failed"},
|
[]string{"failed"},
|
||||||
[]string{},
|
[]string{},
|
||||||
@ -1834,7 +1834,7 @@ func TestSyncPodWithPodInfraCreatesContainerCallsHandler(t *testing.T) {
|
|||||||
// Check the pod infra container.
|
// Check the pod infra container.
|
||||||
"inspect_container",
|
"inspect_container",
|
||||||
// Create container.
|
// Create container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
})
|
})
|
||||||
|
|
||||||
fakeDocker.Lock()
|
fakeDocker.Lock()
|
||||||
|
@ -484,7 +484,7 @@ func TestSyncPodsWithTerminationLog(t *testing.T) {
|
|||||||
// Create pod infra container.
|
// Create pod infra container.
|
||||||
"create", "start", "inspect_container",
|
"create", "start", "inspect_container",
|
||||||
// Create container.
|
// Create container.
|
||||||
"create", "start",
|
"create", "start", "inspect_container",
|
||||||
// Get pod status.
|
// Get pod status.
|
||||||
"list", "inspect_container", "inspect_container",
|
"list", "inspect_container", "inspect_container",
|
||||||
// Get pods for deleting orphaned volumes.
|
// Get pods for deleting orphaned volumes.
|
||||||
|
Loading…
Reference in New Issue
Block a user