Merge pull request #71259 from rosti/minver-bump-12

kubeadm: Bump minimum Kubernetes version to v1.12
pull/58/head
k8s-ci-robot 2018-11-20 17:31:15 -08:00 committed by GitHub
commit aac9ee1793
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 93 additions and 92 deletions

View File

@ -43,7 +43,7 @@ const (
defaultNumberOfImages = 8 defaultNumberOfImages = 8
// dummyKubernetesVersion is just used for unit testing, in order to not make // dummyKubernetesVersion is just used for unit testing, in order to not make
// kubeadm lookup dl.k8s.io to resolve what the latest stable release is // kubeadm lookup dl.k8s.io to resolve what the latest stable release is
dummyKubernetesVersion = "v1.11.0" dummyKubernetesVersion = "v1.12.0"
) )
func TestNewCmdConfigImagesList(t *testing.T) { func TestNewCmdConfigImagesList(t *testing.T) {
@ -69,12 +69,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
name: "set k8s version", name: "set k8s version",
expectedImageCount: defaultNumberOfImages, expectedImageCount: defaultNumberOfImages,
expectedImageSubstrings: []string{ expectedImageSubstrings: []string{
":v1.11.1", ":v1.12.1",
}, },
configContents: []byte(dedent.Dedent(` configContents: []byte(dedent.Dedent(`
apiVersion: kubeadm.k8s.io/v1beta1 apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: v1.11.1 kubernetesVersion: v1.12.1
`)), `)),
}, },
{ {
@ -86,7 +86,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
configContents: []byte(dedent.Dedent(` configContents: []byte(dedent.Dedent(`
apiVersion: kubeadm.k8s.io/v1beta1 apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: v1.11.0 kubernetesVersion: v1.12.0
`)), `)),
}, },
} }

View File

@ -175,7 +175,7 @@ func TestRunCreateToken(t *testing.T) {
ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{ ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{
// KubernetesVersion is not used, but we set this explicitly to avoid // KubernetesVersion is not used, but we set this explicitly to avoid
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig // the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
KubernetesVersion: "v1.11.0", KubernetesVersion: "v1.12.0",
}, },
BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{ BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{
{ {

View File

@ -48,11 +48,11 @@ var (
upgradeNodeConfigExample = normalizer.Examples(` upgradeNodeConfigExample = normalizer.Examples(`
# Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version. # Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version.
kubeadm upgrade node config --kubelet-version v1.12.0 kubeadm upgrade node config --kubelet-version v1.13.0
# Simulates the downloading of the kubelet configuration from the ConfigMap in the cluster with a specific desired # Simulates the downloading of the kubelet configuration from the ConfigMap in the cluster with a specific desired
# version. Does not change any state locally on the node. # version. Does not change any state locally on the node.
kubeadm upgrade node config --kubelet-version v1.12.0 --dry-run kubeadm upgrade node config --kubelet-version v1.13.0 --dry-run
`) `)
) )

View File

@ -377,10 +377,10 @@ var (
MasterComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler} MasterComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler}
// MinimumControlPlaneVersion specifies the minimum control plane version kubeadm can deploy // MinimumControlPlaneVersion specifies the minimum control plane version kubeadm can deploy
MinimumControlPlaneVersion = version.MustParseSemantic("v1.11.0") MinimumControlPlaneVersion = version.MustParseSemantic("v1.12.0")
// MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports // MinimumKubeletVersion specifies the minimum version of kubelet which kubeadm supports
MinimumKubeletVersion = version.MustParseSemantic("v1.11.0") MinimumKubeletVersion = version.MustParseSemantic("v1.12.0")
// SupportedEtcdVersion lists officially supported etcd versions with corresponding Kubernetes releases // SupportedEtcdVersion lists officially supported etcd versions with corresponding Kubernetes releases
SupportedEtcdVersion = map[uint8]string{ SupportedEtcdVersion = map[uint8]string{

View File

@ -24,7 +24,7 @@ import (
utilfeature "k8s.io/apiserver/pkg/util/feature" utilfeature "k8s.io/apiserver/pkg/util/feature"
) )
var TestMinVersion = version.MustParseSemantic("v1.11.0-alpha.1") var TestMinVersion = version.MustParseSemantic("v1.12.0-alpha.1")
func TestKnownFeatures(t *testing.T) { func TestKnownFeatures(t *testing.T) {
var someFeatures = FeatureList{ var someFeatures = FeatureList{
@ -144,12 +144,12 @@ func TestValidateVersion(t *testing.T) {
}, },
{ //min version but correct value given { //min version but correct value given
requestedFeatures: map[string]bool{"feature2": true}, requestedFeatures: map[string]bool{"feature2": true},
requestedVersion: "v1.11.0", requestedVersion: "v1.12.0",
expectedError: false, expectedError: false,
}, },
{ //min version and incorrect value given { //min version and incorrect value given
requestedFeatures: map[string]bool{"feature2": true}, requestedFeatures: map[string]bool{"feature2": true},
requestedVersion: "v1.10.2", requestedVersion: "v1.11.2",
expectedError: true, expectedError: true,
}, },
} }

View File

@ -183,7 +183,7 @@ func TestEnsureProxyAddon(t *testing.T) {
PodSubnet: "5.6.7.8/24", PodSubnet: "5.6.7.8/24",
}, },
ImageRepository: "someRepo", ImageRepository: "someRepo",
KubernetesVersion: "v1.11.0", KubernetesVersion: "v1.12.0",
}, },
} }

