mirror of https://github.com/k3s-io/k3s
commit
9192a4ce22
|
@ -622,21 +622,3 @@ func parseImageName(image string) (string, string) {
|
|||
type ContainerCommandRunner interface {
|
||||
RunInContainer(containerID string, cmd []string) ([]byte, error)
|
||||
}
|
||||
|
||||
func GetUnusedImages(client DockerInterface) ([]string, error) {
|
||||
// IMPORTANT: this is _unsafe_ to do while there are active pulls
|
||||
// See https://github.com/docker/docker/issues/8926 for details
|
||||
images, err := client.ListImages(docker.ListImagesOptions{
|
||||
Filters: map[string][]string{
|
||||
"dangling": {"true"},
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result := make([]string, len(images))
|
||||
for ix := range images {
|
||||
result[ix] = images[ix].ID
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
|
|
@ -376,31 +376,9 @@ func (kl *Kubelet) GarbageCollectLoop() {
|
|||
if err := kl.GarbageCollectContainers(); err != nil {
|
||||
glog.Errorf("Garbage collect failed: %v", err)
|
||||
}
|
||||
if err := kl.GarbageCollectImages(); err != nil {
|
||||
glog.Errorf("Garbage collect images failed: %v", err)
|
||||
}
|
||||
}, time.Minute*1)
|
||||
}
|
||||
|
||||
func (kl *Kubelet) getUnusedImages() ([]string, error) {
|
||||
kl.pullLock.Lock()
|
||||
defer kl.pullLock.Unlock()
|
||||
return dockertools.GetUnusedImages(kl.dockerClient)
|
||||
}
|
||||
|
||||
func (kl *Kubelet) GarbageCollectImages() error {
|
||||
images, err := kl.getUnusedImages()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
for ix := range images {
|
||||
if err := kl.dockerClient.RemoveImage(images[ix]); err != nil {
|
||||
glog.Errorf("Failed to remove image: %q (%v)", images[ix], err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TODO: Also enforce a maximum total number of containers.
|
||||
func (kl *Kubelet) GarbageCollectContainers() error {
|
||||
if kl.maxContainerCount == 0 {
|
||||
|
|
|
@ -1934,29 +1934,6 @@ func TestSyncPodsWithPullPolicy(t *testing.T) {
|
|||
fakeDocker.Unlock()
|
||||
}
|
||||
|
||||
func TestGarbageCollectImages(t *testing.T) {
|
||||
kubelet, fakeDocker := newTestKubelet(t)
|
||||
|
||||
fakeDocker.Images = []docker.APIImages{
|
||||
{
|
||||
ID: "foo",
|
||||
},
|
||||
{
|
||||
ID: "bar",
|
||||
},
|
||||
}
|
||||
|
||||
if err := kubelet.GarbageCollectImages(); err != nil {
|
||||
t.Errorf("unexpected error: %v", err)
|
||||
}
|
||||
|
||||
if len(fakeDocker.RemovedImages) != 2 ||
|
||||
!fakeDocker.RemovedImages.Has("foo") ||
|
||||
!fakeDocker.RemovedImages.Has("bar") {
|
||||
t.Errorf("unexpected images removed: %v", fakeDocker.RemovedImages)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseResolvConf(t *testing.T) {
|
||||
testCases := []struct {
|
||||
data string
|
||||
|
|
Loading…
Reference in New Issue