Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 68f91ad

Browse filesBrowse files
committed
chore(kubelet): migrate images to contextual logging
Add ci configs. rebase code.
1 parent 609bf00 commit 68f91ad
Copy full SHA for 68f91ad

9 files changed

+75
-61
lines changed

‎hack/golangci-hints.yaml

Copy file name to clipboardExpand all lines: hack/golangci-hints.yaml
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ linters-settings: # please keep this alphabetized
172172
contextual k8s.io/kubernetes/pkg/scheduler/.*
173173
contextual k8s.io/kubernetes/test/e2e/dra/.*
174174
contextual k8s.io/kubernetes/pkg/kubelet/cm/dra/.*
175+
contextual k8s.io/kubernetes/pkg/kubelet/images/.*
175176
contextual k8s.io/kubernetes/pkg/kubelet/pleg/.*
176177
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
177178
contextual k8s.io/kubernetes/pkg/kubelet/token/.*

‎hack/golangci.yaml

Copy file name to clipboardExpand all lines: hack/golangci.yaml
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ linters-settings: # please keep this alphabetized
238238
contextual k8s.io/kubernetes/pkg/scheduler/.*
239239
contextual k8s.io/kubernetes/test/e2e/dra/.*
240240
contextual k8s.io/kubernetes/pkg/kubelet/cm/dra/.*
241+
contextual k8s.io/kubernetes/pkg/kubelet/images/.*
241242
contextual k8s.io/kubernetes/pkg/kubelet/pleg/.*
242243
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
243244
contextual k8s.io/kubernetes/pkg/kubelet/token/.*

‎hack/logcheck.conf

Copy file name to clipboardExpand all lines: hack/logcheck.conf
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ contextual k8s.io/kubernetes/pkg/controller/.*
5050
contextual k8s.io/kubernetes/pkg/scheduler/.*
5151
contextual k8s.io/kubernetes/test/e2e/dra/.*
5252
contextual k8s.io/kubernetes/pkg/kubelet/cm/dra/.*
53+
contextual k8s.io/kubernetes/pkg/kubelet/images/.*
5354
contextual k8s.io/kubernetes/pkg/kubelet/pleg/.*
5455
contextual k8s.io/kubernetes/pkg/kubelet/clustertrustbundle/.*
5556
contextual k8s.io/kubernetes/pkg/kubelet/token/.*

‎pkg/kubelet/images/image_gc_manager.go

