mirror of https://github.com/k3s-io/k3s.git
kubeadm: simplify minimum Kubernetes version bumps
Replaced hardcoded "v0.12.0" strings with MinimumControlPlaneVersion and MinimumKubeletVersion global variables. This should help with a regular release version bumps.pull/564/head
parent
af07603178
commit
b40018da7b
|
@ -17,6 +17,8 @@ limitations under the License.
|
|||
package alpha
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
|
@ -38,13 +40,13 @@ var (
|
|||
"kubelet --version" or respects the --kubelet-version parameter.
|
||||
` + cmdutil.AlphaDisclaimer)
|
||||
|
||||
kubeletConfigDownloadExample = normalizer.Examples(`
|
||||
kubeletConfigDownloadExample = normalizer.Examples(fmt.Sprintf(`
|
||||
# Downloads the kubelet configuration from the ConfigMap in the cluster. Autodetects the kubelet version.
|
||||
kubeadm alpha phase kubelet config download
|
||||
|
||||
# Downloads the kubelet configuration from the ConfigMap in the cluster. Uses a specific desired kubelet version.
|
||||
kubeadm alpha phase kubelet config download --kubelet-version v1.12.0
|
||||
`)
|
||||
kubeadm alpha phase kubelet config download --kubelet-version %s
|
||||
`, constants.MinimumKubeletVersion))
|
||||
|
||||
kubeletConfigEnableDynamicLongDesc = normalizer.LongDesc(`
|
||||
Enables or updates dynamic kubelet configuration for a Node, against the kubelet-config-1.X ConfigMap in the cluster,
|
||||
|
@ -55,13 +57,13 @@ var (
|
|||
|
||||
` + cmdutil.AlphaDisclaimer)
|
||||
|
||||
kubeletConfigEnableDynamicExample = normalizer.Examples(`
|
||||
kubeletConfigEnableDynamicExample = normalizer.Examples(fmt.Sprintf(`
|
||||
# Enables dynamic kubelet configuration for a Node.
|
||||
kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version v1.12.0
|
||||
kubeadm alpha phase kubelet enable-dynamic-config --node-name node-1 --kubelet-version %s
|
||||
|
||||
WARNING: This feature is still experimental, and disabled by default. Enable only if you know what you are doing, as it
|
||||
may have surprising side-effects at this stage.
|
||||
`)
|
||||
`, constants.MinimumKubeletVersion))
|
||||
)
|
||||
|
||||
// newCmdKubeletUtility returns command for `kubeadm phase kubelet`
|
||||
|
|
|
@ -18,6 +18,7 @@ package cmd
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
@ -41,11 +42,12 @@ import (
|
|||
|
||||
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.12.0"
|
||||
)
|
||||
|
||||
// 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
|
||||
var dummyKubernetesVersion = constants.MinimumControlPlaneVersion.String()
|
||||
|
||||
func TestNewCmdConfigImagesList(t *testing.T) {
|
||||
var output bytes.Buffer
|
||||
mockK8sVersion := dummyKubernetesVersion
|
||||
|
@ -83,11 +85,11 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
|
|||
expectedImageSubstrings: []string{
|
||||
"coredns",
|
||||
},
|
||||
configContents: []byte(dedent.Dedent(`
|
||||
configContents: []byte(dedent.Dedent(fmt.Sprintf(`
|
||||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: v1.12.0
|
||||
`)),
|
||||
kubernetesVersion: %s
|
||||
`, constants.MinimumControlPlaneVersion))),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -32,6 +32,7 @@ import (
|
|||
core "k8s.io/client-go/testing"
|
||||
"k8s.io/client-go/tools/clientcmd"
|
||||
kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -175,7 +176,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.12.0",
|
||||
KubernetesVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
},
|
||||
BootstrapTokens: []kubeadmapiv1beta1.BootstrapToken{
|
||||
{
|
||||
|
|
|
@ -35,7 +35,7 @@ go_test(
|
|||
srcs = ["features_test.go"],
|
||||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//staging/src/k8s.io/apimachinery/pkg/util/version:go_default_library",
|
||||
"//cmd/kubeadm/app/constants:go_default_library",
|
||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||
],
|
||||
)
|
||||
|
|
|
@ -20,12 +20,10 @@ import (
|
|||
"reflect"
|
||||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
utilfeature "k8s.io/apiserver/pkg/util/feature"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
)
|
||||
|
||||
var TestMinVersion = version.MustParseSemantic("v1.12.0-alpha.1")
|
||||
|
||||
func TestKnownFeatures(t *testing.T) {
|
||||
var someFeatures = FeatureList{
|
||||
"feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}},
|
||||
|
@ -130,7 +128,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: TestMinVersion},
|
||||
"feature2": {FeatureSpec: utilfeature.FeatureSpec{Default: true, PreRelease: utilfeature.Alpha}, MinimumVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.1")},
|
||||
}
|
||||
|
||||
var tests = []struct {
|
||||
|
@ -144,7 +142,7 @@ func TestValidateVersion(t *testing.T) {
|
|||
},
|
||||
{ //min version but correct value given
|
||||
requestedFeatures: map[string]bool{"feature2": true},
|
||||
requestedVersion: "v1.12.0",
|
||||
requestedVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
expectedError: false,
|
||||
},
|
||||
{ //min version and incorrect value given
|
||||
|
|
|
@ -12,6 +12,7 @@ go_test(
|
|||
embed = [":go_default_library"],
|
||||
deps = [
|
||||
"//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library",
|
||||
"//cmd/kubeadm/app/constants:go_default_library",
|
||||
"//cmd/kubeadm/app/util:go_default_library",
|
||||
"//cmd/kubeadm/app/util/config:go_default_library",
|
||||
"//pkg/apis/core:go_default_library",
|
||||
|
|
|
@ -27,6 +27,7 @@ import (
|
|||
clientsetfake "k8s.io/client-go/kubernetes/fake"
|
||||
core "k8s.io/client-go/testing"
|
||||
kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
|
||||
api "k8s.io/kubernetes/pkg/apis/core"
|
||||
|
@ -183,7 +184,7 @@ func TestEnsureProxyAddon(t *testing.T) {
|
|||
PodSubnet: "5.6.7.8/24",
|
||||
},
|
||||
ImageRepository: "someRepo",
|
||||
KubernetesVersion: "v1.12.0",
|
||||
KubernetesVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -40,6 +40,8 @@ const (
|
|||
etcdDataDir = "/var/lib/etcd"
|
||||
)
|
||||
|
||||
var cpVersion = kubeadmconstants.MinimumControlPlaneVersion.WithPreRelease("beta.2").String()
|
||||
|
||||
func TestGetStaticPodSpecs(t *testing.T) {
|
||||
|
||||
// Creates a Master Configuration
|
||||
|
@ -574,10 +576,10 @@ func TestGetControllerManagerCommand(t *testing.T) {
|
|||
expected []string
|
||||
}{
|
||||
{
|
||||
name: "custom certs dir for v1.12.0-beta.2",
|
||||
name: "custom certs dir for " + cpVersion,
|
||||
cfg: &kubeadmapi.ClusterConfiguration{
|
||||
CertificatesDir: testCertsDir,
|
||||
KubernetesVersion: "v1.12.0-beta.2",
|
||||
KubernetesVersion: cpVersion,
|
||||
},
|
||||
expected: []string{
|
||||
"kube-controller-manager",
|
||||
|
@ -597,11 +599,11 @@ func TestGetControllerManagerCommand(t *testing.T) {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: "custom cluster-cidr for v1.12.0-beta.2",
|
||||
name: "custom cluster-cidr for " + cpVersion,
|
||||
cfg: &kubeadmapi.ClusterConfiguration{
|
||||
Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"},
|
||||
CertificatesDir: testCertsDir,
|
||||
KubernetesVersion: "v1.12.0-beta.2",
|
||||
KubernetesVersion: cpVersion,
|
||||
},
|
||||
expected: []string{
|
||||
"kube-controller-manager",
|
||||
|
@ -624,14 +626,14 @@ func TestGetControllerManagerCommand(t *testing.T) {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: "custom extra-args for v1.12.0-beta.2",
|
||||
name: "custom extra-args for " + cpVersion,
|
||||
cfg: &kubeadmapi.ClusterConfiguration{
|
||||
Networking: kubeadmapi.Networking{PodSubnet: "10.0.1.15/16"},
|
||||
ControllerManager: kubeadmapi.ControlPlaneComponent{
|
||||
ExtraArgs: map[string]string{"node-cidr-mask-size": "20"},
|
||||
},
|
||||
CertificatesDir: testCertsDir,
|
||||
KubernetesVersion: "v1.12.0-beta.2",
|
||||
KubernetesVersion: cpVersion,
|
||||
},
|
||||
expected: []string{
|
||||
"kube-controller-manager",
|
||||
|
@ -654,11 +656,11 @@ func TestGetControllerManagerCommand(t *testing.T) {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: "custom IPv6 networking for v1.12.0-beta.2",
|
||||
name: "custom IPv6 networking for " + cpVersion,
|
||||
cfg: &kubeadmapi.ClusterConfiguration{
|
||||
Networking: kubeadmapi.Networking{PodSubnet: "2001:db8::/64"},
|
||||
CertificatesDir: testCertsDir,
|
||||
KubernetesVersion: "v1.12.0-beta.2",
|
||||
KubernetesVersion: cpVersion,
|
||||
},
|
||||
expected: []string{
|
||||
"kube-controller-manager",
|
||||
|
@ -872,11 +874,11 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) {
|
|||
expectedArgFunc func(dir string) []string
|
||||
}{
|
||||
{
|
||||
name: "caKeyPresent-false for v1.12.0-beta.2",
|
||||
name: "caKeyPresent-false for " + cpVersion,
|
||||
cfg: &kubeadmapi.InitConfiguration{
|
||||
LocalAPIEndpoint: kubeadmapi.APIEndpoint{AdvertiseAddress: "1.2.3.4"},
|
||||
ClusterConfiguration: kubeadmapi.ClusterConfiguration{
|
||||
KubernetesVersion: "v1.12.0-beta.2",
|
||||
KubernetesVersion: cpVersion,
|
||||
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
|
||||
},
|
||||
},
|
||||
|
@ -901,11 +903,11 @@ func TestGetControllerManagerCommandExternalCA(t *testing.T) {
|
|||
},
|
||||
},
|
||||
{
|
||||
name: "caKeyPresent true for v1.12.0-beta.2",
|
||||
name: "caKeyPresent true for " + cpVersion,
|
||||
cfg: &kubeadmapi.InitConfiguration{
|
||||
LocalAPIEndpoint: kubeadmapi.APIEndpoint{AdvertiseAddress: "1.2.3.4"},
|
||||
ClusterConfiguration: kubeadmapi.ClusterConfiguration{
|
||||
KubernetesVersion: "v1.12.0-beta.2",
|
||||
KubernetesVersion: cpVersion,
|
||||
Networking: kubeadmapi.Networking{ServiceSubnet: "10.96.0.0/12", DNSDomain: "cluster.local"},
|
||||
},
|
||||
},
|
||||
|
|
|
@ -429,7 +429,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.0-beta.1",
|
||||
latestVersion: "v1.12.0-alpha.0",
|
||||
latestVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.0").String(),
|
||||
},
|
||||
beforeDNSType: kubeadmapi.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
|
@ -470,7 +470,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.0-rc.1",
|
||||
latestVersion: "v1.12.0-alpha.1",
|
||||
latestVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.1").String(),
|
||||
},
|
||||
beforeDNSType: kubeadmapi.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
|
@ -511,7 +511,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.6-rc.1",
|
||||
latestVersion: "v1.12.1-alpha.0",
|
||||
latestVersion: constants.MinimumControlPlaneVersion.WithPatch(1).WithPreRelease("alpha.0").String(),
|
||||
},
|
||||
beforeDNSType: kubeadmapi.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
|
@ -552,7 +552,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
stablePatchVersion: "v1.10.5",
|
||||
stableVersion: "v1.10.5",
|
||||
latestDevBranchVersion: "v1.11.0-rc.1",
|
||||
latestVersion: "v1.12.0-alpha.2",
|
||||
latestVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.2").String(),
|
||||
},
|
||||
beforeDNSType: kubeadmapi.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
|
@ -591,8 +591,8 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.12.0-alpha.2",
|
||||
KubeadmVersion: "v1.12.0-alpha.2",
|
||||
KubeVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.2").String(),
|
||||
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPreRelease("alpha.2").String(),
|
||||
DNSType: kubeadmapi.CoreDNS,
|
||||
DNSVersion: "1.2.6",
|
||||
EtcdVersion: "3.2.24",
|
||||
|
@ -625,7 +625,7 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
clusterVersion: "v1.11.1",
|
||||
kubeletVersion: "v1.11.0",
|
||||
kubeadmVersion: "v1.11.1",
|
||||
}, "v1.12.1"),
|
||||
}, constants.MinimumControlPlaneVersion.WithPatch(1).String()),
|
||||
etcdClient: etcdClient,
|
||||
beforeDNSType: kubeadmapi.CoreDNS,
|
||||
beforeDNSVersion: "1.0.6",
|
||||
|
@ -644,8 +644,8 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.12.1",
|
||||
KubeadmVersion: "v1.12.1",
|
||||
KubeVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(),
|
||||
KubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(1).String(),
|
||||
DNSType: kubeadmapi.CoreDNS,
|
||||
DNSVersion: "1.2.6",
|
||||
EtcdVersion: "3.2.24",
|
||||
|
@ -658,10 +658,10 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.2",
|
||||
kubeletVersion: "v1.11.2", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.12.0",
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
|
||||
stablePatchVersion: "v1.12.0",
|
||||
stableVersion: "v1.12.0",
|
||||
stablePatchVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
stableVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
},
|
||||
etcdClient: etcdClient,
|
||||
beforeDNSType: kubeadmapi.KubeDNS,
|
||||
|
@ -675,14 +675,14 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
KubeletVersions: map[string]uint16{
|
||||
"v1.11.2": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.12.0",
|
||||
KubeadmVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
DNSType: kubeadmapi.KubeDNS,
|
||||
DNSVersion: "1.14.7",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.12.0",
|
||||
KubeadmVersion: "v1.12.0",
|
||||
KubeVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
KubeadmVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
DNSType: kubeadmapi.CoreDNS,
|
||||
DNSVersion: "1.2.6",
|
||||
EtcdVersion: "3.2.24",
|
||||
|
@ -695,10 +695,10 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.11.2",
|
||||
kubeletVersion: "v1.11.2", // the kubelet are on the same version as the control plane
|
||||
kubeadmVersion: "v1.12.0",
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
|
||||
stablePatchVersion: "v1.12.0",
|
||||
stableVersion: "v1.12.0",
|
||||
stablePatchVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
stableVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
},
|
||||
etcdClient: etcdClient,
|
||||
beforeDNSType: kubeadmapi.KubeDNS,
|
||||
|
@ -712,14 +712,14 @@ func TestGetAvailableUpgrades(t *testing.T) {
|
|||
KubeletVersions: map[string]uint16{
|
||||
"v1.11.2": 1,
|
||||
},
|
||||
KubeadmVersion: "v1.12.0",
|
||||
KubeadmVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
DNSType: kubeadmapi.KubeDNS,
|
||||
DNSVersion: "1.14.7",
|
||||
EtcdVersion: "3.1.12",
|
||||
},
|
||||
After: ClusterState{
|
||||
KubeVersion: "v1.12.0",
|
||||
KubeadmVersion: "v1.12.0",
|
||||
KubeVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
KubeadmVersion: constants.MinimumControlPlaneVersion.String(),
|
||||
DNSType: kubeadmapi.KubeDNS,
|
||||
DNSVersion: "1.14.13",
|
||||
EtcdVersion: "3.2.24",
|
||||
|
@ -860,7 +860,7 @@ func TestGetBranchFromVersion(t *testing.T) {
|
|||
expectedVersion: "1.9",
|
||||
},
|
||||
{
|
||||
version: "v1.12.5",
|
||||
version: constants.MinimumControlPlaneVersion.WithPatch(5).String(),
|
||||
expectedVersion: "1.12",
|
||||
},
|
||||
{
|
||||
|
|
|
@ -20,6 +20,7 @@ import (
|
|||
"testing"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/version"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
)
|
||||
|
||||
func TestEnforceVersionPolicies(t *testing.T) {
|
||||
|
@ -34,17 +35,17 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "minor upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.5",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(),
|
||||
},
|
||||
newK8sVersion: "v1.12.5",
|
||||
newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(),
|
||||
},
|
||||
{
|
||||
name: "major upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.2",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(),
|
||||
kubeadmVersion: "v1.13.1",
|
||||
},
|
||||
newK8sVersion: "v1.13.0",
|
||||
|
@ -52,20 +53,20 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "downgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.String(),
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
},
|
||||
newK8sVersion: "v1.12.2",
|
||||
newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(2).String(),
|
||||
},
|
||||
{
|
||||
name: "same version upgrade",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
},
|
||||
newK8sVersion: "v1.12.3",
|
||||
newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
},
|
||||
{
|
||||
name: "new version must be higher than v1.10.0",
|
||||
|
@ -96,26 +97,26 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
kubeletVersion: "v1.14.3",
|
||||
kubeadmVersion: "v1.14.0",
|
||||
},
|
||||
newK8sVersion: "v1.12.3",
|
||||
newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
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.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
},
|
||||
newK8sVersion: "v1.12.5",
|
||||
newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(5).String(),
|
||||
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.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
kubeadmVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
},
|
||||
newK8sVersion: "v1.13.0",
|
||||
expectedMandatoryErrs: 1,
|
||||
|
@ -123,7 +124,7 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
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.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: "v1.11.8",
|
||||
kubeadmVersion: "v1.13.0",
|
||||
},
|
||||
|
@ -133,8 +134,8 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "experimental upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: "v1.13.0-beta.1",
|
||||
},
|
||||
newK8sVersion: "v1.13.0-beta.1",
|
||||
|
@ -143,8 +144,8 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "release candidate upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: "v1.13.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.13.0-rc.1",
|
||||
|
@ -153,8 +154,8 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "release candidate upgrades supported if the flag is set",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: "v1.13.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.13.0-rc.1",
|
||||
|
@ -163,8 +164,8 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "the user should not be able to upgrade to an experimental version if they haven't opted into that",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: "v1.13.0-beta.1",
|
||||
},
|
||||
newK8sVersion: "v1.13.0-beta.1",
|
||||
|
@ -174,8 +175,8 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
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.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: "v1.13.0-rc.1",
|
||||
},
|
||||
newK8sVersion: "v1.13.0-rc.1",
|
||||
|
@ -184,11 +185,11 @@ func TestEnforceVersionPolicies(t *testing.T) {
|
|||
{
|
||||
name: "the user can't use a newer minor version of kubeadm to upgrade an older version of kubeadm",
|
||||
vg: &fakeVersionGetter{
|
||||
clusterVersion: "v1.12.3",
|
||||
kubeletVersion: "v1.12.3",
|
||||
clusterVersion: constants.MinimumControlPlaneVersion.WithPatch(3).String(),
|
||||
kubeletVersion: constants.MinimumKubeletVersion.WithPatch(3).String(),
|
||||
kubeadmVersion: "v1.13.0",
|
||||
},
|
||||
newK8sVersion: "v1.12.6",
|
||||
newK8sVersion: constants.MinimumControlPlaneVersion.WithPatch(6).String(),
|
||||
expectedSkippableErrs: 1, // can't upgrade old k8s with newer kubeadm
|
||||
},
|
||||
}
|
||||
|
|
|
@ -431,7 +431,7 @@ func TestStaticPodControlPlane(t *testing.T) {
|
|||
}
|
||||
defer os.RemoveAll(tmpEtcdDataDir)
|
||||
|
||||
oldcfg, err := getConfig("v1.12.0", tempCertsDir, tmpEtcdDataDir)
|
||||
oldcfg, err := getConfig(constants.MinimumControlPlaneVersion.String(), tempCertsDir, tmpEtcdDataDir)
|
||||
if err != nil {
|
||||
t.Fatalf("couldn't create config: %v", err)
|
||||
}
|
||||
|
|
|
@ -46,6 +46,7 @@ go_test(
|
|||
deps = [
|
||||
"//cmd/kubeadm/app/apis/kubeadm:go_default_library",
|
||||
"//cmd/kubeadm/app/apis/kubeadm/v1beta1:go_default_library",
|
||||
"//cmd/kubeadm/app/constants:go_default_library",
|
||||
"//cmd/kubeadm/app/util/runtime:go_default_library",
|
||||
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
|
||||
"//vendor/github.com/pkg/errors:go_default_library",
|
||||
|
|
|
@ -31,6 +31,7 @@ import (
|
|||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
kubeadmapiv1beta1 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
utilruntime "k8s.io/kubernetes/cmd/kubeadm/app/util/runtime"
|
||||
"k8s.io/utils/exec"
|
||||
fakeexec "k8s.io/utils/exec/testing"
|
||||
|
@ -647,13 +648,13 @@ func TestKubeletVersionCheck(t *testing.T) {
|
|||
expectErrors bool
|
||||
expectWarnings bool
|
||||
}{
|
||||
{"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.
|
||||
{"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.
|
||||
{"v" + constants.MinimumKubeletVersion.String(), constants.MinimumControlPlaneVersion.WithPatch(5).String(), false, false}, // kubelet within same major.minor as control plane
|
||||
{"v" + constants.MinimumKubeletVersion.WithPatch(5).String(), constants.MinimumControlPlaneVersion.WithPatch(1).String(), false, false}, // kubelet is newer, but still within same major.minor as control plane
|
||||
{"v" + constants.MinimumKubeletVersion.String(), "v1.13.1", false, false}, // kubelet is lower than control plane, but newer than minimally supported
|
||||
{"v1.13.0-alpha.1", constants.MinimumControlPlaneVersion.WithPatch(1).String(), true, false}, // kubelet is newer (development build) than control plane, should fail.
|
||||
{"v1.13.0", constants.MinimumControlPlaneVersion.WithPatch(5).String(), true, false}, // kubelet is newer (release) than control plane, should fail.
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
|
|
|
@ -34,7 +34,7 @@ import (
|
|||
"k8s.io/kubernetes/cmd/kubeadm/app/util/apiclient"
|
||||
)
|
||||
|
||||
var k8sVersionString = "v1.12.0"
|
||||
var k8sVersionString = kubeadmconstants.MinimumControlPlaneVersion.String()
|
||||
var k8sVersion = version.MustParseGeneric(k8sVersionString)
|
||||
var nodeName = "mynode"
|
||||
var cfgFiles = map[string][]byte{
|
||||
|
|
|
@ -102,7 +102,7 @@ func TestCmdInitKubernetesVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "valid version is accepted",
|
||||
args: "--kubernetes-version=1.12.0",
|
||||
args: "--kubernetes-version=1.13.0",
|
||||
expected: true,
|
||||
},
|
||||
}
|
||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
|||
package test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"html/template"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
@ -54,7 +55,7 @@ func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.Ini
|
|||
t.Fatalf("Couldn't create cfgDir")
|
||||
}
|
||||
|
||||
cfgTemplate := template.Must(template.New("init").Parse(dedent.Dedent(`
|
||||
cfgTemplate := template.Must(template.New("init").Parse(dedent.Dedent(fmt.Sprintf(`
|
||||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: InitConfiguration
|
||||
apiEndpoint:
|
||||
|
@ -66,8 +67,8 @@ func SetupInitConfigurationFile(t *testing.T, tmpdir string, cfg *kubeadmapi.Ini
|
|||
apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
certificatesDir: {{.CertificatesDir}}
|
||||
kubernetesVersion: v1.12.0
|
||||
`)))
|
||||
kubernetesVersion: %s
|
||||
`, kubeadmconstants.MinimumControlPlaneVersion))))
|
||||
|
||||
f, err := os.Create(cfgPath)
|
||||
if err != nil {
|
||||
|
|
Loading…
Reference in New Issue