Repository: kubernetes/minikube
Pull request #11026 (2021-04-08 18:26:10)

split out minikube start and enable ingress times for mkcmp
Before:
**kvm2 Driver**
Times for minikube: 49.0s 42.8s 51.6s 42.4s 50.5s 44.3s 50.1s 42.2s 51.7s 43.8s 
Average time for minikube: 46.9s

Times for Minikube (PR 11011): 48.4s 43.7s 46.6s 36.2s 48.8s 36.2s 46.0s 43.3s 48.4s 36.8s 
Average time for Minikube (PR 11011): 43.4s

Averages Time Per Log
<details>

```
+--------------------------------------------+----------+---------------------+
|                    LOG                     | MINIKUBE | MINIKUBE (PR 11011) |
+--------------------------------------------+----------+---------------------+
| * minikube v1.19.0-beta.0 on               | 0.0s     | 0.0s                |
| Debian 9.13 (kvm/amd64)                    |          |                     |
|   - MINIKUBE_LOCATION=11011                | 0.0s     | 0.0s                |
| * Using the kvm2 driver based              | 0.0s     |                     |
| on existing profile                        |          |                     |
| * Starting control plane node              | 0.0s     | 0.0s                |
| minikube in cluster minikube               |          |                     |
| * Creating kvm2 VM (CPUs=2,                | 31.7s    | 28.5s               |
| Memory=6000MB, Disk=20000MB)               |          |                     |
| ...                                        |          |                     |
| * Preparing Kubernetes v1.20.2             | 13.7s    | 4.6s                |
| on Docker 20.10.4 ...                      |          |                     |
|   - Generating certificates                | 0.6s     | 2.4s                |
| and keys ...                               |          |                     |
|   - Booting up control plane               | 2.3s     | 9.8s                |
| ...                                        |          |                     |
|   - Configuring RBAC rules ...             | 1.0s     | 1.3s                |
| * Verifying Kubernetes                     | 0.0s     | 0.0s                |
| components...                              |          |                     |
|   - Using image                            | 1.0s     | 0.9s                |
| gcr.io/k8s-minikube/storage-provisioner:v5 |          |                     |
| * Enabled addons:                          | 0.2s     | 0.1s                |
| storage-provisioner,                       |          |                     |
| default-storageclass                       |          |                     |
| * Done! kubectl is now                     | 0.0s     | 0.0s                |
| configured to use "minikube"               |          |                     |
| cluster and "default"                      |          |                     |
| namespace by default                       |          |                     |
+--------------------------------------------+----------+---------------------+
```

</details>

**docker Driver**
Times for minikube: 22.0s 41.0s 21.0s 34.5s 21.1s 32.0s 21.0s 32.5s 21.4s 41.5s 
Average time for minikube: 28.8s

Times for Minikube (PR 11011): 22.8s 35.0s 21.5s 31.0s 21.6s 38.5s 22.1s 36.0s 22.4s 31.5s 
Average time for Minikube (PR 11011): 28.2s

Averages Time Per Log
<details>

```
+--------------------------------------------+----------+---------------------+
|                    LOG                     | MINIKUBE | MINIKUBE (PR 11011) |
+--------------------------------------------+----------+---------------------+
| * minikube v1.19.0-beta.0 on               | 0.0s     | 0.0s                |
| Debian 9.13 (kvm/amd64)                    |          |                     |
|   - MINIKUBE_LOCATION=11011                | 0.1s     | 0.1s                |
| * Using the docker driver                  | 0.1s     |                     |
| based on existing profile                  |          |                     |
| * Starting control plane node              | 0.1s     | 0.1s                |
| minikube in cluster minikube               |          |                     |
| * Creating docker container                | 6.6s     | 6.6s                |
| (CPUs=2, Memory=8000MB) ...                |          |                     |
| * Preparing Kubernetes v1.20.2             | 1.7s     | 1.7s                |
| on Docker 20.10.5 ...                      |          |                     |
|   - Generating certificates                | 2.0s     | 2.8s                |
| and keys ...                               |          |                     |
|   - Booting up control plane               | 8.8s     | 8.8s                |
| ...                                        |          |                     |
|   - Configuring RBAC rules ...             | 1.2s     | 1.2s                |
| * Verifying Kubernetes                     | 0.0s     | 0.0s                |
| components...                              |          |                     |
|   - Using image                            | 0.5s     | 0.5s                |
| gcr.io/k8s-minikube/storage-provisioner:v5 |          |                     |
| * Enabled addons:                          | 0.0s     | 0.0s                |
| storage-provisioner,                       |          |                     |
| default-storageclass                       |          |                     |
| * Done! kubectl is now                     | 0.0s     | 0.0s                |
| configured to use "minikube"               |          |                     |
| cluster and "default"                      |          |                     |
| namespace by default                       |          |                     |
+--------------------------------------------+----------+---------------------+
```

