Skip to content

Commit 8294abc

Browse files
authored
Merge pull request kubernetes#128998 from bart0sh/PR165-migrate-oom-to-contextual-logging
kubelet: Migrate pkg/kubelet/oom to contextual logging
2 parents ed9572d + 48ea6fc commit 8294abc

File tree

9 files changed

+30
-12
lines changed

9 files changed

+30
-12
lines changed

hack/golangci-hints.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,7 @@ linters-settings: # please keep this alphabetized
171171
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
172172
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
173173
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
174+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
174175
175176
# As long as contextual logging is alpha or beta, all WithName, WithValues,
176177
# NewContext calls have to go through klog. Once it is GA, we can lift

hack/golangci-strict.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ linters-settings: # please keep this alphabetized
217217
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
218218
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
219219
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
220+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
220221
221222
# As long as contextual logging is alpha or beta, all WithName, WithValues,
222223
# NewContext calls have to go through klog. Once it is GA, we can lift

hack/golangci.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ linters-settings: # please keep this alphabetized
219219
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
220220
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
221221
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
222+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
222223
223224
# As long as contextual logging is alpha or beta, all WithName, WithValues,
224225
# NewContext calls have to go through klog. Once it is GA, we can lift

hack/logcheck.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ contextual k8s.io/kubernetes/pkg/kubelet/pleg/.*
5454
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
5555
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
5656
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
57+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
5758

5859
# As long as contextual logging is alpha or beta, all WithName, WithValues,
5960
# NewContext calls have to go through klog. Once it is GA, we can lift

