From 149fbe387420a002e7cb425d4945e18633302adf Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Sun, 21 Oct 2018 10:07:02 +0300 Subject: [PATCH] kubeadm: don't prepull etcd image on upgrade Skipped prepulling etcd image if external etcd is used. Fixes: kubernetes/kubeadm#1136 --- cmd/kubeadm/app/cmd/upgrade/apply.go | 6 +++++- cmd/kubeadm/app/phases/upgrade/prepull.go | 3 +-- cmd/kubeadm/app/phases/upgrade/prepull_test.go | 4 +++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/cmd/kubeadm/app/cmd/upgrade/apply.go b/cmd/kubeadm/app/cmd/upgrade/apply.go index 2430701d072..acffb90f441 100644 --- a/cmd/kubeadm/app/cmd/upgrade/apply.go +++ b/cmd/kubeadm/app/cmd/upgrade/apply.go @@ -194,7 +194,11 @@ func RunApply(flags *applyFlags) error { // and block until all DaemonSets are ready; then we know for sure that all control plane images are cached locally glog.V(1).Infof("[upgrade/apply] creating prepuller") prepuller := upgrade.NewDaemonSetPrepuller(upgradeVars.client, upgradeVars.waiter, &upgradeVars.cfg.ClusterConfiguration) - if err := upgrade.PrepullImagesInParallel(prepuller, flags.imagePullTimeout); err != nil { + componentsToPrepull := constants.MasterComponents + if upgradeVars.cfg.Etcd.External != nil { + componentsToPrepull = append(componentsToPrepull, constants.Etcd) + } + if err := upgrade.PrepullImagesInParallel(prepuller, flags.imagePullTimeout, componentsToPrepull); err != nil { return fmt.Errorf("[upgrade/prepull] Failed prepulled the images for the control plane components error: %v", err) } diff --git a/cmd/kubeadm/app/phases/upgrade/prepull.go b/cmd/kubeadm/app/phases/upgrade/prepull.go index 19eb28f61c9..63a2be77d8d 100644 --- a/cmd/kubeadm/app/phases/upgrade/prepull.go +++ b/cmd/kubeadm/app/phases/upgrade/prepull.go @@ -91,8 +91,7 @@ func (d *DaemonSetPrepuller) DeleteFunc(component string) error { } // PrepullImagesInParallel creates DaemonSets synchronously but waits in parallel for the images to pull -func PrepullImagesInParallel(kubePrepuller Prepuller, timeout time.Duration) error { - componentsToPrepull := append(constants.MasterComponents, constants.Etcd) +func PrepullImagesInParallel(kubePrepuller Prepuller, timeout time.Duration, componentsToPrepull []string) error { fmt.Printf("[upgrade/prepull] Will prepull images for components %v\n", componentsToPrepull) timeoutChan := time.After(timeout) diff --git a/cmd/kubeadm/app/phases/upgrade/prepull_test.go b/cmd/kubeadm/app/phases/upgrade/prepull_test.go index 9fd38b77c10..559f71fa586 100644 --- a/cmd/kubeadm/app/phases/upgrade/prepull_test.go +++ b/cmd/kubeadm/app/phases/upgrade/prepull_test.go @@ -20,6 +20,8 @@ import ( "fmt" "testing" "time" + + "k8s.io/kubernetes/cmd/kubeadm/app/constants" //"k8s.io/apimachinery/pkg/util/version" ) @@ -133,7 +135,7 @@ func TestPrepullImagesInParallel(t *testing.T) { for _, rt := range tests { - actualErr := PrepullImagesInParallel(rt.p, rt.timeout) + actualErr := PrepullImagesInParallel(rt.p, rt.timeout, append(constants.MasterComponents, constants.Etcd)) if (actualErr != nil) != rt.expectedErr { t.Errorf( "failed TestPrepullImagesInParallel\n\texpected error: %t\n\tgot: %t",