</details>

After:
**kvm2 Driver**
Times for minikube start: 54.3s 53.0s 53.9s 52.0s 52.8s 
Average time for minikube start: 53.2s

Times for minikube ingress: 26.8s 27.2s 26.2s 25.2s 24.7s 
Average time for minikube ingress: 26.0s

Times for minikube (PR 11000) start: 53.1s 53.2s 52.7s 53.8s 53.4s 
Average time for minikube (PR 11000) start: 53.2s

Times for minikube (PR 11000) ingress: 24.7s 26.7s 25.8s 26.6s 24.2s 
Average time for minikube (PR 11000) ingress: 25.6s

Averages Time Per Log
<details>

```
+--------------------------------------------+----------+---------------------+
|                    LOG                     | MINIKUBE | MINIKUBE (PR 11000) |
+--------------------------------------------+----------+---------------------+
| 😄  minikube v1.19.0-beta.0 on             | 0.1s     |                     |
| Debian rodete                              |          |                     |
| ✨  Using the kvm2 driver                  | 0.0s     |                     |
| based on existing profile                  |          |                     |
| 👍  Starting control plane                 | 0.0s     | 0.0s                |
| node minikube in cluster                   |          |                     |
| minikube                                   |          |                     |
| 🔥  Creating kvm2 VM (CPUs=2,              | 23.6s    | 23.4s               |
| Memory=6000MB, Disk=20000MB)               |          |                     |
| ...                                        |          |                     |
| 🐳  Preparing Kubernetes                   | 5.7s     | 9.4s                |
| v1.20.2 on Docker 20.10.4 ...              |          |                     |
|     ▪ Generating certificates              | 2.3s     | 1.9s                |
| and keys ...                               |          |                     |
|     ▪ Booting up control plane             | 12.8s    | 9.5s                |
| ...                                        |          |                     |
|     ▪ Configuring RBAC rules               | 1.2s     | 1.0s                |
| ...                                        |          |                     |
| 🔎  Verifying Kubernetes                   | 0.1s     | 0.1s                |
| components...                              |          |                     |
|     ▪ Using image                          | 0.5s     | 0.5s                |
| gcr.io/k8s-minikube/storage-provisioner:v5 |          |                     |
| 🌟  Enabled addons:                        | 6.9s     | 7.3s                |
| storage-provisioner,                       |          |                     |
| default-storageclass                       |          |                     |
|                                            | 0.0s     | 0.0s                |
|     ▪ Want kubectl v1.20.2?                |          |                     |
| Try 'minikube kubectl -- get               |          |                     |
| pods -A'                                   |          |                     |
| 🏄  Done! kubectl is now                   |          |                     |
| configured to use "minikube"               |          |                     |
| cluster and "default"                      |          |                     |
| namespace by default                       |          |                     |
+--------------------------------------------+----------+---------------------+
```

</details>

**docker Driver**
Times for minikube start: 41.0s 41.0s 41.4s 40.6s 39.9s 
Average time for minikube start: 40.8s

Times for minikube ingress: 23.6s 23.2s 22.7s 22.7s 23.2s 
Average time for minikube ingress: 23.1s

Times for minikube (PR 11000) start: 39.6s 40.1s 40.7s 39.8s 38.4s 
Average time for minikube (PR 11000) start: 39.7s

Times for minikube (PR 11000) ingress: 21.1s 23.1s 25.2s 22.6s 23.2s 
Average time for minikube (PR 11000) ingress: 23.0s

Averages Time Per Log
<details>

