mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-29 14:37:00 +00:00
Add image cache.
This commit is contained in:
parent
6b9a944285
commit
816f867c62
@ -89,6 +89,31 @@ type realImageGCManager struct {
|
||||
|
||||
// Track initialization
|
||||
initialized bool
|
||||
|
||||
// imageCache is the cache of latest image list.
|
||||
imageCache imageCache
|
||||
}
|
||||
|
||||
// imageCache caches latest result of ListImages.
|
||||
type imageCache struct {
|
||||
// sync.RWMutex is the mutex protects the image cache.
|
||||
sync.RWMutex
|
||||
// images is the image cache.
|
||||
images []kubecontainer.Image
|
||||
}
|
||||
|
||||
// set updates image cache.
|
||||
func (i *imageCache) set(images []kubecontainer.Image) {
|
||||
i.Lock()
|
||||
defer i.Unlock()
|
||||
i.images = images
|
||||
}
|
||||
|
||||
// get gets image list from image cache.
|
||||
func (i *imageCache) get() []kubecontainer.Image {
|
||||
i.RLock()
|
||||
defer i.RUnlock()
|
||||
return i.images
|
||||
}
|
||||
|
||||
// Information about the images we track.
|
||||
@ -142,16 +167,23 @@ func (im *realImageGCManager) Start() error {
|
||||
}
|
||||
}, 5*time.Minute, wait.NeverStop)
|
||||
|
||||
// Start a goroutine periodically updates image cache.
|
||||
// TODO(random-liu): Merge this with the previous loop.
|
||||
go wait.Until(func() {
|
||||
images, err := im.runtime.ListImages()
|
||||
if err != nil {
|
||||
glog.Warningf("[imageGCManager] Failed to update image list: %v", err)
|
||||
} else {
|
||||
im.imageCache.set(images)
|
||||
}
|
||||
}, 30*time.Second, wait.NeverStop)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get a list of images on this node
|
||||
func (im *realImageGCManager) GetImageList() ([]kubecontainer.Image, error) {
|
||||
images, err := im.runtime.ListImages()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return images, nil
|
||||
return im.imageCache.get(), nil
|
||||
}
|
||||
|
||||
func (im *realImageGCManager) detectImages(detectTime time.Time) error {
|
||||
|
@ -84,6 +84,17 @@ const (
|
||||
maxImgSize int64 = 1000 * 1024 * 1024
|
||||
)
|
||||
|
||||
// fakeImageGCManager is a fake image gc manager for testing. It will return image
|
||||
// list from fake runtime directly instead of caching it.
|
||||
type fakeImageGCManager struct {
|
||||
fakeImageService kubecontainer.ImageService
|
||||
images.ImageGCManager
|
||||
}
|
||||
|
||||
func (f *fakeImageGCManager) GetImageList() ([]kubecontainer.Image, error) {
|
||||
return f.fakeImageService.ListImages()
|
||||
}
|
||||
|
||||
type TestKubelet struct {
|
||||
kubelet *Kubelet
|
||||
fakeRuntime *containertest.FakeRuntime
|
||||
@ -188,7 +199,12 @@ func newTestKubeletWithImageList(
|
||||
HighThresholdPercent: 90,
|
||||
LowThresholdPercent: 80,
|
||||
}
|
||||
kubelet.imageManager, err = images.NewImageGCManager(fakeRuntime, mockCadvisor, fakeRecorder, fakeNodeRef, fakeImageGCPolicy)
|
||||
imageGCManager, err := images.NewImageGCManager(fakeRuntime, mockCadvisor, fakeRecorder, fakeNodeRef, fakeImageGCPolicy)
|
||||
assert.NoError(t, err)
|
||||
kubelet.imageManager = &fakeImageGCManager{
|
||||
fakeImageService: fakeRuntime,
|
||||
ImageGCManager: imageGCManager,
|
||||
}
|
||||
fakeClock := clock.NewFakeClock(time.Now())
|
||||
kubelet.backOff = flowcontrol.NewBackOff(time.Second, time.Minute)
|
||||
kubelet.backOff.Clock = fakeClock
|
||||
|
Loading…
Reference in New Issue
Block a user