Skip to content

Commit c8b4d8e

Browse files
committed
kubelet: add reason field to image gc metric
Signed-off-by: Peter Hunt <[email protected]>
1 parent 0e8ef9c commit c8b4d8e

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

pkg/kubelet/images/image_gc_manager.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,13 @@ const instrumentationScope = "k8s.io/kubernetes/pkg/kubelet/images"
5050
// indexed as imageId-RuntimeHandler
5151
const imageIndexTupleFormat = "%s,%s"
5252

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+
5360
// StatsProvider is an interface for fetching stats used during image garbage
5461
// collection.
5562
type StatsProvider interface {
@@ -372,7 +379,7 @@ func (im *realImageGCManager) freeOldImages(ctx context.Context, images []evicti
372379
klog.V(5).InfoS("Evaluating image ID for possible garbage collection based on image age", "imageID", image.id)
373380
// Evaluate whether image is older than MaxAge.
374381
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 {
376383
deletionErrors = append(deletionErrors, err)
377384
remainingImages = append(remainingImages, image)
378385
continue
@@ -423,7 +430,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
423430
continue
424431
}
425432

426-
if err := im.freeImage(ctx, image); err != nil {
433+
if err := im.freeImage(ctx, image, ImageGarbageCollectedTotalReasonSpace); err != nil {
427434
deletionErrors = append(deletionErrors, err)
428435
continue
429436
}
@@ -440,7 +447,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
440447
return spaceFreed, nil
441448
}
442449

443-
func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo) error {
450+
func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo, reason string) error {
444451
isRuntimeClassInImageCriAPIEnabled := utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClassInImageCriAPI)
445452
// Remove image. Continue despite errors.
446453
var err error
@@ -456,7 +463,7 @@ func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo)
456463
}
457464
delete(im.imageRecords, imageKey)
458465

459-
metrics.ImageGarbageCollectedTotal.Inc()
466+
metrics.ImageGarbageCollectedTotal.WithLabelValues(reason).Inc()
460467
return err
461468
}
462469

pkg/kubelet/metrics/metrics.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -837,13 +837,14 @@ var (
837837
},
838838
)
839839

840-
ImageGarbageCollectedTotal = metrics.NewCounter(
840+
ImageGarbageCollectedTotal = metrics.NewCounterVec(
841841
&metrics.CounterOpts{
842842
Subsystem: KubeletSubsystem,
843843
Name: ImageGarbageCollectedTotalKey,
844844
Help: "Total number of images garbage collected by the kubelet, whether through disk usage or image age.",
845845
StabilityLevel: metrics.ALPHA,
846846
},
847+
[]string{"reason"},
847848
)
848849

849850
// ImagePullDuration is a Histogram that tracks the duration (in seconds) it takes for an image to be pulled,

0 commit comments

Comments
 (0)