```
+--------------------------------------------+----------+---------------------+
|                    LOG                     | MINIKUBE | MINIKUBE (PR 11000) |
+--------------------------------------------+----------+---------------------+
| 😄  minikube v1.19.0-beta.0 on             | 0.2s     |                     |
| Debian rodete                              |          |                     |
| ✨  Using the docker driver                | 0.1s     |                     |
| based on existing profile                  |          |                     |
| 👍  Starting control plane                 | 0.1s     | 0.1s                |
| node minikube in cluster                   |          |                     |
| minikube                                   |          |                     |
| 🔥  Creating docker container              | 11.4s    | 11.1s               |
| (CPUs=2, Memory=8000MB) ...                |          |                     |
| 🐳  Preparing Kubernetes                   | 14.2s    | 14.0s               |
| v1.20.2 on Docker 20.10.5 ...              |          |                     |
|     ▪ Generating certificates              | 1.4s     | 1.0s                |
| and keys ...                               |          |                     |
|     ▪ Booting up control plane             | 6.2s     | 6.0s                |
| ...                                        |          |                     |
|     ▪ Configuring RBAC rules               | 1.2s     | 1.1s                |
| ...                                        |          |                     |
| 🔎  Verifying Kubernetes                   | 0.1s     | 0.1s                |
| components...                              |          |                     |
|     ▪ Using image                          | 0.5s     | 0.5s                |
| gcr.io/k8s-minikube/storage-provisioner:v5 |          |                     |
| 🌟  Enabled addons:                        | 5.6s     | 5.6s                |
| storage-provisioner,                       |          |                     |
| default-storageclass                       |          |                     |
|                                            | 0.1s     | 0.1s                |
|     ▪ Want kubectl v1.20.2?                |          |                     |
| Try 'minikube kubectl -- get               |          |                     |
| pods -A'                                   |          |                     |
| 🏄  Done! kubectl is now                   |          |                     |
| configured to use "minikube"               |          |                     |
| cluster and "default"                      |          |                     |
| namespace by default                       |          |                     |
+--------------------------------------------+----------+---------------------+
```

</details>


Patch:
diff --git a/cmd/minikube/cmd/config/configure.go b/cmd/minikube/cmd/config/configure.go
index cfa7dc7a7..11bb24830 100644
--- a/cmd/minikube/cmd/config/configure.go
+++ b/cmd/minikube/cmd/config/configure.go
@@ -108,12 +108,11 @@ var addonsConfigureCmd = &cobra.Command{
 			}
 
 			cname := ClusterFlagValue()