View File

@ -35,7 +35,7 @@ func TestCreateConfigMap(t *testing.T) {
cfg := &kubeadmapi.InitConfiguration{ cfg := &kubeadmapi.InitConfiguration{
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: nodeName}, NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: nodeName},
ClusterConfiguration: kubeadmapi.ClusterConfiguration{ ClusterConfiguration: kubeadmapi.ClusterConfiguration{
KubernetesVersion: "v1.12.0", KubernetesVersion: "v1.13.0",
ComponentConfigs: kubeadmapi.ComponentConfigs{ ComponentConfigs: kubeadmapi.ComponentConfigs{
Kubelet: &kubeletconfig.KubeletConfiguration{}, Kubelet: &kubeletconfig.KubeletConfiguration{},
}, },

View File

@ -34,38 +34,38 @@ func TestEnforceVersionPolicies(t *testing.T) {
{ {
name: "minor upgrade", name: "minor upgrade",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.11.5", kubeadmVersion: "v1.12.5",
}, },
newK8sVersion: "v1.11.5", newK8sVersion: "v1.12.5",
}, },
{ {
name: "major upgrade", name: "major upgrade",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.2", kubeletVersion: "v1.12.2",
kubeadmVersion: "v1.12.1", kubeadmVersion: "v1.13.1",
}, },
newK8sVersion: "v1.12.0", newK8sVersion: "v1.13.0",
}, },
{ {
name: "downgrade", name: "downgrade",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.11.3", kubeadmVersion: "v1.12.3",
}, },
newK8sVersion: "v1.11.2", newK8sVersion: "v1.12.2",
}, },
{ {
name: "same version upgrade", name: "same version upgrade",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.11.3", kubeadmVersion: "v1.12.3",
}, },
newK8sVersion: "v1.11.3", newK8sVersion: "v1.12.3",
}, },
{ {
name: "new version must be higher than v1.10.0", name: "new version must be higher than v1.10.0",
@ -81,114 +81,114 @@ func TestEnforceVersionPolicies(t *testing.T) {
{ {
name: "upgrading two minor versions in one go is not supported", name: "upgrading two minor versions in one go is not supported",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.10.3", clusterVersion: "v1.11.3",
kubeletVersion: "v1.10.3", kubeletVersion: "v1.11.3",
kubeadmVersion: "v1.12.0", kubeadmVersion: "v1.13.0",
}, },
newK8sVersion: "v1.12.0", newK8sVersion: "v1.13.0",
expectedMandatoryErrs: 1, // can't upgrade two minor versions expectedMandatoryErrs: 1, // can't upgrade two minor versions
expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large expectedSkippableErrs: 1, // kubelet <-> apiserver skew too large
}, },
{ {
name: "downgrading two minor versions in one go is not supported", name: "downgrading two minor versions in one go is not supported",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.13.3", clusterVersion: "v1.14.3",
kubeletVersion: "v1.13.3", kubeletVersion: "v1.14.3",
kubeadmVersion: "v1.13.0", kubeadmVersion: "v1.14.0",
}, },
newK8sVersion: "v1.11.3", newK8sVersion: "v1.12.3",
expectedMandatoryErrs: 1, // can't downgrade two minor versions expectedMandatoryErrs: 1, // can't downgrade two minor versions
expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm expectedSkippableErrs: 1, // 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", name: "kubeadm version must be higher than the new kube version. However, patch version skews may be forced",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.11.3", kubeadmVersion: "v1.12.3",
}, },
newK8sVersion: "v1.11.5", newK8sVersion: "v1.12.5",
expectedSkippableErrs: 1, 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", 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{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.11.3", kubeadmVersion: "v1.12.3",
}, },
newK8sVersion: "v1.12.0", newK8sVersion: "v1.13.0",
expectedMandatoryErrs: 1, 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.", 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{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.10.8", kubeletVersion: "v1.11.8",
kubeadmVersion: "v1.12.0", kubeadmVersion: "v1.13.0",
}, },
newK8sVersion: "v1.12.0", newK8sVersion: "v1.13.0",
expectedSkippableErrs: 1, expectedSkippableErrs: 1,
}, },
{ {
name: "experimental upgrades supported if the flag is set", name: "experimental upgrades supported if the flag is set",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.12.0-beta.1", kubeadmVersion: "v1.13.0-beta.1",
}, },
newK8sVersion: "v1.12.0-beta.1", newK8sVersion: "v1.13.0-beta.1",
allowExperimental: true, allowExperimental: true,
}, },
{ {
name: "release candidate upgrades supported if the flag is set", name: "release candidate upgrades supported if the flag is set",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.12.0-rc.1", kubeadmVersion: "v1.13.0-rc.1",
}, },
newK8sVersion: "v1.12.0-rc.1", newK8sVersion: "v1.13.0-rc.1",
allowRCs: true, allowRCs: true,
}, },
{ {
name: "release candidate upgrades supported if the flag is set", name: "release candidate upgrades supported if the flag is set",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.12.0-rc.1", kubeadmVersion: "v1.13.0-rc.1",
}, },
newK8sVersion: "v1.12.0-rc.1", newK8sVersion: "v1.13.0-rc.1",
allowExperimental: true, allowExperimental: true,
}, },
{ {
name: "the user should not be able to upgrade to an experimental version if they haven't opted into that", name: "the user should not be able to upgrade to an experimental version if they haven't opted into that",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.12.0-beta.1", kubeadmVersion: "v1.13.0-beta.1",
}, },
newK8sVersion: "v1.12.0-beta.1", newK8sVersion: "v1.13.0-beta.1",
allowRCs: true, allowRCs: true,
expectedSkippableErrs: 1, expectedSkippableErrs: 1,
}, },
{ {
name: "the user should not be able to upgrade to an release candidate version if they haven't opted into that", name: "the user should not be able to upgrade to an release candidate version if they haven't opted into that",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.12.0-rc.1", kubeadmVersion: "v1.13.0-rc.1",
}, },
newK8sVersion: "v1.12.0-rc.1", newK8sVersion: "v1.13.0-rc.1",
expectedSkippableErrs: 1, expectedSkippableErrs: 1,
}, },
{ {
name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm", name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm",
vg: &fakeVersionGetter{ vg: &fakeVersionGetter{
clusterVersion: "v1.11.3", clusterVersion: "v1.12.3",
kubeletVersion: "v1.11.3", kubeletVersion: "v1.12.3",
kubeadmVersion: "v1.12.0", kubeadmVersion: "v1.13.0",
}, },
newK8sVersion: "v1.11.6", newK8sVersion: "v1.12.6",
expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm
}, },
} }

