mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-09 12:07:47 +00:00
kubelet/images: add and use freeOldImages function
to free images older than configured ImageGCMaximumAge Signed-off-by: Peter Hunt <pehunt@redhat.com>
This commit is contained in:
parent
76e623098c
commit
914aa746c1
@ -285,6 +285,18 @@ func (im *realImageGCManager) detectImages(ctx context.Context, detectTime time.
|
|||||||
func (im *realImageGCManager) GarbageCollect(ctx context.Context) error {
|
func (im *realImageGCManager) GarbageCollect(ctx context.Context) error {
|
||||||
ctx, otelSpan := im.tracer.Start(ctx, "Images/GarbageCollect")
|
ctx, otelSpan := im.tracer.Start(ctx, "Images/GarbageCollect")
|
||||||
defer otelSpan.End()
|
defer otelSpan.End()
|
||||||
|
|
||||||
|
freeTime := time.Now()
|
||||||
|
images, err := im.imagesInEvictionOrder(ctx, freeTime)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
images, err = im.freeOldImages(ctx, images, freeTime)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Get disk usage on disk holding images.
|
// Get disk usage on disk holding images.
|
||||||
fsStats, err := im.statsProvider.ImageFsStats(ctx)
|
fsStats, err := im.statsProvider.ImageFsStats(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -311,12 +323,6 @@ func (im *realImageGCManager) GarbageCollect(ctx context.Context) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
freeTime := time.Now()
|
|
||||||
images, err := im.imagesInEvictionOrder(ctx, freeTime)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// If over the max threshold, free enough to place us at the lower threshold.
|
// If over the max threshold, free enough to place us at the lower threshold.
|
||||||
usagePercent := 100 - int(available*100/capacity)
|
usagePercent := 100 - int(available*100/capacity)
|
||||||
if usagePercent >= im.policy.HighThresholdPercent {
|
if usagePercent >= im.policy.HighThresholdPercent {
|
||||||
@ -337,6 +343,31 @@ func (im *realImageGCManager) GarbageCollect(ctx context.Context) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (im *realImageGCManager) freeOldImages(ctx context.Context, images []evictionInfo, freeTime time.Time) ([]evictionInfo, error) {
|
||||||
|
if im.policy.MaxAge == 0 {
|
||||||
|
return images, nil
|
||||||
|
}
|
||||||
|
var deletionErrors []error
|
||||||
|
remainingImages := make([]evictionInfo, 0)
|
||||||
|
for _, image := range images {
|
||||||
|
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.
|
||||||
|
if freeTime.Sub(image.lastUsed) > im.policy.MaxAge {
|
||||||
|
if err := im.freeImage(ctx, image); err != nil {
|
||||||
|
deletionErrors = append(deletionErrors, err)
|
||||||
|
remainingImages = append(remainingImages, image)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
remainingImages = append(remainingImages, image)
|
||||||
|
}
|
||||||
|
if len(deletionErrors) > 0 {
|
||||||
|
return remainingImages, fmt.Errorf("wanted to free images older than %v, encountered errors in image deletion: %v", im.policy.MaxAge, errors.NewAggregate(deletionErrors))
|
||||||
|
}
|
||||||
|
return remainingImages, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (im *realImageGCManager) DeleteUnusedImages(ctx context.Context) error {
|
func (im *realImageGCManager) DeleteUnusedImages(ctx context.Context) error {
|
||||||
klog.InfoS("Attempting to delete unused images")
|
klog.InfoS("Attempting to delete unused images")
|
||||||
freeTime := time.Now()
|
freeTime := time.Now()
|
||||||
@ -359,7 +390,7 @@ func (im *realImageGCManager) freeSpace(ctx context.Context, bytesToFree int64,
|
|||||||
var deletionErrors []error
|
var deletionErrors []error
|
||||||
spaceFreed := int64(0)
|
spaceFreed := int64(0)
|
||||||
for _, image := range images {
|
for _, image := range images {
|
||||||
klog.V(5).InfoS("Evaluating image ID for possible garbage collection", "imageID", image.id)
|
klog.V(5).InfoS("Evaluating image ID for possible garbage collection based on disk usage", "imageID", image.id)
|
||||||
// Images that are currently in used were given a newer lastUsed.
|
// Images that are currently in used were given a newer lastUsed.
|
||||||
if image.lastUsed.Equal(freeTime) || image.lastUsed.After(freeTime) {
|
if image.lastUsed.Equal(freeTime) || image.lastUsed.After(freeTime) {
|
||||||
klog.V(5).InfoS("Image ID was used too recently, not eligible for garbage collection", "imageID", image.id, "lastUsed", image.lastUsed, "freeTime", freeTime)
|
klog.V(5).InfoS("Image ID was used too recently, not eligible for garbage collection", "imageID", image.id, "lastUsed", image.lastUsed, "freeTime", freeTime)
|
||||||
|
Loading…
Reference in New Issue
Block a user