mirror of https://github.com/k3s-io/k3s
commit
9192a4ce22
|
@ -622,21 +622,3 @@ func parseImageName(image string) (string, string) {
|
||||||
type ContainerCommandRunner interface {
|
type ContainerCommandRunner interface {
|
||||||
RunInContainer(containerID string, cmd []string) ([]byte, error)
|
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 {
|
if err := kl.GarbageCollectContainers(); err != nil {
|
||||||
glog.Errorf("Garbage collect failed: %v", err)
|
glog.Errorf("Garbage collect failed: %v", err)
|
||||||
}
|
}
|
||||||
if err := kl.GarbageCollectImages(); err != nil {
|
|
||||||
glog.Errorf("Garbage collect images failed: %v", err)
|
|
||||||
}
|
|
||||||
}, time.Minute*1)
|
}, 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.
|
// TODO: Also enforce a maximum total number of containers.
|
||||||
func (kl *Kubelet) GarbageCollectContainers() error {
|
func (kl *Kubelet) GarbageCollectContainers() error {
|
||||||
if kl.maxContainerCount == 0 {
|
if kl.maxContainerCount == 0 {
|
||||||
|
|
|
@ -1934,29 +1934,6 @@ func TestSyncPodsWithPullPolicy(t *testing.T) {
|
||||||
fakeDocker.Unlock()
|
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) {
|
func TestParseResolvConf(t *testing.T) {
|
||||||
testCases := []struct {
|
testCases := []struct {
|
||||||
data string
|
data string
|
||||||
|
|
Loading…
Reference in New Issue