Skip to content

Commit f622be0

Browse files
committed
kubelet: Migrate pkg/kubelet/oom to contextual logging
1 parent 95d71c4 commit f622be0

File tree

9 files changed

+29
-12
lines changed

9 files changed

+29
-12
lines changed

hack/golangci-hints.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,7 @@ linters-settings: # please keep this alphabetized
168168
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
169169
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
170170
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
171+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
171172
172173
# As long as contextual logging is alpha or beta, all WithName, WithValues,
173174
# 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
@@ -214,6 +214,7 @@ linters-settings: # please keep this alphabetized
214214
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
215215
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
216216
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
217+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
217218
218219
# As long as contextual logging is alpha or beta, all WithName, WithValues,
219220
# 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
@@ -216,6 +216,7 @@ linters-settings: # please keep this alphabetized
216216
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
217217
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
218218
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
219+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
219220
220221
# As long as contextual logging is alpha or beta, all WithName, WithValues,
221222
# 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
@@ -52,6 +52,7 @@ contextual k8s.io/kubernetes/pkg/kubelet/pleg/.*
5252
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
5353
contextual k8s.io/kubernetes/pkg/kubelet/token/.*
5454
contextual k8s.io/kubernetes/pkg/kubelet/cadvisor/.*
55+
contextual k8s.io/kubernetes/pkg/kubelet/oom/.*
5556

5657
# As long as contextual logging is alpha or beta, all WithName, WithValues,
5758
# 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: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ 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"
@@ -41,6 +42,7 @@ func (fs *fakeStreamer) StreamOoms(outStream chan<- *oomparser.OomInstance) {
4142
// TestWatcherRecordsEventsForOomEvents ensures that our OomInstances coming
4243
// from `StreamOoms` are translated into events in our recorder.
4344
func TestWatcherRecordsEventsForOomEvents(t *testing.T) {
45+
tCtx := ktesting.Init(t)
4446
oomInstancesToStream := []*oomparser.OomInstance{
4547
{
4648
Pid: 1000,
@@ -63,7 +65,7 @@ func TestWatcherRecordsEventsForOomEvents(t *testing.T) {
6365
recorder: fakeRecorder,
6466
oomStreamer: fakeStreamer,
6567
}
66-
assert.NoError(t, oomWatcher.Start(node))
68+
assert.NoError(t, oomWatcher.Start(tCtx, node))
6769

6870
eventsRecorded := getRecordedEvents(fakeRecorder, numExpectedOomEvents)
6971
assert.Len(t, eventsRecorded, numExpectedOomEvents)
@@ -92,6 +94,7 @@ func getRecordedEvents(fakeRecorder *record.FakeRecorder, numExpectedOomEvents i
9294
func TestWatcherRecordsEventsForOomEventsCorrectContainerName(t *testing.T) {
9395
// By "incorrect" container name, we mean a container name for which we
9496
// don't want to record an oom event.
97+
tCtx := ktesting.Init(t)
9598
numOomEventsWithIncorrectContainerName := 1
9699
oomInstancesToStream := []*oomparser.OomInstance{
97100
{
@@ -122,7 +125,7 @@ func TestWatcherRecordsEventsForOomEventsCorrectContainerName(t *testing.T) {
122125
recorder: fakeRecorder,
123126
oomStreamer: fakeStreamer,
124127
}
125-
assert.NoError(t, oomWatcher.Start(node))
128+
assert.NoError(t, oomWatcher.Start(tCtx, node))
126129

127130
eventsRecorded := getRecordedEvents(fakeRecorder, numExpectedOomEvents)
128131
assert.Len(t, eventsRecorded, numExpectedOomEvents)
@@ -135,6 +138,8 @@ func TestWatcherRecordsEventsForOomEventsWithAdditionalInfo(t *testing.T) {
135138
eventPid := 1000
136139
processName := "fakeProcess"
137140

141+
tCtx := ktesting.Init(t)
142+
138143
oomInstancesToStream := []*oomparser.OomInstance{
139144
{
140145
Pid: eventPid,
@@ -157,7 +162,7 @@ func TestWatcherRecordsEventsForOomEventsWithAdditionalInfo(t *testing.T) {
157162
recorder: fakeRecorder,
158163
oomStreamer: fakeStreamer,
159164
}
160-
assert.NoError(t, oomWatcher.Start(node))
165+
assert.NoError(t, oomWatcher.Start(tCtx, node))
161166

162167
eventsRecorded := getRecordedEvents(fakeRecorder, numExpectedOomEvents)
163168

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)