View File

@ -471,7 +471,7 @@ func TestStaticPodControlPlane(t *testing.T) {
t.Fatalf("couldn't read temp file: %v", err) t.Fatalf("couldn't read temp file: %v", err)
} }
newcfg, err := getConfig("v1.11.0", tempCertsDir, tmpEtcdDataDir) newcfg, err := getConfig("v1.13.0", tempCertsDir, tmpEtcdDataDir)
if err != nil { if err != nil {
t.Fatalf("couldn't create config: %v", err) t.Fatalf("couldn't create config: %v", err)
} }
@ -523,10 +523,11 @@ func TestStaticPodControlPlane(t *testing.T) {
if (oldHash != newHash) != rt.manifestShouldChange { if (oldHash != newHash) != rt.manifestShouldChange {
t.Errorf( t.Errorf(
"failed StaticPodControlPlane\n%s\n\texpected manifest change: %t\n\tgot: %t", "failed StaticPodControlPlane\n%s\n\texpected manifest change: %t\n\tgot: %t\n\tnewHash: %v",
rt.description, rt.description,
rt.manifestShouldChange, rt.manifestShouldChange,
(oldHash != newHash), (oldHash != newHash),
newHash,
) )
} }
return return

View File

@ -69,7 +69,7 @@ func TestUploadConfiguration(t *testing.T) {
AdvertiseAddress: "1.2.3.4", AdvertiseAddress: "1.2.3.4",
}, },
ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{ ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{
KubernetesVersion: "v1.11.10", KubernetesVersion: "v1.12.10",
}, },
BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{ BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{
{ {

View File

@ -647,13 +647,13 @@ func TestKubeletVersionCheck(t *testing.T) {
expectErrors bool expectErrors bool
expectWarnings bool expectWarnings bool
}{ }{
{"v1.12.2", "", false, false}, // check minimally supported version when there is no information about control plane {"v1.13.2", "", false, false}, // check minimally supported version when there is no information about control plane
{"v1.9.3", "v1.9.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail. {"v1.11.3", "v1.11.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
{"v1.11.0", "v1.11.5", false, false}, // kubelet within same major.minor as control plane {"v1.12.0", "v1.12.5", false, false}, // kubelet within same major.minor as control plane
{"v1.11.5", "v1.11.1", false, false}, // kubelet is newer, but still within same major.minor as control plane {"v1.12.5", "v1.12.1", false, false}, // kubelet is newer, but still within same major.minor as control plane
{"v1.11.0", "v1.12.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported {"v1.12.0", "v1.13.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
{"v1.12.0-alpha.1", "v1.11.1", true, false}, // kubelet is newer (development build) than control plane, should fail. {"v1.13.0-alpha.1", "v1.12.1", true, false}, // kubelet is newer (development build) than control plane, should fail.
{"v1.12.0", "v1.11.5", true, false}, // kubelet is newer (release) than control plane, should fail. {"v1.13.0", "v1.12.5", true, false}, // kubelet is newer (release) than control plane, should fail.
} }
for _, tc := range cases { for _, tc := range cases {

View File

@ -183,7 +183,7 @@ Etcd:
ServerCertSANs: null ServerCertSANs: null
FeatureGates: null FeatureGates: null
ImageRepository: k8s.gcr.io ImageRepository: k8s.gcr.io
KubernetesVersion: v1.11.2 KubernetesVersion: v1.12.2
LocalAPIEndpoint: LocalAPIEndpoint:
AdvertiseAddress: 192.168.2.2 AdvertiseAddress: 192.168.2.2
BindPort: 6443 BindPort: 6443

View File

@ -42,12 +42,12 @@ etcd:
image: "" image: ""
imageRepository: k8s.gcr.io imageRepository: k8s.gcr.io
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: v1.11.2 kubernetesVersion: v1.12.2
networking: networking:
dnsDomain: cluster.local dnsDomain: cluster.local
podSubnet: "" podSubnet: ""
serviceSubnet: 10.96.0.0/12 serviceSubnet: 10.96.0.0/12
unifiedControlPlaneImage: "k8s.gcr.io/hyperkube:v1.11.2" unifiedControlPlaneImage: "k8s.gcr.io/hyperkube:v1.12.2"
--- ---
apiVersion: kubeproxy.config.k8s.io/v1alpha1 apiVersion: kubeproxy.config.k8s.io/v1alpha1
bindAddress: 0.0.0.0 bindAddress: 0.0.0.0

View File

@ -42,7 +42,7 @@ etcd:
dataDir: /var/lib/etcd dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io imageRepository: k8s.gcr.io
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: v1.11.2 kubernetesVersion: v1.12.2
networking: networking:
dnsDomain: cluster.local dnsDomain: cluster.local
podSubnet: "" podSubnet: ""

View File

@ -32,7 +32,7 @@ etcd:
dataDir: /var/lib/etcd dataDir: /var/lib/etcd
imageRepository: my-company.com imageRepository: my-company.com
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: v1.12.0 kubernetesVersion: v1.13.0
networking: networking:
dnsDomain: cluster.global dnsDomain: cluster.global
podSubnet: 10.148.0.0/16 podSubnet: 10.148.0.0/16

View File

@ -12,7 +12,7 @@ apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /var/lib/kubernetes/pki certificatesDir: /var/lib/kubernetes/pki
imageRepository: my-company.com imageRepository: my-company.com
kind: ClusterConfiguration kind: ClusterConfiguration
kubernetesVersion: v1.12.0 kubernetesVersion: v1.13.0
networking: networking:
dnsDomain: cluster.global dnsDomain: cluster.global
podSubnet: 10.148.0.0/16 podSubnet: 10.148.0.0/16

View File

@ -102,7 +102,7 @@ func TestCmdInitKubernetesVersion(t *testing.T) {
}, },
{ {
name: "valid version is accepted", name: "valid version is accepted",
args: "--kubernetes-version=1.11.0", args: "--kubernetes-version=1.12.0",
expected: true, expected: true,
}, },
} }

View File

@ -66,7 +66,7 @@ func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.Ini
apiVersion: kubeadm.k8s.io/v1beta1 apiVersion: kubeadm.k8s.io/v1beta1
kind: ClusterConfiguration kind: ClusterConfiguration
certificatesDir: {{.CertificatesDir}} certificatesDir: {{.CertificatesDir}}
kubernetesVersion: v1.11.0 kubernetesVersion: v1.12.0
`))) `)))
f, err := os.Create(cfgPath) f, err := os.Create(cfgPath)