Merge pull request #11426 from afbjorklund/images-versions
Update the bootstrapper images for k8s 1.21pull/11455/head
commit
4f345f2b8f
|
@ -123,23 +123,14 @@ func recentReleases(n int) ([]string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Need a separate test function to test the DNS server IP
|
|
||||||
as v1.11 yaml file is very different compared to v1.12+.
|
|
||||||
This test case has only 1 thing to test and that is the
|
This test case has only 1 thing to test and that is the
|
||||||
networking/dnsDomain value
|
networking/dnsDomain value
|
||||||
*/
|
*/
|
||||||
func TestGenerateKubeadmYAMLDNS(t *testing.T) {
|
func TestGenerateKubeadmYAMLDNS(t *testing.T) {
|
||||||
// test all testdata releases greater than v1.11
|
|
||||||
versions, err := recentReleases(0)
|
versions, err := recentReleases(0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("versions: %v", err)
|
t.Errorf("versions: %v", err)
|
||||||
}
|
}
|
||||||
for i, v := range versions {
|
|
||||||
if semver.Compare(v, "v1.11") <= 0 {
|
|
||||||
versions = versions[0:i]
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fcr := command.NewFakeCommandRunner()
|
fcr := command.NewFakeCommandRunner()
|
||||||
fcr.SetCommandToOutput(map[string]string{
|
fcr.SetCommandToOutput(map[string]string{
|
||||||
"docker info --format {{.CgroupDriver}}": "systemd\n",
|
"docker info --format {{.CgroupDriver}}": "systemd\n",
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 12345
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
criSocket: /run/containerd/containerd.sock
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
|
@ -1,22 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
criSocket: /run/containerd/containerd.sock
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
|
@ -1,22 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
criSocket: /run/containerd/containerd.sock
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
|
@ -1,30 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
criSocket: /var/run/crio/crio.sock
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
||||||
fail-no-swap: "true"
|
|
||||||
feature-gates: "a=b"
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
feature-gates: "a=b"
|
|
||||||
kube-api-burst: "32"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
feature-gates: "a=b"
|
|
||||||
scheduler-name: "mini-scheduler"
|
|
|
@ -1,22 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
criSocket: /var/run/crio/crio.sock
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
|
@ -1,21 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
|
@ -1,22 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
imageRepository: test/repo
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
|
@ -1,26 +0,0 @@
|
||||||
apiVersion: kubeadm.k8s.io/v1alpha1
|
|
||||||
kind: MasterConfiguration
|
|
||||||
noTaintMaster: true
|
|
||||||
api:
|
|
||||||
advertiseAddress: 1.1.1.1
|
|
||||||
bindPort: 8443
|
|
||||||
controlPlaneEndpoint: control-plane.minikube.internal
|
|
||||||
kubernetesVersion: v1.11.0
|
|
||||||
certificatesDir: /var/lib/minikube/certs
|
|
||||||
networking:
|
|
||||||
serviceSubnet: 10.96.0.0/12
|
|
||||||
etcd:
|
|
||||||
dataDir: /var/lib/minikube/etcd
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
leader-elect: "false"
|
|
||||||
nodeName: "mk"
|
|
||||||
apiServerCertSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
|
|
||||||
apiServerExtraArgs:
|
|
||||||
enable-admission-plugins: "Initializers,NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
|
|
||||||
fail-no-swap: "true"
|
|
||||||
controllerManagerExtraArgs:
|
|
||||||
kube-api-burst: "32"
|
|
||||||
schedulerExtraArgs:
|
|
||||||
scheduler-name: "mini-scheduler"
|
|
|
@ -28,9 +28,14 @@ import (
|
||||||
|
|
||||||
// Pause returns the image name to pull for a given Kubernetes version
|
// Pause returns the image name to pull for a given Kubernetes version
|
||||||
func Pause(v semver.Version, mirror string) string {
|
func Pause(v semver.Version, mirror string) string {
|
||||||
|
// Note: changing this logic requires bumping the preload version
|
||||||
// Should match `PauseVersion` in:
|
// Should match `PauseVersion` in:
|
||||||
|
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
||||||
|
pv := "3.4.1"
|
||||||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants_unix.go
|
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants_unix.go
|
||||||
pv := "3.2"
|
if semver.MustParseRange("<1.21.0-alpha.3")(v) {
|
||||||
|
pv = "3.2"
|
||||||
|
}
|
||||||
if semver.MustParseRange("<1.18.0-alpha.0")(v) {
|
if semver.MustParseRange("<1.18.0-alpha.0")(v) {
|
||||||
pv = "3.1"
|
pv = "3.1"
|
||||||
}
|
}
|
||||||
|
@ -40,13 +45,14 @@ func Pause(v semver.Version, mirror string) string {
|
||||||
// essentials returns images needed too bootstrap a Kubernetes
|
// essentials returns images needed too bootstrap a Kubernetes
|
||||||
func essentials(mirror string, v semver.Version) []string {
|
func essentials(mirror string, v semver.Version) []string {
|
||||||
imgs := []string{
|
imgs := []string{
|
||||||
componentImage("kube-proxy", v, mirror),
|
// use the same order as: `kubeadm config images list`
|
||||||
componentImage("kube-scheduler", v, mirror),
|
|
||||||
componentImage("kube-controller-manager", v, mirror),
|
|
||||||
componentImage("kube-apiserver", v, mirror),
|
componentImage("kube-apiserver", v, mirror),
|
||||||
coreDNS(v, mirror),
|
componentImage("kube-controller-manager", v, mirror),
|
||||||
etcd(v, mirror),
|
componentImage("kube-scheduler", v, mirror),
|
||||||
|
componentImage("kube-proxy", v, mirror),
|
||||||
Pause(v, mirror),
|
Pause(v, mirror),
|
||||||
|
etcd(v, mirror),
|
||||||
|
coreDNS(v, mirror),
|
||||||
}
|
}
|
||||||
return imgs
|
return imgs
|
||||||
}
|
}
|
||||||
|
@ -58,13 +64,16 @@ func componentImage(name string, v semver.Version, mirror string) string {
|
||||||
|
|
||||||
// coreDNS returns the images used for CoreDNS
|
// coreDNS returns the images used for CoreDNS
|
||||||
func coreDNS(v semver.Version, mirror string) string {
|
func coreDNS(v semver.Version, mirror string) string {
|
||||||
// Should match `CoreDNSVersion` in
|
// Note: changing this logic requires bumping the preload version
|
||||||
|
// Should match `CoreDNSImageName` and `CoreDNSVersion` in
|
||||||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
||||||
cv := "1.7.0"
|
in := "coredns/coredns"
|
||||||
|
if semver.MustParseRange("<1.21.0-alpha.1")(v) {
|
||||||
|
in = "coredns"
|
||||||
|
}
|
||||||
|
cv := "v1.8.0"
|
||||||
switch v.Minor {
|
switch v.Minor {
|
||||||
case 22:
|
case 20, 19:
|
||||||
cv = "1.8.0"
|
|
||||||
case 10, 20, 21:
|
|
||||||
cv = "1.7.0"
|
cv = "1.7.0"
|
||||||
case 18:
|
case 18:
|
||||||
cv = "1.6.7"
|
cv = "1.6.7"
|
||||||
|
@ -78,19 +87,20 @@ func coreDNS(v semver.Version, mirror string) string {
|
||||||
cv = "1.2.6"
|
cv = "1.2.6"
|
||||||
case 12:
|
case 12:
|
||||||
cv = "1.2.2"
|
cv = "1.2.2"
|
||||||
case 11:
|
|
||||||
cv = "1.1.3"
|
|
||||||
}
|
}
|
||||||
return path.Join(kubernetesRepo(mirror), "coredns:"+cv)
|
return path.Join(kubernetesRepo(mirror), in+":"+cv)
|
||||||
}
|
}
|
||||||
|
|
||||||
// etcd returns the image used for etcd
|
// etcd returns the image used for etcd
|
||||||
func etcd(v semver.Version, mirror string) string {
|
func etcd(v semver.Version, mirror string) string {
|
||||||
|
// Note: changing this logic requires bumping the preload version
|
||||||
// Should match `DefaultEtcdVersion` in:
|
// Should match `DefaultEtcdVersion` in:
|
||||||
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
// https://github.com/kubernetes/kubernetes/blob/master/cmd/kubeadm/app/constants/constants.go
|
||||||
ev := "3.4.13-0"
|
ev := "3.4.13-3"
|
||||||
|
|
||||||
switch v.Minor {
|
switch v.Minor {
|
||||||
|
case 19, 20, 21:
|
||||||
|
ev = "3.4.13-0"
|
||||||
case 17, 18:
|
case 17, 18:
|
||||||
ev = "3.4.3-0"
|
ev = "3.4.3-0"
|
||||||
case 16:
|
case 16:
|
||||||
|
@ -99,8 +109,6 @@ func etcd(v semver.Version, mirror string) string {
|
||||||
ev = "3.3.10"
|
ev = "3.3.10"
|
||||||
case 12, 13:
|
case 12, 13:
|
||||||
ev = "3.2.24"
|
ev = "3.2.24"
|
||||||
case 11:
|
|
||||||
ev = "3.2.18"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// An awkward special case for v1.19.0 - do not imitate unless necessary
|
// An awkward special case for v1.19.0 - do not imitate unless necessary
|
||||||
|
@ -113,6 +121,7 @@ func etcd(v semver.Version, mirror string) string {
|
||||||
|
|
||||||
// auxiliary returns images that are helpful for running minikube
|
// auxiliary returns images that are helpful for running minikube
|
||||||
func auxiliary(mirror string) []string {
|
func auxiliary(mirror string) []string {
|
||||||
|
// Note: changing this list requires bumping the preload version
|
||||||
return []string{
|
return []string{
|
||||||
storageProvisioner(mirror),
|
storageProvisioner(mirror),
|
||||||
dashboardFrontend(mirror),
|
dashboardFrontend(mirror),
|
||||||
|
|
|
@ -17,12 +17,71 @@ limitations under the License.
|
||||||
package images
|
package images
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/blang/semver"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"k8s.io/minikube/pkg/version"
|
"k8s.io/minikube/pkg/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func TestEssentials(t *testing.T) {
|
||||||
|
var testCases = []struct {
|
||||||
|
version string
|
||||||
|
images []string
|
||||||
|
}{
|
||||||
|
{"v1.18.0", strings.Split(strings.Trim(`
|
||||||
|
k8s.gcr.io/kube-apiserver:v1.18.0
|
||||||
|
k8s.gcr.io/kube-controller-manager:v1.18.0
|
||||||
|
k8s.gcr.io/kube-scheduler:v1.18.0
|
||||||
|
k8s.gcr.io/kube-proxy:v1.18.0
|
||||||
|
k8s.gcr.io/pause:3.2
|
||||||
|
k8s.gcr.io/etcd:3.4.3-0
|
||||||
|
k8s.gcr.io/coredns:1.6.7
|
||||||
|
`, "\n"), "\n")},
|
||||||
|
{"v1.19.0", strings.Split(strings.Trim(`
|
||||||
|
k8s.gcr.io/kube-apiserver:v1.19.0
|
||||||
|
k8s.gcr.io/kube-controller-manager:v1.19.0
|
||||||
|
k8s.gcr.io/kube-scheduler:v1.19.0
|
||||||
|
k8s.gcr.io/kube-proxy:v1.19.0
|
||||||
|
k8s.gcr.io/pause:3.2
|
||||||
|
k8s.gcr.io/etcd:3.4.9-1
|
||||||
|
k8s.gcr.io/coredns:1.7.0
|
||||||
|
`, "\n"), "\n")},
|
||||||
|
{"v1.20.0", strings.Split(strings.Trim(`
|
||||||
|
k8s.gcr.io/kube-apiserver:v1.20.0
|
||||||
|
k8s.gcr.io/kube-controller-manager:v1.20.0
|
||||||
|
k8s.gcr.io/kube-scheduler:v1.20.0
|
||||||
|
k8s.gcr.io/kube-proxy:v1.20.0
|
||||||
|
k8s.gcr.io/pause:3.2
|
||||||
|
k8s.gcr.io/etcd:3.4.13-0
|
||||||
|
k8s.gcr.io/coredns:1.7.0
|
||||||
|
`, "\n"), "\n")},
|
||||||
|
{"v1.21.0", strings.Split(strings.Trim(`
|
||||||
|
k8s.gcr.io/kube-apiserver:v1.21.0
|
||||||
|
k8s.gcr.io/kube-controller-manager:v1.21.0
|
||||||
|
k8s.gcr.io/kube-scheduler:v1.21.0
|
||||||
|
k8s.gcr.io/kube-proxy:v1.21.0
|
||||||
|
k8s.gcr.io/pause:3.4.1
|
||||||
|
k8s.gcr.io/etcd:3.4.13-0
|
||||||
|
k8s.gcr.io/coredns/coredns:v1.8.0
|
||||||
|
`, "\n"), "\n")},
|
||||||
|
}
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.version, func(t *testing.T) {
|
||||||
|
v, err := semver.Make(strings.TrimPrefix(tc.version, "v"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
want := tc.images
|
||||||
|
got := essentials("k8s.gcr.io", v)
|
||||||
|
if diff := cmp.Diff(want, got); diff != "" {
|
||||||
|
t.Errorf("images mismatch (-want +got):\n%s", diff)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAuxiliary(t *testing.T) {
|
func TestAuxiliary(t *testing.T) {
|
||||||
want := []string{
|
want := []string{
|
||||||
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
"gcr.io/k8s-minikube/storage-provisioner:" + version.GetStorageProvisionerVersion(),
|
||||||
|
@ -46,3 +105,23 @@ func TestAuxiliaryMirror(t *testing.T) {
|
||||||
t.Errorf("images mismatch (-want +got):\n%s", diff)
|
t.Errorf("images mismatch (-want +got):\n%s", diff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCNI(t *testing.T) {
|
||||||
|
// images used by k8s.io/minikube/pkg/minikube/cni
|
||||||
|
var testCases = []struct {
|
||||||
|
name string
|
||||||
|
function func(string) string
|
||||||
|
}{
|
||||||
|
{"kindnet", KindNet},
|
||||||
|
{"calico-deployment", CalicoDeployment},
|
||||||
|
{"calico-daemonset", CalicoDaemonSet},
|
||||||
|
}
|
||||||
|
for _, tc := range testCases {
|
||||||
|
t.Run(tc.name, func(t *testing.T) {
|
||||||
|
img := tc.function("")
|
||||||
|
if img == "" {
|
||||||
|
t.Errorf("no image")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -17,6 +17,7 @@ limitations under the License.
|
||||||
package images
|
package images
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/blang/semver"
|
"github.com/blang/semver"
|
||||||
|
@ -29,6 +30,12 @@ func Kubeadm(mirror string, version string) ([]string, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "semver")
|
return nil, errors.Wrap(err, "semver")
|
||||||
}
|
}
|
||||||
|
if v.Major > 1 {
|
||||||
|
return nil, fmt.Errorf("version too new: %v", v)
|
||||||
|
}
|
||||||
|
if semver.MustParseRange("<1.12.0-alpha.0")(v) {
|
||||||
|
return nil, fmt.Errorf("version too old: %v", v)
|
||||||
|
}
|
||||||
imgs := essentials(mirror, v)
|
imgs := essentials(mirror, v)
|
||||||
imgs = append(imgs, auxiliary(mirror)...)
|
imgs = append(imgs, auxiliary(mirror)...)
|
||||||
return imgs, nil
|
return imgs, nil
|
||||||
|
|
|
@ -28,9 +28,13 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
version string
|
version string
|
||||||
mirror string
|
mirror string
|
||||||
|
invalid bool
|
||||||
want []string
|
want []string
|
||||||
}{
|
}{
|
||||||
{"v1.17.0", "", []string{
|
{"invalid", "", true, nil},
|
||||||
|
{"v0.0.1", "", true, nil}, // too old
|
||||||
|
{"v2.0.0", "", true, nil}, // too new
|
||||||
|
{"v1.17.0", "", false, []string{
|
||||||
"k8s.gcr.io/kube-proxy:v1.17.0",
|
"k8s.gcr.io/kube-proxy:v1.17.0",
|
||||||
"k8s.gcr.io/kube-scheduler:v1.17.0",
|
"k8s.gcr.io/kube-scheduler:v1.17.0",
|
||||||
"k8s.gcr.io/kube-controller-manager:v1.17.0",
|
"k8s.gcr.io/kube-controller-manager:v1.17.0",
|
||||||
|
@ -42,7 +46,7 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
"docker.io/kubernetesui/dashboard:v2.1.0",
|
"docker.io/kubernetesui/dashboard:v2.1.0",
|
||||||
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
||||||
}},
|
}},
|
||||||
{"v1.16.1", "mirror.k8s.io", []string{
|
{"v1.16.1", "mirror.k8s.io", false, []string{
|
||||||
"mirror.k8s.io/kube-proxy:v1.16.1",
|
"mirror.k8s.io/kube-proxy:v1.16.1",
|
||||||
"mirror.k8s.io/kube-scheduler:v1.16.1",
|
"mirror.k8s.io/kube-scheduler:v1.16.1",
|
||||||
"mirror.k8s.io/kube-controller-manager:v1.16.1",
|
"mirror.k8s.io/kube-controller-manager:v1.16.1",
|
||||||
|
@ -54,7 +58,7 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
"mirror.k8s.io/dashboard:v2.1.0",
|
"mirror.k8s.io/dashboard:v2.1.0",
|
||||||
"mirror.k8s.io/metrics-scraper:v1.0.4",
|
"mirror.k8s.io/metrics-scraper:v1.0.4",
|
||||||
}},
|
}},
|
||||||
{"v1.15.0", "", []string{
|
{"v1.15.0", "", false, []string{
|
||||||
"k8s.gcr.io/kube-proxy:v1.15.0",
|
"k8s.gcr.io/kube-proxy:v1.15.0",
|
||||||
"k8s.gcr.io/kube-scheduler:v1.15.0",
|
"k8s.gcr.io/kube-scheduler:v1.15.0",
|
||||||
"k8s.gcr.io/kube-controller-manager:v1.15.0",
|
"k8s.gcr.io/kube-controller-manager:v1.15.0",
|
||||||
|
@ -66,7 +70,7 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
"docker.io/kubernetesui/dashboard:v2.1.0",
|
"docker.io/kubernetesui/dashboard:v2.1.0",
|
||||||
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
||||||
}},
|
}},
|
||||||
{"v1.14.0", "", []string{
|
{"v1.14.0", "", false, []string{
|
||||||
"k8s.gcr.io/kube-proxy:v1.14.0",
|
"k8s.gcr.io/kube-proxy:v1.14.0",
|
||||||
"k8s.gcr.io/kube-scheduler:v1.14.0",
|
"k8s.gcr.io/kube-scheduler:v1.14.0",
|
||||||
"k8s.gcr.io/kube-controller-manager:v1.14.0",
|
"k8s.gcr.io/kube-controller-manager:v1.14.0",
|
||||||
|
@ -78,7 +82,7 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
"docker.io/kubernetesui/dashboard:v2.1.0",
|
"docker.io/kubernetesui/dashboard:v2.1.0",
|
||||||
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
||||||
}},
|
}},
|
||||||
{"v1.13.0", "", []string{
|
{"v1.13.0", "", false, []string{
|
||||||
"k8s.gcr.io/kube-proxy:v1.13.0",
|
"k8s.gcr.io/kube-proxy:v1.13.0",
|
||||||
"k8s.gcr.io/kube-scheduler:v1.13.0",
|
"k8s.gcr.io/kube-scheduler:v1.13.0",
|
||||||
"k8s.gcr.io/kube-controller-manager:v1.13.0",
|
"k8s.gcr.io/kube-controller-manager:v1.13.0",
|
||||||
|
@ -90,7 +94,7 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
"docker.io/kubernetesui/dashboard:v2.1.0",
|
"docker.io/kubernetesui/dashboard:v2.1.0",
|
||||||
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
||||||
}},
|
}},
|
||||||
{"v1.12.0", "", []string{
|
{"v1.12.0", "", false, []string{
|
||||||
"k8s.gcr.io/kube-proxy:v1.12.0",
|
"k8s.gcr.io/kube-proxy:v1.12.0",
|
||||||
"k8s.gcr.io/kube-scheduler:v1.12.0",
|
"k8s.gcr.io/kube-scheduler:v1.12.0",
|
||||||
"k8s.gcr.io/kube-controller-manager:v1.12.0",
|
"k8s.gcr.io/kube-controller-manager:v1.12.0",
|
||||||
|
@ -102,11 +106,16 @@ func TestKubeadmImages(t *testing.T) {
|
||||||
"docker.io/kubernetesui/dashboard:v2.1.0",
|
"docker.io/kubernetesui/dashboard:v2.1.0",
|
||||||
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
"docker.io/kubernetesui/metrics-scraper:v1.0.4",
|
||||||
}},
|
}},
|
||||||
|
{"v1.11.0", "", true, nil},
|
||||||
|
{"v1.10.0", "", true, nil},
|
||||||
}
|
}
|
||||||
for _, tc := range tests {
|
for _, tc := range tests {
|
||||||
got, err := Kubeadm(tc.mirror, tc.version)
|
got, err := Kubeadm(tc.mirror, tc.version)
|
||||||
if err != nil {
|
if err == nil && tc.invalid {
|
||||||
t.Fatalf("unexpected err: %v", err)
|
t.Fatalf("expected err (%s): %v", tc.version, got)
|
||||||
|
}
|
||||||
|
if err != nil && !tc.invalid {
|
||||||
|
t.Fatalf("unexpected err (%s): %v", tc.version, err)
|
||||||
}
|
}
|
||||||
sort.Strings(got)
|
sort.Strings(got)
|
||||||
sort.Strings(tc.want)
|
sort.Strings(tc.want)
|
||||||
|
|
|
@ -42,7 +42,7 @@ const (
|
||||||
// PreloadVersion is the current version of the preloaded tarball
|
// PreloadVersion is the current version of the preloaded tarball
|
||||||
//
|
//
|
||||||
// NOTE: You may need to bump this version up when upgrading auxiliary docker images
|
// NOTE: You may need to bump this version up when upgrading auxiliary docker images
|
||||||
PreloadVersion = "v10"
|
PreloadVersion = "v11"
|
||||||
// PreloadBucket is the name of the GCS bucket where preloaded volume tarballs exist
|
// PreloadBucket is the name of the GCS bucket where preloaded volume tarballs exist
|
||||||
PreloadBucket = "minikube-preloaded-volume-tarballs"
|
PreloadBucket = "minikube-preloaded-volume-tarballs"
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in New Issue