Copy file name to clipboardExpand all lines: pkg/kubelet/images/image_gc_manager.go
+34-25Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ type ImageGCManager interface {
7777
GarbageCollect(ctx context.Context, beganGC time.Time) error
7878

7979
// Start async garbage collection of images.
80-
Start()
80+
Start(ctx context.Context)
8181

8282
GetImageList() ([]container.Image, error)
8383

@@ -214,20 +214,20 @@ func NewImageGCManager(runtime container.Runtime, statsProvider StatsProvider, p
214214
return im, nil
215215
}
216216

217-
func (im *realImageGCManager) Start() {
218-
ctx := context.Background()
217+
func (im *realImageGCManager) Start(ctx context.Context) {
218+
logger := klog.FromContext(ctx)
219219
go wait.Until(func() {
220220
_, err := im.detectImages(ctx, time.Now())
221221
if err != nil {
222-
klog.InfoS("Failed to monitor images", "err", err)
222+
logger.Info("Failed to monitor images", "err", err)
223223
}
224224
}, 5*time.Minute, wait.NeverStop)
225225

226226
// Start a goroutine periodically updates image cache.
227227
go wait.Until(func() {
228228
images, err := im.runtime.ListImages(ctx)
229229
if err != nil {
230-
klog.InfoS("Failed to update image list", "err", err)
230+
logger.Info("Failed to update image list", "err", err)
231231
} else {
232232
im.imageCache.set(images)
233233
}
@@ -241,6 +241,7 @@ func (im *realImageGCManager) GetImageList() ([]container.Image, error) {
241241
}
242242

243243
func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.Time) (sets.Set[string], error) {
244+
logger := klog.FromContext(ctx)
244245
isRuntimeClassInImageCriAPIEnabled := utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClassInImageCriAPI)
245246
imagesInUse := sets.New[string]()
246247

@@ -261,11 +262,11 @@ func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.
261262
}
262263

263264
if !isRuntimeClassInImageCriAPIEnabled {
264-
klog.V(5).InfoS("Container uses image", "pod", klog.KRef(pod.Namespace, pod.Name), "containerName", container.Name, "containerImage", container.Image, "imageID", container.ImageID, "imageRef", container.ImageRef)
265+
logger.V(5).Info("Container uses image", "pod", klog.KRef(pod.Namespace, pod.Name), "containerName", container.Name, "containerImage", container.Image, "imageID", container.ImageID, "imageRef", container.ImageRef)
265266
imagesInUse.Insert(container.ImageID)
266267
} else {
267268
imageKey := getImageTuple(container.ImageID, container.ImageRuntimeHandler)
268-
klog.V(5).InfoS("Container uses image", "pod", klog.KRef(pod.Namespace, pod.Name), "containerName", container.Name, "containerImage", container.Image, "imageID", container.ImageID, "imageRef", container.ImageRef, "imageKey", imageKey)
269+
logger.V(5).Info("Container uses image", "pod", klog.KRef(pod.Namespace, pod.Name), "containerName", container.Name, "containerImage", container.Image, "imageID", container.ImageID, "imageRef", container.ImageRef, "imageKey", imageKey)
269270
imagesInUse.Insert(imageKey)
270271
}
271272
}
@@ -279,17 +280,17 @@ func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.
279280
for _, image := range images {
280281
imageKey := image.ID
281282
if !isRuntimeClassInImageCriAPIEnabled {
282-
klog.V(5).InfoS("Adding image ID to currentImages", "imageID", imageKey)
283+
logger.V(5).Info("Adding image ID to currentImages", "imageID", imageKey)
283284
} else {
284285
imageKey = getImageTuple(image.ID, image.Spec.RuntimeHandler)
285-
klog.V(5).InfoS("Adding image ID with runtime class to currentImages", "imageKey", imageKey, "runtimeHandler", image.Spec.RuntimeHandler)
286+
logger.V(5).Info("Adding image ID with runtime class to currentImages", "imageKey", imageKey, "runtimeHandler", image.Spec.RuntimeHandler)
286287
}
287288

288289
currentImages.Insert(imageKey)
289290

290291
// New image, set it as detected now.
291292
if _, ok := im.imageRecords[imageKey]; !ok {
292-
klog.V(5).InfoS("Image ID is new", "imageID", imageKey, "runtimeHandler", image.Spec.RuntimeHandler)
293+
logger.V(5).Info("Image ID is new", "imageID", imageKey, "runtimeHandler", image.Spec.RuntimeHandler)
293294
im.imageRecords[imageKey] = &imageRecord{
294295
firstDetected: detectTime,
295296
runtimeHandlerUsedToPullImage: image.Spec.RuntimeHandler,
@@ -298,21 +299,21 @@ func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.
298299

299300
// Set last used time to now if the image is being used.
300301
if isImageUsed(imageKey, imagesInUse) {
301-
klog.V(5).InfoS("Setting Image ID lastUsed", "imageID", imageKey, "lastUsed", now)
302+
logger.V(5).Info("Setting Image ID lastUsed", "imageID", imageKey, "lastUsed", now)
302303
im.imageRecords[imageKey].lastUsed = now
303304
}
304305

305-
klog.V(5).InfoS("Image ID has size", "imageID", imageKey, "size", image.Size)
306+
logger.V(5).Info("Image ID has size", "imageID", imageKey, "size", image.Size)
306307
im.imageRecords[imageKey].size = image.Size
307308

308-
klog.V(5).InfoS("Image ID is pinned", "imageID", imageKey, "pinned", image.Pinned)
309+
logger.V(5).Info("Image ID is pinned", "imageID", imageKey, "pinned", image.Pinned)
309310
im.imageRecords[imageKey].pinned = image.Pinned
310311
}
311312

312313
// Remove old images from our records.
313314
for image := range im.imageRecords {
314315
if !currentImages.Has(image) {
315-
klog.V(5).InfoS("Image ID is no longer present; removing from imageRecords", "imageID", image)
316+
logger.V(5).Info("Image ID is no longer present; removing from imageRecords", "imageID", image)
316317
delete(im.imageRecords, image)
317318
}
318319
}
@@ -322,6 +323,7 @@ func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.
322323

323324
// handleImageVolumes ensures that image volumes are considered as images in use.
324325
func (im *realImageGCManager) handleImageVolumes(ctx context.Context, imagesInUse sets.Set[string], container *container.Container, pod *container.Pod, images []container.Image) error {
326+
logger := klog.FromContext(ctx)
325327
if !utilfeature.DefaultFeatureGate.Enabled(features.ImageVolume) {
326328
return nil
327329
}
@@ -334,7 +336,7 @@ func (im *realImageGCManager) handleImageVolumes(ctx context.Context, imagesInUs
334336
for _, mount := range status.Mounts {
335337
for _, image := range images {
336338
if mount.Image != nil && mount.Image.Image == image.ID {
337-
klog.V(5).InfoS("Container uses image as mount", "pod", klog.KRef(pod.Namespace, pod.Name), "containerName", container.Name, "imageID", image.ID)
339+
logger.V(5).Info("Container uses image as mount", "pod", klog.KRef(pod.Namespace, pod.Name), "containerName", container.Name, "imageID", image.ID)
338340
imagesInUse.Insert(image.ID)
339341
}
340342
}
@@ -345,6 +347,7 @@ func (im *realImageGCManager) handleImageVolumes(ctx context.Context, imagesInUs
345347

346348
func (im *realImageGCManager) GarbageCollect(ctx context.Context, beganGC time.Time) error {
347349
ctx, otelSpan := im.tracer.Start(ctx, "Images/GarbageCollect")
350+
logger := klog.FromContext(ctx)
348351
defer otelSpan.End()
349352

350353
freeTime := time.Now()
@@ -373,7 +376,7 @@ func (im *realImageGCManager) GarbageCollect(ctx context.Context, beganGC time.T
373376
}
374377

375378
if available > capacity {
376-
klog.InfoS("Availability is larger than capacity", "available", available, "capacity", capacity)
379+
logger.Info("Availability is larger than capacity", "available", available, "capacity", capacity)
377380
available = capacity
378381
}
379382

@@ -388,8 +391,9 @@ func (im *realImageGCManager) GarbageCollect(ctx context.Context, beganGC time.T
388391
usagePercent := 100 - int(available*100/capacity)
389392
if usagePercent >= im.policy.HighThresholdPercent {
390393
amountToFree := capacity*int64(100-im.policy.LowThresholdPercent)/100 - available
391-
klog.InfoS("Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold", "usage", usagePercent, "highThreshold", im.policy.HighThresholdPercent, "amountToFree", amountToFree, "lowThreshold", im.policy.LowThresholdPercent)
394+
logger.Info("Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold", "usage", usagePercent, "highThreshold", im.policy.HighThresholdPercent, "amountToFree", amountToFree, "lowThreshold", im.policy.LowThresholdPercent)
392395
remainingImages, freed, err := im.freeSpace(ctx, amountToFree, freeTime, images)
396+
logger.Info("Disk usage on image filesystem is over the high threshold, trying to free bytes down to the low threshold", "usage", usagePercent, "highThreshold", im.policy.HighThresholdPercent, "amountToFree", amountToFree, "lowThreshold", im.policy.LowThresholdPercent)
393397
if err != nil {
394398
return err
395399
}
@@ -423,9 +427,10 @@ func (im *realImageGCManager) freeOldImages(ctx context.Context, images []evicti
423427
return images, nil
424428
}
425429
var deletionErrors []error
430+
logger := klog.FromContext(ctx)
426431
remainingImages := make([]evictionInfo, 0)
427432
for _, image := range images {
428-
klog.V(5).InfoS("Evaluating image ID for possible garbage collection based on image age", "imageID", image.id)
433+
logger.V(5).Info("Evaluating image ID for possible garbage collection based on image age", "imageID", image.id)
429434
// Evaluate whether image is older than MaxAge.
430435
if freeTime.Sub(image.lastUsed) > im.policy.MaxAge {
431436
if err := im.freeImage(ctx, image, ImageGarbageCollectedTotalReasonAge); err != nil {
@@ -444,7 +449,8 @@ func (im *realImageGCManager) freeOldImages(ctx context.Context, images []evicti
444449
}
445450

446451
func (im *realImageGCManager) DeleteUnusedImages(ctx context.Context) error {
447-
klog.InfoS("Attempting to delete unused images")
452+
logger := klog.FromContext(ctx)
453+
logger.Info("Attempting to delete unused images")
448454
freeTime := time.Now()
449455

450456
images, err := im.imagesInEvictionOrder(ctx, freeTime)
@@ -470,22 +476,23 @@ func (im *realImageGCManager) DeleteUnusedImages(ctx context.Context) error {
470476
func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64, freeTime time.Time, images []evictionInfo) ([]string, int64, error) {
471477
// Delete unused images until we've freed up enough space.
472478
var deletionErrors []error
479+
logger := klog.FromContext(ctx)
473480
spaceFreed := int64(0)
474481
var imagesLeft []string
475482
for _, image := range images {
476-
klog.V(5).InfoS("Evaluating image ID for possible garbage collection based on disk usage", "imageID", image.id, "runtimeHandler", image.imageRecord.runtimeHandlerUsedToPullImage)
483+
logger.V(5).Info("Evaluating image ID for possible garbage collection based on disk usage", "imageID", image.id, "runtimeHandler", image.imageRecord.runtimeHandlerUsedToPullImage)
477484
// Images that are currently in used were given a newer lastUsed.
478485
if image.lastUsed.Equal(freeTime) || image.lastUsed.After(freeTime) {
479-
klog.V(5).InfoS("Image ID was used too recently, not eligible for garbage collection", "imageID", image.id, "lastUsed", image.lastUsed, "freeTime", freeTime)
480486
imagesLeft = append(imagesLeft, image.id)
487+
logger.V(5).Info("Image ID was used too recently, not eligible for garbage collection", "imageID", image.id, "lastUsed", image.lastUsed, "freeTime", freeTime)
481488
continue
482489
}
483490

484491
// Avoid garbage collect the image if the image is not old enough.
485492
// In such a case, the image may have just been pulled down, and will be used by a container right away.
486493
if freeTime.Sub(image.firstDetected) < im.policy.MinAge {
487-
klog.V(5).InfoS("Image ID's age is less than the policy's minAge, not eligible for garbage collection", "imageID", image.id, "age", freeTime.Sub(image.firstDetected), "minAge", im.policy.MinAge)
488494
imagesLeft = append(imagesLeft, image.id)
495+
logger.V(5).Info("Image ID's age is less than the policy's minAge, not eligible for garbage collection", "imageID", image.id, "age", freeTime.Sub(image.firstDetected), "minAge", im.policy.MinAge)
489496
continue
490497
}
491498

@@ -511,7 +518,8 @@ func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo,
511518
isRuntimeClassInImageCriAPIEnabled := utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClassInImageCriAPI)
512519
// Remove image. Continue despite errors.
513520
var err error
514-
klog.InfoS("Removing image to free bytes", "imageID", image.id, "size", image.size, "runtimeHandler", image.runtimeHandlerUsedToPullImage)
521+
logger := klog.FromContext(ctx)
522+
logger.Info("Removing image to free bytes", "imageID", image.id, "size", image.size, "runtimeHandler", image.runtimeHandlerUsedToPullImage)
515523
err = im.runtime.RemoveImage(ctx, container.ImageSpec{Image: image.id, RuntimeHandler: image.runtimeHandlerUsedToPullImage})
516524
if err != nil {
517525
return err
@@ -537,17 +545,18 @@ func (im *realImageGCManager) imagesInEvictionOrder(ctx context.Context, freeTim
537545

538546
im.imageRecordsLock.Lock()
539547
defer im.imageRecordsLock.Unlock()
548+
logger := klog.FromContext(ctx)
540549

541550
// Get all images in eviction order.
542551
images := make([]evictionInfo, 0, len(im.imageRecords))
543552
for image, record := range im.imageRecords {
544553
if isImageUsed(image, imagesInUse) {
545-
klog.V(5).InfoS("Image ID is being used", "imageID", image)
554+
logger.V(5).Info("Image ID is being used", "imageID", image)
546555
continue
547556
}
548557
// Check if image is pinned, prevent garbage collection
549558
if record.pinned {
550-
klog.V(5).InfoS("Image is pinned, skipping garbage collection", "imageID", image)
559+
logger.V(5).Info("Image is pinned, skipping garbage collection", "imageID", image)
551560
continue
552561

553562
}

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.