-			namespace := "kube-system"
 
 			// Create ECR Secret
 			err := service.CreateSecret(
 				cname,
-				namespace,
+				"kube-system",
 				"registry-creds-ecr",
 				map[string]string{
 					"AWS_ACCESS_KEY_ID":     awsAccessID,
@@ -135,7 +134,7 @@ var addonsConfigureCmd = &cobra.Command{
 			// Create GCR Secret
 			err = service.CreateSecret(
 				cname,
-				namespace,
+				"kube-system",
 				"registry-creds-gcr",
 				map[string]string{
 					"application_default_credentials.json": gcrApplicationDefaultCredentials,
@@ -154,7 +153,7 @@ var addonsConfigureCmd = &cobra.Command{
 			// Create Docker Secret
 			err = service.CreateSecret(
 				cname,
-				namespace,
+				"kube-system",
 				"registry-creds-dpr",
 				map[string]string{
 					"DOCKER_PRIVATE_REGISTRY_SERVER":   dockerServer,
@@ -174,7 +173,7 @@ var addonsConfigureCmd = &cobra.Command{
 			// Create Azure Container Registry Secret
 			err = service.CreateSecret(
 				cname,
-				namespace,
+				"kube-system",
 				"registry-creds-acr",
 				map[string]string{
 					"ACR_URL":       acrURL,
diff --git a/go.mod b/go.mod
index f89067c4e..dcd7e4998 100644
--- a/go.mod
+++ b/go.mod
@@ -67,7 +67,7 @@ require (
 	github.com/pmezard/go-difflib v1.0.0
 	github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect
 	github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect
-	github.com/shirou/gopsutil/v3 v3.21.3
+	github.com/shirou/gopsutil/v3 v3.21.2
 	github.com/spf13/cobra v1.1.3
 	github.com/spf13/pflag v1.0.5
 	github.com/spf13/viper v1.7.1
diff --git a/go.sum b/go.sum
index e9b224a57..81dc14aea 100644
--- a/go.sum
+++ b/go.sum
@@ -890,8 +890,8 @@ github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
 github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
-github.com/shirou/gopsutil/v3 v3.21.3 h1:wgcdAHZS2H6qy4JFewVTtqfiYxFzCeEJod/mLztdPG8=
-github.com/shirou/gopsutil/v3 v3.21.3/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw=
+github.com/shirou/gopsutil/v3 v3.21.2 h1:fIOk3hyqV1oGKogfGNjUZa0lUbtlkx3+ZT0IoJth2uM=
+github.com/shirou/gopsutil/v3 v3.21.2/go.mod h1:ghfMypLDrFSWN2c9cDYFLHyynQ+QUht0cv/18ZqVczw=
 github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
diff --git a/pkg/drivers/kic/oci/types.go b/pkg/drivers/kic/oci/types.go
index 6b97fe36c..b21da438e 100644
--- a/pkg/drivers/kic/oci/types.go
+++ b/pkg/drivers/kic/oci/types.go
@@ -186,7 +186,7 @@ const (
 	MountPropagationBidirectional MountPropagation = 2
 )
 
-// MountPropagationValueToName is a map of valid MountPropagation values to
+// MountPropagationValueToName is a map of valid MountPropogation values to
 // their string names
 var MountPropagationValueToName = map[MountPropagation]string{
 	MountPropagationNone:            "None",
@@ -194,7 +194,7 @@ var MountPropagationValueToName = map[MountPropagation]string{
 	MountPropagationBidirectional:   "Bidirectional",
 }
 
-// MountPropagationNameToValue is a map of valid MountPropagation names to
+// MountPropagationNameToValue is a map of valid MountPropogation names to
 // their values
 var MountPropagationNameToValue = map[string]MountPropagation{
 	"None":            MountPropagationNone,
diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go
index 7bc9efd04..8690fe20d 100644
--- a/pkg/minikube/constants/constants.go
+++ b/pkg/minikube/constants/constants.go
@@ -29,10 +29,10 @@ import (
 const (
 	// DefaultKubernetesVersion is the default Kubernetes version
 	// dont update till #10545 is solved
-	DefaultKubernetesVersion = "v1.20.5"
+	DefaultKubernetesVersion = "v1.20.2"
 	// NewestKubernetesVersion is the newest Kubernetes version to test against
 	// NOTE: You may need to update coreDNS & etcd versions in pkg/minikube/bootstrapper/images/images.go
-	NewestKubernetesVersion = "v1.21.0-rc.0"
+	NewestKubernetesVersion = "v1.20.5-rc.0"
 	// OldestKubernetesVersion is the oldest Kubernetes version to test against
 	OldestKubernetesVersion = "v1.14.0"
 	// DefaultClusterName is the default nane for the k8s cluster
diff --git a/pkg/minikube/perf/binary.go b/pkg/minikube/perf/binary.go
index 3b85c927c..22fa26583 100644
--- a/pkg/minikube/perf/binary.go
+++ b/pkg/minikube/perf/binary.go
@@ -59,7 +59,7 @@ func NewBinary(b string) (*Binary, error) {
 // Name returns the name of the binary
 func (b *Binary) Name() string {
 	if b.pr != 0 {
-		return fmt.Sprintf("Minikube (PR %d)", b.pr)
+		return fmt.Sprintf("minikube (PR %d)", b.pr)
 	}
 	return filepath.Base(b.path)
 }
diff --git a/pkg/minikube/perf/result.go b/pkg/minikube/perf/result.go
index fdfb41cae..1cb44e87e 100644
--- a/pkg/minikube/perf/result.go
+++ b/pkg/minikube/perf/result.go
@@ -16,6 +16,10 @@ limitations under the License.
 
 package perf
 
+type resultWrapper struct {
+	results map[string][]*result
+}
+
 type result struct {
 	logs      []string
 	timedLogs map[string]float64
diff --git a/pkg/minikube/perf/result_manager.go b/pkg/minikube/perf/result_manager.go
index 06f3a71ba..e28da835e 100644
--- a/pkg/minikube/perf/result_manager.go
+++ b/pkg/minikube/perf/result_manager.go
@@ -25,27 +25,33 @@ import (
 )
 
 type resultManager struct {
-	results map[*Binary][]*result
+	results map[*Binary]resultWrapper
 }
 
 func newResultManager() *resultManager {
 	return &resultManager{
-		results: map[*Binary][]*result{},
+		results: map[*Binary]resultWrapper{},
 	}
 }
 
-func (rm *resultManager) addResult(binary *Binary, r *result) {
-	_, ok := rm.results[binary]
+func (rm *resultManager) addResult(binary *Binary, test string, r result) {
+	a, ok := rm.results[binary]
 	if !ok {
-		rm.results[binary] = []*result{r}
+		r := map[string][]*result{test: []*result{&r}}
+		rm.results[binary] = resultWrapper{r}
 		return
 	}
-	rm.results[binary] = append(rm.results[binary], r)
+	b, ok := a.results[test]
+	if !ok {
+		a.results[test] = []*result{&r}
+		return
+	}
+	a.results[test] = append(b, &r)
 }
 
-func (rm *resultManager) totalTimes(binary *Binary) []float64 {
+func (rm *resultManager) totalTimes(binary *Binary, t string) []float64 {
 	var totals []float64
-	results, ok := rm.results[binary]
+	results, ok := rm.results[binary].results[t]
 	if !ok {
 		return nil
 	}
@@ -59,20 +65,18 @@ func (rm *resultManager) totalTimes(binary *Binary) []float64 {
 	return totals
 }
 
-func (rm *resultManager) averageTime(binary *Binary) float64 {
-	times := rm.totalTimes(binary)
-	return average(times)
-}
-
 func (rm *resultManager) summarizeResults(binaries []*Binary) {
 	// print total and average times
 	for _, b := range binaries {
-		fmt.Printf("Times for %s: ", b.Name())
-		for _, tt := range rm.totalTimes(b) {
-			fmt.Printf("%.1fs ", tt)
+		for t := range rm.results[b].results {
+			fmt.Printf("Times for %s %s: ", b.Name(), t)
+			totalTimes := rm.totalTimes(b, t)
+			for _, tt := range totalTimes {
+				fmt.Printf("%.1fs ", tt)
+			}
+			fmt.Println()
+			fmt.Printf("Average time for %s %s: %.1fs\n\n", b.Name(), t, average(totalTimes))
 		}
-		fmt.Println()
-		fmt.Printf("Average time for %s: %.1fs\n\n", b.Name(), rm.averageTime(b))
 	}
 
 	// print out summary per log
@@ -81,7 +85,7 @@ func (rm *resultManager) summarizeResults(binaries []*Binary) {
 
 func (rm *resultManager) summarizeTimesPerLog(binaries []*Binary) {
 	results := rm.results[binaries[0]]
-	logs := results[0].logs
+	logs := results.results["start"][0].logs
 
 	table := make([][]string, len(logs))
 	for i := range table {
@@ -94,7 +98,7 @@ func (rm *resultManager) summarizeTimesPerLog(binaries []*Binary) {
 
 	for i, b := range binaries {
 		results := rm.results[b]
-		averageTimeForLog := averageTimePerLog(results)
+		averageTimeForLog := averageTimePerLog(results.results["start"])
 		for log, time := range averageTimeForLog {
 			index := indexForLog(logs, log)
 			if index == -1 {
diff --git a/pkg/minikube/perf/start.go b/pkg/minikube/perf/start.go
index a694b98ee..af7bdcb96 100644
--- a/pkg/minikube/perf/start.go
+++ b/pkg/minikube/perf/start.go
@@ -65,13 +65,13 @@ func collectResults(ctx context.Context, binaries []*Binary, driver string) (*re
 			if err != nil {
 				return nil, errors.Wrapf(err, "timing run %d with %s", run, binary.Name())
 			}
-			rm.addResult(binary, r)
+			rm.addResult(binary, "start", *r)
 			if runtime.GOOS != "darwin" {
 				r, err = timeEnableIngress(ctx, binary)
 				if err != nil {
 					return nil, errors.Wrapf(err, "timing run %d with %s", run, binary.Name())
 				}
-				rm.addResult(binary, r)
+				rm.addResult(binary, "ingress", *r)
 			}
 			deleteCmd := exec.CommandContext(ctx, binary.path, "delete")
 			if err := deleteCmd.Run(); err != nil {
diff --git a/pkg/network/network.go b/pkg/network/network.go
index 13e34594f..e8987ae9e 100644
--- a/pkg/network/network.go
+++ b/pkg/network/network.go
@@ -235,13 +235,13 @@ func FreeSubnet(startSubnet string, step, tries int) (*Parameters, error) {
 // uses sync.Map to manage reservations thread-safe
 func reserveSubnet(subnet string, period time.Duration) bool {
 	// put 'zero' reservation{} Map value for subnet Map key
-	// to block other processes from concurrently changing this subnet
+	// to block other processes from concurently changing this subnet
 	zero := reservation{}
 	r, loaded := reservedSubnets.LoadOrStore(subnet, zero)
 	// check if there was previously issued reservation
 	if loaded {
 		// back off if previous reservation was already set to 'zero'
-		// as then other process is already managing this subnet concurrently
+		// as then other process is already managing this subnet concurently
 		if r == zero {
 			klog.Infof("backing off reserving subnet %s (other process is managing it!): %+v", subnet, &reservedSubnets)
 			return false
diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md
index 4bebb6845..9745c1e45 100644
--- a/site/content/en/docs/commands/start.md
+++ b/site/content/en/docs/commands/start.md
@@ -66,7 +66,7 @@ minikube start [flags]
       --interactive                       Allow user prompts for more information (default true)
       --iso-url strings                   Locations to fetch the minikube ISO from. (default [https://storage.googleapis.com/minikube/iso/minikube-v1.19.0.iso,https://github.com/kubernetes/minikube/releases/download/v1.19.0/minikube-v1.19.0.iso,https://kubernetes.oss-cn-hangzhou.aliyuncs.com/minikube/iso/minikube-v1.19.0.iso])
       --keep-context                      This will keep the existing kubectl context and will create a minikube context.
-      --kubernetes-version string         The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.20.5, 'latest' for v1.21.0-rc.0). Defaults to 'stable'.
+      --kubernetes-version string         The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.20.2, 'latest' for v1.20.5-rc.0). Defaults to 'stable'.
       --kvm-gpu                           Enable experimental NVIDIA GPU support in minikube
       --kvm-hidden                        Hide the hypervisor signature from the guest in minikube (kvm2 driver only)
       --kvm-network string                The KVM default network name. (kvm2 driver only) (default "default")


Test patch:
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd-api-port.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd-api-port.yaml
deleted file mode 100644
index 55c44fdd0..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd-api-port.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 12345
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /run/containerd/containerd.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:12345
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd-pod-network-cidr.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd-pod-network-cidr.yaml
deleted file mode 100644
index 9ded8f814..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd-pod-network-cidr.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /run/containerd/containerd.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "192.168.32.0/20"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "192.168.32.0/20"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd.yaml
deleted file mode 100644
index 66b51a196..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/containerd.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /run/containerd/containerd.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/crio-options-gates.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/crio-options-gates.yaml
deleted file mode 100644
index cefcc66ce..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/crio-options-gates.yaml
+++ /dev/null
@@ -1,75 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /var/run/crio/crio.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-    fail-no-swap: "true"
-    feature-gates: "a=b"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    feature-gates: "a=b"
-    kube-api-burst: "32"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    feature-gates: "a=b"
-    leader-elect: "false"
-    scheduler-name: "mini-scheduler"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
-mode: "iptables"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/crio.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/crio.yaml
deleted file mode 100644
index c3298630d..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/crio.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /var/run/crio/crio.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/default.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/default.yaml
deleted file mode 100644
index 11fe363b3..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/default.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /var/run/dockershim.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/dns.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/dns.yaml
deleted file mode 100644
index 5777bbe9f..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/dns.yaml
+++ /dev/null
@@ -1,68 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /var/run/dockershim.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: minikube.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "minikube.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/image-repository.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/image-repository.yaml
deleted file mode 100644
index 1ee943b0f..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/image-repository.yaml
+++ /dev/null
@@ -1,69 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /var/run/dockershim.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-imageRepository: test/repo
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/options.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/options.yaml
deleted file mode 100644
index e519a13ec..000000000
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.21/options.yaml
+++ /dev/null
@@ -1,72 +0,0 @@
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: 1.1.1.1
-  bindPort: 8443
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: /var/run/dockershim.sock
-  name: "mk"
-  kubeletExtraArgs:
-    node-ip: 1.1.1.1
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta2
-kind: ClusterConfiguration
-apiServer:
-  certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
-  extraArgs:
-    enable-admission-plugins: "NamespaceLifecycle,LimitRanger,ServiceAccount,DefaultStorageClass,DefaultTolerationSeconds,NodeRestriction,MutatingAdmissionWebhook,ValidatingAdmissionWebhook,ResourceQuota"
-    fail-no-swap: "true"
-controllerManager:
-  extraArgs:
-    allocate-node-cidrs: "true"
-    kube-api-burst: "32"
-    leader-elect: "false"
-scheduler:
-  extraArgs:
-    leader-elect: "false"
-    scheduler-name: "mini-scheduler"
-certificatesDir: /var/lib/minikube/certs
-clusterName: mk
-controlPlaneEndpoint: control-plane.minikube.internal:8443
-dns:
-  type: CoreDNS
-etcd:
-  local:
-    dataDir: /var/lib/minikube/etcd
-    extraArgs:
-      proxy-refresh-interval: "70000"
-kubernetesVersion: v1.21.0-rc.0
-networking:
-  dnsDomain: cluster.local
-  podSubnet: "10.244.0.0/16"
-  serviceSubnet: 10.96.0.0/12
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: /var/lib/minikube/certs/ca.crt
-cgroupDriver: systemd
-clusterDomain: "cluster.local"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: /etc/kubernetes/manifests
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "10.244.0.0/16"
-metricsBindAddress: 0.0.0.0:10249
-mode: "iptables"
diff --git a/pkg/minikube/perf/binary_test.go b/pkg/minikube/perf/binary_test.go
index 8a6c651f6..d6e270b3c 100644
--- a/pkg/minikube/perf/binary_test.go
+++ b/pkg/minikube/perf/binary_test.go
@@ -31,7 +31,7 @@ func TestBinaryName(t *testing.T) {
 			binary:   Binary{path: "foo", pr: 0},
 		},
 		{
-			expected: "Minikube (PR 1)",
+			expected: "minikube (PR 1)",
 			binary:   Binary{path: "bar", pr: 1},
 		},
 	}
diff --git a/test/integration/error_spam_test.go b/test/integration/error_spam_test.go
index fc367b3c6..802b4bc2e 100644
--- a/test/integration/error_spam_test.go
+++ b/test/integration/error_spam_test.go
@@ -39,16 +39,12 @@ var stderrAllow = []string{
 	`cache_images.go:.*error getting status`,
 	// don't care if we can't push images to other profiles which are deleted.
 	`cache_images.go:.*Failed to load profile`,
-	// "! 'docker' driver reported a issue that could affect the performance."
+	// ! 'docker' driver reported a issue that could affect the performance."
 	`docker.*issue.*performance`,
 	// "* Suggestion: enable overlayfs kernel module on your Linux"
 	`Suggestion.*overlayfs`,
-	// "! docker is currently using the btrfs storage driver, consider switching to overlay2 for better performance"
-	`docker.*btrfs storage driver`,
 	// jenkins VMs (debian 9) cgoups don't allow setting memory
 	`Your cgroup does not allow setting memory.`,
-	// progress bar output
-	`    > .*`,
 }
 
 // stderrAllowRe combines rootCauses into a single regex
@@ -65,15 +61,8 @@ func TestErrorSpam(t *testing.T) {
 	ctx, cancel := context.WithTimeout(context.Background(), Minutes(25))
 	defer CleanupWithLogs(t, profile, cancel)
 
-	logDir := filepath.Join(os.TempDir(), profile)
-	if err := os.MkdirAll(logDir, 0755); err != nil {
-		t.Fatalf("Unable to make logDir %s: %v", logDir, err)
-	}
-	defer os.RemoveAll(logDir)
-
 	// This should likely use multi-node once it's ready
-	// use `--log_dir` flag to run isolated and avoid race condition - ie, failing to clean up (locked) log files created by other concurently-run tests, or counting them in results
-	args := append([]string{"start", "-p", profile, "-n=1", "--memory=2250", "--wait=false", fmt.Sprintf("--log_dir=%s", logDir)}, StartArgs()...)
+	args := append([]string{"start", "-p", profile, "-n=1", "--memory=2250", "--wait=false"}, StartArgs()...)
 
 	rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
 	if err != nil {
@@ -127,8 +116,8 @@ func TestErrorSpam(t *testing.T) {
 	}{
 		{
 			command:          "start",
-			args:             []string{"--dry-run"},
-			runCount:         175, // calling this 175 times should create 2 files with 1 greater than 1M
+			args:             []string{"--dry-run", "--log_dir", os.TempDir()},
+			runCount:         120, // calling this 120 times should create 2 files with 1 greater than 1M
 			expectedLogFiles: 2,
 		},
 		{
@@ -152,46 +141,38 @@ func TestErrorSpam(t *testing.T) {
 
 	for _, test := range logTests {
 		t.Run(test.command, func(t *testing.T) {
-			args := []string{test.command, "-p", profile, "--log_dir", logDir}
+			args := []string{test.command, "-p", profile}
 			args = append(args, test.args...)
-
 			// before starting the test, ensure no other logs from the current command are written
-			logFiles, err := filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", test.command)))
+			logFiles, err := getLogFiles(test.command)
 			if err != nil {
-				t.Errorf("failed to get old log files for command %s : %v", test.command, err)
+				t.Errorf("failed to find tmp log files: command %s : %v", test.command, err)
 			}
 			cleanupLogFiles(t, logFiles)
-
 			// run command runCount times
 			for i := 0; i < test.runCount; i++ {
 				rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
 				if err != nil {
-					t.Errorf("%q failed: %v", rr.Command(), err)
+					t.Fatalf("%q failed: %v", rr.Command(), err)
 				}
 			}
-
 			// get log files generated above
-			logFiles, err = filepath.Glob(filepath.Join(logDir, fmt.Sprintf("minikube_%s*", test.command)))
+			logFiles, err = getLogFiles(test.command)
 			if err != nil {
-				t.Errorf("failed to get new log files for command %s : %v", test.command, err)
+				t.Errorf("failed to find tmp log files: command %s : %v", test.command, err)
 			}
-
+			// cleanup generated logfiles
+			defer cleanupLogFiles(t, logFiles)
 			// if not the expected number of files, throw err
 			if len(logFiles) != test.expectedLogFiles {
 				t.Errorf("failed to find expected number of log files: cmd %s: expected: %d got %d", test.command, test.expectedLogFiles, len(logFiles))
 			}
-
 			// if more than 1 logfile is expected, only one file should be less than 1M
 			if test.expectedLogFiles > 1 {
 				foundSmall := false
-				var maxSize int64 = 1024 * 1024 // 1M
+				maxSize := 1024 * 1024 // 1M
 				for _, logFile := range logFiles {
-					finfo, err := os.Stat(logFile)
-					if err != nil {
-						t.Logf("logfile %q for command %q not found:", logFile, test.command)
-						continue
-					}
-					isSmall := finfo.Size() < maxSize
+					isSmall := int(logFile.Size()) < maxSize
 					if isSmall && !foundSmall {
 						foundSmall = true
 					} else if isSmall && foundSmall {
@@ -204,12 +185,25 @@ func TestErrorSpam(t *testing.T) {
 	}
 }
 
+// getLogFiles returns logfiles corresponding to cmd
+func getLogFiles(cmdName string) ([]os.FileInfo, error) {
+	var logFiles []os.FileInfo
+	err := filepath.Walk(os.TempDir(), func(path string, info os.FileInfo, err error) error {
+		if strings.Contains(info.Name(), fmt.Sprintf("minikube_%s", cmdName)) {
+			logFiles = append(logFiles, info)
+		}
+		return nil
+	})
+	return logFiles, err
+}
+
 // cleanupLogFiles removes logfiles generated during testing
-func cleanupLogFiles(t *testing.T, logFiles []string) {
-	t.Logf("Cleaning up %d logfile(s) ...", len(logFiles))
+func cleanupLogFiles(t *testing.T, logFiles []os.FileInfo) {
 	for _, logFile := range logFiles {
-		if err := os.Remove(logFile); err != nil {
-			t.Logf("failed to cleanup log file: %s : %v", logFile, err)
+		logFilePath := filepath.Join(os.TempDir(), logFile.Name())
+		t.Logf("Cleaning up logfile %s ...", logFilePath)
+		if err := os.Remove(logFilePath); err != nil {
+			t.Errorf("failed to cleanup log file: %s : %v", logFilePath, err)
 		}
 	}
 }
diff --git a/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml b/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml
index f23beb073..f7b48ef86 100644
--- a/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml
+++ b/test/integration/testdata/multinodes/multinode-pod-dns-test.yaml
@@ -19,7 +19,7 @@ spec:
         # flaky nslookup in busybox versions newer than 1.28:
         # https://github.com/docker-library/busybox/issues/48
         # note: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3
-        # has similar issues (ie, resolves but returns exit code 1)
+        # has similar issues (ie, resolves but returns exit 1)
         image: busybox:1.28
         command:
           - sleep