mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #63920 from dixudx/kubeadm-support-version
Automatic merge from submit-queue (batch tested with PRs 63920, 63716, 63928, 60553, 63946). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. Update kubeadm's minimum supported Kubernetes in v1.11.x to 1.10 **What this PR does / why we need it**: This PR does, * Restricts supported Kubernetes version in 1.11 cycle; * Removes useless v190-specific variables, since the minimum version is v1.10; * Bumps etcd version based on k8s version to 1.10.X => 3.1.12, 1.11.X => 3.2.18, 1.12.X => 3.2.18; **Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*: Fixes kubernetes/kubeadm#815 **Special notes for your reviewer**: /cc kubernetes/sig-cluster-lifecycle-pr-reviews /cc luxas **Release note**: ```release-note Update kubeadm's minimum supported kubernetes in v1.11.x to 1.10 ```
This commit is contained in:
commit
6c7fb87cb6
@ -62,12 +62,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
|
||||
name: "set k8s version",
|
||||
expectedImageCount: defaultNumberOfImages,
|
||||
expectedImageSubstrings: []string{
|
||||
":v1.9.1",
|
||||
":v1.10.1",
|
||||
},
|
||||
configContents: []byte(dedent.Dedent(`
|
||||
apiVersion: kubeadm.k8s.io/v1alpha2
|
||||
kind: MasterConfiguration
|
||||
kubernetesVersion: 1.9.1
|
||||
kubernetesVersion: 1.10.1
|
||||
`)),
|
||||
},
|
||||
{
|
||||
|
@ -31,7 +31,7 @@ import (
|
||||
)
|
||||
|
||||
// phaseTestK8sVersion is a fake kubernetes version to use when testing
|
||||
const phaseTestK8sVersion = "v1.9.0"
|
||||
const phaseTestK8sVersion = "v1.10.0"
|
||||
|
||||
func TestCertsSubCommandsHasFlags(t *testing.T) {
|
||||
|
||||
|
@ -90,7 +90,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
||||
{
|
||||
command: "all",
|
||||
additionalFlags: []string{
|
||||
"--kubernetes-version=v1.9.0",
|
||||
"--kubernetes-version=v1.10.0",
|
||||
"--apiserver-advertise-address=1.2.3.4",
|
||||
"--apiserver-bind-port=6443",
|
||||
"--service-cidr=1.2.3.4/16",
|
||||
@ -105,7 +105,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
||||
{
|
||||
command: "apiserver",
|
||||
additionalFlags: []string{
|
||||
"--kubernetes-version=v1.9.0",
|
||||
"--kubernetes-version=v1.10.0",
|
||||
"--apiserver-advertise-address=1.2.3.4",
|
||||
"--apiserver-bind-port=6443",
|
||||
"--service-cidr=1.2.3.4/16",
|
||||
@ -115,7 +115,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
||||
{
|
||||
command: "controller-manager",
|
||||
additionalFlags: []string{
|
||||
"--kubernetes-version=v1.9.0",
|
||||
"--kubernetes-version=v1.10.0",
|
||||
"--pod-network-cidr=1.2.3.4/16",
|
||||
},
|
||||
expectedFiles: []string{"kube-controller-manager.yaml"},
|
||||
@ -123,7 +123,7 @@ func TestControlPlaneCreateFilesWithFlags(t *testing.T) {
|
||||
{
|
||||
command: "scheduler",
|
||||
additionalFlags: []string{
|
||||
"--kubernetes-version=v1.9.0",
|
||||
"--kubernetes-version=v1.10.0",
|
||||
},
|
||||
expectedFiles: []string{"kube-scheduler.yaml"},
|
||||
},
|
||||
|
@ -184,7 +184,7 @@ func TestRunCreateToken(t *testing.T) {
|
||||
|
||||
// KubernetesVersion is not used by bootstrap-token, but we set this explicitly to avoid
|
||||
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
|
||||
KubernetesVersion: "v1.9.0",
|
||||
KubernetesVersion: "v1.10.0",
|
||||
Token: tc.token,
|
||||
TokenTTL: &metav1.Duration{Duration: 0},
|
||||
TokenUsages: tc.usages,
|
||||
|
@ -285,16 +285,16 @@ var (
|
||||
MasterComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler}
|
||||
|
||||
// MinimumControlPlaneVersion specifies the minimum control plane version kubeadm can deploy
|
||||
MinimumControlPlaneVersion = version.MustParseSemantic("v1.9.0")
|
||||
MinimumControlPlaneVersion = version.MustParseSemantic("v1.10.0")
|
||||
|
||||
// MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports
|
||||
MinimumKubeletVersion = version.MustParseSemantic("v1.9.0")
|
||||
MinimumKubeletVersion = version.MustParseSemantic("v1.10.0")
|
||||
|
||||
// SupportedEtcdVersion lists officially supported etcd versions with corresponding kubernetes releases
|
||||
SupportedEtcdVersion = map[uint8]string{
|
||||
9: "3.1.12",
|
||||
10: "3.1.12",
|
||||
11: "3.2.18",
|
||||
12: "3.2.18",
|
||||
}
|
||||
)
|
||||
|
||||
|
@ -126,26 +126,26 @@ func TestEtcdSupportedVersion(t *testing.T) {
|
||||
expectedVersion: nil,
|
||||
expectedError: fmt.Errorf("Unsupported or unknown kubernetes version(1.99.0)"),
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.9.0",
|
||||
expectedVersion: version.MustParseSemantic("3.1.12"),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.9.2",
|
||||
expectedVersion: version.MustParseSemantic("3.1.12"),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.10.0",
|
||||
expectedVersion: version.MustParseSemantic("3.1.12"),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.10.1",
|
||||
kubernetesVersion: "1.10.2",
|
||||
expectedVersion: version.MustParseSemantic("3.1.12"),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.11.0",
|
||||
expectedVersion: version.MustParseSemantic("3.2.18"),
|
||||
expectedError: nil,
|
||||
},
|
||||
{
|
||||
kubernetesVersion: "1.12.1",
|
||||
expectedVersion: version.MustParseSemantic("3.2.18"),
|
||||
expectedError: nil,
|
||||
},
|
||||
}
|
||||
for _, rt := range tests {
|
||||
actualVersion, actualError := EtcdSupportedVersion(rt.kubernetesVersion)
|
||||
|
@ -46,16 +46,14 @@ const (
|
||||
Auditing = "Auditing"
|
||||
)
|
||||
|
||||
var v190 = version.MustParseSemantic("v1.9.0-alpha.1")
|
||||
|
||||
// InitFeatureGates are the default feature gates for the init command
|
||||
var InitFeatureGates = FeatureList{
|
||||
SelfHosting: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
|
||||
StoreCertsInSecrets: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
|
||||
// We don't want to advertise this feature gate exists in v1.9 to avoid confusion as it is not yet working
|
||||
HighAvailability: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190, HiddenInHelpText: true},
|
||||
CoreDNS: {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.GA}, MinimumVersion: v190},
|
||||
DynamicKubeletConfig: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, MinimumVersion: v190},
|
||||
HighAvailability: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}, HiddenInHelpText: true},
|
||||
CoreDNS: {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.GA}},
|
||||
DynamicKubeletConfig: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
|
||||
Auditing: {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Alpha}},
|
||||
}
|
||||
|
||||
|
@ -121,7 +121,7 @@ func TestNewFeatureGate(t *testing.T) {
|
||||
func TestValidateVersion(t *testing.T) {
|
||||
var someFeatures = FeatureList{
|
||||
"feature1": {FeatureSpec: utilfeature.FeatureSpec{Default: false, PreRelease: utilfeature.Beta}},
|
||||
"feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}, MinimumVersion: v190},
|
||||
"feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}},
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
@ -133,16 +133,10 @@ func TestValidateVersion(t *testing.T) {
|
||||
requestedFeatures: map[string]bool{"feature1": true},
|
||||
expectedError: false,
|
||||
},
|
||||
{ //min version but correct value given
|
||||
{ //no min version
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.9.0",
|
||||
expectedError: false,
|
||||
},
|
||||
{ //min version and incorrect value given
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.8.2",
|
||||
expectedError: true,
|
||||
},
|
||||
}
|
||||
|
||||
for _, test := range tests {
|
||||
|
@ -94,7 +94,7 @@ func TestCompileManifests(t *testing.T) {
|
||||
expected bool
|
||||
}{
|
||||
{
|
||||
manifest: v180AndAboveKubeDNSDeployment,
|
||||
manifest: KubeDNSDeployment,
|
||||
data: struct{ ImageRepository, Arch, Version, DNSBindAddr, DNSProbeAddr, DNSDomain, MasterTaintKey string }{
|
||||
ImageRepository: "foo",
|
||||
Arch: "foo",
|
||||
|
@ -17,8 +17,8 @@ limitations under the License.
|
||||
package dns
|
||||
|
||||
const (
|
||||
// v180AndAboveKubeDNSDeployment is the kube-dns Deployment manifest for the kube-dns manifest for v1.7+
|
||||
v180AndAboveKubeDNSDeployment = `
|
||||
// KubeDNSDeployment is the kube-dns Deployment manifest for the kube-dns manifest for v1.7+
|
||||
KubeDNSDeployment = `
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
|
@ -46,7 +46,7 @@ func GetDNSVersion(kubeVersion *version.Version, dns string) string {
|
||||
func GetKubeDNSManifest(kubeVersion *version.Version) string {
|
||||
// v1.8.0+ has only one known YAML manifest spec, just return that here
|
||||
// In the future when the kube-dns version is bumped at HEAD; add conditional logic to return the right manifest
|
||||
return v180AndAboveKubeDNSDeployment
|
||||
return KubeDNSDeployment
|
||||
}
|
||||
|
||||
// GetCoreDNSManifest returns the right CoreDNS YAML manifest for a specific k8s version
|
||||
|
@ -197,7 +197,7 @@ func TestEnsureProxyAddon(t *testing.T) {
|
||||
PodSubnet: "5.6.7.8/24",
|
||||
},
|
||||
ImageRepository: "someRepo",
|
||||
KubernetesVersion: "v1.9.0",
|
||||
KubernetesVersion: "v1.10.0",
|
||||
UnifiedControlPlaneImage: "someImage",
|
||||
}
|
||||
|
||||
|
@ -279,7 +279,7 @@ func GetAvailableUpgrades(versionGetterImpl VersionGetter, experimentalUpgradesA
|
||||
}
|
||||
|
||||
func getBranchFromVersion(version string) string {
|
||||
return strings.TrimPrefix(version, "v")[:3]
|
||||
return strings.TrimPrefix(version, "v")[:4]
|
||||
}
|
||||
|
||||
func patchVersionBranchExists(clusterVersion, stableVersion *version.Version) bool {
|
||||
|
@ -56,7 +56,7 @@ func (f *fakeVersionGetter) VersionFromCILabel(ciVersionLabel, _ string) (string
|
||||
if ciVersionLabel == "latest" {
|
||||
return f.latestVersion, versionutil.MustParseSemantic(f.latestVersion), nil
|
||||
}
|
||||
if ciVersionLabel == "latest-1.10" {
|
||||
if ciVersionLabel == "latest-1.11" {
|
||||
return f.latestDevBranchVersion, versionutil.MustParseSemantic(f.latestDevBranchVersion), nil
|
||||
}
|
||||
return f.stablePatchVersion, versionutil.MustParseSemantic(f.stablePatchVersion), nil
|
||||
@ -123,12 +123,12 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "no action needed, already up-to-date",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
|
||||
stablePatchVersion: "v1.9.3",
|
||||
stableVersion: "v1.9.3",
|
||||
stablePatchVersion: "v1.10.3",
|
||||
stableVersion: "v1.10.3",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "v1.0.6",
|
||||
@ -141,32 +141,32 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "simple patch version upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.1",
|
||||
kubeletVersion: "v1.9.1", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.9.2",
|
||||
clusterVersion: "v1.10.1",
|
||||
kubeletVersion: "v1.10.1", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.10.2",
|
||||
|
||||
stablePatchVersion: "v1.9.3",
|
||||
stableVersion: "v1.9.3",
|
||||
stablePatchVersion: "v1.10.3",
|
||||
stableVersion: "v1.10.3",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
featureGates: make(map[string]bool),
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "version in the v1.9 series",
|
||||
Description: "version in the v1.10 series",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.1",
|
||||
KubeVersion: "v1.10.1",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.1": 1,
|
||||
"v1.10.1": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.2",
|
||||
KubeadmVersion: "v1.10.2",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.9.3",
|
||||
KubeadmVersion: "v1.9.3",
|
||||
KubeVersion: "v1.10.3",
|
||||
KubeadmVersion: "v1.10.3",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
@ -180,32 +180,32 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "no version provided to offline version getter does not change behavior",
|
||||
vg: NewOfflineVersionGetter(&fakeVersionGetter{
|
||||
clusterVersion: "v1.9.1",
|
||||
kubeletVersion: "v1.9.1", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.9.2",
|
||||
clusterVersion: "v1.10.1",
|
||||
kubeletVersion: "v1.10.1", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.10.2",
|
||||
|
||||
stablePatchVersion: "v1.9.3",
|
||||
stableVersion: "v1.9.3",
|
||||
stablePatchVersion: "v1.10.3",
|
||||
stableVersion: "v1.10.3",
|
||||
}, ""),
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
featureGates: make(map[string]bool),
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "version in the v1.9 series",
|
||||
Description: "version in the v1.10 series",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.1",
|
||||
KubeVersion: "v1.10.1",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.1": 1,
|
||||
"v1.10.1": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.2",
|
||||
KubeadmVersion: "v1.10.2",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.9.3",
|
||||
KubeadmVersion: "v1.9.3",
|
||||
KubeVersion: "v1.10.3",
|
||||
KubeadmVersion: "v1.10.3",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
@ -219,12 +219,12 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "minor version upgrade only",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.1",
|
||||
kubeletVersion: "v1.9.1", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.10.0",
|
||||
clusterVersion: "v1.10.1",
|
||||
kubeletVersion: "v1.10.1", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.11.0",
|
||||
|
||||
stablePatchVersion: "v1.9.1",
|
||||
stableVersion: "v1.10.0",
|
||||
stablePatchVersion: "v1.10.1",
|
||||
stableVersion: "v1.11.0",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -233,21 +233,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "stable version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.1",
|
||||
KubeVersion: "v1.10.1",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.1": 1,
|
||||
"v1.10.1": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.10.0",
|
||||
KubeadmVersion: "v1.11.0",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.0",
|
||||
KubeadmVersion: "v1.10.0",
|
||||
KubeVersion: "v1.11.0",
|
||||
KubeadmVersion: "v1.11.0",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -258,32 +258,32 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "both minor version upgrade and patch version upgrade available",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.10.1",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.11.1",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
featureGates: make(map[string]bool),
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "version in the v1.9 series",
|
||||
Description: "version in the v1.10 series",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.3",
|
||||
KubeVersion: "v1.10.3",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.3": 1,
|
||||
"v1.10.3": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.9.5", // Note: The kubeadm version mustn't be "downgraded" here
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeadmVersion: "v1.10.5", // Note: The kubeadm version mustn't be "downgraded" here
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
@ -292,21 +292,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "stable version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.3",
|
||||
KubeVersion: "v1.10.3",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.3": 1,
|
||||
"v1.10.3": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.1",
|
||||
KubeadmVersion: "v1.10.1",
|
||||
KubeVersion: "v1.11.1",
|
||||
KubeadmVersion: "v1.11.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -317,13 +317,13 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "allow experimental upgrades, but no upgrade available",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.10.0-alpha.2",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.11.0-alpha.2",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestVersion: "v1.10.0-alpha.2",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestVersion: "v1.11.0-alpha.2",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "v1.0.6",
|
||||
@ -336,13 +336,13 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade to an unstable version should be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.5",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.5",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestVersion: "v1.10.0-alpha.2",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestVersion: "v1.11.0-alpha.2",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -351,21 +351,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "experimental version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.0-alpha.2",
|
||||
KubeadmVersion: "v1.10.0-alpha.2",
|
||||
KubeVersion: "v1.11.0-alpha.2",
|
||||
KubeadmVersion: "v1.11.0-alpha.2",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -376,13 +376,13 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade from an unstable version to an unstable version should be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.10.0-alpha.1",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.11.0-alpha.1",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestVersion: "v1.10.0-alpha.2",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestVersion: "v1.11.0-alpha.2",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -391,21 +391,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "experimental version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.10.0-alpha.1",
|
||||
KubeVersion: "v1.11.0-alpha.1",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.0-alpha.2",
|
||||
KubeadmVersion: "v1.10.0-alpha.2",
|
||||
KubeVersion: "v1.11.0-alpha.2",
|
||||
KubeadmVersion: "v1.11.0-alpha.2",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -416,14 +416,14 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "v1.X.0-alpha.0 should be ignored",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.5",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.5",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestDevBranchVersion: "v1.10.0-beta.1",
|
||||
latestVersion: "v1.11.0-alpha.0",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.0-beta.1",
|
||||
latestVersion: "v1.12.0-alpha.0",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -432,21 +432,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "experimental version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.0-beta.1",
|
||||
KubeadmVersion: "v1.10.0-beta.1",
|
||||
KubeVersion: "v1.11.0-beta.1",
|
||||
KubeadmVersion: "v1.11.0-beta.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -457,14 +457,14 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade to an RC version should be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.5",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.5",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestDevBranchVersion: "v1.10.0-rc.1",
|
||||
latestVersion: "v1.11.0-alpha.1",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.0-rc.1",
|
||||
latestVersion: "v1.12.0-alpha.1",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -473,21 +473,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "release candidate version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.0-rc.1",
|
||||
KubeadmVersion: "v1.10.0-rc.1",
|
||||
KubeVersion: "v1.11.0-rc.1",
|
||||
KubeadmVersion: "v1.11.0-rc.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -498,14 +498,14 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "it is possible (but very uncommon) that the latest version from the previous branch is an rc and the current latest version is alpha.0. In that case, show the RC",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.5",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.5",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestDevBranchVersion: "v1.10.6-rc.1",
|
||||
latestVersion: "v1.11.1-alpha.0",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.6-rc.1",
|
||||
latestVersion: "v1.12.1-alpha.0",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -514,21 +514,21 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "experimental version", // Note that this is considered an experimental version in this uncommon scenario
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.6-rc.1",
|
||||
KubeadmVersion: "v1.10.6-rc.1",
|
||||
KubeVersion: "v1.11.6-rc.1",
|
||||
KubeadmVersion: "v1.11.6-rc.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
},
|
||||
@ -539,14 +539,14 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "upgrade to an RC version should be supported. There may also be an even newer unstable version.",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.5",
|
||||
kubeletVersion: "v1.9.5",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.5",
|
||||
kubeletVersion: "v1.10.5",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
|
||||
stablePatchVersion: "v1.9.5",
|
||||
stableVersion: "v1.9.5",
|
||||
latestDevBranchVersion: "v1.10.0-rc.1",
|
||||
latestVersion: "v1.11.0-alpha.2",
|
||||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.0-rc.1",
|
||||
latestVersion: "v1.12.0-alpha.2",
|
||||
},
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
@ -555,38 +555,38 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
Description: "release candidate version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.10.0-rc.1",
|
||||
KubeadmVersion: "v1.10.0-rc.1",
|
||||
KubeVersion: "v1.11.0-rc.1",
|
||||
KubeadmVersion: "v1.11.0-rc.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
EtcdVersion: "3.2.18",
|
||||
},
|
||||
},
|
||||
{
|
||||
Description: "experimental version",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.9.5",
|
||||
KubeVersion: "v1.10.5",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.9.5": 1,
|
||||
"v1.10.5": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.9.5",
|
||||
KubeadmVersion: "v1.10.5",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.11.0-alpha.2",
|
||||
KubeadmVersion: "v1.11.0-alpha.2",
|
||||
KubeVersion: "v1.12.0-alpha.2",
|
||||
KubeadmVersion: "v1.12.0-alpha.2",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.2.18",
|
||||
@ -601,11 +601,11 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "Upgrades with external etcd with mismatched versions should not be allowed.",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
stablePatchVersion: "v1.9.3",
|
||||
stableVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
stablePatchVersion: "v1.10.3",
|
||||
stableVersion: "v1.10.3",
|
||||
},
|
||||
allowRCs: false,
|
||||
allowExperimental: false,
|
||||
@ -616,30 +616,30 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "offline version getter",
|
||||
vg: NewOfflineVersionGetter(&fakeVersionGetter{
|
||||
clusterVersion: "v1.10.1",
|
||||
kubeletVersion: "v1.10.0",
|
||||
kubeadmVersion: "v1.10.1",
|
||||
}, "v1.11.1"),
|
||||
clusterVersion: "v1.11.1",
|
||||
kubeletVersion: "v1.11.0",
|
||||
kubeadmVersion: "v1.11.1",
|
||||
}, "v1.12.1"),
|
||||
etcdClient: etcdClient,
|
||||
beforeDNSType: constants.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
featureGates: make(map[string]bool),
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "version in the v1.1 series",
|
||||
Description: "version in the v1.11 series",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.10.1",
|
||||
KubeVersion: "v1.11.1",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.10.0": 1,
|
||||
"v1.11.0": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.10.1",
|
||||
KubeadmVersion: "v1.11.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.11.1",
|
||||
KubeadmVersion: "v1.11.1",
|
||||
KubeVersion: "v1.12.1",
|
||||
KubeadmVersion: "v1.12.1",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.2.18",
|
||||
@ -650,12 +650,12 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "kubedns to coredns",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.10.2",
|
||||
kubeletVersion: "v1.10.2", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.11.0",
|
||||
clusterVersion: "v1.11.2",
|
||||
kubeletVersion: "v1.11.2", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.12.0",
|
||||
|
||||
stablePatchVersion: "v1.11.0",
|
||||
stableVersion: "v1.11.0",
|
||||
stablePatchVersion: "v1.12.0",
|
||||
stableVersion: "v1.12.0",
|
||||
},
|
||||
etcdClient: etcdClient,
|
||||
beforeDNSType: constants.KubeDNS,
|
||||
@ -663,20 +663,20 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
featureGates: make(map[string]bool),
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "version in the v1.1 series",
|
||||
Description: "version in the v1.11 series",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.10.2",
|
||||
KubeVersion: "v1.11.2",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.10.2": 1,
|
||||
"v1.11.2": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.11.0",
|
||||
KubeadmVersion: "v1.12.0",
|
||||
DNSType: "kube-dns",
|
||||
DNSVersion: "1.14.7",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.11.0",
|
||||
KubeadmVersion: "v1.11.0",
|
||||
KubeVersion: "v1.12.0",
|
||||
KubeadmVersion: "v1.12.0",
|
||||
DNSType: "coredns",
|
||||
DNSVersion: "1.0.6",
|
||||
EtcdVersion: "3.2.18",
|
||||
@ -687,12 +687,12 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
{
|
||||
name: "keep coredns",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.10.2",
|
||||
kubeletVersion: "v1.10.2", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.11.0",
|
||||
clusterVersion: "v1.11.2",
|
||||
kubeletVersion: "v1.11.2", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.12.0",
|
||||
|
||||
stablePatchVersion: "v1.11.0",
|
||||
stableVersion: "v1.11.0",
|
||||
stablePatchVersion: "v1.12.0",
|
||||
stableVersion: "v1.12.0",
|
||||
},
|
||||
etcdClient: etcdClient,
|
||||
beforeDNSType: constants.KubeDNS,
|
||||
@ -700,20 +700,20 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
||||
featureGates: map[string]bool{"CoreDNS": false},
|
||||
expectedUpgrades: []Upgrade{
|
||||
{
|
||||
Description: "version in the v1.1 series",
|
||||
Description: "version in the v1.11 series",
|
||||
Before: ClusterState{
|
||||
KubeVersion: "v1.10.2",
|
||||
KubeVersion: "v1.11.2",
|
||||
KubeletVersions: map[string]uint16{
|
||||
"v1.10.2": 1,
|
||||
"v1.11.2": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.11.0",
|
||||
KubeadmVersion: "v1.12.0",
|
||||
DNSType: "kube-dns",
|
||||
DNSVersion: "1.14.7",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.11.0",
|
||||
KubeadmVersion: "v1.11.0",
|
||||
KubeVersion: "v1.12.0",
|
||||
KubeadmVersion: "v1.12.0",
|
||||
DNSType: "kube-dns",
|
||||
DNSVersion: "1.14.10",
|
||||
EtcdVersion: "3.2.18",
|
||||
@ -776,36 +776,36 @@ func TestKubeletUpgrade(t *testing.T) {
|
||||
}{
|
||||
{ // upgrade available
|
||||
before: map[string]uint16{
|
||||
"v1.9.1": 1,
|
||||
"v1.10.1": 1,
|
||||
},
|
||||
after: "v1.9.3",
|
||||
after: "v1.10.3",
|
||||
expected: true,
|
||||
},
|
||||
{ // upgrade available
|
||||
before: map[string]uint16{
|
||||
"v1.9.1": 1,
|
||||
"v1.9.3": 100,
|
||||
"v1.10.1": 1,
|
||||
"v1.10.3": 100,
|
||||
},
|
||||
after: "v1.9.3",
|
||||
after: "v1.10.3",
|
||||
expected: true,
|
||||
},
|
||||
{ // upgrade not available
|
||||
before: map[string]uint16{
|
||||
"v1.9.3": 1,
|
||||
"v1.10.3": 1,
|
||||
},
|
||||
after: "v1.9.3",
|
||||
after: "v1.10.3",
|
||||
expected: false,
|
||||
},
|
||||
{ // upgrade not available
|
||||
before: map[string]uint16{
|
||||
"v1.9.3": 100,
|
||||
"v1.10.3": 100,
|
||||
},
|
||||
after: "v1.9.3",
|
||||
after: "v1.10.3",
|
||||
expected: false,
|
||||
},
|
||||
{ // upgrade not available if we don't know anything about the earlier state
|
||||
before: map[string]uint16{},
|
||||
after: "v1.9.3",
|
||||
after: "v1.10.3",
|
||||
expected: false,
|
||||
},
|
||||
}
|
||||
|
@ -34,159 +34,159 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
||||
{
|
||||
name: "minor upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.5",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.5",
|
||||
},
|
||||
newK8sVersion: "v1.9.5",
|
||||
newK8sVersion: "v1.10.5",
|
||||
},
|
||||
{
|
||||
name: "major upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.2",
|
||||
kubeadmVersion: "v1.10.1",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.2",
|
||||
kubeadmVersion: "v1.11.1",
|
||||
},
|
||||
newK8sVersion: "v1.10.0",
|
||||
newK8sVersion: "v1.11.0",
|
||||
},
|
||||
{
|
||||
name: "downgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
},
|
||||
newK8sVersion: "v1.9.2",
|
||||
newK8sVersion: "v1.10.2",
|
||||
},
|
||||
{
|
||||
name: "same version upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
},
|
||||
newK8sVersion: "v1.9.3",
|
||||
newK8sVersion: "v1.10.3",
|
||||
},
|
||||
{
|
||||
name: "new version must be higher than v1.9.0",
|
||||
name: "new version must be higher than v1.10.0",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
},
|
||||
newK8sVersion: "v1.8.10",
|
||||
expectedMandatoryErrs: 2, // version must be higher than v1.9.0, can't upgrade old k8s with newer kubeadm
|
||||
newK8sVersion: "v1.9.10",
|
||||
expectedMandatoryErrs: 2, // version must be higher than v1.10.0, can't upgrade old k8s with newer kubeadm
|
||||
},
|
||||
{
|
||||
name: "upgrading two minor versions in one go is not supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.11.0",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.12.0",
|
||||
},
|
||||
newK8sVersion: "v1.11.0",
|
||||
newK8sVersion: "v1.12.0",
|
||||
expectedMandatoryErrs: 1, // can't upgrade two minor versions
|
||||
expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large
|
||||
},
|
||||
{
|
||||
name: "downgrading two minor versions in one go is not supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.11.0",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.0",
|
||||
},
|
||||
newK8sVersion: "v1.9.3",
|
||||
newK8sVersion: "v1.10.3",
|
||||
expectedMandatoryErrs: 2, // can't downgrade two minor versions, can't upgrade old k8s with newer kubeadm
|
||||
},
|
||||
{
|
||||
name: "kubeadm version must be higher than the new kube version. However, patch version skews may be forced",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
},
|
||||
newK8sVersion: "v1.9.5",
|
||||
newK8sVersion: "v1.10.5",
|
||||
expectedSkippableErrs: 1,
|
||||
},
|
||||
{
|
||||
name: "kubeadm version must be higher than the new kube version. Trying to upgrade k8s to a higher minor version than kubeadm itself should never be supported",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.9.3",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.10.3",
|
||||
},
|
||||
newK8sVersion: "v1.10.0",
|
||||
newK8sVersion: "v1.11.0",
|
||||
expectedMandatoryErrs: 1,
|
||||
},
|
||||
{
|
||||
name: "the maximum skew between the cluster version and the kubelet versions should be one minor version. This may be forced through though.",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.8.8",
|
||||
kubeadmVersion: "v1.10.0",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.9.8",
|
||||
kubeadmVersion: "v1.11.0",
|
||||
},
|
||||
newK8sVersion: "v1.10.0",
|
||||
newK8sVersion: "v1.11.0",
|
||||
expectedSkippableErrs: 1,
|
||||
},
|
||||
{
|
||||
name: "experimental upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.10.0-beta.1",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.11.0-beta.1",
|
||||
},
|
||||
newK8sVersion: "v1.10.0-beta.1",
|
||||
newK8sVersion: "v1.11.0-beta.1",
|
||||
allowExperimental: true,
|
||||
},
|
||||
{
|
||||
name: "release candidate upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.10.0-rc.1",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.11.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.10.0-rc.1",
|
||||
newK8sVersion: "v1.11.0-rc.1",
|
||||
allowRCs: true,
|
||||
},
|
||||
{
|
||||
name: "release candidate upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.10.0-rc.1",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.11.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.10.0-rc.1",
|
||||
newK8sVersion: "v1.11.0-rc.1",
|
||||
allowExperimental: true,
|
||||
},
|
||||
{
|
||||
name: "the user should not be able to upgrade to an experimental version if they haven't opted into that",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.10.0-beta.1",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.11.0-beta.1",
|
||||
},
|
||||
newK8sVersion: "v1.10.0-beta.1",
|
||||
newK8sVersion: "v1.11.0-beta.1",
|
||||
allowRCs: true,
|
||||
expectedSkippableErrs: 1,
|
||||
},
|
||||
{
|
||||
name: "the user should not be able to upgrade to an release candidate version if they haven't opted into that",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.10.0-rc.1",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.11.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.10.0-rc.1",
|
||||
newK8sVersion: "v1.11.0-rc.1",
|
||||
expectedSkippableErrs: 1,
|
||||
},
|
||||
{
|
||||
name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.9.3",
|
||||
kubeletVersion: "v1.9.3",
|
||||
kubeadmVersion: "v1.10.0",
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.11.0",
|
||||
},
|
||||
newK8sVersion: "v1.9.6",
|
||||
newK8sVersion: "v1.10.6",
|
||||
expectedMandatoryErrs: 1, // can't upgrade old k8s with newer kubeadm
|
||||
},
|
||||
}
|
||||
|
@ -43,7 +43,6 @@ import (
|
||||
"k8s.io/kubernetes/pkg/util/version"
|
||||
)
|
||||
|
||||
var v190alpha3 = version.MustParseSemantic("v1.9.0-alpha.3")
|
||||
var expiry = 180 * 24 * time.Hour
|
||||
|
||||
// PerformPostUpgradeTasks runs nearly the same functions as 'kubeadm init' would do
|
||||
@ -74,7 +73,7 @@ func PerformPostUpgradeTasks(client clientset.Interface, cfg *kubeadmapi.MasterC
|
||||
}
|
||||
|
||||
// Upgrade to a self-hosted control plane if possible
|
||||
if err := upgradeToSelfHosting(client, cfg, newK8sVer, dryRun); err != nil {
|
||||
if err := upgradeToSelfHosting(client, cfg, dryRun); err != nil {
|
||||
errs = append(errs, err)
|
||||
}
|
||||
|
||||
@ -144,8 +143,8 @@ func removeOldDNSDeploymentIfAnotherDNSIsUsed(cfg *kubeadmapi.MasterConfiguratio
|
||||
}, 10)
|
||||
}
|
||||
|
||||
func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, newK8sVer *version.Version, dryRun bool) error {
|
||||
if features.Enabled(cfg.FeatureGates, features.SelfHosting) && !IsControlPlaneSelfHosted(client) && newK8sVer.AtLeast(v190alpha3) {
|
||||
func upgradeToSelfHosting(client clientset.Interface, cfg *kubeadmapi.MasterConfiguration, dryRun bool) error {
|
||||
if features.Enabled(cfg.FeatureGates, features.SelfHosting) && !IsControlPlaneSelfHosted(client) {
|
||||
|
||||
waiter := getWaiter(dryRun, client)
|
||||
|
||||
|
@ -627,13 +627,13 @@ func TestKubeletVersionCheck(t *testing.T) {
|
||||
expectErrors bool
|
||||
expectWarnings bool
|
||||
}{
|
||||
{"v1.10.2", "", false, false}, // check minimally supported version when there is no information about control plane
|
||||
{"v1.7.3", "v1.7.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
|
||||
{"v1.9.0", "v1.9.5", false, false}, // kubelet within same major.minor as control plane
|
||||
{"v1.9.5", "v1.9.1", false, false}, // kubelet is newer, but still within same major.minor as control plane
|
||||
{"v1.9.0", "v1.10.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
|
||||
{"v1.10.0-alpha.1", "v1.9.1", true, false}, // kubelet is newer (development build) than control plane, should fail.
|
||||
{"v1.10.0", "v1.9.5", true, false}, // kubelet is newer (release) than control plane, should fail.
|
||||
{"v1.11.2", "", false, false}, // check minimally supported version when there is no information about control plane
|
||||
{"v1.8.3", "v1.8.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
|
||||
{"v1.10.0", "v1.10.5", false, false}, // kubelet within same major.minor as control plane
|
||||
{"v1.10.5", "v1.10.1", false, false}, // kubelet is newer, but still within same major.minor as control plane
|
||||
{"v1.10.0", "v1.11.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
|
||||
{"v1.11.0-alpha.1", "v1.10.1", true, false}, // kubelet is newer (development build) than control plane, should fail.
|
||||
{"v1.11.0", "v1.10.5", true, false}, // kubelet is newer (release) than control plane, should fail.
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
|
Loading…
Reference in New Issue
Block a user