From f6f3738a00306b290011d7bc06a4ba09491292c4 Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Mon, 25 Nov 2019 13:00:50 +0200 Subject: [PATCH 1/2] kubeadm: don't check if image exists before pulling Removed image existence as kubeadm may miss image tags if they're updated. --- cmd/kubeadm/app/preflight/checks.go | 8 -------- 1 file changed, 8 deletions(-) diff --git a/cmd/kubeadm/app/preflight/checks.go b/cmd/kubeadm/app/preflight/checks.go index 723b5bd44e0..9c4c49f3022 100644 --- a/cmd/kubeadm/app/preflight/checks.go +++ b/cmd/kubeadm/app/preflight/checks.go @@ -833,14 +833,6 @@ func (ImagePullCheck) Name() string { // Check pulls images required by kubeadm. This is a mutating check func (ipc ImagePullCheck) Check() (warnings, errorList []error) { for _, image := range ipc.imageList { - ret, err := ipc.runtime.ImageExists(image) - if ret && err == nil { - klog.V(1).Infof("image exists: %s", image) - continue - } - if err != nil { - errorList = append(errorList, errors.Wrapf(err, "failed to check if image %s exists", image)) - } klog.V(1).Infof("pulling %s", image) if err := ipc.runtime.PullImage(image); err != nil { errorList = append(errorList, errors.Wrapf(err, "failed to pull image %s", image)) From 7898b3f0a8b12ea4cffc18e1ec51b2056df406fd Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Mon, 25 Nov 2019 15:04:08 +0200 Subject: [PATCH 2/2] kubeadm: update image pull tests --- cmd/kubeadm/app/preflight/checks_test.go | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/cmd/kubeadm/app/preflight/checks_test.go b/cmd/kubeadm/app/preflight/checks_test.go index fd66fbe28b4..798a1f9e89c 100644 --- a/cmd/kubeadm/app/preflight/checks_test.go +++ b/cmd/kubeadm/app/preflight/checks_test.go @@ -753,18 +753,20 @@ func TestSetHasItemOrAll(t *testing.T) { func TestImagePullCheck(t *testing.T) { fcmd := fakeexec.FakeCmd{ RunScript: []fakeexec.FakeRunAction{ - // Test case 1: img1 and img2 exist, img3 doesn't exist + // Test case 1: pull 3 images successfully + func() ([]byte, []byte, error) { return nil, nil, nil }, func() ([]byte, []byte, error) { return nil, nil, nil }, func() ([]byte, []byte, error) { return nil, nil, nil }, - func() ([]byte, []byte, error) { return nil, nil, &fakeexec.FakeExitError{Status: 1} }, - // Test case 2: images don't exist - func() ([]byte, []byte, error) { return nil, nil, &fakeexec.FakeExitError{Status: 1} }, + // Test case 2: image pull errors + func() ([]byte, []byte, error) { return nil, nil, nil }, func() ([]byte, []byte, error) { return nil, nil, &fakeexec.FakeExitError{Status: 1} }, func() ([]byte, []byte, error) { return nil, nil, &fakeexec.FakeExitError{Status: 1} }, }, CombinedOutputScript: []fakeexec.FakeCombinedOutputAction{ - // Test case1: pull only img3 + // Test case1: pull 3 images + func() ([]byte, error) { return nil, nil }, + func() ([]byte, error) { return nil, nil }, func() ([]byte, error) { return nil, nil }, // Test case 2: fail to pull image2 and image3 func() ([]byte, error) { return nil, nil }, @@ -781,10 +783,6 @@ func TestImagePullCheck(t *testing.T) { func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, - func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, - func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, - func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, - func(cmd string, args ...string) exec.Cmd { return fakeexec.InitFakeCmd(&fcmd, cmd, args...) }, }, LookPathFunc: func(cmd string) (string, error) { return "/usr/bin/docker", nil }, } @@ -803,7 +801,7 @@ func TestImagePullCheck(t *testing.T) { t.Fatalf("did not expect any warnings but got %q", warnings) } if len(errors) != 0 { - t.Fatalf("expected 1 errors but got %d: %q", len(errors), errors) + t.Fatalf("expected 0 errors but got %d: %q", len(errors), errors) } warnings, errors = check.Check()