@@ -50,6 +50,13 @@ const instrumentationScope = "k8s.io/kubernetes/pkg/kubelet/images"
50
50
// indexed as imageId-RuntimeHandler
51
51
const imageIndexTupleFormat = "%s,%s"
52
52
53
+ // ImageGarbageCollectedTotalReason* specify the reason why an image was garbage collected
54
+ // in the `image_garbage_collected_total` metric.
55
+ const (
56
+ ImageGarbageCollectedTotalReasonAge = "age"
57
+ ImageGarbageCollectedTotalReasonSpace = "space"
58
+ )
59
+
53
60
// StatsProvider is an interface for fetching stats used during image garbage
54
61
// collection.
55
62
type StatsProvider interface {
@@ -372,7 +379,7 @@ func (im *realImageGCManager) freeOldImages(ctx context.Context, images []evicti
372
379
klog .V (5 ).InfoS ("Evaluating image ID for possible garbage collection based on image age" , "imageID" , image .id )
373
380
// Evaluate whether image is older than MaxAge.
374
381
if freeTime .Sub (image .lastUsed ) > im .policy .MaxAge {
375
- if err := im .freeImage (ctx , image ); err != nil {
382
+ if err := im .freeImage (ctx , image , ImageGarbageCollectedTotalReasonAge ); err != nil {
376
383
deletionErrors = append (deletionErrors , err )
377
384
remainingImages = append (remainingImages , image )
378
385
continue
@@ -423,7 +430,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
423
430
continue
424
431
}
425
432
426
- if err := im .freeImage (ctx , image ); err != nil {
433
+ if err := im .freeImage (ctx , image , ImageGarbageCollectedTotalReasonSpace ); err != nil {
427
434
deletionErrors = append (deletionErrors , err )
428
435
continue
429
436
}
@@ -440,7 +447,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
440
447
return spaceFreed , nil
441
448
}
442
449
443
- func (im * realImageGCManager ) freeImage (ctx context.Context , image evictionInfo ) error {
450
+ func (im * realImageGCManager ) freeImage (ctx context.Context , image evictionInfo , reason string ) error {
444
451
isRuntimeClassInImageCriAPIEnabled := utilfeature .DefaultFeatureGate .Enabled (features .RuntimeClassInImageCriAPI )
445
452
// Remove image. Continue despite errors.
446
453
var err error
@@ -456,7 +463,7 @@ func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo)
456
463
}
457
464
delete (im .imageRecords , imageKey )
458
465
459
- metrics .ImageGarbageCollectedTotal .Inc ()
466
+ metrics .ImageGarbageCollectedTotal .WithLabelValues ( reason ). Inc ()
460
467
return err
461
468
}
462
469
0 commit comments