Repository: kubernetes/minikube
Pull request #13499 (2022-01-26 23:07:52)

preloads: Add option to upload arm64 preloads
Since the addition of structured preloads the upload process for arm64 preloads is more advanced. I wrote a simple func in the existing `preload-tools` binary that will upload the preloads to the correct folders.


Patch:
diff --git a/hack/preload-images/preload_images.go b/hack/preload-images/preload_images.go
index 3f340cdce..e119237ab 100644
--- a/hack/preload-images/preload_images.go
+++ b/hack/preload-images/preload_images.go
@@ -21,6 +21,7 @@ import (
 	"encoding/json"
 	"flag"
 	"fmt"
+	"log"
 	"os"
 	"os/exec"
 	"runtime/debug"
@@ -47,6 +48,8 @@ var (
 	noUpload            = flag.Bool("no-upload", false, "Do not upload tarballs to GCS")
 	force               = flag.Bool("force", false, "Generate the preload tarball even if it's already exists")
 	limit               = flag.Int("limit", 0, "Limit the number of tarballs to generate")
+	armUpload           = flag.Bool("arm-upload", false, "Upload the arm64 preload tarballs to GCS")
+	armPreloadsDir      = flag.String("arm-preloads-dir", "artifacts", "Directory containing the arm64 preload tarballs")
 )
 
 type preloadCfg struct {
@@ -61,6 +64,13 @@ func (p preloadCfg) String() string {
 func main() {
 	flag.Parse()
 
+	if *armUpload {
+		if err := uploadArmTarballs(*armPreloadsDir); err != nil {
+			log.Fatal(err)
+		}
+		return
+	}
+
 	// used by pkg/minikube/download.PreloadExists()
 	viper.Set("preload", "true")
 
diff --git a/hack/preload-images/upload.go b/hack/preload-images/upload.go
index 1a07e16fa..be9339b5a 100644
--- a/hack/preload-images/upload.go
+++ b/hack/preload-images/upload.go
@@ -20,6 +20,7 @@ import (
 	"fmt"
 	"os/exec"
 	"path"
+	"strings"
 
 	"github.com/pkg/errors"
 	"k8s.io/minikube/pkg/minikube/download"
@@ -36,3 +37,38 @@ func uploadTarball(tarballFilename, k8sVer string) error {
 	}
 	return nil
 }
+
+func uploadArmTarballs(preloadsDir string) error {
+	b, err := exec.Command("ls", preloadsDir).CombinedOutput()
+	if err != nil {
+		return fmt.Errorf("failed to read files: %v\n%s", err, string(b))
+	}
+	files := strings.Split(string(b), "\n")
+	if len(files) == 0 {
+		return fmt.Errorf("no preload files found")
+	}
+	// remove trailing whitespace entry
+	files = files[:len(files)-1]
+	for _, file := range files {
+		preloadVersion, k8sVersion := getVersionsFromFilename(file)
+		hostPath := path.Join(preloadsDir, file)
+		gcsDest := fmt.Sprintf("gs://%s/%s/%s/", download.PreloadBucket, preloadVersion, k8sVersion)
+		cmd := exec.Command("gsutil", "cp", hostPath, gcsDest)
+		fmt.Printf("Running: %v\n", cmd.Args)
+		if output, err := cmd.CombinedOutput(); err != nil {
+			return errors.Wrapf(err, "uploading %s to GCS bucket: %v\n%s", hostPath, err, string(output))
+		}
+	}
+	return nil
+}
+
+func getVersionsFromFilename(filename string) (string, string) {
+	parts := strings.Split(filename, "-")
+	preloadVersion := parts[3]
+	k8sVersion := parts[4]
+	// this check is for "-rc" and "-beta" versions that would otherwise be stripped off
+	if len(parts) == 9 {
+		k8sVersion += fmt.Sprintf("-%s", parts[5])
+	}
+	return preloadVersion, k8sVersion
+}
diff --git a/hack/update/kubernetes_version/templates/v1beta3/containerd-api-port.yaml b/hack/update/kubernetes_version/templates/v1beta2/containerd-api-port.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/containerd-api-port.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/containerd-api-port.yaml
index 8ba73ba26..c946a5327 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/containerd-api-port.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/containerd-api-port.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,12 +33,14 @@ scheduler:
 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/containerd-pod-network-cidr.yaml b/hack/update/kubernetes_version/templates/v1beta2/containerd-pod-network-cidr.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/containerd-pod-network-cidr.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/containerd-pod-network-cidr.yaml
index 329588b9a..e1f0f3f32 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/containerd-pod-network-cidr.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/containerd-pod-network-cidr.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,12 +33,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "192.168.32.0/20"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/containerd.yaml b/hack/update/kubernetes_version/templates/v1beta2/containerd.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/containerd.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/containerd.yaml
index b9598d7fe..9e1fd6d74 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/containerd.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/containerd.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,12 +33,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/crio-options-gates.yaml b/hack/update/kubernetes_version/templates/v1beta2/crio-options-gates.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/crio-options-gates.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/crio-options-gates.yaml
index 6b220ff96..366300727 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/crio-options-gates.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/crio-options-gates.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -39,12 +39,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/crio.yaml b/hack/update/kubernetes_version/templates/v1beta2/crio.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/crio.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/crio.yaml
index f98685977..bc7a440b6 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/crio.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/crio.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,12 +33,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/default.yaml b/hack/update/kubernetes_version/templates/v1beta2/default.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/default.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/default.yaml
index 05a6d7598..dc484b589 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/default.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/default.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,12 +33,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/dns.yaml b/hack/update/kubernetes_version/templates/v1beta2/dns.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/dns.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/dns.yaml
index 4343f0882..7891a251e 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/dns.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/dns.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,12 +33,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: minikube.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/image-repository.yaml b/hack/update/kubernetes_version/templates/v1beta2/image-repository.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/image-repository.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/image-repository.yaml
index 25b3e4488..39d7d628f 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/image-repository.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/image-repository.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 imageRepository: test/repo
 apiServer:
@@ -34,12 +34,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/templates/v1beta3/options.yaml b/hack/update/kubernetes_version/templates/v1beta2/options.yaml
similarity index 94%
rename from hack/update/kubernetes_version/templates/v1beta3/options.yaml
rename to hack/update/kubernetes_version/templates/v1beta2/options.yaml
index b44de0a03..be5e8249e 100644
--- a/hack/update/kubernetes_version/templates/v1beta3/options.yaml
+++ b/hack/update/kubernetes_version/templates/v1beta2/options.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -36,12 +36,14 @@ 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.23.0
+kubernetesVersion: v1.19.0
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/hack/update/kubernetes_version/update_kubernetes_version.go b/hack/update/kubernetes_version/update_kubernetes_version.go
index 1751e35dc..7eeef23a6 100644
--- a/hack/update/kubernetes_version/update_kubernetes_version.go
+++ b/hack/update/kubernetes_version/update_kubernetes_version.go
@@ -57,55 +57,55 @@ var (
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/containerd-api-port.yaml": {
-			Content: update.Loadf("templates/v1beta3/containerd-api-port.yaml"),
+			Content: update.Loadf("templates/v1beta2/containerd-api-port.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/containerd-pod-network-cidr.yaml": {
-			Content: update.Loadf("templates/v1beta3/containerd-pod-network-cidr.yaml"),
+			Content: update.Loadf("templates/v1beta2/containerd-pod-network-cidr.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/containerd.yaml": {
-			Content: update.Loadf("templates/v1beta3/containerd.yaml"),
+			Content: update.Loadf("templates/v1beta2/containerd.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/crio-options-gates.yaml": {
-			Content: update.Loadf("templates/v1beta3/crio-options-gates.yaml"),
+			Content: update.Loadf("templates/v1beta2/crio-options-gates.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/crio.yaml": {
-			Content: update.Loadf("templates/v1beta3/crio.yaml"),
+			Content: update.Loadf("templates/v1beta2/crio.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/default.yaml": {
-			Content: update.Loadf("templates/v1beta3/default.yaml"),
+			Content: update.Loadf("templates/v1beta2/default.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/dns.yaml": {
-			Content: update.Loadf("templates/v1beta3/dns.yaml"),
+			Content: update.Loadf("templates/v1beta2/dns.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/image-repository.yaml": {
-			Content: update.Loadf("templates/v1beta3/image-repository.yaml"),
+			Content: update.Loadf("templates/v1beta2/image-repository.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
 		},
 		"pkg/minikube/bootstrapper/bsutil/testdata/{{.LatestVersionMM}}/options.yaml": {
-			Content: update.Loadf("templates/v1beta3/options.yaml"),
+			Content: update.Loadf("templates/v1beta2/options.yaml"),
 			Replace: map[string]string{
 				`kubernetesVersion:.*`: `kubernetesVersion: {{.LatestVersionP0}}`,
 			},
diff --git a/pkg/minikube/bootstrapper/bsutil/ktmpl/v1beta3.go b/pkg/minikube/bootstrapper/bsutil/ktmpl/v1beta3.go
deleted file mode 100644
index 403060941..000000000
--- a/pkg/minikube/bootstrapper/bsutil/ktmpl/v1beta3.go
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
-Copyright 2022 The Kubernetes Authors All rights reserved.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package ktmpl
-
-import "text/template"
-
-// V1Beta3 is kubeadm config template for Kubernetes v1.23.0+
-var V1Beta3 = template.Must(template.New("configTmpl-v1beta3").Funcs(template.FuncMap{
-	"printMapInOrder": printMapInOrder,
-}).Parse(`apiVersion: kubeadm.k8s.io/v1beta3
-kind: InitConfiguration
-localAPIEndpoint:
-  advertiseAddress: {{.AdvertiseAddress}}
-  bindPort: {{.APIServerPort}}
-bootstrapTokens:
-  - groups:
-      - system:bootstrappers:kubeadm:default-node-token
-    ttl: 24h0m0s
-    usages:
-      - signing
-      - authentication
-nodeRegistration:
-  criSocket: {{if .CRISocket}}{{.CRISocket}}{{else}}/var/run/dockershim.sock{{end}}
-  name: "{{.NodeName}}"
-  kubeletExtraArgs:
-    node-ip: {{.NodeIP}}
-  taints: []
----
-apiVersion: kubeadm.k8s.io/v1beta3
-kind: ClusterConfiguration
-{{ if .ImageRepository}}imageRepository: {{.ImageRepository}}
-{{end}}{{range .ComponentOptions}}{{.Component}}:
-{{- range $k, $v := .Pairs }}
-  {{$k}}: {{$v}}
-{{- end}}
-  extraArgs:
-{{- range $i, $val := printMapInOrder .ExtraArgs ": " }}
-    {{$val}}
-{{- end}}
-{{end -}}
-{{if .FeatureArgs}}featureGates:
-{{range $i, $val := .FeatureArgs}}{{$i}}: {{$val}}
-{{end -}}{{end -}}
-certificatesDir: {{.CertDir}}
-clusterName: mk
-controlPlaneEndpoint: {{.ControlPlaneAddress}}:{{.APIServerPort}}
-etcd:
-  local:
-    dataDir: {{.EtcdDataDir}}
-    extraArgs:
-      proxy-refresh-interval: "70000"
-{{- range $i, $val := printMapInOrder .EtcdExtraArgs ": " }}
-      {{$val}}
-{{- end}}
-kubernetesVersion: {{.KubernetesVersion}}
-networking:
-  dnsDomain: {{if .DNSDomain}}{{.DNSDomain}}{{else}}cluster.local{{end}}
-  podSubnet: "{{.PodSubnet }}"
-  serviceSubnet: {{.ServiceCIDR}}
----
-apiVersion: kubelet.config.k8s.io/v1beta1
-kind: KubeletConfiguration
-authentication:
-  x509:
-    clientCAFile: {{.ClientCAFile}}
-cgroupDriver: {{.CgroupDriver}}
-clusterDomain: "{{if .DNSDomain}}{{.DNSDomain}}{{else}}cluster.local{{end}}"
-# disable disk resource management by default
-imageGCHighThresholdPercent: 100
-evictionHard:
-  nodefs.available: "0%"
-  nodefs.inodesFree: "0%"
-  imagefs.available: "0%"
-failSwapOn: false
-staticPodPath: {{.StaticPodPath}}
----
-apiVersion: kubeproxy.config.k8s.io/v1alpha1
-kind: KubeProxyConfiguration
-clusterCIDR: "{{.PodSubnet }}"
-metricsBindAddress: 0.0.0.0:10249
-conntrack:
-  maxPerCore: 0
-# Skip setting "net.netfilter.nf_conntrack_tcp_timeout_established"
-  tcpEstablishedTimeout: 0s
-# Skip setting "net.netfilter.nf_conntrack_tcp_timeout_close"
-  tcpCloseWaitTimeout: 0s
-{{- range $i, $val := printMapInOrder .KubeProxyOptions ": " }}
-{{$val}}
-{{- end}}
-`))
diff --git a/pkg/minikube/bootstrapper/bsutil/kubeadm.go b/pkg/minikube/bootstrapper/bsutil/kubeadm.go
index 84e72670b..a77aba598 100644
--- a/pkg/minikube/bootstrapper/bsutil/kubeadm.go
+++ b/pkg/minikube/bootstrapper/bsutil/kubeadm.go
@@ -150,11 +150,6 @@ func GenerateKubeadmYAML(cc config.ClusterConfig, n config.Node, r cruntime.Mana
 	if version.GTE(semver.MustParse("1.17.0")) {
 		configTmpl = ktmpl.V1Beta2
 	}
-
-	// v1beta3 isn't required until v1.23.
-	if version.GTE(semver.MustParse("1.23.0")) {
-		configTmpl = ktmpl.V1Beta3
-	}
 	klog.Infof("kubeadm options: %+v", opts)
 	if err := configTmpl.Execute(&b, opts); err != nil {
 		return nil, err
diff --git a/site/content/en/docs/drivers/docker.md b/site/content/en/docs/drivers/docker.md
index e00b58c76..4dad78879 100644
--- a/site/content/en/docs/drivers/docker.md
+++ b/site/content/en/docs/drivers/docker.md
@@ -9,46 +9,7 @@ aliases:
 
 The Docker driver allows you to install Kubernetes into an existing Docker install. On Linux, this does not require virtualization to be enabled.
 
-{{% tabs %}}
-{{% tab "Standard Docker" %}}
-## Requirements
-
-- [Install Docker](https://hub.docker.com/search?q=&type=edition&offering=community&sort=updated_at&order=desc) 18.09 or higher
-- amd64 or arm64 system.
-- If using WSL complete [these steps]({{<ref "/docs/tutorials/wsl_docker_driver">}}) first
-
-## Usage
-
-Start a cluster using the docker driver:
-
-```shell
-minikube start --driver=docker
-```
-To make docker the default driver:
-
-```shell
-minikube config set driver docker
-```
-{{% /tab %}}
-{{% tab "Rootless Docker" %}}
-## Requirements
-- Docker 20.10 or higher, see https://rootlesscontaine.rs/getting-started/docker/
-- Cgroup v2 delegation, see https://rootlesscontaine.rs/getting-started/common/cgroup2/
-
-## Usage
-
-Start a cluster using the rootless docker driver:
-
-```shell
-dockerd-rootless-setuptool.sh install -f
-docker context use rootless
-
-minikube start --driver=docker --container-runtime=containerd
-```
-
-The `--container-runtime` flag must be set to "containerd" or "cri-o".
-{{% /tab %}}
-{{% /tabs %}}
+{{% readfile file="/docs/drivers/includes/docker_usage.inc" %}}
 
 ## Special features
 
diff --git a/site/content/en/docs/drivers/includes/docker_usage.inc b/site/content/en/docs/drivers/includes/docker_usage.inc
new file mode 100644
index 000000000..1f757080f
--- /dev/null
+++ b/site/content/en/docs/drivers/includes/docker_usage.inc
@@ -0,0 +1,39 @@
+## Requirements
+
+- [Install Docker](https://hub.docker.com/search?q=&type=edition&offering=community&sort=updated_at&order=desc) 18.09 or higher
+- amd64 or arm64 system.
+
+## Usage
+
+Start a cluster using the docker driver:
+
+```shell
+minikube start --driver=docker
+```
+To make docker the default driver:
+
+```shell
+minikube config set driver docker
+```
+
+## Rootless Docker
+### Requirements
+- Docker 20.10 or higher, see https://rootlesscontaine.rs/getting-started/docker/
+- Cgroup v2 delegation, see https://rootlesscontaine.rs/getting-started/common/cgroup2/
+
+### Usage
+
+Start a cluster using the rootless docker driver:
+
+```shell
+dockerd-rootless-setuptool.sh install -f
+docker context use rootless
+
+minikube start --driver=docker --container-runtime=containerd
+```
+
+The `--container-runtime` flag must be set to "containerd" or "cri-o".
+
+The restrictions of rootless `kind` apply to minikube with rootless docker as well.
+
+See https://kind.sigs.k8s.io/docs/user/rootless/ .
diff --git a/site/content/en/docs/handbook/registry.md b/site/content/en/docs/handbook/registry.md
index 0aefbc211..a42d1595e 100644
--- a/site/content/en/docs/handbook/registry.md
+++ b/site/content/en/docs/handbook/registry.md
@@ -29,8 +29,6 @@ registry-creds was successfully configured
 $ minikube addons enable registry-creds
 ```
 
-**Google Artifact Registry**: minikube has an addon, `gcp-auth`, which maps credentials into minikube to support pulling from Google Artifact Registry. Run `minikube addons enable gcp-auth` to configure the authentication. You can refer to the full docs [here](https://minikube.sigs.k8s.io/docs/handbook/addons/gcp-auth/).
-
 For additional information on private container registries, see [this page](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/).
 
 We recommend you use _ImagePullSecrets_, but if you would like to configure access on the minikube VM you can place the `.dockercfg` in the `/home/docker` directory or the `config.json` in the `/var/lib/kubelet` directory. Make sure to restart your kubelet (for kubeadm) process with `sudo systemctl restart kubelet`.
diff --git a/site/content/en/docs/tutorials/wsl_docker_driver.md b/site/content/en/docs/tutorials/wsl_docker_driver.md
deleted file mode 100644
index c751c9973..000000000
--- a/site/content/en/docs/tutorials/wsl_docker_driver.md
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "Setting Up WSL 2 & Docker Desktop"                                 
-linkTitle: "Setting Up WSL 2 & Docker Desktop"
-weight: 1
-date: 2022-01-12
----
-
-## Overview
-
-- This guide will show you how to setup WSL 2 and Docker Desktop.
-
-
-## Steps
-Microsoft and Docker have in-depth guides for both, just follow along for a successful setup!
-
-1. [Install WSL](https://docs.microsoft.com/en-us/windows/wsl/install)
-2. Install and setup [Docker Desktop for Windows](https://docs.docker.com/desktop/windows/wsl/#download)
diff --git a/site/static/js/tabs.js b/site/static/js/tabs.js
index b7e4bd76b..56ab6ca9b 100644
--- a/site/static/js/tabs.js
+++ b/site/static/js/tabs.js
@@ -3,8 +3,8 @@ function initTabs() {
   try{
     $('.tab-content').find('.tab-pane').each(function(idx, item) {
       var navTabs = $(this).closest('.code-tabs').find('.nav-tabs'),
-          title = escape($(this).attr('title')).replace(/%20/g, ' '),
-          os = escape($(this).attr('os') || '');
+          title = escape($(this).attr('title')),
+          os = escape($(this).attr('os'));
       navTabs.append('<li class="nav-tab '+os+'"><a href="#" class="nav-tab">'+title+'</a></li>');
     });
 
diff --git a/translations/ja.json b/translations/ja.json
index 81f969678..dc380fe4c 100644
--- a/translations/ja.json
+++ b/translations/ja.json
@@ -399,56 +399,61 @@
 	"Mount type:   {{.name}}": "マウントタイプ:   {{.name}}",
 	"Mounting host path {{.sourcePath}} into VM as {{.destinationPath}} ...": "ホストパス {{.sourcePath}} を {{.destinationPath}} として VM 中にマウントしています ...",
 	"Mounts the specified directory into minikube": "minikube に指定されたディレクトリーをマウントします",
-	"Mounts the specified directory into minikube.": "minikube に指定されたディレクトリーをマウントします。",
-	"Multiple errors deleting profiles": "プロファイル削除中に複数のエラーが発生しました",
-	"Multiple minikube profiles were found - ": "複数の minikube プロファイルが見つかりました - ",
-	"NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "ホストオンリーネットワークに使用する NIC タイプ。Am79C970A、Am79C973、82540EM、82543GC、82545EM、virtio のいずれか (virtualbox ドライバーのみ)",
-	"NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "NAT ネットワークに使用する NIC タイプ。Am79C970A、Am79C973、82540EM、82543GC、82545EM、virtio のいずれか (virtualbox ドライバーのみ)",
-	"NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "注意: トンネルにアクセスするにはこのプロセスが存続しなければならないため、このターミナルはクローズしないでください ...",
-	"NOTE: This process must stay alive for the mount to be accessible ...": "注意: マウントにアクセスするにはこのプロセスが存続しなければなりません ...",
-	"Networking and Connectivity Commands:": "ネットワーキングおよび接続性コマンド:",
-	"No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "IP アドレスが提供されていません。--ssh-ip-address 指定を試すか、https://minikube.sigs.k8s.io/docs/drivers/ssh/ を参照してください",
-	"No changes required for the \"{{.context}}\" context": "「{{.context}}」コンテキストに必要な変更がありません",
-	"No minikube profile was found. ": "minikube プロファイルが見つかりませんでした。",
-	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "利用可能なドライバーが検出されませんでした。--driver 指定を試すか、https://minikube.sigs.k8s.io/docs/start/ を参照してください",
-	"No such addon {{.name}}": "{{.name}} というアドオンはありません",
-	"Node {{.name}} failed to start, deleting and trying again.": "{{.name}} ノードは起動に失敗しました (削除、再試行します)。",
-	"Node {{.name}} was successfully deleted.": "{{.name}} ノードは正常に削除されました。",
+	"Mounts the specified directory into minikube.": "",
+	"Multiple errors deleting profiles": "プロフィールを削除中に複数のエラーが発生しました",
+	"Multiple minikube profiles were found -": "複数の minikube のプロフィールが見つかりました",
+	"Multiple minikube profiles were found - ": "",
+	"NIC Type used for host only network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "",
+	"NIC Type used for nat network. One of Am79C970A, Am79C973, 82540EM, 82543GC, 82545EM, or virtio (virtualbox driver only)": "",
+	"NOTE: Please do not close this terminal as this process must stay alive for the tunnel to be accessible ...": "",
+	"NOTE: This process must stay alive for the mount to be accessible ...": "",
+	"Networking and Connectivity Commands:": "ネットワーキング及び接続性コマンド:",
+	"No IP address provided. Try specifying --ssh-ip-address, or see https://minikube.sigs.k8s.io/docs/drivers/ssh/": "",
+	"No changes required for the \"{{.context}}\" context": "",
+	"No minikube profile was found. ": "",
+	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "",
+	"No such addon {{.name}}": "",
+	"Node \"{{.node_name}}\" stopped.": "「{{.node_name}}」ノードが停止しました。",
+	"Node operations": "ノードの運用",
+	"Node {{.name}} failed to start, deleting and trying again.": "",
+	"Node {{.name}} was successfully deleted.": "{{.name}} ノードは削除されました。",
 	"Node {{.nodeName}} does not exist.": "{{.nodeName}} ノードは存在しません。",
-	"None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "アクセス可能な既知リポジトリーはありません。--image-repository フラグを用いた代替イメージリポジトリー指定を検討してください",
-	"None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "ロケーション内でアクセス可能な既知リポジトリーはありません。フォールバックとして {{.image_repository_name}} を使用します。",
-	"Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "通知: このターミナルでは、{{.driver_name}} ドライバーの docker-env が有効になっています:",
-	"Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "通知: このターミナルでは、{{.driver_name}} ドライバーの podman-env が有効になっています:",
+	"None of the known repositories are accessible. Consider specifying an alternative image repository with --image-repository flag": "",
+	"None of the known repositories in your location are accessible. Using {{.image_repository_name}} as fallback.": "使用しているロケーション内で既知のいずれのリポジトリにもアクセスできません。フォールバックとして {{.image_repository_name}} を使用します",
+	"None of the known repositories is accessible. Consider specifying an alternative image repository with --image-repository flag": "既知のいずれのリポジトリにもアクセスできません。--image-repository フラグとともに代替のイメージ リポジトリを指定することを検討してください",
+	"Noticed you have an activated docker-env on {{.driver_name}} driver in this terminal:": "",
+	"Noticed you have an activated podman-env on {{.driver_name}} driver in this terminal:": "",
 	"Number of CPUs allocated to the minikube VM": "minikube VM に割り当てられた CPU の数",
-	"Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "作成して minikube VM に接続する追加ディスク数 (現在、hyperkit と kvm2 ドライバーでのみ実装されています)",
-	"Number of lines back to go within the log": "ログ中で遡る行数",
-	"OS release is {{.pretty_name}}": "OS リリースは {{.pretty_name}} です",
-	"One of 'text', 'yaml' or 'json'.": "'text'、'yaml'、'json' のいずれか。",
-	"One of 'yaml' or 'json'.": "'yaml'、'json' のいずれか。",
-	"Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "アルファベット、数字、ハイフン (-) のみ利用可能です。最小 1 文字、最初の文字はアルファベットか数字です。",
-	"Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "アルファベット、数字、ハイフン (-) のみ利用可能です。最小 2 文字、最初の文字はアルファベットか数字です。",
-	"Open the addons URL with https instead of http": "HTTP の代わりに HTTPS のアドオン URL を開く",
-	"Open the service URL with https instead of http (defaults to \\\"false\\\")": "HTTP の代わりに HTTPS のサービス URL を開く (デフォルトは「false」)",
-	"Opening Kubernetes service  {{.namespace_name}}/{{.service_name}} in default browser...": "デフォルトブラウザーで {{.namespace_name}}/{{.service_name}} Kubernetes サービスを開いています...",
-	"Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "デフォルトブラウザーで {{.namespace_name}}/{{.service_name}} サービスを開いています...",
-	"Opening {{.url}} in your default browser...": "デフォルトブラウザーで {{.url}} を開いています...",
-	"Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "minikube 中で ADDON_NAME アドオンを開きます (例: minikube addons open dashboard)。利用可能なアドオンの一覧表示: minikube addons list ",
-	"Operations on nodes": "ノードの操作",
-	"Options:      {{.options}}": "オプション:   {{.options}}",
-	"Output format. Accepted values: [json]": "出力フォーマット。利用可能な値: [json]",
-	"Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary.  Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion  # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion  # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "指定されたシェル用の minikube シェル補完コマンドを出力 (bash、zsh、fish)\n\n\tbash-completion バイナリーに依存しています。インストールコマンドの例:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion  # bash ユーザー用\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion  # zsh ユーザー用\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # fish ユーザー用\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # bash ユーザー用\n\t\t$ source \u003c(minikube completion zsh) # zsh ユーザー用\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # fish ユーザー用\n\n\tさらに、補完コマンドをファイルに出力して .bashrc 内で source を実行するとよいでしょう\n\n\t注意 (zsh ユーザー): [1] zsh 補完コマンドは zsh バージョン \u003e= 5.2 でのみサポートしています\n\t注意 (fish ユーザー): [2] 詳細はこちらのドキュメントを参照してください https://fishshell.com/docs/current/#tab-completion\n",
-	"Overwrite image even if same image:tag name exists": "同じ image:tag 名が存在していてもイメージを上書きします",
-	"Path to the Dockerfile to use (optional)": "使用する Dockerfile へのパス (任意)",
-	"Pause": "一時停止",
-	"Paused {{.count}} containers": "{{.count}} 個のコンテナーを一時停止しました",
-	"Paused {{.count}} containers in: {{.namespaces}}": "{{.namespaces}} に存在する {{.count}} 個のコンテナーを一時停止しました",
-	"Pausing node {{.name}} ... ": "{{.name}} ノードを一時停止しています ... ",
-	"Please also attach the following file to the GitHub issue:": "GitHub issue に次のファイルも添付してください:",
-	"Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "より大きなディスクサイズでクラスターを作ってください: `minikube start --disk SIZE_MB` ",
-	"Please either authenticate to the registry or use --base-image flag to use a different registry.": "レジストリーに認証するか、--base-image フラグで別のレジストリーを指定するかどちらを行ってください。",
-	"Please enter a value:": "値を入力してください:",
-	"Please free up disk or prune images.": "ディスクを解放するか、イメージを削除してください。",
-	"Please increse Desktop's disk size.": "Desktop のディスクサイズを増やしてください。",
+	"Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)": "",
+	"Number of lines back to go within the log": "",
+	"OS release is {{.pretty_name}}": "OS は {{.pretty_name}} です。",
+	"One of 'text', 'yaml' or 'json'.": "",
+	"One of 'yaml' or 'json'.": "",
+	"Only alphanumeric and dashes '-' are permitted. Minimum 1 character, starting with alphanumeric.": "",
+	"Only alphanumeric and dashes '-' are permitted. Minimum 2 characters, starting with alphanumeric.": "",
+	"Open the addons URL with https instead of http": "",
+	"Open the service URL with https instead of http (defaults to \\\"false\\\")": "",
+	"Opening Kubernetes service  {{.namespace_name}}/{{.service_name}} in default browser...": "",
+	"Opening service {{.namespace_name}}/{{.service_name}} in default browser...": "",
+	"Opening {{.url}} in your default browser...": "",
+	"Opens the addon w/ADDON_NAME within minikube (example: minikube addons open dashboard). For a list of available addons use: minikube addons list ": "",
+	"Operations on nodes": "",
+	"Options:      {{.options}}": "",
+	"Output format. Accepted values: [json]": "",
+	"Outputs minikube shell completion for the given shell (bash, zsh or fish)\n\n\tThis depends on the bash-completion binary.  Example installation instructions:\n\tOS X:\n\t\t$ brew install bash-completion\n\t\t$ source $(brew --prefix)/etc/bash_completion\n\t\t$ minikube completion bash \u003e ~/.minikube-completion  # for bash users\n\t\t$ minikube completion zsh \u003e ~/.minikube-completion  # for zsh users\n\t\t$ source ~/.minikube-completion\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\tUbuntu:\n\t\t$ apt-get install bash-completion\n\t\t$ source /etc/bash_completion\n\t\t$ source \u003c(minikube completion bash) # for bash users\n\t\t$ source \u003c(minikube completion zsh) # for zsh users\n\t\t$ minikube completion fish \u003e ~/.config/fish/completions/minikube.fish # for fish users\n\n\tAdditionally, you may want to output the completion to a file and source in your .bashrc\n\n\tNote for zsh users: [1] zsh completions are only supported in versions of zsh \u003e= 5.2\n\tNote for fish users: [2] please refer to this docs for more details https://fishshell.com/docs/current/#tab-completion\n": "",
+	"Overwrite image even if same image:tag name exists": "",
+	"Path to the Dockerfile to use (optional)": "",
+	"Pause": "",
+	"Paused {{.count}} containers": "",
+	"Paused {{.count}} containers in: {{.namespaces}}": "次のnamespaceに存在する {{.count}} 個のコンテナを停止しました: {{.namespaces}}",
+	"Pausing node {{.name}} ...": "ノード {{.name}} を一時停止しています ...",
+	"Pausing node {{.name}} ... ": "",
+	"Please also attach the following file to the GitHub issue:": "",
+	"Please create a cluster with bigger disk size: `minikube start --disk SIZE_MB` ": "",
+	"Please either authenticate to the registry or use --base-image flag to use a different registry.": "",
+	"Please enter a value:": "",
+	"Please free up disk or prune images.": "",
+	"Please increse Desktop's disk size.": "",
 	"Please install the minikube hyperkit VM driver, or select an alternative --driver": "minikube hyperkit VM ドライバーをインストールするか、--driver で別のドライバーを選択してください",
 	"Please install the minikube kvm2 VM driver, or select an alternative --driver": "minikube kvm2 VM ドライバーをインストールするか、--driver で別のドライバーを選択してください",
 	"Please make sure the service you are looking for is deployed or is in the correct namespace.": "探しているサービスがデプロイされている、あるいは正しいネームスペース中にあることを確認してください。",


Test patch:
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-api-port.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-api-port.yaml
index 8ba73ba26..a26adfa22 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-api-port.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-api-port.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,6 +33,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:12345
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-pod-network-cidr.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-pod-network-cidr.yaml
index 329588b9a..358ce92e0 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-pod-network-cidr.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd-pod-network-cidr.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,6 +33,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd.yaml
index b9598d7fe..35aedf090 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/containerd.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,6 +33,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio-options-gates.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio-options-gates.yaml
index 6b220ff96..3a9b024ed 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio-options-gates.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio-options-gates.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -39,6 +39,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio.yaml
index f98685977..6d7ae1490 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/crio.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,6 +33,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/default.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/default.yaml
index 05a6d7598..c0d85b013 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/default.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/default.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,6 +33,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/dns.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/dns.yaml
index 4343f0882..f4d22f7ff 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/dns.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/dns.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -33,6 +33,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/image-repository.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/image-repository.yaml
index 25b3e4488..69b154b1d 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/image-repository.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/image-repository.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 imageRepository: test/repo
 apiServer:
@@ -34,6 +34,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/options.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/options.yaml
index b44de0a03..e677bac6f 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/options.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.23/options.yaml
@@ -1,4 +1,4 @@
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: InitConfiguration
 localAPIEndpoint:
   advertiseAddress: 1.1.1.1
@@ -17,7 +17,7 @@ nodeRegistration:
     node-ip: 1.1.1.1
   taints: []
 ---
-apiVersion: kubeadm.k8s.io/v1beta3
+apiVersion: kubeadm.k8s.io/v1beta2
 kind: ClusterConfiguration
 apiServer:
   certSANs: ["127.0.0.1", "localhost", "1.1.1.1"]
@@ -36,6 +36,8 @@ scheduler:
 certificatesDir: /var/lib/minikube/certs
 clusterName: mk
 controlPlaneEndpoint: control-plane.minikube.internal:8443
+dns:
+  type: CoreDNS
 etcd:
   local:
     dataDir: /var/lib/minikube/etcd