Support deleting all unused images

This commit is contained in:
Ron Lai 2016-07-13 10:58:58 -07:00
parent 0efd03810c
commit 4d5b6c5a9e
2 changed files with 30 additions and 0 deletions

View File

@ -18,6 +18,7 @@ package kubelet
import (
"fmt"
"math"
"sort"
"sync"
"time"
@ -46,6 +47,9 @@ type imageManager interface {
GetImageList() ([]kubecontainer.Image, error)
// Delete all unused images and returns the number of bytes freed. The number of bytes freed is always returned.
DeleteUnusedImages() (int64, error)
// TODO(vmarmol): Have this subsume pulls as well.
}
@ -248,6 +252,10 @@ func (im *realImageManager) GarbageCollect() error {
return nil
}
func (im *realImageManager) DeleteUnusedImages() (int64, error) {
return im.freeSpace(math.MaxInt64, time.Now())
}
// Tries to free bytesToFree worth of images on the disk.
//
// Returns the number of bytes free and an error if any occurred. The number of

View File

@ -238,6 +238,28 @@ func TestFreeSpaceImagesInUseContainersAreIgnored(t *testing.T) {
assert.Len(fakeRuntime.ImageList, 1)
}
func TestDeleteUnusedImagesRemoveAllUnusedImages(t *testing.T) {
manager, fakeRuntime, _ := newRealImageManager(ImageGCPolicy{})
fakeRuntime.ImageList = []container.Image{
makeImage(0, 1024),
makeImage(1, 2048),
makeImage(2, 2048),
}
fakeRuntime.AllPodList = []*containertest.FakePod{
{Pod: &container.Pod{
Containers: []*container.Container{
makeContainer(2),
},
}},
}
spaceFreed, err := manager.DeleteUnusedImages()
assert := assert.New(t)
require.NoError(t, err)
assert.EqualValues(3072, spaceFreed)
assert.Len(fakeRuntime.ImageList, 1)
}
func TestFreeSpaceRemoveByLeastRecentlyUsed(t *testing.T) {
manager, fakeRuntime, _ := newRealImageManager(ImageGCPolicy{})
fakeRuntime.ImageList = []container.Image{