Skip to content

Commit 7edc7fb

Browse files
committed
kubeadm: add --etcd-upgrade flag to kubeadm upgrade plan
1 parent ee22760 commit 7edc7fb

File tree

13 files changed

+79
-14
lines changed

13 files changed

+79
-14
lines changed

cmd/kubeadm/app/apis/kubeadm/fuzzer/fuzzer.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,5 +169,7 @@ func fuzzUpgradeConfiguration(obj *kubeadm.UpgradeConfiguration, c fuzz.Continue
169169
obj.Apply.ImagePullPolicy = corev1.PullIfNotPresent
170170
obj.Apply.ImagePullSerial = ptr.To(true)
171171

172+
obj.Plan.EtcdUpgrade = ptr.To(true)
173+
172174
kubeadm.SetDefaultTimeouts(&obj.Timeouts)
173175
}

cmd/kubeadm/app/apis/kubeadm/types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,6 +657,9 @@ type UpgradePlanConfiguration struct {
657657
// DryRun tells if the dry run mode is enabled, don't apply any change if it is and just output what would be done.
658658
DryRun *bool
659659

660+
// EtcdUpgrade instructs kubeadm to execute etcd upgrade during upgrades.
661+
EtcdUpgrade *bool
662+
660663
// IgnorePreflightErrors provides a slice of pre-flight errors to be ignored during the upgrade process, e.g. 'IsPrivilegedUser,Swap'.
661664
// Value 'all' ignores errors from all checks.
662665
IgnorePreflightErrors []string

cmd/kubeadm/app/apis/kubeadm/v1beta4/defaults.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,10 @@ func SetDefaults_UpgradeConfiguration(obj *UpgradeConfiguration) {
299299
obj.Apply.ImagePullSerial = ptr.To(true)
300300
}
301301

302+
if obj.Plan.EtcdUpgrade == nil {
303+
obj.Plan.EtcdUpgrade = ptr.To(true)
304+
}
305+
302306
if obj.Timeouts == nil {
303307
obj.Timeouts = &Timeouts{}
304308
}

cmd/kubeadm/app/apis/kubeadm/v1beta4/types.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,11 @@ type UpgradePlanConfiguration struct {
749749
// +optional
750750
DryRun *bool `json:"dryRun,omitempty"`
751751

752+
// EtcdUpgrade instructs kubeadm to execute etcd upgrade during upgrades.
753+
// Defaults to true.
754+
// +optional
755+
EtcdUpgrade *bool `json:"etcdUpgrade,omitempty"`
756+
752757
// IgnorePreflightErrors provides a slice of pre-flight errors to be ignored during the upgrade process, e.g. 'IsPrivilegedUser,Swap'.
753758
// Value 'all' ignores errors from all checks.
754759
// +optional

cmd/kubeadm/app/apis/kubeadm/v1beta4/zz_generated.conversion.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/kubeadm/app/apis/kubeadm/v1beta4/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/kubeadm/app/apis/kubeadm/zz_generated.deepcopy.go

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/kubeadm/app/cmd/upgrade/apply.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ type applyFlags struct {
5050
nonInteractiveMode bool
5151
force bool
5252
dryRun bool
53-
etcdUpgrade bool
5453
renewCerts bool
5554
patchesDir string
5655
}
@@ -81,7 +80,6 @@ type applyData struct {
8180
func newCmdApply(apf *applyPlanFlags) *cobra.Command {
8281
flags := &applyFlags{
8382
applyPlanFlags: apf,
84-
etcdUpgrade: true,
8583
renewCerts: true,
8684
}
8785

@@ -126,7 +124,6 @@ func newCmdApply(apf *applyPlanFlags) *cobra.Command {
126124
cmd.Flags().BoolVarP(&flags.nonInteractiveMode, "yes", "y", flags.nonInteractiveMode, "Perform the upgrade and do not prompt for confirmation (non-interactive mode).")
127125
cmd.Flags().BoolVarP(&flags.force, options.Force, "f", flags.force, "Force upgrading although some requirements might not be met. This also implies non-interactive mode.")
128126
cmd.Flags().BoolVar(&flags.dryRun, options.DryRun, flags.dryRun, "Do not change any state, just output what actions would be performed.")
129-
cmd.Flags().BoolVar(&flags.etcdUpgrade, options.EtcdUpgrade, flags.etcdUpgrade, "Perform the upgrade of etcd.")
130127
cmd.Flags().BoolVar(&flags.renewCerts, options.CertificateRenewal, flags.renewCerts, "Perform the renewal of certificates used by component changed during upgrades.")
131128
options.AddPatchesFlag(cmd.Flags(), &flags.patchesDir)
132129

cmd/kubeadm/app/cmd/upgrade/apply_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ func TestNewApplyData(t *testing.T) {
120120
allowExperimentalUpgrades: false,
121121
allowRCUpgrades: false,
122122
printConfig: false,
123+
etcdUpgrade: true,
123124
out: os.Stdout,
124125
}
125126

@@ -132,7 +133,6 @@ func TestNewApplyData(t *testing.T) {
132133

133134
flags := &applyFlags{
134135
applyPlanFlags: apf,
135-
etcdUpgrade: true,
136136
renewCerts: true,
137137
}
138138

cmd/kubeadm/app/cmd/upgrade/plan.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,19 @@ func runPlan(flagSet *pflag.FlagSet, flags *planFlags, args []string, printer ou
139139
}
140140

141141
// Generate and print the upgrade plan
142-
plan := genUpgradePlan(availUpgrades, configVersionStates)
142+
etcdUpgrade, ok := cmdutil.ValueFromFlagsOrConfig(flagSet, options.EtcdUpgrade, upgradeCfg.Plan.EtcdUpgrade, &flags.etcdUpgrade).(*bool)
143+
if !ok {
144+
return cmdutil.TypeMismatchErr("etcdUpgrade", "bool")
145+
}
146+
plan := genUpgradePlan(availUpgrades, configVersionStates, *etcdUpgrade)
143147
return printer.PrintObj(plan, os.Stdout)
144148
}
145149

146150
// genUpgradePlan generates upgrade plan from available upgrades and component config version states
147-
func genUpgradePlan(availUpgrades []upgrade.Upgrade, configVersions []outputapiv1alpha3.ComponentConfigVersionState) *outputapiv1alpha3.UpgradePlan {
151+
func genUpgradePlan(availUpgrades []upgrade.Upgrade, configVersions []outputapiv1alpha3.ComponentConfigVersionState, etcdUpgrade bool) *outputapiv1alpha3.UpgradePlan {
148152
plan := &outputapiv1alpha3.UpgradePlan{ConfigVersions: configVersions}
149153
for _, up := range availUpgrades {
150-
plan.AvailableUpgrades = append(plan.AvailableUpgrades, genAvailableUpgrade(&up))
154+
plan.AvailableUpgrades = append(plan.AvailableUpgrades, genAvailableUpgrade(&up, etcdUpgrade))
151155
}
152156
return plan
153157
}
@@ -176,7 +180,7 @@ func appendKubeadmComponent(components []outputapiv1alpha3.ComponentUpgradePlan,
176180
}
177181

178182
// genAvailableUpgrade generates available upgrade from upgrade object.
179-
func genAvailableUpgrade(up *upgrade.Upgrade) outputapiv1alpha3.AvailableUpgrade {
183+
func genAvailableUpgrade(up *upgrade.Upgrade, etcdUpgrade bool) outputapiv1alpha3.AvailableUpgrade {
180184
components := []outputapiv1alpha3.ComponentUpgradePlan{}
181185

182186
if up.CanUpgradeKubelets() {
@@ -216,10 +220,12 @@ func genAvailableUpgrade(up *upgrade.Upgrade) outputapiv1alpha3.AvailableUpgrade
216220
components = appendKubeadmComponent(components, up, constants.Kubeadm)
217221

218222
// If etcd is not external, we should include it in the upgrade plan
219-
for _, oldVersion := range sortedSliceFromStringStringArrayMap(up.Before.EtcdVersions) {
220-
nodeNames := up.Before.EtcdVersions[oldVersion]
221-
for _, nodeName := range nodeNames {
222-
components = append(components, newComponentUpgradePlan(constants.Etcd, oldVersion, up.After.EtcdVersion, nodeName))
223+
if etcdUpgrade {
224+
for _, oldVersion := range sortedSliceFromStringStringArrayMap(up.Before.EtcdVersions) {
225+
nodeNames := up.Before.EtcdVersions[oldVersion]
226+
for _, nodeName := range nodeNames {
227+
components = append(components, newComponentUpgradePlan(constants.Etcd, oldVersion, up.After.EtcdVersion, nodeName))
228+
}
223229
}
224230
}
225231

0 commit comments

Comments
 (0)