mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-31 15:25:57 +00:00
Merge pull request #123345 from haircommander/image-gc-metric-reason
KEP-4210: kubelet: add reason field to image gc metric
This commit is contained in:
commit
5d776f935c
@ -50,6 +50,13 @@ const instrumentationScope = "k8s.io/kubernetes/pkg/kubelet/images"
|
|||||||
// indexed as imageId-RuntimeHandler
|
// indexed as imageId-RuntimeHandler
|
||||||
const imageIndexTupleFormat = "%s,%s"
|
const imageIndexTupleFormat = "%s,%s"
|
||||||
|
|
||||||
|
// ImageGarbageCollectedTotalReason* specify the reason why an image was garbage collected
|
||||||
|
// in the `image_garbage_collected_total` metric.
|
||||||
|
const (
|
||||||
|
ImageGarbageCollectedTotalReasonAge = "age"
|
||||||
|
ImageGarbageCollectedTotalReasonSpace = "space"
|
||||||
|
)
|
||||||
|
|
||||||
// StatsProvider is an interface for fetching stats used during image garbage
|
// StatsProvider is an interface for fetching stats used during image garbage
|
||||||
// collection.
|
// collection.
|
||||||
type StatsProvider interface {
|
type StatsProvider interface {
|
||||||
@ -372,7 +379,7 @@ func (im *realImageGCManager) freeOldImages(ctx context.Context, images []evicti
|
|||||||
klog.V(5).InfoS("Evaluating image ID for possible garbage collection based on image age", "imageID", image.id)
|
klog.V(5).InfoS("Evaluating image ID for possible garbage collection based on image age", "imageID", image.id)
|
||||||
// Evaluate whether image is older than MaxAge.
|
// Evaluate whether image is older than MaxAge.
|
||||||
if freeTime.Sub(image.lastUsed) > im.policy.MaxAge {
|
if freeTime.Sub(image.lastUsed) > im.policy.MaxAge {
|
||||||
if err := im.freeImage(ctx, image); err != nil {
|
if err := im.freeImage(ctx, image, ImageGarbageCollectedTotalReasonAge); err != nil {
|
||||||
deletionErrors = append(deletionErrors, err)
|
deletionErrors = append(deletionErrors, err)
|
||||||
remainingImages = append(remainingImages, image)
|
remainingImages = append(remainingImages, image)
|
||||||
continue
|
continue
|
||||||
@ -423,7 +430,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := im.freeImage(ctx, image); err != nil {
|
if err := im.freeImage(ctx, image, ImageGarbageCollectedTotalReasonSpace); err != nil {
|
||||||
deletionErrors = append(deletionErrors, err)
|
deletionErrors = append(deletionErrors, err)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -440,7 +447,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
|
|||||||
return spaceFreed, nil
|
return spaceFreed, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo) error {
|
func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo, reason string) error {
|
||||||
isRuntimeClassInImageCriAPIEnabled := utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClassInImageCriAPI)
|
isRuntimeClassInImageCriAPIEnabled := utilfeature.DefaultFeatureGate.Enabled(features.RuntimeClassInImageCriAPI)
|
||||||
// Remove image. Continue despite errors.
|
// Remove image. Continue despite errors.
|
||||||
var err error
|
var err error
|
||||||
@ -456,7 +463,7 @@ func (im *realImageGCManager) freeImage(ctx context.Context, image evictionInfo)
|
|||||||
}
|
}
|
||||||
delete(im.imageRecords, imageKey)
|
delete(im.imageRecords, imageKey)
|
||||||
|
|
||||||
metrics.ImageGarbageCollectedTotal.Inc()
|
metrics.ImageGarbageCollectedTotal.WithLabelValues(reason).Inc()
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -837,13 +837,14 @@ var (
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
ImageGarbageCollectedTotal = metrics.NewCounter(
|
ImageGarbageCollectedTotal = metrics.NewCounterVec(
|
||||||
&metrics.CounterOpts{
|
&metrics.CounterOpts{
|
||||||
Subsystem: KubeletSubsystem,
|
Subsystem: KubeletSubsystem,
|
||||||
Name: ImageGarbageCollectedTotalKey,
|
Name: ImageGarbageCollectedTotalKey,
|
||||||
Help: "Total number of images garbage collected by the kubelet, whether through disk usage or image age.",
|
Help: "Total number of images garbage collected by the kubelet, whether through disk usage or image age.",
|
||||||
StabilityLevel: metrics.ALPHA,
|
StabilityLevel: metrics.ALPHA,
|
||||||
},
|
},
|
||||||
|
[]string{"reason"},
|
||||||
)
|
)
|
||||||
|
|
||||||
// ImagePullDuration is a Histogram that tracks the duration (in seconds) it takes for an image to be pulled,
|
// ImagePullDuration is a Histogram that tracks the duration (in seconds) it takes for an image to be pulled,
|
||||||
|
Loading…
Reference in New Issue
Block a user