pkg/kubelet/kubelet.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1575,7 +1575,7 @@ func (kl *Kubelet) StartGarbageCollection() {
15751575

15761576
// initializeModules will initialize internal modules that do not require the container runtime to be up.
15771577
// Note that the modules here must not depend on modules that are not initialized here.
1578-
func (kl *Kubelet) initializeModules() error {
1578+
func (kl *Kubelet) initializeModules(ctx context.Context) error {
15791579
// Prometheus metrics.
15801580
metrics.Register(
15811581
collectors.NewVolumeStatsCollector(kl),
@@ -1614,7 +1614,7 @@ func (kl *Kubelet) initializeModules() error {
16141614

16151615
// Start out of memory watcher.
16161616
if kl.oomWatcher != nil {
1617-
if err := kl.oomWatcher.Start(kl.nodeRef); err != nil {
1617+
if err := kl.oomWatcher.Start(ctx, kl.nodeRef); err != nil {
16181618
return fmt.Errorf("failed to start OOM watcher: %w", err)
16191619
}
16201620
}
@@ -1721,7 +1721,7 @@ func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) {
17211721
go kl.cloudResourceSyncManager.Run(wait.NeverStop)
17221722
}
17231723

1724-
if err := kl.initializeModules(); err != nil {
1724+
if err := kl.initializeModules(ctx); err != nil {
17251725
kl.recorder.Eventf(kl.nodeRef, v1.EventTypeWarning, events.KubeletSetupFailed, err.Error())
17261726
klog.ErrorS(err, "Failed to initialize internal modules")
17271727
os.Exit(1)

pkg/kubelet/oom/oom_watcher_linux.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ limitations under the License.
2020
package oom
2121

2222
import (
23+
"context"
2324
"fmt"
2425

2526
v1 "k8s.io/api/core/v1"
@@ -71,24 +72,25 @@ const (
7172
)
7273

7374
// Start watches for system oom's and records an event for every system oom encountered.
74-
func (ow *realWatcher) Start(ref *v1.ObjectReference) error {
75+
func (ow *realWatcher) Start(ctx context.Context, ref *v1.ObjectReference) error {
7576
outStream := make(chan *oomparser.OomInstance, 10)
7677
go ow.oomStreamer.StreamOoms(outStream)
7778

7879
go func() {
80+
logger := klog.FromContext(ctx)
7981
defer runtime.HandleCrash()
8082

8183
for event := range outStream {
8284
if event.VictimContainerName == recordEventContainerName {
83-
klog.V(1).InfoS("Got sys oom event", "event", event)
85+
logger.V(1).Info("Got sys oom event", "event", event)
8486
eventMsg := "System OOM encountered"
8587
if event.ProcessName != "" && event.Pid != 0 {
8688
eventMsg = fmt.Sprintf("%s, victim process: %s, pid: %d", eventMsg, event.ProcessName, event.Pid)
8789
}
8890
ow.recorder.Eventf(ref, v1.EventTypeWarning, systemOOMEvent, eventMsg)
8991
}
9092
}
91-
klog.ErrorS(nil, "Unexpectedly stopped receiving OOM notifications")
93+
logger.Error(nil, "Unexpectedly stopped receiving OOM notifications")
9294
}()
9395
return nil
9496
}

pkg/kubelet/oom/oom_watcher_linux_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ import (
2323

2424
v1 "k8s.io/api/core/v1"
2525
"k8s.io/client-go/tools/record"
26+
"k8s.io/kubernetes/test/utils/ktesting"
2627

2728
"github.com/google/cadvisor/utils/oomparser"
2829
"github.com/stretchr/testify/assert"
30+
"github.com/stretchr/testify/require"
2931
)
3032

3133
type fakeStreamer struct {
@@ -41,6 +43,7 @@ func (fs *fakeStreamer) StreamOoms(outStream chan<- *oomparser.OomInstance) {
4143
// TestWatcherRecordsEventsForOomEvents ensures that our OomInstances coming
4244
// from `StreamOoms` are translated into events in our recorder.
4345
func TestWatcherRecordsEventsForOomEvents(t *testing.T) {
46+
tCtx := ktesting.Init(t)
4447
oomInstancesToStream := []*oomparser.OomInstance{
4548
{
4649
Pid: 1000,
@@ -63,7 +66,7 @@ func TestWatcherRecordsEventsForOomEvents(t *testing.T) {
6366
recorder: fakeRecorder,
6467
oomStreamer: fakeStreamer,
6568
}
66-
assert.NoError(t, oomWatcher.Start(node))
69+
require.NoError(t, oomWatcher.Start(tCtx, node))
6770

6871
eventsRecorded := getRecordedEvents(fakeRecorder, numExpectedOomEvents)
6972
assert.Len(t, eventsRecorded, numExpectedOomEvents)
@@ -92,6 +95,7 @@ func getRecordedEvents(fakeRecorder *record.FakeRecorder, numExpectedOomEvents i
9295
func TestWatcherRecordsEventsForOomEventsCorrectContainerName(t *testing.T) {
9396
// By "incorrect" container name, we mean a container name for which we
9497
// don't want to record an oom event.
98+
tCtx := ktesting.Init(t)
9599
numOomEventsWithIncorrectContainerName := 1
96100
oomInstancesToStream := []*oomparser.OomInstance{
97101
{
@@ -122,7 +126,7 @@ func TestWatcherRecordsEventsForOomEventsCorrectContainerName(t *testing.T) {
122126
recorder: fakeRecorder,
123127
oomStreamer: fakeStreamer,
124128
}
125-
assert.NoError(t, oomWatcher.Start(node))
129+
require.NoError(t, oomWatcher.Start(tCtx, node))
126130

127131
eventsRecorded := getRecordedEvents(fakeRecorder, numExpectedOomEvents)
128132
assert.Len(t, eventsRecorded, numExpectedOomEvents)
@@ -135,6 +139,8 @@ func TestWatcherRecordsEventsForOomEventsWithAdditionalInfo(t *testing.T) {
135139
eventPid := 1000
136140
processName := "fakeProcess"
137141

142+
tCtx := ktesting.Init(t)
143+
138144
oomInstancesToStream := []*oomparser.OomInstance{
139145
{
140146
Pid: eventPid,
@@ -157,7 +163,7 @@ func TestWatcherRecordsEventsForOomEventsWithAdditionalInfo(t *testing.T) {
157163
recorder: fakeRecorder,
158164
oomStreamer: fakeStreamer,
159165
}
160-
assert.NoError(t, oomWatcher.Start(node))
166+
require.NoError(t, oomWatcher.Start(tCtx, node))
161167

162168
eventsRecorded := getRecordedEvents(fakeRecorder, numExpectedOomEvents)
163169

pkg/kubelet/oom/oom_watcher_unsupported.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ limitations under the License.
2020
package oom
2121

2222
import (
23+
"context"
24+
2325
v1 "k8s.io/api/core/v1"
2426
"k8s.io/client-go/tools/record"
2527
)
@@ -33,6 +35,6 @@ func NewWatcher(_ record.EventRecorder) (Watcher, error) {
3335
return &oomWatcherUnsupported{}, nil
3436
}
3537

36-
func (ow *oomWatcherUnsupported) Start(_ *v1.ObjectReference) error {
38+
func (ow *oomWatcherUnsupported) Start(_ context.Context, _ *v1.ObjectReference) error {
3739
return nil
3840
}

pkg/kubelet/oom/types.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@ limitations under the License.
1616

1717
package oom
1818

19-
import v1 "k8s.io/api/core/v1"
19+
import (
20+
"context"
21+
22+
v1 "k8s.io/api/core/v1"
23+
)
2024

2125
// Watcher defines the interface of OOM watchers.
2226
type Watcher interface {
23-
Start(ref *v1.ObjectReference) error
27+
Start(ctx context.Context, ref *v1.ObjectReference) error
2428
}

0 commit comments

Comments
 (0)