Merge pull request #88347 from neolit123/1.18-kubeadm-update-constants

kubeadm: update constants for 1.18
This commit is contained in:
Kubernetes Prow Robot 2020-02-20 04:29:43 -08:00 committed by GitHub
commit 58596b2bf5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 79 additions and 49 deletions

View File

@ -27,6 +27,7 @@ import (
"sort" "sort"
"strings" "strings"
"testing" "testing"
"text/template"
"github.com/lithammer/dedent" "github.com/lithammer/dedent"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -45,13 +46,16 @@ const (
defaultNumberOfImages = 8 defaultNumberOfImages = 8
) )
// dummyKubernetesVersion is just used for unit testing, in order to not make var (
// dummyKubernetesVersion and dummyKubernetesVersionStr are 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
var dummyKubernetesVersion = constants.MinimumControlPlaneVersion.String() dummyKubernetesVersion = constants.MinimumControlPlaneVersion
dummyKubernetesVersionStr = dummyKubernetesVersion.String()
)
func TestNewCmdConfigImagesList(t *testing.T) { func TestNewCmdConfigImagesList(t *testing.T) {
var output bytes.Buffer var output bytes.Buffer
mockK8sVersion := dummyKubernetesVersion mockK8sVersion := dummyKubernetesVersionStr
images := NewCmdConfigImagesList(&output, &mockK8sVersion) images := NewCmdConfigImagesList(&output, &mockK8sVersion)
if err := images.RunE(nil, nil); err != nil { if err := images.RunE(nil, nil); err != nil {
t.Fatalf("Error from running the images command: %v", err) t.Fatalf("Error from running the images command: %v", err)
@ -116,7 +120,7 @@ func TestImagesListRunWithCustomConfigPath(t *testing.T) {
} }
i, err := NewImagesList(configFilePath, &kubeadmapiv1beta2.ClusterConfiguration{ i, err := NewImagesList(configFilePath, &kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}) })
if err != nil { if err != nil {
t.Fatalf("Failed getting the kubeadm images command: %v", err) t.Fatalf("Failed getting the kubeadm images command: %v", err)
@ -149,7 +153,7 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
name: "empty config", name: "empty config",
expectedImages: defaultNumberOfImages, expectedImages: defaultNumberOfImages,
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
}, },
{ {
@ -160,21 +164,21 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
Endpoints: []string{"https://some.etcd.com:2379"}, Endpoints: []string{"https://some.etcd.com:2379"},
}, },
}, },
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
expectedImages: defaultNumberOfImages - 1, expectedImages: defaultNumberOfImages - 1,
}, },
{ {
name: "coredns enabled", name: "coredns enabled",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
expectedImages: defaultNumberOfImages, expectedImages: defaultNumberOfImages,
}, },
{ {
name: "kube-dns enabled", name: "kube-dns enabled",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
DNS: kubeadmapiv1beta2.DNS{ DNS: kubeadmapiv1beta2.DNS{
Type: kubeadmapiv1beta2.KubeDNS, Type: kubeadmapiv1beta2.KubeDNS,
}, },
@ -210,6 +214,23 @@ func TestConfigImagesListRunWithoutPath(t *testing.T) {
} }
func TestConfigImagesListOutput(t *testing.T) { func TestConfigImagesListOutput(t *testing.T) {
etcdVersion, ok := constants.SupportedEtcdVersion[uint8(dummyKubernetesVersion.Minor())]
if !ok {
t.Fatalf("cannot determine etcd version for Kubernetes version %s", dummyKubernetesVersionStr)
}
versionMapping := struct {
EtcdVersion string
KubeVersion string
PauseVersion string
CoreDNSVersion string
}{
EtcdVersion: etcdVersion,
KubeVersion: "v" + dummyKubernetesVersionStr,
PauseVersion: constants.PauseVersion,
CoreDNSVersion: constants.CoreDNSVersion,
}
testcases := []struct { testcases := []struct {
name string name string
cfg kubeadmapiv1beta2.ClusterConfiguration cfg kubeadmapiv1beta2.ClusterConfiguration
@ -219,35 +240,35 @@ func TestConfigImagesListOutput(t *testing.T) {
{ {
name: "text output", name: "text output",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
outputFormat: "text", outputFormat: "text",
expectedOutput: `k8s.gcr.io/kube-apiserver:v1.16.0 expectedOutput: `k8s.gcr.io/kube-apiserver:{{.KubeVersion}}
k8s.gcr.io/kube-controller-manager:v1.16.0 k8s.gcr.io/kube-controller-manager:{{.KubeVersion}}
k8s.gcr.io/kube-scheduler:v1.16.0 k8s.gcr.io/kube-scheduler:{{.KubeVersion}}
k8s.gcr.io/kube-proxy:v1.16.0 k8s.gcr.io/kube-proxy:{{.KubeVersion}}
k8s.gcr.io/pause:3.2 k8s.gcr.io/pause:{{.PauseVersion}}
k8s.gcr.io/etcd:3.3.17-0 k8s.gcr.io/etcd:{{.EtcdVersion}}
k8s.gcr.io/coredns:1.6.5 k8s.gcr.io/coredns:{{.CoreDNSVersion}}
`, `,
}, },
{ {
name: "JSON output", name: "JSON output",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
outputFormat: "json", outputFormat: "json",
expectedOutput: `{ expectedOutput: `{
"kind": "Images", "kind": "Images",
"apiVersion": "output.kubeadm.k8s.io/v1alpha1", "apiVersion": "output.kubeadm.k8s.io/v1alpha1",
"images": [ "images": [
"k8s.gcr.io/kube-apiserver:v1.16.0", "k8s.gcr.io/kube-apiserver:{{.KubeVersion}}",
"k8s.gcr.io/kube-controller-manager:v1.16.0", "k8s.gcr.io/kube-controller-manager:{{.KubeVersion}}",
"k8s.gcr.io/kube-scheduler:v1.16.0", "k8s.gcr.io/kube-scheduler:{{.KubeVersion}}",
"k8s.gcr.io/kube-proxy:v1.16.0", "k8s.gcr.io/kube-proxy:{{.KubeVersion}}",
"k8s.gcr.io/pause:3.2", "k8s.gcr.io/pause:{{.PauseVersion}}",
"k8s.gcr.io/etcd:3.3.17-0", "k8s.gcr.io/etcd:{{.EtcdVersion}}",
"k8s.gcr.io/coredns:1.6.5" "k8s.gcr.io/coredns:{{.CoreDNSVersion}}"
] ]
} }
`, `,
@ -255,44 +276,44 @@ k8s.gcr.io/coredns:1.6.5
{ {
name: "YAML output", name: "YAML output",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
outputFormat: "yaml", outputFormat: "yaml",
expectedOutput: `apiVersion: output.kubeadm.k8s.io/v1alpha1 expectedOutput: `apiVersion: output.kubeadm.k8s.io/v1alpha1
images: images:
- k8s.gcr.io/kube-apiserver:v1.16.0 - k8s.gcr.io/kube-apiserver:{{.KubeVersion}}
- k8s.gcr.io/kube-controller-manager:v1.16.0 - k8s.gcr.io/kube-controller-manager:{{.KubeVersion}}
- k8s.gcr.io/kube-scheduler:v1.16.0 - k8s.gcr.io/kube-scheduler:{{.KubeVersion}}
- k8s.gcr.io/kube-proxy:v1.16.0 - k8s.gcr.io/kube-proxy:{{.KubeVersion}}
- k8s.gcr.io/pause:3.2 - k8s.gcr.io/pause:{{.PauseVersion}}
- k8s.gcr.io/etcd:3.3.17-0 - k8s.gcr.io/etcd:{{.EtcdVersion}}
- k8s.gcr.io/coredns:1.6.5 - k8s.gcr.io/coredns:{{.CoreDNSVersion}}
kind: Images kind: Images
`, `,
}, },
{ {
name: "go-template output", name: "go-template output",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
outputFormat: `go-template={{range .images}}{{.}}{{"\n"}}{{end}}`, outputFormat: `go-template={{range .images}}{{.}}{{"\n"}}{{end}}`,
expectedOutput: `k8s.gcr.io/kube-apiserver:v1.16.0 expectedOutput: `k8s.gcr.io/kube-apiserver:{{.KubeVersion}}
k8s.gcr.io/kube-controller-manager:v1.16.0 k8s.gcr.io/kube-controller-manager:{{.KubeVersion}}
k8s.gcr.io/kube-scheduler:v1.16.0 k8s.gcr.io/kube-scheduler:{{.KubeVersion}}
k8s.gcr.io/kube-proxy:v1.16.0 k8s.gcr.io/kube-proxy:{{.KubeVersion}}
k8s.gcr.io/pause:3.2 k8s.gcr.io/pause:{{.PauseVersion}}
k8s.gcr.io/etcd:3.3.17-0 k8s.gcr.io/etcd:{{.EtcdVersion}}
k8s.gcr.io/coredns:1.6.5 k8s.gcr.io/coredns:{{.CoreDNSVersion}}
`, `,
}, },
{ {
name: "JSONPATH output", name: "JSONPATH output",
cfg: kubeadmapiv1beta2.ClusterConfiguration{ cfg: kubeadmapiv1beta2.ClusterConfiguration{
KubernetesVersion: dummyKubernetesVersion, KubernetesVersion: dummyKubernetesVersionStr,
}, },
outputFormat: `jsonpath={range.images[*]}{@} {end}`, outputFormat: `jsonpath={range.images[*]}{@} {end}`,
expectedOutput: "k8s.gcr.io/kube-apiserver:v1.16.0 k8s.gcr.io/kube-controller-manager:v1.16.0 k8s.gcr.io/kube-scheduler:v1.16.0 " + expectedOutput: "k8s.gcr.io/kube-apiserver:{{.KubeVersion}} k8s.gcr.io/kube-controller-manager:{{.KubeVersion}} k8s.gcr.io/kube-scheduler:{{.KubeVersion}} " +
"k8s.gcr.io/kube-proxy:v1.16.0 k8s.gcr.io/pause:3.2 k8s.gcr.io/etcd:3.3.17-0 k8s.gcr.io/coredns:1.6.5 ", "k8s.gcr.io/kube-proxy:{{.KubeVersion}} k8s.gcr.io/pause:{{.PauseVersion}} k8s.gcr.io/etcd:{{.EtcdVersion}} k8s.gcr.io/coredns:{{.CoreDNSVersion}} ",
}, },
} }
@ -309,13 +330,21 @@ k8s.gcr.io/coredns:1.6.5
t.Fatalf("did not expect an error while creating the Images command: %v", err) t.Fatalf("did not expect an error while creating the Images command: %v", err)
} }
var output bytes.Buffer var output, expectedOutput bytes.Buffer
if err = i.Run(&output, printer); err != nil { if err = i.Run(&output, printer); err != nil {
t.Fatalf("did not expect an error running the Images command: %v", err) t.Fatalf("did not expect an error running the Images command: %v", err)
} }
if output.String() != tc.expectedOutput { tmpl, err := template.New("test").Parse(tc.expectedOutput)
if err != nil {
t.Fatalf("could not create template: %v", err)
}
if err = tmpl.Execute(&expectedOutput, versionMapping); err != nil {
t.Fatalf("could not execute template: %v", err)
}
if output.String() != expectedOutput.String() {
t.Fatalf("unexpected output:\n|%s|\nexpected:\n|%s|\n", output.String(), tc.expectedOutput) t.Fatalf("unexpected output:\n|%s|\nexpected:\n|%s|\n", output.String(), tc.expectedOutput)
} }
}) })

View File

@ -411,13 +411,13 @@ var (
ControlPlaneComponents = []string{KubeAPIServer, KubeControllerManager, KubeScheduler} ControlPlaneComponents = []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.16.0") MinimumControlPlaneVersion = version.MustParseSemantic("v1.17.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.16.0") MinimumKubeletVersion = version.MustParseSemantic("v1.17.0")
// CurrentKubernetesVersion specifies current Kubernetes version supported by kubeadm // CurrentKubernetesVersion specifies current Kubernetes version supported by kubeadm
CurrentKubernetesVersion = version.MustParseSemantic("v1.17.0") CurrentKubernetesVersion = version.MustParseSemantic("v1.18.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{
@ -427,6 +427,7 @@ var (
16: "3.3.17-0", 16: "3.3.17-0",
17: "3.4.3-0", 17: "3.4.3-0",
18: "3.4.3-0", 18: "3.4.3-0",
19: "3.4.3-0",
} }
// KubeadmCertsClusterRoleName sets the name for the ClusterRole that allows // KubeadmCertsClusterRoleName sets the name for the ClusterRole that allows