Skip to content

Commit 2da163b

Browse files
authored
Merge pull request kubernetes#89588 from rosti/kubeadm-etcd-upgrade
kubeadm: Use image tag as version of stacked etcd
2 parents c0be582 + c8b7e57 commit 2da163b

File tree

13 files changed

+273
-211
lines changed

13 files changed

+273
-211
lines changed

cmd/kubeadm/app/cmd/upgrade/BUILD

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ go_library(
2929
"//cmd/kubeadm/app/util/apiclient:go_default_library",
3030
"//cmd/kubeadm/app/util/config:go_default_library",
3131
"//cmd/kubeadm/app/util/dryrun:go_default_library",
32-
"//cmd/kubeadm/app/util/etcd:go_default_library",
3332
"//cmd/kubeadm/app/util/kubeconfig:go_default_library",
3433
"//staging/src/k8s.io/api/core/v1:go_default_library",
3534
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",

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

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ import (
3232
outputapiv1alpha1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/output/v1alpha1"
3333
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
3434
"k8s.io/kubernetes/cmd/kubeadm/app/phases/upgrade"
35-
etcdutil "k8s.io/kubernetes/cmd/kubeadm/app/util/etcd"
3635
)
3736

3837
type planFlags struct {
@@ -73,28 +72,13 @@ func runPlan(flags *planFlags, userVersion string) error {
7372
return err
7473
}
7574

76-
var etcdClient etcdutil.ClusterInterrogator
77-
7875
// Currently this is the only method we have for distinguishing
7976
// external etcd vs static pod etcd
8077
isExternalEtcd := cfg.Etcd.External != nil
81-
if isExternalEtcd {
82-
etcdClient, err = etcdutil.New(
83-
cfg.Etcd.External.Endpoints,
84-
cfg.Etcd.External.CAFile,
85-
cfg.Etcd.External.CertFile,
86-
cfg.Etcd.External.KeyFile)
87-
} else {
88-
// Connects to local/stacked etcd existing in the cluster
89-
etcdClient, err = etcdutil.NewFromCluster(client, cfg.CertificatesDir)
90-
}
91-
if err != nil {
92-
return err
93-
}
9478

9579
// Compute which upgrade possibilities there are
9680
klog.V(1).Infoln("[upgrade/plan] computing upgrade possibilities")
97-
availUpgrades, err := upgrade.GetAvailableUpgrades(versionGetter, flags.allowExperimentalUpgrades, flags.allowRCUpgrades, etcdClient, cfg.DNS.Type, client)
81+
availUpgrades, err := upgrade.GetAvailableUpgrades(versionGetter, flags.allowExperimentalUpgrades, flags.allowRCUpgrades, isExternalEtcd, cfg.DNS.Type, client, constants.GetStaticPodDirectory())
9882
if err != nil {
9983
return errors.Wrap(err, "[upgrade/versions] FATAL")
10084
}
@@ -161,10 +145,6 @@ func genUpgradePlan(up *upgrade.Upgrade, isExternalEtcd bool) (*outputapiv1alpha
161145

162146
components := []outputapiv1alpha1.ComponentUpgradePlan{}
163147

164-
if isExternalEtcd && up.CanUpgradeEtcd() {
165-
components = append(components, newComponentUpgradePlan(constants.Etcd, up.Before.EtcdVersion, up.After.EtcdVersion))
166-
}
167-
168148
if up.CanUpgradeKubelets() {
169149
// The map is of the form <old-version>:<node-count>. Here all the keys are put into a slice and sorted
170150
// in order to always get the right order. Then the map value is extracted separately
@@ -204,11 +184,8 @@ func printUpgradePlan(up *upgrade.Upgrade, plan *outputapiv1alpha1.UpgradePlan,
204184
printManualUpgradeHeader := true
205185
for _, component := range plan.Components {
206186
if isExternalEtcd && component.Name == constants.Etcd {
207-
fmt.Fprintln(w, "External components that should be upgraded manually before you upgrade the control plane with 'kubeadm upgrade apply':")
208-
fmt.Fprintln(tabw, "COMPONENT\tCURRENT\tAVAILABLE")
209-
fmt.Fprintf(tabw, "%s\t%s\t%s\n", component.Name, component.CurrentVersion, component.NewVersion)
210-
// end of external components table
211-
endOfTable()
187+
// Don't print etcd if it's external
188+
continue
212189
} else if component.Name == constants.Kubelet {
213190
if printManualUpgradeHeader {
214191
fmt.Fprintln(w, "Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':")

cmd/kubeadm/app/cmd/upgrade/plan_test.go

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -429,11 +429,7 @@ _____________________________________________________________________
429429
},
430430
},
431431
externalEtcd: true,
432-
expectedBytes: []byte(`External components that should be upgraded manually before you upgrade the control plane with 'kubeadm upgrade apply':
433-
COMPONENT CURRENT AVAILABLE
434-
etcd 3.0.17 3.1.12
435-
436-
Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
432+
expectedBytes: []byte(`Components that must be upgraded manually after you have upgraded the control plane with 'kubeadm upgrade apply':
437433
COMPONENT CURRENT AVAILABLE
438434
kubelet 1 x v1.9.2 v1.9.3
439435

cmd/kubeadm/app/phases/upgrade/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ go_library(
3434
"//cmd/kubeadm/app/util/apiclient:go_default_library",
3535
"//cmd/kubeadm/app/util/dryrun:go_default_library",
3636
"//cmd/kubeadm/app/util/etcd:go_default_library",
37+
"//cmd/kubeadm/app/util/image:go_default_library",
3738
"//cmd/kubeadm/app/util/staticpod:go_default_library",
3839
"//staging/src/k8s.io/api/apps/v1:go_default_library",
3940
"//staging/src/k8s.io/api/batch/v1:go_default_library",

cmd/kubeadm/app/phases/upgrade/compute.go

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
2727
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
2828
"k8s.io/kubernetes/cmd/kubeadm/app/phases/addons/dns"
29-
etcdutil "k8s.io/kubernetes/cmd/kubeadm/app/util/etcd"
3029
)
3130

3231
// Upgrade defines an upgrade possibility to upgrade from a current version to a new one
@@ -75,7 +74,7 @@ type ClusterState struct {
7574

7675
// GetAvailableUpgrades fetches all versions from the specified VersionGetter and computes which
7776
// kinds of upgrades can be performed
78-
func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesAllowed, rcUpgradesAllowed bool, etcdClient etcdutil.ClusterInterrogator, dnsType kubeadmapi.DNSAddOnType, client clientset.Interface) ([]Upgrade, error) {
77+
func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesAllowed, rcUpgradesAllowed, externalEtcd bool, dnsType kubeadmapi.DNSAddOnType, client clientset.Interface, manifestsDir string) ([]Upgrade, error) {
7978
fmt.Println("[upgrade] Fetching available versions to upgrade to")
8079

8180
// Collect the upgrades kubeadm can do in this list
@@ -111,10 +110,13 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
111110
return upgrades, err
112111
}
113112

114-
// Get current etcd version
115-
etcdVersion, err := etcdClient.GetVersion()
116-
if err != nil {
117-
return upgrades, err
113+
// Get current stacked etcd version on the local node
114+
var etcdVersion string
115+
if !externalEtcd {
116+
etcdVersion, err = GetEtcdImageTagFromStaticPod(manifestsDir)
117+
if err != nil {
118+
return upgrades, err
119+
}
118120
}
119121

120122
currentDNSType, dnsVersion, err := dns.DeployedDNSAddon(client)
@@ -174,7 +176,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
174176
DNSType: dnsType,
175177
DNSVersion: kubeadmconstants.GetDNSVersion(dnsType),
176178
KubeadmVersion: newKubeadmVer,
177-
EtcdVersion: getSuggestedEtcdVersion(patchVersionStr),
179+
EtcdVersion: getSuggestedEtcdVersion(externalEtcd, patchVersionStr),
178180
// KubeletVersions is unset here as it is not used anywhere in .After
179181
},
180182
})
@@ -191,7 +193,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
191193
DNSType: dnsType,
192194
DNSVersion: kubeadmconstants.GetDNSVersion(dnsType),
193195
KubeadmVersion: stableVersionStr,
194-
EtcdVersion: getSuggestedEtcdVersion(stableVersionStr),
196+
EtcdVersion: getSuggestedEtcdVersion(externalEtcd, stableVersionStr),
195197
// KubeletVersions is unset here as it is not used anywhere in .After
196198
},
197199
})
@@ -239,7 +241,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
239241
DNSType: dnsType,
240242
DNSVersion: kubeadmconstants.GetDNSVersion(dnsType),
241243
KubeadmVersion: previousBranchLatestVersionStr,
242-
EtcdVersion: getSuggestedEtcdVersion(previousBranchLatestVersionStr),
244+
EtcdVersion: getSuggestedEtcdVersion(externalEtcd, previousBranchLatestVersionStr),
243245
// KubeletVersions is unset here as it is not used anywhere in .After
244246
},
245247
})
@@ -266,7 +268,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
266268
DNSType: dnsType,
267269
DNSVersion: unstableKubeDNSVersion,
268270
KubeadmVersion: unstableKubeVersion,
269-
EtcdVersion: getSuggestedEtcdVersion(unstableKubeVersion),
271+
EtcdVersion: getSuggestedEtcdVersion(externalEtcd, unstableKubeVersion),
270272
// KubeletVersions is unset here as it is not used anywhere in .After
271273
},
272274
})
@@ -300,7 +302,10 @@ func minorUpgradePossibleWithPatchRelease(stableVersion, patchVersion *versionut
300302
return patchVersion.LessThan(stableVersion)
301303
}
302304

303-
func getSuggestedEtcdVersion(kubernetesVersion string) string {
305+
func getSuggestedEtcdVersion(externalEtcd bool, kubernetesVersion string) string {
306+
if externalEtcd {
307+
return ""
308+
}
304309
etcdVersion, warning, err := kubeadmconstants.EtcdSupportedVersion(kubeadmconstants.SupportedEtcdVersion, kubernetesVersion)
305310
if err != nil {
306311
klog.Warningf("[upgrade/versions] could not retrieve an etcd version for the target Kubernetes version: %v", err)

0 commit comments

Comments
 (0)