From 036e072e4113b43bdbb9f33a3d058e8c8a155ff1 Mon Sep 17 00:00:00 2001 From: SataQiu Date: Wed, 11 Sep 2024 14:28:09 +0800 Subject: [PATCH] kubeadm: skip addons phase on worker node --- cmd/kubeadm/app/cmd/phases/upgrade/addons.go | 20 ++++++++++++++----- .../app/cmd/phases/upgrade/apply/data_test.go | 1 + cmd/kubeadm/app/cmd/phases/upgrade/data.go | 1 + .../app/cmd/phases/upgrade/data_test.go | 1 + .../app/cmd/phases/upgrade/node/data.go | 1 - cmd/kubeadm/app/cmd/upgrade/apply.go | 6 ++++++ 6 files changed, 24 insertions(+), 6 deletions(-) diff --git a/cmd/kubeadm/app/cmd/phases/upgrade/addons.go b/cmd/kubeadm/app/cmd/phases/upgrade/addons.go index d010e09c6bf..2f18df2b2ad 100644 --- a/cmd/kubeadm/app/cmd/phases/upgrade/addons.go +++ b/cmd/kubeadm/app/cmd/phases/upgrade/addons.go @@ -73,21 +73,26 @@ func shouldUpgradeAddons(client clientset.Interface, cfg *kubeadmapi.InitConfigu return true, nil } -func getInitData(c workflow.RunData) (*kubeadmapi.InitConfiguration, clientset.Interface, string, io.Writer, bool, error) { +func getInitData(c workflow.RunData) (*kubeadmapi.InitConfiguration, clientset.Interface, string, io.Writer, bool, bool, error) { data, ok := c.(Data) if !ok { - return nil, nil, "", nil, false, errors.New("addon phase invoked with an invalid data struct") + return nil, nil, "", nil, false, false, errors.New("addon phase invoked with an invalid data struct") } - return data.InitCfg(), data.Client(), data.PatchesDir(), data.OutputWriter(), data.DryRun(), nil + return data.InitCfg(), data.Client(), data.PatchesDir(), data.OutputWriter(), data.DryRun(), data.IsControlPlaneNode(), nil } // runCoreDNSAddon upgrades the CoreDNS addon. func runCoreDNSAddon(c workflow.RunData) error { - cfg, client, patchesDir, out, dryRun, err := getInitData(c) + cfg, client, patchesDir, out, dryRun, isControlPlaneNode, err := getInitData(c) if err != nil { return err } + if !isControlPlaneNode { + fmt.Println("[upgrade/addon] Skipping addon/coredns phase. Not a control plane node.") + return nil + } + shouldUpgradeAddons, err := shouldUpgradeAddons(client, cfg, out) if err != nil { return err @@ -105,11 +110,16 @@ func runCoreDNSAddon(c workflow.RunData) error { // runKubeProxyAddon upgrades the kube-proxy addon. func runKubeProxyAddon(c workflow.RunData) error { - cfg, client, _, out, dryRun, err := getInitData(c) + cfg, client, _, out, dryRun, isControlPlaneNode, err := getInitData(c) if err != nil { return err } + if !isControlPlaneNode { + fmt.Println("[upgrade/addon] Skipping addon/kube-proxy phase. Not a control plane node.") + return nil + } + shouldUpgradeAddons, err := shouldUpgradeAddons(client, cfg, out) if err != nil { return err diff --git a/cmd/kubeadm/app/cmd/phases/upgrade/apply/data_test.go b/cmd/kubeadm/app/cmd/phases/upgrade/apply/data_test.go index 1016293348f..a5a55f1beb9 100644 --- a/cmd/kubeadm/app/cmd/phases/upgrade/apply/data_test.go +++ b/cmd/kubeadm/app/cmd/phases/upgrade/apply/data_test.go @@ -36,6 +36,7 @@ func (t *testData) RenewCerts() bool { return false } func (t *testData) DryRun() bool { return false } func (t *testData) Cfg() *kubeadmapi.UpgradeConfiguration { return nil } func (t *testData) InitCfg() *kubeadmapi.InitConfiguration { return nil } +func (t *testData) IsControlPlaneNode() bool { return false } func (t *testData) Client() clientset.Interface { return nil } func (t *testData) IgnorePreflightErrors() sets.Set[string] { return nil } func (t *testData) PatchesDir() string { return "" } diff --git a/cmd/kubeadm/app/cmd/phases/upgrade/data.go b/cmd/kubeadm/app/cmd/phases/upgrade/data.go index 75270be2c2b..6b299d8aaa9 100644 --- a/cmd/kubeadm/app/cmd/phases/upgrade/data.go +++ b/cmd/kubeadm/app/cmd/phases/upgrade/data.go @@ -33,6 +33,7 @@ type Data interface { DryRun() bool Cfg() *kubeadmapi.UpgradeConfiguration InitCfg() *kubeadmapi.InitConfiguration + IsControlPlaneNode() bool Client() clientset.Interface IgnorePreflightErrors() sets.Set[string] PatchesDir() string diff --git a/cmd/kubeadm/app/cmd/phases/upgrade/data_test.go b/cmd/kubeadm/app/cmd/phases/upgrade/data_test.go index 6d6b3b3c943..bc2f1ce0d93 100644 --- a/cmd/kubeadm/app/cmd/phases/upgrade/data_test.go +++ b/cmd/kubeadm/app/cmd/phases/upgrade/data_test.go @@ -36,6 +36,7 @@ func (t *testData) RenewCerts() bool { return false } func (t *testData) DryRun() bool { return false } func (t *testData) Cfg() *kubeadmapi.UpgradeConfiguration { return nil } func (t *testData) InitCfg() *kubeadmapi.InitConfiguration { return nil } +func (t *testData) IsControlPlaneNode() bool { return false } func (t *testData) Client() clientset.Interface { return nil } func (t *testData) IgnorePreflightErrors() sets.Set[string] { return nil } func (t *testData) PatchesDir() string { return "" } diff --git a/cmd/kubeadm/app/cmd/phases/upgrade/node/data.go b/cmd/kubeadm/app/cmd/phases/upgrade/node/data.go index aaf2cdf4212..3fc54ab38fd 100644 --- a/cmd/kubeadm/app/cmd/phases/upgrade/node/data.go +++ b/cmd/kubeadm/app/cmd/phases/upgrade/node/data.go @@ -26,6 +26,5 @@ import ( type Data interface { upgrade.Data - IsControlPlaneNode() bool KubeConfigPath() string } diff --git a/cmd/kubeadm/app/cmd/upgrade/apply.go b/cmd/kubeadm/app/cmd/upgrade/apply.go index 14eb32bc0de..667a2187e37 100644 --- a/cmd/kubeadm/app/cmd/upgrade/apply.go +++ b/cmd/kubeadm/app/cmd/upgrade/apply.go @@ -351,3 +351,9 @@ func (d *applyData) AllowRCUpgrades() bool { func (d *applyData) ForceUpgrade() bool { return d.force } + +// IsControlPlaneNode returns if the node is a control-plane node. +func (d *applyData) IsControlPlaneNode() bool { + // `kubeadm upgrade apply` should always be executed on a control-plane node + return true +}