mirror of https://github.com/k3s-io/k3s
Merge pull request #71259 from rosti/minver-bump-12
kubeadm: Bump minimum Kubernetes version to v1.12pull/58/head
commit
aac9ee1793
|
@ -43,7 +43,7 @@ const (
|
|||
defaultNumberOfImages = 8
|
||||
// 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
|
||||
dummyKubernetesVersion = "v1.11.0"
|
||||
dummyKubernetesVersion = "v1.12.0"
|
||||
)
|
||||
|
||||
func TestNewCmdConfigImagesList(t *testing.T) {
|
||||
|
@ -69,12 +69,12 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
|
|||
name: "set k8s version",
|
||||
expectedImageCount: defaultNumberOfImages,
|
||||
expectedImageSubstrings: []string{
|
||||
":v1.11.1",
|
||||
":v1.12.1",
|
||||
},
|
||||
configContents: []byte(dedent.Dedent(`
|
||||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.11.1
|
||||
kubernetesVersion: v1.12.1
|
||||
`)),
|
||||
},
|
||||
{
|
||||
|
@ -86,7 +86,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
|
|||
configContents: []byte(dedent.Dedent(`
|
||||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.11.0
|
||||
kubernetesVersion: v1.12.0
|
||||
`)),
|
||||
},
|
||||
}
|
||||
|
|
|
@ -175,7 +175,7 @@ func TestRunCreateToken(t *testing.T) {
|
|||
ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{
|
||||
// KubernetesVersion is not used, but we set this explicitly to avoid
|
||||
// the lookup of the version from the internet when executing ConfigFileAndDefaultsToInternalConfig
|
||||
KubernetesVersion: "v1.11.0",
|
||||
KubernetesVersion: "v1.12.0",
|
||||
},
|
||||
BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{
|
||||
{
|
||||
|
|
|
@ -48,11 +48,11 @@ var (
|
|||
|
||||
upgradeNodeConfigExample = normalizer.Examples(`
|
||||
# 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
|
||||
# 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
|
||||
`)
|
||||
)
|
||||
|
||||
|
|
|
@ -377,10 +377,10 @@ var (
|
|||
MasterComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler}
|
||||
|
||||
// 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 = version.MustParseSemantic("v1.11.0")
|
||||
MinimumKubeletVersion = version.MustParseSemantic("v1.12.0")
|
||||
|
||||
// SupportedEtcdVersion lists officially supported etcd versions with corresponding Kubernetes releases
|
||||
SupportedEtcdVersion = map[uint8]string{
|
||||
|
|
|
@ -24,7 +24,7 @@ import (
|
|||
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) {
|
||||
var someFeatures = FeatureList{
|
||||
|
@ -144,12 +144,12 @@ func TestValidateVersion(t *testing.T) {
|
|||
},
|
||||
{ //min version but correct value given
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.11.0",
|
||||
requestedVersion: "v1.12.0",
|
||||
expectedError: false,
|
||||
},
|
||||
{ //min version and incorrect value given
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.10.2",
|
||||
requestedVersion: "v1.11.2",
|
||||
expectedError: true,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -183,7 +183,7 @@ func TestEnsureProxyAddon(t *testing.T) {
|
|||
PodSubnet: "5.6.7.8/24",
|
||||
},
|
||||
ImageRepository: "someRepo",
|
||||
KubernetesVersion: "v1.11.0",
|
||||
KubernetesVersion: "v1.12.0",
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -35,7 +35,7 @@ func TestCreateConfigMap(t *testing.T) {
|
|||
cfg := &kubeadmapi.InitConfiguration{
|
||||
NodeRegistration: kubeadmapi.NodeRegistrationOptions{Name: nodeName},
|
||||
ClusterConfiguration: kubeadmapi.ClusterConfiguration{
|
||||
KubernetesVersion: "v1.12.0",
|
||||
KubernetesVersion: "v1.13.0",
|
||||
ComponentConfigs: kubeadmapi.ComponentConfigs{
|
||||
Kubelet: &kubeletconfig.KubeletConfiguration{},
|
||||
},
|
||||
|
|
|
@ -34,38 +34,38 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "minor upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.11.5",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.5",
|
||||
},
|
||||
newK8sVersion: "v1.11.5",
|
||||
newK8sVersion: "v1.12.5",
|
||||
},
|
||||
{
|
||||
name: "major upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.2",
|
||||
kubeadmVersion: "v1.12.1",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.2",
|
||||
kubeadmVersion: "v1.13.1",
|
||||
},
|
||||
newK8sVersion: "v1.12.0",
|
||||
newK8sVersion: "v1.13.0",
|
||||
},
|
||||
{
|
||||
name: "downgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.11.3",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
},
|
||||
newK8sVersion: "v1.11.2",
|
||||
newK8sVersion: "v1.12.2",
|
||||
},
|
||||
{
|
||||
name: "same version upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.11.3",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
},
|
||||
newK8sVersion: "v1.11.3",
|
||||
newK8sVersion: "v1.12.3",
|
||||
},
|
||||
{
|
||||
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",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.10.3",
|
||||
kubeletVersion: "v1.10.3",
|
||||
kubeadmVersion: "v1.12.0",
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.13.0",
|
||||
},
|
||||
newK8sVersion: "v1.12.0",
|
||||
newK8sVersion: "v1.13.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.13.3",
|
||||
kubeletVersion: "v1.13.3",
|
||||
kubeadmVersion: "v1.13.0",
|
||||
clusterVersion: "v1.14.3",
|
||||
kubeletVersion: "v1.14.3",
|
||||
kubeadmVersion: "v1.14.0",
|
||||
},
|
||||
newK8sVersion: "v1.11.3",
|
||||
newK8sVersion: "v1.12.3",
|
||||
expectedMandatoryErrs: 1, // can't downgrade two minor versions
|
||||
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",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.11.3",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
},
|
||||
newK8sVersion: "v1.11.5",
|
||||
newK8sVersion: "v1.12.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.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.11.3",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
},
|
||||
newK8sVersion: "v1.12.0",
|
||||
newK8sVersion: "v1.13.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.11.3",
|
||||
kubeletVersion: "v1.10.8",
|
||||
kubeadmVersion: "v1.12.0",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.11.8",
|
||||
kubeadmVersion: "v1.13.0",
|
||||
},
|
||||
newK8sVersion: "v1.12.0",
|
||||
newK8sVersion: "v1.13.0",
|
||||
expectedSkippableErrs: 1,
|
||||
},
|
||||
{
|
||||
name: "experimental upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.12.0-beta.1",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.13.0-beta.1",
|
||||
},
|
||||
newK8sVersion: "v1.12.0-beta.1",
|
||||
newK8sVersion: "v1.13.0-beta.1",
|
||||
allowExperimental: true,
|
||||
},
|
||||
{
|
||||
name: "release candidate upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.12.0-rc.1",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.13.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.12.0-rc.1",
|
||||
newK8sVersion: "v1.13.0-rc.1",
|
||||
allowRCs: true,
|
||||
},
|
||||
{
|
||||
name: "release candidate upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.12.0-rc.1",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.13.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.12.0-rc.1",
|
||||
newK8sVersion: "v1.13.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.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.12.0-beta.1",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.13.0-beta.1",
|
||||
},
|
||||
newK8sVersion: "v1.12.0-beta.1",
|
||||
newK8sVersion: "v1.13.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.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.12.0-rc.1",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.13.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.12.0-rc.1",
|
||||
newK8sVersion: "v1.13.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.11.3",
|
||||
kubeletVersion: "v1.11.3",
|
||||
kubeadmVersion: "v1.12.0",
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.13.0",
|
||||
},
|
||||
newK8sVersion: "v1.11.6",
|
||||
newK8sVersion: "v1.12.6",
|
||||
expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm
|
||||
},
|
||||
}
|
||||
|
|
|
@ -471,7 +471,7 @@ func TestStaticPodControlPlane(t *testing.T) {
|
|||
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 {
|
||||
t.Fatalf("couldn't create config: %v", err)
|
||||
}
|
||||
|
@ -523,10 +523,11 @@ func TestStaticPodControlPlane(t *testing.T) {
|
|||
|
||||
if (oldHash != newHash) != rt.manifestShouldChange {
|
||||
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.manifestShouldChange,
|
||||
(oldHash != newHash),
|
||||
newHash,
|
||||
)
|
||||
}
|
||||
return
|
||||
|
|
|
@ -69,7 +69,7 @@ func TestUploadConfiguration(t *testing.T) {
|
|||
AdvertiseAddress: "1.2.3.4",
|
||||
},
|
||||
ClusterConfiguration: kubeadmapiv1beta1.ClusterConfiguration{
|
||||
KubernetesVersion: "v1.11.10",
|
||||
KubernetesVersion: "v1.12.10",
|
||||
},
|
||||
BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{
|
||||
{
|
||||
|
|
|
@ -647,13 +647,13 @@ func TestKubeletVersionCheck(t *testing.T) {
|
|||
expectErrors bool
|
||||
expectWarnings bool
|
||||
}{
|
||||
{"v1.12.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.0", "v1.11.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.11.0", "v1.12.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.12.0", "v1.11.5", true, false}, // kubelet is newer (release) than control plane, should fail.
|
||||
{"v1.13.2", "", false, false}, // check minimally supported version when there is no information about control plane
|
||||
{"v1.11.3", "v1.11.8", true, false}, // too old kubelet (older than kubeadmconstants.MinimumKubeletVersion), should fail.
|
||||
{"v1.12.0", "v1.12.5", false, false}, // kubelet 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.12.0", "v1.13.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
|
||||
{"v1.13.0-alpha.1", "v1.12.1", true, false}, // kubelet is newer (development build) 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 {
|
||||
|
|
|
@ -183,7 +183,7 @@ Etcd:
|
|||
ServerCertSANs: null
|
||||
FeatureGates: null
|
||||
ImageRepository: k8s.gcr.io
|
||||
KubernetesVersion: v1.11.2
|
||||
KubernetesVersion: v1.12.2
|
||||
LocalAPIEndpoint:
|
||||
AdvertiseAddress: 192.168.2.2
|
||||
BindPort: 6443
|
||||
|
|
|
@ -42,12 +42,12 @@ etcd:
|
|||
image: ""
|
||||
imageRepository: k8s.gcr.io
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.11.2
|
||||
kubernetesVersion: v1.12.2
|
||||
networking:
|
||||
dnsDomain: cluster.local
|
||||
podSubnet: ""
|
||||
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
|
||||
bindAddress: 0.0.0.0
|
||||
|
|
|
@ -42,7 +42,7 @@ etcd:
|
|||
dataDir: /var/lib/etcd
|
||||
imageRepository: k8s.gcr.io
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.11.2
|
||||
kubernetesVersion: v1.12.2
|
||||
networking:
|
||||
dnsDomain: cluster.local
|
||||
podSubnet: ""
|
||||
|
|
|
@ -32,7 +32,7 @@ etcd:
|
|||
dataDir: /var/lib/etcd
|
||||
imageRepository: my-company.com
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.12.0
|
||||
kubernetesVersion: v1.13.0
|
||||
networking:
|
||||
dnsDomain: cluster.global
|
||||
podSubnet: 10.148.0.0/16
|
||||
|
|
|
@ -12,7 +12,7 @@ apiVersion: kubeadm.k8s.io/v1beta1
|
|||
certificatesDir: /var/lib/kubernetes/pki
|
||||
imageRepository: my-company.com
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.12.0
|
||||
kubernetesVersion: v1.13.0
|
||||
networking:
|
||||
dnsDomain: cluster.global
|
||||
podSubnet: 10.148.0.0/16
|
||||
|
|
|
@ -102,7 +102,7 @@ func TestCmdInitKubernetesVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "valid version is accepted",
|
||||
args: "--kubernetes-version=1.11.0",
|
||||
args: "--kubernetes-version=1.12.0",
|
||||
expected: true,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -66,7 +66,7 @@ func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.Ini
|
|||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
certificatesDir: {{.CertificatesDir}}
|
||||
kubernetesVersion: v1.11.0
|
||||
kubernetesVersion: v1.12.0
|
||||
`)))
|
||||
|
||||
f, err := os.Create(cfgPath)
|
||||
|
|
Loading…
Reference in New Issue