Skip to content

Commit 8f4ed38

Browse files
committed
updated for ooms
1 parent 5b2b27e commit 8f4ed38

File tree

3 files changed

+58
-5
lines changed

3 files changed

+58
-5
lines changed

vertical-pod-autoscaler/pkg/recommender/input/oom/observer.go

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -147,15 +147,19 @@ func (o *observer) OnUpdate(oldObj, newObj interface{}) {
147147
klog.ErrorS(nil, "OOM observer received invalid newObj", "newObj", newObj)
148148
}
149149

150-
for _, containerStatus := range newPod.Status.ContainerStatuses {
150+
o.processStatuses(oldPod, newPod, newPod.Status.ContainerStatuses, oldPod.Status.ContainerStatuses, oldPod.Spec.Containers)
151+
o.processStatuses(oldPod, newPod, newPod.Status.InitContainerStatuses, oldPod.Status.InitContainerStatuses, oldPod.Spec.InitContainers)
152+
}
153+
154+
func (o *observer) processStatuses(oldPod *apiv1.Pod, newPod *apiv1.Pod, statuses []apiv1.ContainerStatus, oldStatuses []apiv1.ContainerStatus, oldSpecs []apiv1.Container) {
155+
for _, containerStatus := range statuses {
151156
if containerStatus.RestartCount > 0 &&
152157
containerStatus.LastTerminationState.Terminated != nil &&
153158
containerStatus.LastTerminationState.Terminated.Reason == "OOMKilled" {
154159

155-
oldStatus := findStatus(containerStatus.Name, oldPod.Status.ContainerStatuses)
160+
oldStatus := findStatus(containerStatus.Name, oldStatuses)
156161
if oldStatus != nil && containerStatus.RestartCount > oldStatus.RestartCount {
157-
// TODO: jklaw90 figure out how we handle init containers
158-
oldSpec := findSpec(containerStatus.Name, oldPod.Spec.Containers)
162+
oldSpec := findSpec(containerStatus.Name, oldSpecs)
159163
if oldSpec != nil {
160164
requests, _ := resourcehelpers.ContainerRequestsAndLimits(containerStatus.Name, oldPod)
161165
var memory resource.Quantity

vertical-pod-autoscaler/pkg/recommender/input/oom/observer_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,20 @@ metadata:
4444
name: Pod1
4545
namespace: mockNamespace
4646
spec:
47+
initContainers:
48+
- name: InitName11
49+
resources:
50+
requests:
51+
memory: "1024"
4752
containers:
4853
- name: Name11
4954
resources:
5055
requests:
5156
memory: "1024"
5257
status:
58+
initContainerStatuses:
59+
- name: InitName11
60+
restartCount: 0
5361
containerStatuses:
5462
- name: Name11
5563
restartCount: 0
@@ -62,12 +70,20 @@ metadata:
6270
name: Pod1
6371
namespace: mockNamespace
6472
spec:
73+
initContainers:
74+
- name: InitName11
75+
resources:
76+
requests:
77+
memory: "1024"
6578
containers:
6679
- name: Name11
6780
resources:
6881
requests:
6982
memory: "1024"
7083
status:
84+
initContainerStatuses:
85+
- name: InitName11
86+
restartCount: 0
7187
containerStatuses:
7288
- name: Name11
7389
restartCount: 1
@@ -77,6 +93,36 @@ status:
7793
reason: OOMKilled
7894
`
7995

96+
const pod3Yaml = `
97+
apiVersion: v1
98+
kind: Pod
99+
metadata:
100+
name: Pod1
101+
namespace: mockNamespace
102+
spec:
103+
initContainers:
104+
- name: InitName11
105+
resources:
106+
requests:
107+
memory: "1024"
108+
containers:
109+
- name: Name11
110+
resources:
111+
requests:
112+
memory: "1024"
113+
status:
114+
initContainerStatuses:
115+
- name: InitName11
116+
restartCount: 1
117+
lastState:
118+
terminated:
119+
finishedAt: 2018-02-23T13:38:48Z
120+
reason: OOMKilled
121+
containerStatuses:
122+
- name: Name11
123+
restartCount: 0
124+
`
125+
80126
func newPod(yaml string) (*v1.Pod, error) {
81127
decode := codecs.UniversalDeserializer().Decode
82128
obj, _, err := decode([]byte(yaml), nil, nil)

vertical-pod-autoscaler/pkg/recommender/model/cluster.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,10 @@ func (cluster *clusterState) RecordOOM(containerID ContainerID, timestamp time.T
281281
}
282282
containerState, containerExists := pod.Containers[containerID.ContainerName]
283283
if !containerExists {
284-
return NewKeyError(containerID.ContainerName)
284+
containerState, containerExists = pod.InitSidecarsContainers[containerID.ContainerName]
285+
if !containerExists {
286+
return NewKeyError(containerID.ContainerName)
287+
}
285288
}
286289
err := containerState.RecordOOM(timestamp, requestedMemory)
287290
if err != nil {

0 commit comments

Comments
 (0)