Repository: kubernetes/minikube
Pull request #16139 (2023-03-23 07:19:18)

Fix: check if addon is enabled before doing validation
Fixes: #15432, #15429, #15431, #15430

```
$ ./out/minikube addons list
|-----------------------------|----------|--------------|--------------------------------|
|         ADDON NAME          | PROFILE  |    STATUS    |           MAINTAINER           |
|-----------------------------|----------|--------------|--------------------------------|
| ambassador                  | minikube | disabled     | 3rd party (Ambassador)         |
| auto-pause                  | minikube | disabled     | Google                         |
| cloud-spanner               | minikube | disabled     | Google                         |
| csi-hostpath-driver         | minikube | disabled     | Kubernetes                     |
| dashboard                   | minikube | disabled     | Kubernetes                     |
| default-storageclass        | minikube | enabled ✅   | Kubernetes                     |
| efk                         | minikube | disabled     | 3rd party (Elastic)            |
| freshpod                    | minikube | disabled     | Google                         |
| gcp-auth                    | minikube | disabled     | Google                         |
| gvisor                      | minikube | disabled     | Google                         |
| headlamp                    | minikube | disabled     | 3rd party (kinvolk.io)         |
| helm-tiller                 | minikube | disabled     | 3rd party (Helm)               |
| inaccel                     | minikube | disabled     | 3rd party (InAccel             |
|                             |          |              | [info@inaccel.com])            |
| ingress                     | minikube | disabled     | Kubernetes                     |
| ingress-dns                 | minikube | disabled     | Google                         |
| istio                       | minikube | disabled     | 3rd party (Istio)              |
| istio-provisioner           | minikube | disabled     | 3rd party (Istio)              |
| kong                        | minikube | disabled     | 3rd party (Kong HQ)            |
| kubevirt                    | minikube | disabled     | 3rd party (KubeVirt)           |
| logviewer                   | minikube | disabled     | 3rd party (unknown)            |
| metallb                     | minikube | disabled     | 3rd party (MetalLB)            |
| metrics-server              | minikube | disabled     | Kubernetes                     |
| nvidia-driver-installer     | minikube | disabled     | Google                         |
| nvidia-gpu-device-plugin    | minikube | disabled     | 3rd party (Nvidia)             |
| olm                         | minikube | disabled     | 3rd party (Operator Framework) |
| pod-security-policy         | minikube | disabled     | 3rd party (unknown)            |
| portainer                   | minikube | disabled     | 3rd party (Portainer.io)       |
| registry                    | minikube | disabled     | Google                         |
| registry-aliases            | minikube | disabled     | 3rd party (unknown)            |
| registry-creds              | minikube | disabled     | 3rd party (UPMC Enterprises)   |
| storage-provisioner         | minikube | enabled ✅   | Google                         |
| storage-provisioner-gluster | minikube | disabled     | 3rd party (Gluster)            |
| volumesnapshots             | minikube | disabled     | Kubernetes                     |
|-----------------------------|----------|--------------|--------------------------------|
```

Before
```
$ minikube addons disable gvisor

❌  Exiting due to MK_ADDON_DISABLE: run callbacks: running validations: [
This addon can only be enabled with the containerd runtime backend. To enable this backend, please first stop minikube with:

minikube stop

and then start minikube again with the following flags:

minikube start --container-runtime=containerd --docker-opt containerd=/var/run/containerd/containerd.sock]

╭───────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│    😿  If the above advice does not help, please let us know:                             │
│    👉  https://github.com/kubernetes/minikube/issues/new/choose                           │
│                                                                                           │
│    Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│    Please also attach the following file to the GitHub issue:                             │
│    - /tmp/minikube_addons_569b151b47196d038af25537206255c050ace6fd_0.log                  │
│                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────╯
```
After
```
$ ./out/minikube addons disable gvisor
🌑  "The 'gvisor' addon is disabled
```
Before:
```
 minikube addons disable gcp-auth

❌  Exiting due to MK_ADDON_DISABLE: run callbacks: running callbacks: [Process exited with status 1]

╭───────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│    😿  If the above advice does not help, please let us know:                             │
│    👉  https://github.com/kubernetes/minikube/issues/new/choose                           │
│                                                                                           │
│    Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│    Please also attach the following file to the GitHub issue:                             │
│    - /tmp/minikube_addons_2c4fde7ba5d6af1ee47e28fd9619be21ed484a50_0.log                  │
│                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────╯
```
After:
```
$ ./out/minikube addons disable gcp-auth
🌑  "The 'gcp-auth' addon is disabled
```
Before:
```
$ minikube addons disable testing

❌  Exiting due to MK_ADDON_DISABLE: run callbacks: testing is not a valid addon

╭───────────────────────────────────────────────────────────────────────────────────────────╮
│                                                                                           │
│    😿  If the above advice does not help, please let us know:                             │
│    👉  https://github.com/kubernetes/minikube/issues/new/choose                           │
│                                                                                           │
│    Please run `minikube logs --file=logs.txt` and attach logs.txt to the GitHub issue.    │
│    Please also attach the following file to the GitHub issue:                             │
│    - /tmp/minikube_addons_4755f700bf6c955ce4ad0731b6be6682109661fe_0.log                  │
│                                                                                           │
╰───────────────────────────────────────────────────────────────────────────────────────────╯

```
After:
```
$ ./out/minikube addons disable testing

❌  Exiting due to MK_ADDON_DISABLE: "'testing' is not a valid minikube addon

```

k8s-ci-robot: Hi @kadern0. Thanks for your PR.

I'm waiting for a [kubernetes](https://github.com/orgs/kubernetes/people) member to verify that this patch is reasonable to test. If it is, they should reply with `/ok-to-test` on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should [join the org](https://git.k8s.io/community/community-membership.md#member) to skip this step.

Once the patch is verified, the new status will be reflected by the `ok-to-test` label.

I understand the commands that are listed [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fminikube).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>

k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/minikube/pull/16139#" title="Author self-approved">kadern0</a>*
**Once this PR has been reviewed and has the lgtm label**, please assign spowelljr for approval. For more information see [the Kubernetes Code Review Process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process).

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Fminikube).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes/minikube/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["spowelljr"]} -->
minikube-bot: Can one of the admins verify this patch?

Patch:
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f3e492c2f..be37a482b 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -24,6 +24,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Download Dependencies
         run: go mod download
@@ -51,6 +52,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
@@ -70,6 +72,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 86e920f5d..529cfb697 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -19,6 +19,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Generate Docs
         id: gendocs
diff --git a/.github/workflows/functional_verified.yml b/.github/workflows/functional_verified.yml
index 15cc497d0..57ac9bb68 100644
--- a/.github/workflows/functional_verified.yml
+++ b/.github/workflows/functional_verified.yml
@@ -38,6 +38,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Download Dependencies
         run: go mod download
diff --git a/.github/workflows/leaderboard.yml b/.github/workflows/leaderboard.yml
index 8e2971ca1..bd57bb2f1 100644
--- a/.github/workflows/leaderboard.yml
+++ b/.github/workflows/leaderboard.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Update Leaderboard
         id: leaderboard
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index b81a160f5..d5b504b08 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -28,6 +28,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Download Dependencies
         run: go mod download
@@ -55,6 +56,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
@@ -74,6 +76,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index c7a097cb9..0c7b26ed4 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -26,6 +26,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Download Dependencies
         run: go mod download
@@ -53,6 +54,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
@@ -72,6 +74,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
diff --git a/.github/workflows/sync-minikube.yml b/.github/workflows/sync-minikube.yml
index 840240d72..1e9f71702 100644
--- a/.github/workflows/sync-minikube.yml
+++ b/.github/workflows/sync-minikube.yml
@@ -26,6 +26,7 @@ jobs:
         uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
 
       - name: Build
diff --git a/.github/workflows/time-to-k8s-public-chart.yml b/.github/workflows/time-to-k8s-public-chart.yml
index 7fa130f64..caa44324b 100644
--- a/.github/workflows/time-to-k8s-public-chart.yml
+++ b/.github/workflows/time-to-k8s-public-chart.yml
@@ -23,6 +23,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Benchmark time-to-k8s for Docker driver with Docker runtime
         run: |
@@ -48,6 +49,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Disable firewall
         run: |
diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml
index 81489a176..de46c6f45 100644
--- a/.github/workflows/time-to-k8s.yml
+++ b/.github/workflows/time-to-k8s.yml
@@ -19,6 +19,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: time-to-k8s Benchmark
         id: timeToK8sBenchmark
diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml
index 596e6d006..d4fc9b734 100644
--- a/.github/workflows/translations.yml
+++ b/.github/workflows/translations.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Install libvirt
         run: |
diff --git a/.github/workflows/update-buildkit-version.yml b/.github/workflows/update-buildkit-version.yml
index 2da39a82b..ce79ba500 100644
--- a/.github/workflows/update-buildkit-version.yml
+++ b/.github/workflows/update-buildkit-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump buildkit Version
         id: bumpBuildkit
diff --git a/.github/workflows/update-cloud-spanner-emulator-version.yml b/.github/workflows/update-cloud-spanner-emulator-version.yml
index 9afff4766..abb9c03e2 100644
--- a/.github/workflows/update-cloud-spanner-emulator-version.yml
+++ b/.github/workflows/update-cloud-spanner-emulator-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump cloud-spanner-emulator version
         id: bumpCloudSpannerEmulator
diff --git a/.github/workflows/update-containerd-version.yml b/.github/workflows/update-containerd-version.yml
index fceece458..9d1246a02 100644
--- a/.github/workflows/update-containerd-version.yml
+++ b/.github/workflows/update-containerd-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump containerd Version
         id: bumpContainerd
diff --git a/.github/workflows/update-cri-o-version.yml b/.github/workflows/update-cri-o-version.yml
index b8e03240e..4e5377355 100644
--- a/.github/workflows/update-cri-o-version.yml
+++ b/.github/workflows/update-cri-o-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump cri-o Version
         id: bumpCrio
diff --git a/.github/workflows/update-docsy-version.yml b/.github/workflows/update-docsy-version.yml
index d0bf2295b..18cccc9dc 100644
--- a/.github/workflows/update-docsy-version.yml
+++ b/.github/workflows/update-docsy-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Docsy version
         id: bumpDocsy
diff --git a/.github/workflows/update-gh-version.yml b/.github/workflows/update-gh-version.yml
index 2fe77a8b9..1611e78cf 100644
--- a/.github/workflows/update-gh-version.yml
+++ b/.github/workflows/update-gh-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump gh version
         id: bumpGh
diff --git a/.github/workflows/update-golang-version.yml b/.github/workflows/update-golang-version.yml
index a309e69ad..28b464dd3 100644
--- a/.github/workflows/update-golang-version.yml
+++ b/.github/workflows/update-golang-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Golang Versions
         id: bumpGolang
diff --git a/.github/workflows/update-golint-version.yml b/.github/workflows/update-golint-version.yml
index a54cd6b0d..335a49ac4 100644
--- a/.github/workflows/update-golint-version.yml
+++ b/.github/workflows/update-golint-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Golint Versions
         id: bumpGolint
diff --git a/.github/workflows/update-gopogh-version.yml b/.github/workflows/update-gopogh-version.yml
index 01397ae93..c00199c26 100644
--- a/.github/workflows/update-gopogh-version.yml
+++ b/.github/workflows/update-gopogh-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump gopogh Versions
         id: bumpGopogh
diff --git a/.github/workflows/update-hugo-version.yml b/.github/workflows/update-hugo-version.yml
index 1ab2cd18b..0581f46e4 100644
--- a/.github/workflows/update-hugo-version.yml
+++ b/.github/workflows/update-hugo-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Hugo version
         id: bumpHugo
diff --git a/.github/workflows/update-k8s-versions.yml b/.github/workflows/update-k8s-versions.yml
index 34b99ae10..597a2e712 100644
--- a/.github/workflows/update-k8s-versions.yml
+++ b/.github/workflows/update-k8s-versions.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Kubernetes Versions
         id: bumpk8s
diff --git a/.github/workflows/update-kubeadm-constants.yml b/.github/workflows/update-kubeadm-constants.yml
index 18465e6e5..8299cdde8 100644
--- a/.github/workflows/update-kubeadm-constants.yml
+++ b/.github/workflows/update-kubeadm-constants.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Kubeadm Constants for Kubernetes Images
         id: bumpKubeadmConsts
diff --git a/.github/workflows/update-metrics-server-version.yml b/.github/workflows/update-metrics-server-version.yml
deleted file mode 100644
index c7a3279ac..000000000
--- a/.github/workflows/update-metrics-server-version.yml
+++ /dev/null
@@ -1,47 +0,0 @@
-name: "update-metrics-server-version"
-on:
-  workflow_dispatch:
-  schedule:
-    # every Monday at around 3 am pacific/10 am UTC
-    - cron: "0 10 * * 1"
-env:
-  GOPROXY: https://proxy.golang.org
-  GO_VERSION: '1.20.2'
-permissions:
-  contents: read
-
-jobs:
-  bump-metrics-server-version:
-    runs-on: ubuntu-20.04
-    steps:
-      - uses: actions/checkout@24cb9080177205b6e8c946b17badbe402adc938f
-      - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
-        with:
-          go-version: ${{env.GO_VERSION}}
-          cache-dependency-path: ./go.sum
-      - name: Bump metrics-server version
-        id: bumpMetricsServer
-        run: |
-          make update-metrics-server-version
-          # The following is to support multiline with GITHUB_OUTPUT, see https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#multiline-strings
-          echo "changes<<EOF" >> $GITHUB_OUTPUT
-          echo "$(git status --porcelain)" >> $GITHUB_OUTPUT
-          echo "EOF" >> $GITHUB_OUTPUT
-      - name: Create PR
-        if: ${{ steps.bumpMetricsServer.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@38e0b6e68b4c852a5500a94740f0e535e0d7ba54
-        with:
-          token: ${{ secrets.MINIKUBE_BOT_PAT }}
-          commit-message: bump metrics-server version
-          committer: minikube-bot <minikube-bot@google.com>
-          author: minikube-bot <minikube-bot@google.com>
-          branch: auto_bump_metrics_server_version
-          push-to-fork: minikube-bot/minikube
-          base: master
-          delete-branch: true
-          title: 'bump metrics-server version'
-          labels: ok-to-test
-          body: |
-            metrics-server project released a [new version](https://github.com/kubernetes-sigs/metrics-server),
-
-            This PR was auto-generated by `make update-metrics-server-version` using [update-metrics-server-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-metrics-server-version.yml) CI Workflow.
diff --git a/.github/workflows/yearly-leaderboard.yml b/.github/workflows/yearly-leaderboard.yml
index b7634537e..e57c4bbbb 100644
--- a/.github/workflows/yearly-leaderboard.yml
+++ b/.github/workflows/yearly-leaderboard.yml
@@ -23,6 +23,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Update Yearly Leaderboard
         id: yearlyLeaderboard
diff --git a/Makefile b/Makefile
index 3716b236c..b78c0cf3a 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ KUBERNETES_VERSION ?= $(shell egrep "DefaultKubernetesVersion =" pkg/minikube/co
 KIC_VERSION ?= $(shell egrep "Version =" pkg/drivers/kic/types.go | cut -d \" -f2)
 
 # Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions
-ISO_VERSION ?= v1.29.0-1679074930-16079
+ISO_VERSION ?= v1.29.0-1678210391-15973
 
 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta
 DEB_VERSION ?= $(subst -,~,$(RAW_VERSION))
@@ -78,7 +78,7 @@ MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download
 KERNEL_VERSION ?= 5.10.57
 # latest from https://github.com/golangci/golangci-lint/releases
 # update this only by running `make update-golint-version`
-GOLINT_VERSION ?= v1.52.0
+GOLINT_VERSION ?= v1.51.2
 # Limit number of default jobs, to avoid the CI builds running out of memory
 GOLINT_JOBS ?= 4
 # see https://github.com/golangci/golangci-lint#memory-usage-of-golangci-lint
@@ -1092,11 +1092,6 @@ update-cri-o-version:
 	(cd hack/update/cri-o_version && \
 	 go run update_cri-o_version.go)
 
-.PHONY: update-metrics-server-version
-update-metrics-server-version:
-	(cd hack/update/metrics_server_version && \
-	 go run update_metrics_server_version.go)
-
 .PHONY: generate-licenses
 generate-licenses:
 	./hack/generate_licenses.sh
diff --git a/cmd/auto-pause/auto-pause.go b/cmd/auto-pause/auto-pause.go
index 6c80d530f..e877878e8 100644
--- a/cmd/auto-pause/auto-pause.go
+++ b/cmd/auto-pause/auto-pause.go
@@ -93,7 +93,7 @@ func main() {
 }
 
 // handler echoes the Path component of the requested URL.
-func handler(w http.ResponseWriter, _ *http.Request) {
+func handler(w http.ResponseWriter, r *http.Request) {
 	unpauseRequests <- struct{}{}
 	<-done
 	fmt.Fprintf(w, "allow")
diff --git a/cmd/minikube/cmd/config/disable.go b/cmd/minikube/cmd/config/disable.go
index cdf31b934..b0838076d 100644
--- a/cmd/minikube/cmd/config/disable.go
+++ b/cmd/minikube/cmd/config/disable.go
@@ -19,7 +19,9 @@ package config
 import (
 	"github.com/spf13/cobra"
 	"k8s.io/minikube/pkg/addons"
+	"k8s.io/minikube/pkg/minikube/assets"
 	"k8s.io/minikube/pkg/minikube/exit"
+	"k8s.io/minikube/pkg/minikube/mustload"
 	"k8s.io/minikube/pkg/minikube/out"
 	"k8s.io/minikube/pkg/minikube/reason"
 	"k8s.io/minikube/pkg/minikube/style"
@@ -38,11 +40,18 @@ var addonsDisableCmd = &cobra.Command{
 		if addon == "heapster" {
 			exit.Message(reason.AddonUnsupported, "The heapster addon is depreciated. please try to disable metrics-server instead")
 		}
-		err := addons.SetAndSave(ClusterFlagValue(), addon, "false")
-		if err != nil {
-			exit.Error(reason.InternalAddonDisable, "disable failed", err)
+		_, cc := mustload.Partial(ClusterFlagValue())
+		validAddon, ok := assets.Addons[addon]
+		if !ok {
+			exit.Message(reason.AddonUnsupported, `"'{{.minikube_addon}}' is not a valid minikube addon`, out.V{"minikube_addon": addon})
 		}
-		out.Step(style.AddonDisable, `"The '{{.minikube_addon}}' addon is disabled`, out.V{"minikube_addon": addon})
+		if validAddon.IsEnabled(cc) {
+			err := addons.SetAndSave(ClusterFlagValue(), addon, "false")
+			if err != nil {
+				exit.Error(reason.InternalAddonDisable, "disable failed", err)
+			}
+		}
+		out.Styled(style.AddonDisable, `"The '{{.minikube_addon}}' addon is disabled`, out.V{"minikube_addon": addon})
 	},
 }
 
diff --git a/cmd/minikube/cmd/config/validations.go b/cmd/minikube/cmd/config/validations.go
index 21fb34db2..5a06786cd 100644
--- a/cmd/minikube/cmd/config/validations.go
+++ b/cmd/minikube/cmd/config/validations.go
@@ -32,7 +32,7 @@ import (
 )
 
 // IsValidDriver checks if a driver is supported
-func IsValidDriver(_, name string) error {
+func IsValidDriver(string, name string) error {
 	if driver.Supported(name) {
 		return nil
 	}
@@ -40,13 +40,13 @@ func IsValidDriver(_, name string) error {
 }
 
 // RequiresRestartMsg returns the "requires restart" message
-func RequiresRestartMsg(_, _ string) error {
+func RequiresRestartMsg(string, string) error {
 	out.WarningT("These changes will take effect upon a minikube delete and then a minikube start")
 	return nil
 }
 
 // IsValidDiskSize checks if a string is a valid disk size
-func IsValidDiskSize(_, disksize string) error {
+func IsValidDiskSize(name string, disksize string) error {
 	_, err := units.FromHumanSize(disksize)
 	if err != nil {
 		return fmt.Errorf("invalid disk size: %v", err)
@@ -55,7 +55,7 @@ func IsValidDiskSize(_, disksize string) error {
 }
 
 // IsValidCPUs checks if a string is a valid number of CPUs
-func IsValidCPUs(name, cpus string) error {
+func IsValidCPUs(name string, cpus string) error {
 	if cpus == constants.MaxResources {
 		return nil
 	}
@@ -63,7 +63,7 @@ func IsValidCPUs(name, cpus string) error {
 }
 
 // IsValidMemory checks if a string is a valid memory size
-func IsValidMemory(_, memsize string) error {
+func IsValidMemory(name string, memsize string) error {
 	if memsize == constants.MaxResources {
 		return nil
 	}
@@ -75,7 +75,7 @@ func IsValidMemory(_, memsize string) error {
 }
 
 // IsValidURL checks if a location is a valid URL
-func IsValidURL(_, location string) error {
+func IsValidURL(name string, location string) error {
 	_, err := url.Parse(location)
 	if err != nil {
 		return fmt.Errorf("%s is not a valid URL", location)
@@ -84,7 +84,7 @@ func IsValidURL(_, location string) error {
 }
 
 // IsURLExists checks if a location actually exists
-func IsURLExists(_, location string) error {
+func IsURLExists(name string, location string) error {
 	parsed, err := url.Parse(location)
 	if err != nil {
 		return fmt.Errorf("%s is not a valid URL", location)
@@ -118,7 +118,7 @@ func IsURLExists(_, location string) error {
 }
 
 // IsPositive checks if an integer is positive
-func IsPositive(name, val string) error {
+func IsPositive(name string, val string) error {
 	i, err := strconv.Atoi(val)
 	if err != nil {
 		return fmt.Errorf("%s:%v", name, err)
@@ -130,7 +130,7 @@ func IsPositive(name, val string) error {
 }
 
 // IsValidCIDR checks if a string parses as a CIDR
-func IsValidCIDR(_, cidr string) error {
+func IsValidCIDR(name string, cidr string) error {
 	_, _, err := net.ParseCIDR(cidr)
 	if err != nil {
 		return fmt.Errorf("invalid CIDR: %v", err)
@@ -139,7 +139,7 @@ func IsValidCIDR(_, cidr string) error {
 }
 
 // IsValidPath checks if a string is a valid path
-func IsValidPath(name, path string) error {
+func IsValidPath(name string, path string) error {
 	_, err := os.Stat(path)
 	if err != nil {
 		return fmt.Errorf("%s path is not valid: %v", name, err)
@@ -148,7 +148,7 @@ func IsValidPath(name, path string) error {
 }
 
 // IsValidRuntime checks if a string is a valid runtime
-func IsValidRuntime(_, runtime string) error {
+func IsValidRuntime(name string, runtime string) error {
 	_, err := cruntime.New(cruntime.Config{Type: runtime})
 	if err != nil {
 		return fmt.Errorf("invalid runtime: %v", err)
diff --git a/cmd/minikube/cmd/delete.go b/cmd/minikube/cmd/delete.go
index acdf12bc6..01e03b6d2 100644
--- a/cmd/minikube/cmd/delete.go
+++ b/cmd/minikube/cmd/delete.go
@@ -203,7 +203,7 @@ func printDeleteImageInfo(dockerImageNames, podmanImageNames []string) {
 }
 
 // runDelete handles the executes the flow of "minikube delete"
-func runDelete(_ *cobra.Command, args []string) {
+func runDelete(cmd *cobra.Command, args []string) {
 	if len(args) > 0 {
 		exit.Message(reason.Usage, "Usage: minikube delete")
 	}
diff --git a/cmd/minikube/cmd/docker-env.go b/cmd/minikube/cmd/docker-env.go
index 254ba9d9f..425437a49 100644
--- a/cmd/minikube/cmd/docker-env.go
+++ b/cmd/minikube/cmd/docker-env.go
@@ -436,7 +436,7 @@ func dockerSetScript(ec DockerEnvConfig, w io.Writer) error {
 			exit.Message(reason.InternalOutputUsage, "error: --output must be 'text', 'yaml' or 'json'")
 		}
 	}
-	return shell.SetScript(w, dockerSetEnvTmpl, dockerShellCfgSet(ec, envVars))
+	return shell.SetScript(ec.EnvConfig, w, dockerSetEnvTmpl, dockerShellCfgSet(ec, envVars))
 }
 
 // dockerSetScript writes out a shell-compatible 'docker-env unset' script
diff --git a/cmd/minikube/cmd/kubectl.go b/cmd/minikube/cmd/kubectl.go
index 81abc6255..35c6e0d78 100644
--- a/cmd/minikube/cmd/kubectl.go
+++ b/cmd/minikube/cmd/kubectl.go
@@ -17,14 +17,19 @@ limitations under the License.
 package cmd
 
 import (
+	"bufio"
+	"bytes"
 	"fmt"
 	"os"
 	"os/exec"
 	"path"
+	"strconv"
+	"strings"
 	"syscall"
 
 	"github.com/spf13/cobra"
 	"k8s.io/klog/v2"
+	kcmd "k8s.io/kubectl/pkg/cmd"
 	"k8s.io/minikube/pkg/minikube/config"
 	"k8s.io/minikube/pkg/minikube/constants"
 	"k8s.io/minikube/pkg/minikube/detect"
@@ -52,6 +57,35 @@ but optionally you can also run it directly on the control plane over the ssh co
 This can be useful if you cannot run kubectl locally for some reason, like unsupported
 host. Please be aware that when using --ssh all paths will apply to the remote machine.`,
 	Example: "minikube kubectl -- --help\nminikube kubectl -- get pods --namespace kube-system",
+	ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
+		// Run kubectl __complete $@ to get completions
+		var out bytes.Buffer
+		completeCmd := kcmd.NewDefaultKubectlCommand()
+		completeCmd.SetArgs(append([]string{cobra.ShellCompRequestCmd}, append(args, toComplete)...))
+		completeCmd.SetOut(&out)
+		if err := completeCmd.Execute(); err != nil {
+			return nil, cobra.ShellCompDirectiveError
+		}
+
+		// Scan completions
+		var completions []string
+		scanner := bufio.NewScanner(&out)
+		for scanner.Scan() {
+			// Strip completion description after tab
+			completions = append(completions, strings.Split(scanner.Text(), "\t")[0])
+		}
+		if scanner.Err() != nil || len(completions) == 0 {
+			return nil, cobra.ShellCompDirectiveError
+		}
+
+		// The final line of completions will be a directive (colon + int)
+		directive, err := strconv.Atoi(strings.TrimPrefix(completions[len(completions)-1], ":"))
+		if err != nil {
+			return nil, cobra.ShellCompDirectiveError
+		}
+
+		return completions[:len(completions)-1], cobra.ShellCompDirective(directive)
+	},
 	Run: func(cmd *cobra.Command, args []string) {
 		cc, err := config.Load(ClusterFlagValue())
 
@@ -71,7 +105,7 @@ host. Please be aware that when using --ssh all paths will apply to the remote m
 			kc := []string{"sudo"}
 			kc = append(kc, kubectlPath(*co.Config))
 			kc = append(kc, "--kubeconfig")
-			kc = append(kc, kubeconfigPath())
+			kc = append(kc, kubeconfigPath(*co.Config))
 			args = append(kc, args...)
 
 			klog.Infof("Running SSH %v", args)
@@ -131,7 +165,7 @@ func kubectlPath(cfg config.ClusterConfig) string {
 }
 
 // kubeconfigPath returns the path to kubeconfig
-func kubeconfigPath() string {
+func kubeconfigPath(cfg config.ClusterConfig) string {
 	return "/etc/kubernetes/admin.conf"
 }
 
diff --git a/cmd/minikube/cmd/options.go b/cmd/minikube/cmd/options.go
index 395bd290a..808693113 100644
--- a/cmd/minikube/cmd/options.go
+++ b/cmd/minikube/cmd/options.go
@@ -36,7 +36,7 @@ var optionsCmd = &cobra.Command{
 }
 
 // runOptions handles the executes the flow of "minikube options"
-func runOptions(cmd *cobra.Command, _ []string) {
+func runOptions(cmd *cobra.Command, args []string) {
 	out.String("The following options can be passed to any command:\n\n")
 	cmd.Root().PersistentFlags().VisitAll(func(flag *pflag.Flag) {
 		out.String(flagUsage(flag))
diff --git a/cmd/minikube/cmd/pause.go b/cmd/minikube/cmd/pause.go
index ef5a7c941..4fd7ceefe 100644
--- a/cmd/minikube/cmd/pause.go
+++ b/cmd/minikube/cmd/pause.go
@@ -49,7 +49,7 @@ var pauseCmd = &cobra.Command{
 	Run:   runPause,
 }
 
-func runPause(_ *cobra.Command, _ []string) {
+func runPause(cmd *cobra.Command, args []string) {
 	out.SetJSON(outputFormat == "json")
 	co := mustload.Running(ClusterFlagValue())
 	register.SetEventLogPath(localpath.EventLog(ClusterFlagValue()))
diff --git a/cmd/minikube/cmd/podman-env.go b/cmd/minikube/cmd/podman-env.go
index ba0dd4e31..bf0e9229f 100644
--- a/cmd/minikube/cmd/podman-env.go
+++ b/cmd/minikube/cmd/podman-env.go
@@ -245,7 +245,7 @@ func podmanSetScript(ec PodmanEnvConfig, w io.Writer) error {
 		podmanEnvTmpl = podmanEnv2Tmpl
 	}
 	envVars := podmanEnvVars(ec)
-	return shell.SetScript(w, podmanEnvTmpl, podmanShellCfgSet(ec, envVars))
+	return shell.SetScript(ec.EnvConfig, w, podmanEnvTmpl, podmanShellCfgSet(ec, envVars))
 }
 
 // podmanUnsetScript writes out a shell-compatible 'podman-env unset' script
diff --git a/cmd/minikube/cmd/root.go b/cmd/minikube/cmd/root.go
index 3d3958a1c..fdaae3520 100644
--- a/cmd/minikube/cmd/root.go
+++ b/cmd/minikube/cmd/root.go
@@ -332,9 +332,9 @@ func setupViper() {
 }
 
 func addToPath(dir string) {
-	path := fmt.Sprintf("%s:%s", dir, os.Getenv("PATH"))
+	new := fmt.Sprintf("%s:%s", dir, os.Getenv("PATH"))
 	klog.Infof("Updating PATH: %s", dir)
-	os.Setenv("PATH", path)
+	os.Setenv("PATH", new)
 }
 
 func validateUsername(name string) bool {
diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go
index 501b18f2d..2c9c8d40d 100644
--- a/cmd/minikube/cmd/start.go
+++ b/cmd/minikube/cmd/start.go
@@ -147,7 +147,7 @@ func platform() string {
 }
 
 // runStart handles the executes the flow of "minikube start"
-func runStart(cmd *cobra.Command, _ []string) {
+func runStart(cmd *cobra.Command, args []string) {
 	register.SetEventLogPath(localpath.EventLog(ClusterFlagValue()))
 	ctx := context.Background()
 	out.SetJSON(outputFormat == "json")
@@ -250,10 +250,11 @@ func runStart(cmd *cobra.Command, _ []string) {
 				starter, err = provisionWithDriver(cmd, ds, existing)
 				if err != nil {
 					continue
+				} else {
+					// Success!
+					success = true
+					break
 				}
-				// Success!
-				success = true
-				break
 			}
 			if !success {
 				exitGuestProvision(err)
@@ -1397,14 +1398,15 @@ func getContainerRuntime(old *config.ClusterConfig) string {
 	}
 
 	if paramRuntime == constants.DefaultContainerRuntime {
-		paramRuntime = defaultRuntime()
+		k8sVersion := getKubernetesVersion(old)
+		paramRuntime = defaultRuntime(k8sVersion)
 	}
 
 	return paramRuntime
 }
 
 // defaultRuntime returns the default container runtime
-func defaultRuntime() string {
+func defaultRuntime(k8sVersion string) string {
 	// minikube default
 	return constants.Docker
 }
@@ -1830,7 +1832,7 @@ func validateBareMetal(drvName string) {
 
 	// default container runtime varies, starting with Kubernetes 1.24 - assume that only the default container runtime has been tested
 	rtime := viper.GetString(containerRuntime)
-	if rtime != constants.DefaultContainerRuntime && rtime != defaultRuntime() {
+	if rtime != constants.DefaultContainerRuntime && rtime != defaultRuntime(getKubernetesVersion(nil)) {
 		out.WarningT("Using the '{{.runtime}}' runtime with the 'none' driver is an untested configuration!", out.V{"runtime": rtime})
 	}
 
diff --git a/cmd/minikube/cmd/stop.go b/cmd/minikube/cmd/stop.go
index a34449871..6990fdc23 100644
--- a/cmd/minikube/cmd/stop.go
+++ b/cmd/minikube/cmd/stop.go
@@ -69,7 +69,7 @@ func init() {
 }
 
 // runStop handles the executes the flow of "minikube stop"
-func runStop(_ *cobra.Command, _ []string) {
+func runStop(cmd *cobra.Command, args []string) {
 	out.SetJSON(outputFormat == "json")
 	register.Reg.SetStep(register.Stopping)
 
diff --git a/cmd/performance/mkcmp/cmd/mkcmp.go b/cmd/performance/mkcmp/cmd/mkcmp.go
index c7e2c21f9..16ed30ae4 100644
--- a/cmd/performance/mkcmp/cmd/mkcmp.go
+++ b/cmd/performance/mkcmp/cmd/mkcmp.go
@@ -40,7 +40,7 @@ var rootCmd = &cobra.Command{
 		if err != nil {
 			return err
 		}
-		return perf.CompareMinikubeStart(context.Background(), binaries)
+		return perf.CompareMinikubeStart(context.Background(), os.Stdout, binaries)
 	},
 }
 
diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash
index c162a05fb..69be50908 100644
--- a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash
+++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.hash
@@ -1,4 +1,3 @@
 sha256 0a834a749e86525e0eb16e7e80ce726e7c6a8e8d26fc5cc36c712305024da4e7  buildkit-v0.9.0.linux-arm64.tar.gz
 sha256 27e974e2b07e087f66f0c9c2b43b6f3df6f7e1746a6252580f164427337d668c  buildkit-v0.10.3.linux-arm64.tar.gz
 sha256 8a8c2274852ea4bac6ccf1862a46679e93c013de8c5c0434a3040bab2e0a42a7  buildkit-v0.11.2.linux-arm64.tar.gz
-sha256 252408105ef1c2256980a105f727912603a831d6c57d3243b5d4cbb25fafb1b1  buildkit-v0.11.4.linux-arm64.tar.gz
diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk
index 01c4e6c9a..9f4f2e536 100644
--- a/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk
+++ b/deploy/iso/minikube-iso/arch/aarch64/package/buildkit-bin-aarch64/buildkit-bin.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-BUILDKIT_BIN_AARCH64_VERSION = v0.11.4
-BUILDKIT_BIN_AARCH64_COMMIT = 3abd1ef0c195cdc078d1657cb50f62a2cdc26f8f
+BUILDKIT_BIN_AARCH64_VERSION = v0.11.2
+BUILDKIT_BIN_AARCH64_COMMIT = 944939944ca4cc58a11ace4af714083cfcd9a3c7
 BUILDKIT_BIN_AARCH64_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_AARCH64_VERSION)
 BUILDKIT_BIN_AARCH64_SOURCE = buildkit-$(BUILDKIT_BIN_AARCH64_VERSION).linux-arm64.tar.gz
 
diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash
index ac277ad96..41618f8bc 100644
--- a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash
+++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.hash
@@ -5,4 +5,3 @@ sha256 d6d1ebc68806e626f31dd4ea17a406a93dcff14763971cd91b28cbaf3bfffcd4  buildki
 sha256 1b307268735c8f8e68b55781a6f4c03af38acc1bc29ba39ebaec6d422bccfb25  buildkit-v0.9.0.linux-amd64.tar.gz
 sha256 fbc9c433cf77c5c00db6f797155edc60b44463524ae59a4961699dca15bcee00  buildkit-v0.10.3.linux-amd64.tar.gz
 sha256 6d0fe3f1ec2dce4ed2a5c9baf05fb279225b3b0e3bbee4092304fe284ca7fc47  buildkit-v0.11.2.linux-amd64.tar.gz
-sha256 6de87c88b1da0b1e899371dd4c0b883581401e2ddfb21a065510eeb3a8ac8743  buildkit-v0.11.4.linux-amd64.tar.gz
diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk
index 337febf17..2ce4dabb0 100644
--- a/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk
+++ b/deploy/iso/minikube-iso/arch/x86_64/package/buildkit-bin/buildkit-bin.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-BUILDKIT_BIN_VERSION = v0.11.4
-BUILDKIT_BIN_COMMIT = 3abd1ef0c195cdc078d1657cb50f62a2cdc26f8f
+BUILDKIT_BIN_VERSION = v0.11.2
+BUILDKIT_BIN_COMMIT = 944939944ca4cc58a11ace4af714083cfcd9a3c7
 BUILDKIT_BIN_SITE = https://github.com/moby/buildkit/releases/download/$(BUILDKIT_BIN_VERSION)
 BUILDKIT_BIN_SOURCE = buildkit-$(BUILDKIT_BIN_VERSION).linux-amd64.tar.gz
 
diff --git a/deploy/kicbase/Dockerfile b/deploy/kicbase/Dockerfile
index f92ac6e97..52340e482 100644
--- a/deploy/kicbase/Dockerfile
+++ b/deploy/kicbase/Dockerfile
@@ -39,7 +39,7 @@ RUN if [ "$PREBUILT_AUTO_PAUSE" != "true" ]; then cd ./cmd/auto-pause/ && go bui
 # for a kubernetes node image, it doesn't contain much we don't need
 FROM ubuntu:focal-20230308 as kicbase
 
-ARG BUILDKIT_VERSION="v0.11.4"
+ARG BUILDKIT_VERSION="v0.11.2"
 ARG FUSE_OVERLAYFS_VERSION="v1.7.1"
 ARG CONTAINERD_FUSE_OVERLAYFS_VERSION="1.0.3"
 ARG CRIO_VERSION="1.24"
diff --git a/go.mod b/go.mod
index 008c6e562..a71e1e386 100644
--- a/go.mod
+++ b/go.mod
@@ -3,7 +3,7 @@ module k8s.io/minikube
 go 1.20
 
 require (
-	cloud.google.com/go/storage v1.30.1
+	cloud.google.com/go/storage v1.29.0
 	contrib.go.opencensus.io/exporter/stackdriver v0.13.14
 	github.com/Delta456/box-cli-maker/v2 v2.3.0
 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.12.0
@@ -36,7 +36,7 @@ require (
 	github.com/klauspost/cpuid v1.2.0
 	github.com/machine-drivers/docker-machine-driver-vmware v0.1.5
 	github.com/mattbaird/jsonpatch v0.0.0-20200820163806-098863c1fc24
-	github.com/mattn/go-isatty v0.0.18
+	github.com/mattn/go-isatty v0.0.17
 	github.com/mitchellh/go-ps v1.0.0
 	github.com/moby/hyperkit v0.0.0-20210108224842-2f061e447e14
 	github.com/moby/sys/mount v0.2.0 // indirect
@@ -77,7 +77,7 @@ require (
 	k8s.io/cluster-bootstrap v0.0.0
 	k8s.io/component-base v0.26.3
 	k8s.io/klog/v2 v2.90.1
-	k8s.io/kubectl v0.26.3
+	k8s.io/kubectl v0.26.2
 	k8s.io/utils v0.0.0-20221107191617-1a15be271d1d
 	libvirt.org/go/libvirt v1.9000.0
 	sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
@@ -115,6 +115,7 @@ require (
 	github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
 	github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
 	github.com/cespare/xxhash/v2 v2.2.0 // indirect
+	github.com/chai2010/gettext-go v1.0.2 // indirect
 	github.com/containerd/cgroups v1.1.0 // indirect
 	github.com/containerd/containerd v1.6.19 // indirect
 	github.com/containerd/stargz-snapshotter/estargz v0.12.1 // indirect
@@ -122,14 +123,18 @@ require (
 	github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
 	github.com/cyphar/filepath-securejoin v0.2.3 // indirect
 	github.com/davecgh/go-spew v1.1.1 // indirect
+	github.com/daviddengcn/go-colortext v1.0.0 // indirect
 	github.com/docker/distribution v2.8.1+incompatible // indirect
 	github.com/docker/docker-credential-helpers v0.7.0 // indirect
 	github.com/emicklei/go-restful/v3 v3.9.0 // indirect
 	github.com/evanphx/json-patch v4.12.0+incompatible // indirect
+	github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect
+	github.com/fatih/camelcase v1.0.0 // indirect
 	github.com/fatih/color v1.14.1 // indirect
 	github.com/felixge/fgprof v0.9.3 // indirect
 	github.com/fsnotify/fsnotify v1.6.0 // indirect
 	github.com/fvbommel/sortorder v1.0.1 // indirect
+	github.com/go-errors/errors v1.0.1 // indirect
 	github.com/go-fonts/liberation v0.2.0 // indirect
 	github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81 // indirect
 	github.com/go-logr/logr v1.2.3 // indirect
@@ -144,13 +149,16 @@ require (
 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
 	github.com/golang/protobuf v1.5.2 // indirect
+	github.com/google/btree v1.0.1 // indirect
 	github.com/google/gnostic v0.5.7-v3refs // indirect
 	github.com/google/go-querystring v1.1.0 // indirect
 	github.com/google/gofuzz v1.2.0 // indirect
 	github.com/google/pprof v0.0.0-20220318212150-b2ab0324ddda // indirect
+	github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
 	github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
 	github.com/googleapis/gax-go/v2 v2.7.1 // indirect
 	github.com/gookit/color v1.5.2 // indirect
+	github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect
 	github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
 	github.com/hashicorp/go-safetemp v1.0.0 // indirect
 	github.com/hashicorp/go-version v1.6.0 // indirect
@@ -159,10 +167,13 @@ require (
 	github.com/imdario/mergo v0.3.12 // indirect
 	github.com/inconshreveable/mousetrap v1.0.1 // indirect
 	github.com/jmespath/go-jmespath v0.4.0 // indirect
+	github.com/jonboulle/clockwork v0.2.2 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
 	github.com/juju/errors v0.0.0-20220203013757-bd733f3c86b9 // indirect
 	github.com/klauspost/compress v1.16.0 // indirect
+	github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
+	github.com/lithammer/dedent v1.1.0 // indirect
 	github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
 	github.com/magiconair/properties v1.8.7 // indirect
 	github.com/mailru/easyjson v0.7.7 // indirect
@@ -179,11 +190,14 @@ require (
 	github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae // indirect
 	github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
 	github.com/modern-go/reflect2 v1.0.2 // indirect
+	github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
 	github.com/muesli/reflow v0.3.0 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
+	github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
 	github.com/opencontainers/image-spec v1.1.0-rc2 // indirect
 	github.com/opencontainers/runtime-spec v1.1.0-rc.1 // indirect
 	github.com/pelletier/go-toml/v2 v2.0.6 // indirect
+	github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
 	github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
 	github.com/prometheus/client_golang v1.14.0 // indirect
 	github.com/prometheus/client_model v0.3.0 // indirect
@@ -201,8 +215,10 @@ require (
 	github.com/tklauser/numcpus v0.6.0 // indirect
 	github.com/ulikunitz/xz v0.5.10 // indirect
 	github.com/vbatts/tar-split v0.11.2 // indirect
+	github.com/xlab/treeprint v1.1.0 // indirect
 	github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
 	github.com/yusufpapurcu/wmi v1.2.2 // indirect
+	go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 // indirect
 	go.uber.org/atomic v1.10.0 // indirect
 	go.uber.org/multierr v1.8.0 // indirect
 	go.uber.org/zap v1.21.0 // indirect
@@ -212,14 +228,20 @@ require (
 	golang.org/x/tools v0.6.0 // indirect
 	golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 // indirect
+	google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 // indirect
 	google.golang.org/grpc v1.53.0 // indirect
 	google.golang.org/protobuf v1.29.1 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.67.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
+	k8s.io/cli-runtime v0.26.2 // indirect
+	k8s.io/component-helpers v0.26.2 // indirect
 	k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 // indirect
+	k8s.io/metrics v0.26.2 // indirect
 	sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 // indirect
+	sigs.k8s.io/kustomize/api v0.12.1 // indirect
+	sigs.k8s.io/kustomize/kustomize/v4 v4.5.7 // indirect
+	sigs.k8s.io/kustomize/kyaml v0.13.9 // indirect
 	sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect
 )
diff --git a/go.sum b/go.sum
index 27adcd7bd..6ec1b24a3 100644
--- a/go.sum
+++ b/go.sum
@@ -182,8 +182,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
 cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y=
 cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc=
 cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s=
-cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM=
-cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E=
+cloud.google.com/go/storage v1.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI=
+cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4=
 cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw=
 cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g=
 cloud.google.com/go/trace v1.8.0 h1:GFPLxbp5/FzdgTzor3nlNYNxMd6hLmzkE7sA9F0qQcA=
@@ -375,6 +375,8 @@ github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XL
 github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44=
 github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
+github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk=
+github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
 github.com/checkpoint-restore/go-criu/v4 v4.1.0/go.mod h1:xUQBLp4RLc5zJtWY++yjOoMoB5lihDt7fai+75m+rGw=
 github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M=
 github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
@@ -550,6 +552,8 @@ github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2
 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/daviddengcn/go-colortext v1.0.0 h1:ANqDyC0ys6qCSvuEK7l3g5RaehL/Xck9EX8ATG8oKsE=
+github.com/daviddengcn/go-colortext v1.0.0/go.mod h1:zDqEI5NVUop5QPpVJUxE9UO10hRnmkD5G4Pmri9+m4c=
 github.com/dennwc/varint v1.0.0/go.mod h1:hnItb35rvZvJrbTALZtY/iQfDs48JKRG1RPpgziApxA=
 github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
 github.com/dgrijalva/jwt-go v0.0.0-20160831183534-24c63f56522a/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
@@ -621,6 +625,10 @@ github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL
 github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
 github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
 github.com/exoscale/egoscale v0.9.23/go.mod h1:Ee3U4ZjSDpbbEc9VkQ/jttUU8USE8Nv7L3YzVi03Y1U=
+github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM=
+github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
+github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
+github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
 github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
 github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
@@ -651,6 +659,8 @@ github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49P
 github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
 github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
+github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w=
+github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
 github.com/go-fonts/dejavu v0.1.0 h1:JSajPXURYqpr+Cu8U9bt8K+XcACIHWqWrvWCKyeFmVQ=
 github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g=
 github.com/go-fonts/latin-modern v0.2.0 h1:5/Tv1Ek/QCr20C6ZOz15vw3g7GELYL98KWr8Hgo+3vk=
@@ -819,8 +829,14 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
 github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
 github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
+github.com/golangplus/bytes v0.0.0-20160111154220-45c989fe5450/go.mod h1:Bk6SMAONeMXrxql8uvOKuAZSu8aM5RUGv+1C6IJaEho=
+github.com/golangplus/bytes v1.0.0/go.mod h1:AdRaCFwmc/00ZzELMWb01soso6W1R/++O1XL80yAn+A=
+github.com/golangplus/fmt v1.0.0/go.mod h1:zpM0OfbMCjPtd2qkTD/jX2MgiFCqklhSUFyDW44gVQE=
+github.com/golangplus/testing v1.0.0 h1:+ZeeiKZENNOMkTTELoSySazi+XaEhVO0mb+eanrSEUQ=
+github.com/golangplus/testing v1.0.0/go.mod h1:ZDreixUV3YzhoVraIDyOzHrr76p6NUh6k/pPg/Q3gYA=
 github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
 github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
 github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
 github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
 github.com/google/gnostic v0.5.7-v3refs/go.mod h1:73MKFl6jIHelAJNaBGFzt3SPtZULs9dYrGFt8OiIsHQ=
@@ -879,6 +895,8 @@ github.com/google/pprof v0.0.0-20211214055906-6f57359322fd/go.mod h1:KgnwoLYCZ8I
 github.com/google/pprof v0.0.0-20220318212150-b2ab0324ddda h1:KdHPvlgeNEDs8rae032MqFG8LVwcSEivcCjNdVOXRmg=
 github.com/google/pprof v0.0.0-20220318212150-b2ab0324ddda/go.mod h1:KgnwoLYCZ8IQu3XUZ8Nc/bM9CCZFOyjUNOSygVozoDg=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
+github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
+github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
 github.com/google/slowjam v1.0.1 h1:RrR0qrKELIC1iv7r1FgbtohxDl6QytIj67B9brpgrdg=
 github.com/google/slowjam v1.0.1/go.mod h1:13Ws7TkS56WroVpQFout67W7EjTn+VUVhKxJqPgopWg=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
@@ -922,6 +940,7 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY
 github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
 github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
 github.com/grafana/regexp v0.0.0-20220304095617-2e8d9baf4ac2/go.mod h1:M5qHK+eWfAv8VR/265dIuEpL3fNfeC21tXXp9itM24A=
+github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM=
 github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
@@ -1027,6 +1046,7 @@ github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f h1:tL0
 github.com/johanneswuerbach/nfsexports v0.0.0-20200318065542-c48c3734757f/go.mod h1:+c1/kUpg2zlkoWqTOvzDs36Wpbm3Gd1nlmtXAEB0WGU=
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/jonboulle/clockwork v0.2.2 h1:UOGuzwb1PwsrDAObMuhUnj0p5ULPj8V/xJ7Kx9qUBdQ=
 github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
 github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
@@ -1094,8 +1114,12 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
 github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
+github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
+github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
 github.com/linode/linodego v1.4.0/go.mod h1:PVsRxSlOiJyvG4/scTszpmZDTdgS+to3X6eS8pRrWI8=
 github.com/linuxkit/virtsock v0.0.0-20201010232012-f8cee7dfc7a3/go.mod h1:3r6x7q95whyfWQpmGZTu3gk3v2YkMi05HEzl7Tf7YEo=
+github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY=
+github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
 github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
 github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
 github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA=
@@ -1136,8 +1160,8 @@ github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOA
 github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
 github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94=
 github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
-github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
-github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
+github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
 github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
@@ -1211,6 +1235,8 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb
 github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
 github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
 github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8=
+github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
+github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
 github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc=
 github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
 github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
@@ -1222,6 +1248,7 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
 github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
 github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
@@ -1309,6 +1336,7 @@ github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrap
 github.com/pelletier/go-toml v1.9.3/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
 github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
 github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
+github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
 github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc=
 github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
@@ -1421,6 +1449,7 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg
 github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
 github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
 github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
+github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
 github.com/shirou/gopsutil/v3 v3.23.2 h1:PAWSuiAszn7IhPMBtXsbSCafej7PqUOvY6YywlQUExU=
 github.com/shirou/gopsutil/v3 v3.23.2/go.mod h1:gv0aQw33GLo3pG8SiWKiQrbDzbRY1K80RyZJ7V4Th1M=
 github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
@@ -1486,6 +1515,7 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
 github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
+github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c=
 github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
 github.com/stretchr/testify v0.0.0-20160221104443-1f4a1643a57e/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v0.0.0-20180303142811-b89eecf5ca5d/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@@ -1549,6 +1579,7 @@ github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2
 github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
 github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs=
 github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk=
 github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
 github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
@@ -1633,6 +1664,8 @@ go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+go
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.opentelemetry.io/proto/otlp v0.11.0/go.mod h1:QpEjXPrNQzrFDZgoTo49dgHR9RYRSrg3NAKnUGl9YpQ=
 go.opentelemetry.io/proto/otlp v0.12.1/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U=
+go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc=
+go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
 go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
 go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
@@ -1904,6 +1937,7 @@ golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -2308,8 +2342,8 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw
 google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
 google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM=
 google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s=
-google.golang.org/genproto v0.0.0-20230320184635-7606e756e683 h1:khxVcsk/FhnzxMKOyD+TDGwjbEOpcPuIpmafPGFmhMA=
-google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
+google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4 h1:DdoeryqhaXp1LtT/emMP1BRJPHHKFi5akj/nbx/zNTA=
+google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s=
 google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -2450,6 +2484,8 @@ k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
 k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
 k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
 k8s.io/apiserver v0.22.5/go.mod h1:s2WbtgZAkTKt679sYtSudEQrTGWUSQAPe6MupLnlmaQ=
+k8s.io/cli-runtime v0.26.2 h1:6XcIQOYW1RGNwFgRwejvyUyAojhToPmJLGr0JBMC5jw=
+k8s.io/cli-runtime v0.26.2/go.mod h1:U7sIXX7n6ZB+MmYQsyJratzPeJwgITqrSlpr1a5wM5I=
 k8s.io/client-go v0.19.1/go.mod h1:AZOIVSI9UUtQPeJD3zJFp15CEhSjRgAuQP5PWRJrCIQ=
 k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
 k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
@@ -2467,6 +2503,8 @@ k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMY
 k8s.io/component-base v0.22.5/go.mod h1:VK3I+TjuF9eaa+Ln67dKxhGar5ynVbwnGrUiNF4MqCI=
 k8s.io/component-base v0.26.3 h1:oC0WMK/ggcbGDTkdcqefI4wIZRYdK3JySx9/HADpV0g=
 k8s.io/component-base v0.26.3/go.mod h1:5kj1kZYwSC6ZstHJN7oHBqcJC6yyn41eR+Sqa/mQc8E=
+k8s.io/component-helpers v0.26.2 h1:+JJ1gwyVsqSwZCJVLJotx/IPq2pMpo0kifeAzfo6i3U=
+k8s.io/component-helpers v0.26.2/go.mod h1:PRvoduZ5/IeKGGbZRki3J2cTQVwZLD+EUxIEbvvX0W4=
 k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
 k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
 k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
@@ -2493,9 +2531,11 @@ k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2R
 k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
 k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280 h1:+70TFaan3hfJzs+7VK2o+OGxg8HsuBr/5f6tVAjDu6E=
 k8s.io/kube-openapi v0.0.0-20221012153701-172d655c2280/go.mod h1:+Axhij7bCpeqhklhUTe3xmOn6bWxolyZEeyaFpjGtl4=
-k8s.io/kubectl v0.26.3 h1:bZ5SgFyeEXw6XTc1Qji0iNdtqAC76lmeIIQULg2wNXM=
-k8s.io/kubectl v0.26.3/go.mod h1:02+gv7Qn4dupzN3fi/9OvqqdW+uG/4Zi56vc4Zmsp1g=
+k8s.io/kubectl v0.26.2 h1:SMPB4j48eVFxsYluBq3VLyqXtE6b72YnszkbTAtFye4=
+k8s.io/kubectl v0.26.2/go.mod h1:KYWOXSwp2BrDn3kPeoU/uKzKtdqvhK1dgZGd0+no4cM=
 k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
+k8s.io/metrics v0.26.2 h1:2gUvUWWnHPdE2tyA5DvyHC8HGryr+izhY9i5dzLP06s=
+k8s.io/metrics v0.26.2/go.mod h1:PX1wm9REV9hSGuw9GcXTFNDgab1KRXck3mNeiLYbRho=
 k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
@@ -2516,6 +2556,12 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyz
 sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
 sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2 h1:iXTIw73aPyC+oRdyqqvVJuloN1p0AC/kzH07hu3NE+k=
 sigs.k8s.io/json v0.0.0-20220713155537-f223a00ba0e2/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
+sigs.k8s.io/kustomize/api v0.12.1 h1:7YM7gW3kYBwtKvoY216ZzY+8hM+lV53LUayghNRJ0vM=
+sigs.k8s.io/kustomize/api v0.12.1/go.mod h1:y3JUhimkZkR6sbLNwfJHxvo1TCLwuwm14sCYnkH6S1s=
+sigs.k8s.io/kustomize/kustomize/v4 v4.5.7 h1:cDW6AVMl6t/SLuQaezMET8hgnadZGIAr8tUrxFVOrpg=
+sigs.k8s.io/kustomize/kustomize/v4 v4.5.7/go.mod h1:VSNKEH9D9d9bLiWEGbS6Xbg/Ih0tgQalmPvntzRxZ/Q=
+sigs.k8s.io/kustomize/kyaml v0.13.9 h1:Qz53EAaFFANyNgyOEJbT/yoIHygK40/ZcvU3rgry2Tk=
+sigs.k8s.io/kustomize/kyaml v0.13.9/go.mod h1:QsRbD0/KcU+wdk0/L0fIp2KLnohkVzs6fQ85/nOXac4=
 sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 h1:IKsKAnscMyIOqyl8s8V7guTcx0QBEa6OT57EPgAgpmM=
 sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0/go.mod h1:DhZ52sQMJHW21+JXyA2LRUPRIxKnrNrwh+QFV+2tVA4=
 sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
diff --git a/hack/benchmark/time-to-k8s/chart.go b/hack/benchmark/time-to-k8s/chart.go
index db95b259a..6d35f9ad7 100644
--- a/hack/benchmark/time-to-k8s/chart.go
+++ b/hack/benchmark/time-to-k8s/chart.go
@@ -271,7 +271,11 @@ func createChart(chartPath string, values []plotter.Values, totals []float64, na
 
 	p.Add(l)
 
-	return p.Save(12*vg.Inch, 8*vg.Inch, chartPath)
+	if err := p.Save(12*vg.Inch, 8*vg.Inch, chartPath); err != nil {
+		return err
+	}
+
+	return nil
 }
 
 func createBars(values plotter.Values, index int) (*plotter.BarChart, error) {
diff --git a/hack/benchmark/time-to-k8s/cpu.go b/hack/benchmark/time-to-k8s/cpu.go
index 11e3c55e8..0f90d0e1b 100644
--- a/hack/benchmark/time-to-k8s/cpu.go
+++ b/hack/benchmark/time-to-k8s/cpu.go
@@ -93,7 +93,11 @@ func createCPUChart(chartPath string, values []plotter.Values, names []string) e
 	p.Legend.Top = true
 	p.NominalX(fields...)
 
-	return p.Save(8*vg.Inch, 8*vg.Inch, chartPath)
+	if err := p.Save(8*vg.Inch, 8*vg.Inch, chartPath); err != nil {
+		return err
+	}
+
+	return nil
 }
 
 func setYMax(p *plot.Plot, values []plotter.Values) {
diff --git a/hack/jenkins/installers/check_install_gh.sh b/hack/jenkins/installers/check_install_gh.sh
index 1bedd3365..b90d7b26e 100755
--- a/hack/jenkins/installers/check_install_gh.sh
+++ b/hack/jenkins/installers/check_install_gh.sh
@@ -16,7 +16,7 @@
 
 set -eux -o pipefail
 
-GH_VERSION="2.25.1"
+GH_VERSION="2.24.3"
 
 echo "Installing latest version of gh"
 curl -qLO "https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz"
diff --git a/hack/jenkins/release_update_releases_json.go b/hack/jenkins/release_update_releases_json.go
index 1a556d2ba..6d55a8f6f 100644
--- a/hack/jenkins/release_update_releases_json.go
+++ b/hack/jenkins/release_update_releases_json.go
@@ -100,7 +100,10 @@ func updateReleases(releasesFile, version string) error {
 
 	r.Releases = append([]release{e}, r.Releases...)
 
-	return updateJSON(releasesFile, r)
+	if err := updateJSON(releasesFile, r); err != nil {
+		return err
+	}
+	return nil
 }
 
 func getReleases(path string) (releases, error) {
@@ -214,7 +217,10 @@ func updateReleasesLegacy(releasesFile, version string) error {
 
 	r.Releases = append([]releaseLegacy{e}, r.Releases...)
 
-	return updateJSONLegacy(releasesFile, r)
+	if err := updateJSONLegacy(releasesFile, r); err != nil {
+		return err
+	}
+	return nil
 }
 
 func getReleasesLegacy(path string) (releasesLegacy, error) {
diff --git a/hack/update/golang_version/update_golang_version.go b/hack/update/golang_version/update_golang_version.go
index 0a489f8e0..1b791c300 100644
--- a/hack/update/golang_version/update_golang_version.go
+++ b/hack/update/golang_version/update_golang_version.go
@@ -145,11 +145,6 @@ var (
 				`GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`,
 			},
 		},
-		".github/workflows/update-metrics-server-version.yml": {
-			Replace: map[string]string{
-				`GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`,
-			},
-		},
 		".github/workflows/sync-minikube.yml": {
 			Replace: map[string]string{
 				`GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`,
diff --git a/hack/update/kicbase_version/update_kicbase_version.go b/hack/update/kicbase_version/update_kicbase_version.go
index e07ed633f..9d0b2a3ba 100644
--- a/hack/update/kicbase_version/update_kicbase_version.go
+++ b/hack/update/kicbase_version/update_kicbase_version.go
@@ -127,7 +127,7 @@ func KICVersions() (current, stable string, err error) {
 // prepareImage checks if current image exists locally, tries to pull it if not, tags it with release version.
 // Returns reference image url and any error occurred.
 func prepareImage(ctx context.Context, data Data) (image string, err error) {
-	image, err = update.PullImage(ctx, data.CurrentVersion)
+	image, err = update.PullImage(ctx, data.CurrentVersion, data.StableVersion)
 	if err != nil {
 		return "", err
 	}
diff --git a/hack/update/metrics_server_version/update_metrics_server_version.go b/hack/update/metrics_server_version/update_metrics_server_version.go
deleted file mode 100644
index 0883e371c..000000000
--- a/hack/update/metrics_server_version/update_metrics_server_version.go
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-Copyright 2023 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 main
-
-import (
-	"context"
-	"fmt"
-	"time"
-
-	"k8s.io/klog/v2"
-
-	"k8s.io/minikube/hack/update"
-)
-
-const cxTimeout = 5 * time.Minute
-
-var schema = map[string]update.Item{
-	"pkg/minikube/assets/addons.go": {
-		Replace: map[string]string{
-			`metrics-server/metrics-server:.*`: `metrics-server/metrics-server:{{.Version}}@{{.SHA}}",`,
-		},
-	},
-}
-
-type Data struct {
-	Version string
-	SHA     string
-}
-
-func main() {
-	ctx, cancel := context.WithTimeout(context.Background(), cxTimeout)
-	defer cancel()
-
-	stable, err := update.StableVersion(ctx, "kubernetes-sigs", "metrics-server")
-	if err != nil {
-		klog.Fatalf("Unable to get metrics-server stable version: %v", err)
-	}
-	sha, err := update.GetImageSHA(fmt.Sprintf("registry.k8s.io/metrics-server/metrics-server:%s", stable))
-	if err != nil {
-		klog.Fatalf("failed to get image SHA: %v", err)
-	}
-
-	data := Data{Version: stable, SHA: sha}
-	klog.Infof("metrics-server stable version: %s", data.Version)
-
-	update.Apply(schema, data)
-}
diff --git a/hack/update/registry.go b/hack/update/registry.go
index 2720810d4..99c0db210 100644
--- a/hack/update/registry.go
+++ b/hack/update/registry.go
@@ -102,7 +102,7 @@ func TagImage(ctx context.Context, image, current, stable string) error {
 }
 
 // PullImage checks if current image exists locally, tries to pull it if not, and returns reference image url and any error occurred.
-func PullImage(ctx context.Context, current string) (image string, err error) {
+func PullImage(ctx context.Context, current, release string) (image string, err error) {
 	// check if image exists locally
 	for _, reg := range registries {
 		inspect := exec.CommandContext(ctx, "docker", "inspect", reg.image+":"+current, "--format", "{{.Id}}")
diff --git a/pkg/drivers/common.go b/pkg/drivers/common.go
index d65c016b5..74ed70e37 100644
--- a/pkg/drivers/common.go
+++ b/pkg/drivers/common.go
@@ -65,7 +65,7 @@ func (d *CommonDriver) GetCreateFlags() []mcnflag.Flag {
 }
 
 // SetConfigFromFlags is not implemented yet
-func (d *CommonDriver) SetConfigFromFlags(_ drivers.DriverOptions) error {
+func (d *CommonDriver) SetConfigFromFlags(flags drivers.DriverOptions) error {
 	return nil
 }
 
diff --git a/pkg/drivers/hyperkit/driver.go b/pkg/drivers/hyperkit/driver.go
index be5fc93f7..9d78461a7 100644
--- a/pkg/drivers/hyperkit/driver.go
+++ b/pkg/drivers/hyperkit/driver.go
@@ -67,7 +67,7 @@ type Driver struct {
 }
 
 // NewDriver creates a new driver for a host
-func NewDriver(_, _ string) *Driver {
+func NewDriver(hostName, storePath string) *Driver {
 	return &Driver{
 		BaseDriver: &drivers.BaseDriver{
 			SSHUser: "docker",
diff --git a/pkg/drivers/kic/oci/info.go b/pkg/drivers/kic/oci/info.go
index ce3f3fef0..5f9166d67 100644
--- a/pkg/drivers/kic/oci/info.go
+++ b/pkg/drivers/kic/oci/info.go
@@ -44,7 +44,7 @@ var (
 )
 
 // CachedDaemonInfo will run and return a docker/podman info only once per minikube run time. to avoid performance
-var CachedDaemonInfo = func(ociBin string) (SysInfo, error) {
+func CachedDaemonInfo(ociBin string) (SysInfo, error) {
 	if cachedSysInfo == nil {
 		si, err := DaemonInfo(ociBin)
 		cachedSysInfo = &si
diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go
index e70158eeb..d8d02652b 100644
--- a/pkg/drivers/kic/types.go
+++ b/pkg/drivers/kic/types.go
@@ -24,10 +24,10 @@ import (
 
 const (
 	// Version is the current version of kic
-	Version = "v0.0.37-1679075007-16079"
+	Version = "v0.0.37-1678988071-16068"
 
 	// SHA of the kic base image
-	baseImageSHA = "9d2bf610e530f47c7e43df9719717075e4c7ec510aea6047b29208bffe7f1978"
+	baseImageSHA = "57f4012deea6a123117f6ae1c93cff056cdb7d4e3b534ed0e03818b49099d014"
 	// The name of the GCR kicbase repository
 	gcrRepo = "gcr.io/k8s-minikube/kicbase-builds"
 	// The name of the Dockerhub kicbase repository
diff --git a/pkg/drivers/kvm/network.go b/pkg/drivers/kvm/network.go
index f33b02b8f..08731512c 100644
--- a/pkg/drivers/kvm/network.go
+++ b/pkg/drivers/kvm/network.go
@@ -256,7 +256,7 @@ func (d *Driver) deleteNetwork() error {
 	// when we reach this point, it means it is safe to delete the network
 
 	log.Debugf("Trying to delete network %s...", d.PrivateNetwork)
-	deleteFunc := func() error {
+	delete := func() error {
 		active, err := network.IsActive()
 		if err != nil {
 			return err
@@ -270,7 +270,7 @@ func (d *Driver) deleteNetwork() error {
 		log.Debugf("Undefining inactive network %s", d.PrivateNetwork)
 		return network.Undefine()
 	}
-	if err := retry.Local(deleteFunc, 10*time.Second); err != nil {
+	if err := retry.Local(delete, 10*time.Second); err != nil {
 		return errors.Wrap(err, "deleting network")
 	}
 	log.Debugf("Network %s deleted", d.PrivateNetwork)
diff --git a/pkg/generate/docs.go b/pkg/generate/docs.go
index 42230c754..437ae4195 100644
--- a/pkg/generate/docs.go
+++ b/pkg/generate/docs.go
@@ -74,11 +74,11 @@ func DocForCommand(command *cobra.Command) (string, error) {
 
 // GenMarkdown creates markdown output.
 func GenMarkdown(cmd *cobra.Command, w io.Writer) error {
-	return GenMarkdownCustom(cmd, w)
+	return GenMarkdownCustom(cmd, w, func(s string) string { return s })
 }
 
 // GenMarkdownCustom creates custom markdown output.
-func GenMarkdownCustom(cmd *cobra.Command, w io.Writer) error {
+func GenMarkdownCustom(cmd *cobra.Command, w io.Writer, linkHandler func(string) string) error {
 	cmd.InitDefaultHelpCmd()
 	cmd.InitDefaultHelpFlag()
 
diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go
index 14a39dd66..c954b3821 100644
--- a/pkg/minikube/assets/addons.go
+++ b/pkg/minikube/assets/addons.go
@@ -734,7 +734,7 @@ var Addons = map[string]*Addon{
 		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-deployment.yaml.tmpl", vmpath.GuestAddonsDir, "headlamp-deployment.yaml", "6040"),
 		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-serviceaccount.yaml", vmpath.GuestAddonsDir, "headlamp-serviceaccount.yaml", "6040"),
 		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-clusterrolebinding.yaml", vmpath.GuestAddonsDir, "headlamp-clusterrolebinding.yaml", "6040"),
-	}, false, "headlamp", "3rd party (kinvolk.io)", "yolossn", "https://minikube.sigs.k8s.io/docs/handbook/addons/headlamp/",
+	}, false, "headlamp", "3rd party (kinvolk.io)", "", "https://minikube.sigs.k8s.io/docs/handbook/addons/headlamp/",
 		map[string]string{
 			"Headlamp": "headlamp-k8s/headlamp:v0.16.0@sha256:f6f50c4fea1520a465b9d75a399245e2aea727d64bcc533442b668757d11a947",
 		},
diff --git a/pkg/minikube/bootstrapper/bootstrapper.go b/pkg/minikube/bootstrapper/bootstrapper.go
index 43fc313a3..4f9d9d0d7 100644
--- a/pkg/minikube/bootstrapper/bootstrapper.go
+++ b/pkg/minikube/bootstrapper/bootstrapper.go
@@ -54,11 +54,11 @@ const (
 )
 
 // GetCachedBinaryList returns the list of binaries
-func GetCachedBinaryList(_ string) []string {
+func GetCachedBinaryList(bootstrapper string) []string {
 	return constants.KubernetesReleaseBinaries
 }
 
 // GetCachedImageList returns the list of images for a version
-func GetCachedImageList(imageRepository, version, _ string) ([]string, error) {
+func GetCachedImageList(imageRepository string, version string, bootstrapper string) ([]string, error) {
 	return images.Kubeadm(imageRepository, version)
 }
diff --git a/pkg/minikube/bootstrapper/bsutil/kubelet.go b/pkg/minikube/bootstrapper/bsutil/kubelet.go
index 39658b940..1b6019d89 100644
--- a/pkg/minikube/bootstrapper/bsutil/kubelet.go
+++ b/pkg/minikube/bootstrapper/bsutil/kubelet.go
@@ -90,12 +90,9 @@ func extraKubeletOpts(mc config.ClusterConfig, nc config.Node, r cruntime.Manage
 		extraOpts["hostname-override"] = nodeName
 	}
 
-	// Handled by CRI in 1.24+, and not by kubelet
-	if version.LT(semver.MustParse("1.24.0-alpha.2")) {
-		pauseImage := images.Pause(version, k8s.ImageRepository)
-		if _, ok := extraOpts["pod-infra-container-image"]; !ok && k8s.ImageRepository != "" && pauseImage != "" && k8s.ContainerRuntime != remoteContainerRuntime {
-			extraOpts["pod-infra-container-image"] = pauseImage
-		}
+	pauseImage := images.Pause(version, k8s.ImageRepository)
+	if _, ok := extraOpts["pod-infra-container-image"]; !ok && k8s.ImageRepository != "" && pauseImage != "" && k8s.ContainerRuntime != remoteContainerRuntime {
+		extraOpts["pod-infra-container-image"] = pauseImage
 	}
 
 	// parses a map of the feature gates for kubelet
diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
index 7a85fe387..0af629784 100644
--- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
+++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
@@ -76,7 +76,7 @@ type Bootstrapper struct {
 }
 
 // NewBootstrapper creates a new kubeadm.Bootstrapper
-func NewBootstrapper(_ libmachine.API, cc config.ClusterConfig, r command.Runner) (*Bootstrapper, error) {
+func NewBootstrapper(api libmachine.API, cc config.ClusterConfig, r command.Runner) (*Bootstrapper, error) {
 	return &Bootstrapper{c: r, contextName: cc.Name, k8sClient: nil}, nil
 }
 
diff --git a/pkg/minikube/cni/disabled.go b/pkg/minikube/cni/disabled.go
index dd985d5c3..5c273ef12 100644
--- a/pkg/minikube/cni/disabled.go
+++ b/pkg/minikube/cni/disabled.go
@@ -34,7 +34,7 @@ func (c Disabled) String() string {
 }
 
 // Apply enables the CNI
-func (c Disabled) Apply(_ Runner) error {
+func (c Disabled) Apply(r Runner) error {
 	if driver.IsKIC(c.cc.Driver) && c.cc.KubernetesConfig.ContainerRuntime != constants.Docker {
 		klog.Warningf("CNI is recommended for %q driver and %q runtime - expect networking issues", c.cc.Driver, c.cc.KubernetesConfig.ContainerRuntime)
 	}
diff --git a/pkg/minikube/command/exec_runner.go b/pkg/minikube/command/exec_runner.go
index f9bcdf516..3e3d885ca 100644
--- a/pkg/minikube/command/exec_runner.go
+++ b/pkg/minikube/command/exec_runner.go
@@ -220,6 +220,6 @@ func (e *execRunner) Remove(f assets.CopyableFile) error {
 	return os.Remove(dst)
 }
 
-func (e *execRunner) ReadableFile(_ string) (assets.ReadableFile, error) {
+func (e *execRunner) ReadableFile(sourcePath string) (assets.ReadableFile, error) {
 	return nil, fmt.Errorf("execRunner does not support ReadableFile - you could be the first to add it")
 }
diff --git a/pkg/minikube/command/fake_runner.go b/pkg/minikube/command/fake_runner.go
index d5ea83f1a..00bb20af3 100644
--- a/pkg/minikube/command/fake_runner.go
+++ b/pkg/minikube/command/fake_runner.go
@@ -163,7 +163,7 @@ func (f *FakeCommandRunner) Remove(file assets.CopyableFile) error {
 }
 
 // ReadableFile implements interface (without implementation)
-func (f *FakeCommandRunner) ReadableFile(_ string) (assets.ReadableFile, error) {
+func (f *FakeCommandRunner) ReadableFile(sourcePath string) (assets.ReadableFile, error) {
 	return nil, nil
 }
 
diff --git a/pkg/minikube/command/kic_runner.go b/pkg/minikube/command/kic_runner.go
index 29feac408..37b8f4e62 100644
--- a/pkg/minikube/command/kic_runner.go
+++ b/pkg/minikube/command/kic_runner.go
@@ -131,15 +131,15 @@ func (k *kicRunner) RunCmd(cmd *exec.Cmd) (*RunResult, error) {
 
 }
 
-func (k *kicRunner) StartCmd(_ *exec.Cmd) (*StartedCmd, error) {
+func (k *kicRunner) StartCmd(cmd *exec.Cmd) (*StartedCmd, error) {
 	return nil, fmt.Errorf("kicRunner does not support StartCmd - you could be the first to add it")
 }
 
-func (k *kicRunner) WaitCmd(_ *StartedCmd) (*RunResult, error) {
+func (k *kicRunner) WaitCmd(sc *StartedCmd) (*RunResult, error) {
 	return nil, fmt.Errorf("kicRunner does not support WaitCmd - you could be the first to add it")
 }
 
-func (k *kicRunner) ReadableFile(_ string) (assets.ReadableFile, error) {
+func (k *kicRunner) ReadableFile(sourcePath string) (assets.ReadableFile, error) {
 	return nil, fmt.Errorf("kicRunner does not support ReadableFile - you could be the first to add it")
 }
 
diff --git a/pkg/minikube/command/ssh_runner.go b/pkg/minikube/command/ssh_runner.go
index ca741aa4d..c72241d0a 100644
--- a/pkg/minikube/command/ssh_runner.go
+++ b/pkg/minikube/command/ssh_runner.go
@@ -87,7 +87,7 @@ func (s *sshReadableFile) Read(p []byte) (int, error) {
 	return s.reader.Read(p)
 }
 
-func (s *sshReadableFile) Seek(_ int64, _ int) (int64, error) {
+func (s *sshReadableFile) Seek(offset int64, whence int) (int64, error) {
 	return 0, fmt.Errorf("Seek is not implemented for sshReadableFile")
 }
 
diff --git a/pkg/minikube/config/profile.go b/pkg/minikube/config/profile.go
index 7c1a46c71..d14a8f732 100644
--- a/pkg/minikube/config/profile.go
+++ b/pkg/minikube/config/profile.go
@@ -257,15 +257,15 @@ func removeDupes(profiles []string) []string {
 	seen := map[string]bool{}
 	result := []string{}
 
-	for _, profile := range profiles {
-		if seen[profile] {
-			// Do not add duplicates.
-			continue
+	for n := range profiles {
+		if seen[profiles[n]] {
+			// Do not add duplicate.
+		} else {
+			// Record this element as an encountered element.
+			seen[profiles[n]] = true
+			// Append to result slice.
+			result = append(result, profiles[n])
 		}
-		// Record this element as an encountered element.
-		seen[profile] = true
-		// Append to result slice.
-		result = append(result, profile)
 	}
 	// Return the new slice.
 	return result
diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go
index 58633d8f4..4763e3759 100644
--- a/pkg/minikube/cruntime/containerd.go
+++ b/pkg/minikube/cruntime/containerd.go
@@ -462,13 +462,11 @@ func (r *Containerd) CGroupDriver() (string, error) {
 
 // KubeletOptions returns kubelet options for a containerd
 func (r *Containerd) KubeletOptions() map[string]string {
-	opts := map[string]string{
+	return map[string]string{
+		"container-runtime":          "remote",
 		"container-runtime-endpoint": fmt.Sprintf("unix://%s", r.SocketPath()),
+		"image-service-endpoint":     fmt.Sprintf("unix://%s", r.SocketPath()),
 	}
-	if r.KubernetesVersion.LT(semver.MustParse("1.24.0-alpha.0")) {
-		opts["container-runtime"] = "remote"
-	}
-	return opts
 }
 
 // ListContainers returns a list of managed by this container runtime
diff --git a/pkg/minikube/cruntime/cri.go b/pkg/minikube/cruntime/cri.go
index 448099e5d..bfa4964f2 100644
--- a/pkg/minikube/cruntime/cri.go
+++ b/pkg/minikube/cruntime/cri.go
@@ -247,7 +247,9 @@ func stopCRIContainers(cr CommandRunner, ids []string) error {
 // populateCRIConfig sets up /etc/crictl.yaml
 func populateCRIConfig(cr CommandRunner, socket string) error {
 	cPath := "/etc/crictl.yaml"
-	tmpl := "runtime-endpoint: unix://{{.Socket}}\n"
+	tmpl := `runtime-endpoint: unix://{{.Socket}}
+image-endpoint: unix://{{.Socket}}
+`
 	t, err := template.New("crictl").Parse(tmpl)
 	if err != nil {
 		return err
diff --git a/pkg/minikube/cruntime/crio.go b/pkg/minikube/cruntime/crio.go
index 930aae5eb..0b38b200c 100644
--- a/pkg/minikube/cruntime/crio.go
+++ b/pkg/minikube/cruntime/crio.go
@@ -358,13 +358,11 @@ func (r *CRIO) CGroupDriver() (string, error) {
 
 // KubeletOptions returns kubelet options for a runtime.
 func (r *CRIO) KubeletOptions() map[string]string {
-	opts := map[string]string{
-		"container-runtime-endpoint": fmt.Sprintf("unix://%s", r.SocketPath()),
+	return map[string]string{
+		"container-runtime":          "remote",
+		"container-runtime-endpoint": r.SocketPath(),
+		"image-service-endpoint":     r.SocketPath(),
 	}
-	if r.KubernetesVersion.LT(semver.MustParse("1.24.0-alpha.0")) {
-		opts["container-runtime"] = "remote"
-	}
-	return opts
 }
 
 // ListContainers returns a list of managed by this container runtime
diff --git a/pkg/minikube/cruntime/cruntime.go b/pkg/minikube/cruntime/cruntime.go
index 6edd86945..be04e87d8 100644
--- a/pkg/minikube/cruntime/cruntime.go
+++ b/pkg/minikube/cruntime/cruntime.go
@@ -147,8 +147,6 @@ type Config struct {
 	Socket string
 	// Runner is the CommandRunner object to execute commands with
 	Runner CommandRunner
-	// NetworkPlugin name of networking plugin ("cni")
-	NetworkPlugin string
 	// ImageRepository image repository to download image from
 	ImageRepository string
 	// KubernetesVersion Kubernetes version
@@ -221,7 +219,6 @@ func New(c Config) (Manager, error) {
 		return &Docker{
 			Socket:            sp,
 			Runner:            c.Runner,
-			NetworkPlugin:     c.NetworkPlugin,
 			ImageRepository:   c.ImageRepository,
 			KubernetesVersion: c.KubernetesVersion,
 			Init:              sm,
@@ -339,3 +336,14 @@ func CheckKernelCompatibility(cr CommandRunner, major, minor int) error {
 	}
 	return nil
 }
+
+func ConfigureNetworkPlugin(r Manager, cr CommandRunner, networkPlugin string) error {
+	// Only supported for Docker with cri-dockerd
+	if r.Name() != "Docker" {
+		if networkPlugin != "cni" {
+			return fmt.Errorf("unknown network plugin: %s", networkPlugin)
+		}
+		return nil
+	}
+	return dockerConfigureNetworkPlugin(cr, networkPlugin)
+}
diff --git a/pkg/minikube/cruntime/docker.go b/pkg/minikube/cruntime/docker.go
index dd2e1fadc..2a200cd52 100644
--- a/pkg/minikube/cruntime/docker.go
+++ b/pkg/minikube/cruntime/docker.go
@@ -69,7 +69,6 @@ func (e *ErrISOFeature) Error() string {
 type Docker struct {
 	Socket            string
 	Runner            CommandRunner
-	NetworkPlugin     string
 	ImageRepository   string
 	KubernetesVersion semver.Version
 	Init              sysinit.Manager
@@ -141,9 +140,6 @@ func (r *Docker) Enable(disOthers bool, cgroupDriver string, inUserNamespace boo
 	if err := populateCRIConfig(r.Runner, r.SocketPath()); err != nil {
 		return err
 	}
-	if err := generateCRIDockerdConfig(r.Runner, r.ImageRepository, r.KubernetesVersion, r.NetworkPlugin); err != nil {
-		return err
-	}
 
 	if err := r.Init.Unmask("docker.service"); err != nil {
 		return err
@@ -174,9 +170,6 @@ func (r *Docker) Enable(disOthers bool, cgroupDriver string, inUserNamespace boo
 		if err := r.Init.Restart(r.CRIService); err != nil {
 			return err
 		}
-		if err := r.Init.Restart("cri-docker"); err != nil {
-			return err
-		}
 	}
 
 	return nil
@@ -389,13 +382,11 @@ func (r *Docker) CGroupDriver() (string, error) {
 // KubeletOptions returns kubelet options for a runtime.
 func (r *Docker) KubeletOptions() map[string]string {
 	if r.UseCRI {
-		opts := map[string]string{
-			"container-runtime-endpoint": fmt.Sprintf("unix://%s", r.SocketPath()),
-		}
-		if r.KubernetesVersion.LT(semver.MustParse("1.24.0-alpha.0")) {
-			opts["container-runtime"] = "remote"
+		return map[string]string{
+			"container-runtime":          "remote",
+			"container-runtime-endpoint": r.SocketPath(),
+			"image-service-endpoint":     r.SocketPath(),
 		}
-		return opts
 	}
 	return map[string]string{
 		"container-runtime": "docker",
@@ -705,9 +696,7 @@ func getCriDockerdPath(cr CommandRunner) string {
 	return strings.TrimSuffix(rr.Stdout.String(), "\n")
 }
 
-func generateCRIDockerdConfig(cr CommandRunner, imageRepository string, kv semver.Version, networkPlugin string) error {
-
-	pauseImage := images.Pause(kv, imageRepository)
+func dockerConfigureNetworkPlugin(cr CommandRunner, networkPlugin string) error {
 	// $ cri-dockerd --version
 	// cri-dockerd 0.2.6 (d8accf7)
 	// $ cri-dockerd --help | grep -i cni
@@ -722,12 +711,10 @@ func generateCRIDockerdConfig(cr CommandRunner, imageRepository string, kv semve
 	}
 	opts := struct {
 		ExecPath       string
-		PauseImage     string
 		NetworkPlugin  string
 		ExtraArguments string
 	}{
 		ExecPath:       getCriDockerdPath(cr),
-		PauseImage:     pauseImage,
 		NetworkPlugin:  networkPlugin,
 		ExtraArguments: args,
 	}
@@ -735,7 +722,7 @@ func generateCRIDockerdConfig(cr CommandRunner, imageRepository string, kv semve
 	const CRIDockerServiceConfFile = "/etc/systemd/system/cri-docker.service.d/10-cni.conf"
 	var CRIDockerServiceConfTemplate = template.Must(template.New("criDockerServiceConfTemplate").Parse(`[Service]
 ExecStart=
-ExecStart={{.ExecPath}} --container-runtime-endpoint fd:// --pod-infra-container-image={{.PauseImage}} --network-plugin={{.NetworkPlugin}}{{.ExtraArguments}}`))
+ExecStart={{.ExecPath}} --container-runtime-endpoint fd:// --network-plugin={{.NetworkPlugin}}{{.ExtraArguments}}`))
 
 	b := bytes.Buffer{}
 	if err := CRIDockerServiceConfTemplate.Execute(&b, opts); err != nil {
diff --git a/pkg/minikube/download/download.go b/pkg/minikube/download/download.go
index cfc4a9cb5..93906d641 100644
--- a/pkg/minikube/download/download.go
+++ b/pkg/minikube/download/download.go
@@ -55,7 +55,7 @@ func SetAliyunMirror() {
 }
 
 // CreateDstDownloadMock is the default mock implementation of download.
-func CreateDstDownloadMock(_, dst string) error {
+func CreateDstDownloadMock(src, dst string) error {
 	if err := os.MkdirAll(filepath.Dir(dst), 0755); err != nil {
 		return errors.Wrap(err, "mkdir")
 	}
@@ -65,7 +65,7 @@ func CreateDstDownloadMock(_, dst string) error {
 }
 
 // download is a well-configured atomic download function
-func download(src, dst string) error {
+func download(src string, dst string) error {
 	var clientOptions []getter.ClientOption
 	if out.IsTerminal(os.Stdout) && !detect.GithubActionRunner() {
 		progress := getter.WithProgress(DefaultProgressBar)
diff --git a/pkg/minikube/download/iso.go b/pkg/minikube/download/iso.go
index 6842a6a51..299d0b614 100644
--- a/pkg/minikube/download/iso.go
+++ b/pkg/minikube/download/iso.go
@@ -41,7 +41,7 @@ const fileScheme = "file"
 // DefaultISOURLs returns a list of ISO URL's to consult by default, in priority order
 func DefaultISOURLs() []string {
 	v := version.GetISOVersion()
-	isoBucket := "minikube-builds/iso/16079"
+	isoBucket := "minikube-builds/iso/15973"
 
 	return []string{
 		fmt.Sprintf("https://storage.googleapis.com/%s/minikube-%s-%s.iso", isoBucket, v, runtime.GOARCH),
diff --git a/pkg/minikube/exit/exit.go b/pkg/minikube/exit/exit.go
index c4352975a..fddaf8ae2 100644
--- a/pkg/minikube/exit/exit.go
+++ b/pkg/minikube/exit/exit.go
@@ -82,7 +82,7 @@ func Advice(r reason.Kind, msg string, advice string, a ...out.V) {
 }
 
 // Error takes a fatal error, matches it against known issues, and outputs the best message for it
-func Error(r reason.Kind, _ string, err error) {
+func Error(r reason.Kind, msg string, err error) {
 	ki := reason.MatchKnownIssue(r, err, runtime.GOOS)
 	if ki != nil {
 		Message(*ki, err.Error())
diff --git a/pkg/minikube/localpath/localpath.go b/pkg/minikube/localpath/localpath.go
index ef77e07dc..60ca1a93e 100644
--- a/pkg/minikube/localpath/localpath.go
+++ b/pkg/minikube/localpath/localpath.go
@@ -81,22 +81,22 @@ func LastStartLog() string {
 
 // ClientCert returns client certificate path, used by kubeconfig
 func ClientCert(name string) string {
-	newCert := filepath.Join(Profile(name), "client.crt")
-	if _, err := os.Stat(newCert); err == nil {
-		return newCert
+	new := filepath.Join(Profile(name), "client.crt")
+	if _, err := os.Stat(new); err == nil {
+		return new
 	}
 
 	// minikube v1.5.x
 	legacy := filepath.Join(MiniPath(), "client.crt")
 	if _, err := os.Stat(legacy); err == nil {
-		klog.Infof("copying %s -> %s", legacy, newCert)
-		if err := copy.Copy(legacy, newCert); err != nil {
-			klog.Errorf("failed copy %s -> %s: %v", legacy, newCert, err)
+		klog.Infof("copying %s -> %s", legacy, new)
+		if err := copy.Copy(legacy, new); err != nil {
+			klog.Errorf("failed copy %s -> %s: %v", legacy, new, err)
 			return legacy
 		}
 	}
 
-	return newCert
+	return new
 }
 
 // PID returns the path to the pid file used by profile for scheduled stop
@@ -106,22 +106,22 @@ func PID(profile string) string {
 
 // ClientKey returns client certificate path, used by kubeconfig
 func ClientKey(name string) string {
-	newKey := filepath.Join(Profile(name), "client.key")
-	if _, err := os.Stat(newKey); err == nil {
-		return newKey
+	new := filepath.Join(Profile(name), "client.key")
+	if _, err := os.Stat(new); err == nil {
+		return new
 	}
 
 	// minikube v1.5.x
 	legacy := filepath.Join(MiniPath(), "client.key")
 	if _, err := os.Stat(legacy); err == nil {
-		klog.Infof("copying %s -> %s", legacy, newKey)
-		if err := copy.Copy(legacy, newKey); err != nil {
-			klog.Errorf("failed copy %s -> %s: %v", legacy, newKey, err)
+		klog.Infof("copying %s -> %s", legacy, new)
+		if err := copy.Copy(legacy, new); err != nil {
+			klog.Errorf("failed copy %s -> %s: %v", legacy, new, err)
 			return legacy
 		}
 	}
 
-	return newKey
+	return new
 }
 
 // CACert returns the minikube CA certificate shared between profiles
diff --git a/pkg/minikube/machine/client.go b/pkg/minikube/machine/client.go
index 29f50c0ba..a111a12a7 100644
--- a/pkg/minikube/machine/client.go
+++ b/pkg/minikube/machine/client.go
@@ -263,7 +263,7 @@ type ConnChecker struct {
 }
 
 // Check checks the connection
-func (cc *ConnChecker) Check(h *host.Host, _ bool) (string, *auth.Options, error) {
+func (cc *ConnChecker) Check(h *host.Host, swarm bool) (string, *auth.Options, error) {
 	authOptions := h.AuthOptions()
 	dockerHost, err := h.Driver.GetURL()
 	if err != nil {
diff --git a/pkg/minikube/machine/delete.go b/pkg/minikube/machine/delete.go
index 056e042fb..524b82f7e 100644
--- a/pkg/minikube/machine/delete.go
+++ b/pkg/minikube/machine/delete.go
@@ -97,11 +97,11 @@ func DeleteHost(api libmachine.API, machineName string, deleteAbandoned ...bool)
 	}
 
 	out.Step(style.DeletingHost, `Deleting "{{.profile_name}}" in {{.driver_name}} ...`, out.V{"profile_name": machineName, "driver_name": host.DriverName})
-	return deleteHost(api, host, machineName)
+	return delete(api, host, machineName)
 }
 
 // delete removes a host and its local data files
-func deleteHost(api libmachine.API, h *host.Host, machineName string) error {
+func delete(api libmachine.API, h *host.Host, machineName string) error {
 	if err := h.Driver.Remove(); err != nil {
 		klog.Warningf("remove failed, will retry: %v", err)
 		time.Sleep(1 * time.Second)
@@ -124,16 +124,17 @@ func demolish(api libmachine.API, cc config.ClusterConfig, n config.Node, h *hos
 	klog.Infof("DEMOLISHING %s ...", machineName)
 
 	// This will probably fail
-	if err := stop(h); err != nil {
+	err := stop(h)
+	if err != nil {
 		klog.Infof("stophost failed (probably ok): %v", err)
 	}
 
 	// For 95% of cases, this should be enough
-	if err := DeleteHost(api, machineName); err != nil {
+	err = DeleteHost(api, machineName)
+	if err != nil {
 		klog.Warningf("deletehost failed: %v", err)
 	}
 
-	if err := deleteHost(api, h, machineName); err != nil {
-		klog.Warningf("delete failed (probably ok) %v", err)
-	}
+	err = delete(api, h, machineName)
+	klog.Warningf("delete failed (probably ok) %v", err)
 }
diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go
index 14ec9ff74..5739cb2f3 100644
--- a/pkg/minikube/node/start.go
+++ b/pkg/minikube/node/start.go
@@ -385,7 +385,6 @@ func configureRuntimes(runner cruntime.CommandRunner, cc config.ClusterConfig, k
 		Type:              cc.KubernetesConfig.ContainerRuntime,
 		Socket:            cc.KubernetesConfig.CRISocket,
 		Runner:            runner,
-		NetworkPlugin:     cc.KubernetesConfig.NetworkPlugin,
 		ImageRepository:   cc.KubernetesConfig.ImageRepository,
 		KubernetesVersion: kv,
 		InsecureRegistry:  cc.InsecureRegistry,
@@ -405,7 +404,12 @@ func configureRuntimes(runner cruntime.CommandRunner, cc config.ClusterConfig, k
 	// make sure container runtime is restarted afterwards for these changes to take effect
 	disableLoopback := co.Type == constants.CRIO
 	if err := cni.ConfigureLoopbackCNI(runner, disableLoopback); err != nil {
-		klog.Warningf("unable to name loopback interface in configureRuntimes: %v", err)
+		klog.Warningf("unable to name loopback interface in dockerConfigureNetworkPlugin: %v", err)
+	}
+	if kv.GTE(semver.MustParse("1.24.0-alpha.2")) {
+		if err := cruntime.ConfigureNetworkPlugin(cr, runner, cc.KubernetesConfig.NetworkPlugin); err != nil {
+			exit.Error(reason.RuntimeEnable, "Failed to configure network plugin", err)
+		}
 	}
 	// ensure all default CNI(s) are properly configured on each and every node (re)start
 	// make sure container runtime is restarted afterwards for these changes to take effect
diff --git a/pkg/minikube/perf/start.go b/pkg/minikube/perf/start.go
index 9a942da8c..876cfb789 100644
--- a/pkg/minikube/perf/start.go
+++ b/pkg/minikube/perf/start.go
@@ -19,6 +19,7 @@ package perf
 import (
 	"context"
 	"fmt"
+	"io"
 	"log"
 	"os"
 	"os/exec"
@@ -35,7 +36,7 @@ const (
 )
 
 // CompareMinikubeStart compares the time to run `minikube start` between two minikube binaries
-func CompareMinikubeStart(ctx context.Context, binaries []*Binary) error {
+func CompareMinikubeStart(ctx context.Context, out io.Writer, binaries []*Binary) error {
 	drivers := []string{"kvm2", "docker"}
 	if runtime.GOOS == "darwin" {
 		drivers = []string{"hyperkit", "docker"}
diff --git a/pkg/minikube/schedule/daemonize_unix.go b/pkg/minikube/schedule/daemonize_unix.go
index 587fd8973..7dd9d3932 100644
--- a/pkg/minikube/schedule/daemonize_unix.go
+++ b/pkg/minikube/schedule/daemonize_unix.go
@@ -76,7 +76,7 @@ func killPIDForProfile(profile string) error {
 	return nil
 }
 
-func daemonize(profiles []string, _ time.Duration) error {
+func daemonize(profiles []string, duration time.Duration) error {
 	_, _, err := godaemon.MakeDaemon(&godaemon.DaemonAttr{})
 	if err != nil {
 		return err
diff --git a/pkg/minikube/shell/shell.go b/pkg/minikube/shell/shell.go
index cbf0a5af5..59729c881 100644
--- a/pkg/minikube/shell/shell.go
+++ b/pkg/minikube/shell/shell.go
@@ -196,7 +196,7 @@ type EnvConfig struct {
 }
 
 // SetScript writes out a shell-compatible set script
-func SetScript(w io.Writer, envTmpl string, data interface{}) error {
+func SetScript(ec EnvConfig, w io.Writer, envTmpl string, data interface{}) error {
 	tmpl := template.Must(template.New("envConfig").Parse(envTmpl))
 	return tmpl.Execute(w, data)
 }
diff --git a/pkg/minikube/sysinit/openrc.go b/pkg/minikube/sysinit/openrc.go
index adef72dee..83f8ab081 100644
--- a/pkg/minikube/sysinit/openrc.go
+++ b/pkg/minikube/sysinit/openrc.go
@@ -116,7 +116,7 @@ func (s *OpenRC) Start(svc string) error {
 }
 
 // Disable does nothing
-func (s *OpenRC) Disable(_ string) error {
+func (s *OpenRC) Disable(svc string) error {
 	return nil
 }
 
@@ -128,12 +128,12 @@ func (s *OpenRC) DisableNow(svc string) error {
 }
 
 // Mask does nothing
-func (s *OpenRC) Mask(_ string) error {
+func (s *OpenRC) Mask(svc string) error {
 	return nil
 }
 
 // Enable does nothing
-func (s *OpenRC) Enable(_ string) error {
+func (s *OpenRC) Enable(svc string) error {
 	return nil
 }
 
@@ -145,7 +145,7 @@ func (s *OpenRC) EnableNow(svc string) error {
 }
 
 // Unmask does nothing
-func (s *OpenRC) Unmask(_ string) error {
+func (s *OpenRC) Unmask(svc string) error {
 	return nil
 }
 
@@ -161,7 +161,7 @@ func (s *OpenRC) Restart(svc string) error {
 
 // Reload reloads a service
 // currently only used by our docker-env that doesn't need openrc implementation
-func (s *OpenRC) Reload(_ string) error {
+func (s *OpenRC) Reload(svc string) error {
 	return fmt.Errorf("reload is not implemented for OpenRC yet ! Please implement if needed")
 }
 
diff --git a/pkg/minikube/sysinit/systemd.go b/pkg/minikube/sysinit/systemd.go
index 4cdeeae20..54d4084d7 100644
--- a/pkg/minikube/sysinit/systemd.go
+++ b/pkg/minikube/sysinit/systemd.go
@@ -143,7 +143,7 @@ func (s *Systemd) ForceStop(svc string) error {
 }
 
 // GenerateInitShim does nothing for systemd
-func (s *Systemd) GenerateInitShim(_, _, _ string) ([]assets.CopyableFile, error) {
+func (s *Systemd) GenerateInitShim(svc string, binary string, unit string) ([]assets.CopyableFile, error) {
 	return nil, nil
 }
 
diff --git a/pkg/provision/buildroot.go b/pkg/provision/buildroot.go
index f15cd579e..c085c857d 100644
--- a/pkg/provision/buildroot.go
+++ b/pkg/provision/buildroot.go
@@ -153,7 +153,7 @@ WantedBy=multi-user.target
 }
 
 // Package installs a package
-func (p *BuildrootProvisioner) Package(_ string, _ pkgaction.PackageAction) error {
+func (p *BuildrootProvisioner) Package(name string, action pkgaction.PackageAction) error {
 	return nil
 }
 
diff --git a/pkg/provision/ubuntu.go b/pkg/provision/ubuntu.go
index 91c538648..330e3d40b 100644
--- a/pkg/provision/ubuntu.go
+++ b/pkg/provision/ubuntu.go
@@ -156,7 +156,7 @@ WantedBy=multi-user.target
 }
 
 // Package installs a package
-func (p *UbuntuProvisioner) Package(_ string, _ pkgaction.PackageAction) error {
+func (p *UbuntuProvisioner) Package(name string, action pkgaction.PackageAction) error {
 	return nil
 }
 
diff --git a/pkg/storage/storage_provisioner.go b/pkg/storage/storage_provisioner.go
index 1a3f753e3..9e408aed8 100644
--- a/pkg/storage/storage_provisioner.go
+++ b/pkg/storage/storage_provisioner.go
@@ -56,7 +56,7 @@ func NewHostPathProvisioner(pvDir string) controller.Provisioner {
 var _ controller.Provisioner = &hostPathProvisioner{}
 
 // Provision creates a storage asset and returns a PV object representing it.
-func (p *hostPathProvisioner) Provision(_ context.Context, options controller.ProvisionOptions) (*core.PersistentVolume, controller.ProvisioningState, error) {
+func (p *hostPathProvisioner) Provision(ctx context.Context, options controller.ProvisionOptions) (*core.PersistentVolume, controller.ProvisioningState, error) {
 	path := path.Join(p.pvDir, options.PVC.Namespace, options.PVC.Name)
 	klog.Infof("Provisioning volume %v to %s", options, path)
 	if err := os.MkdirAll(path, 0777); err != nil {
@@ -94,7 +94,7 @@ func (p *hostPathProvisioner) Provision(_ context.Context, options controller.Pr
 
 // Delete removes the storage asset that was created by Provision represented
 // by the given PV.
-func (p *hostPathProvisioner) Delete(_ context.Context, volume *core.PersistentVolume) error {
+func (p *hostPathProvisioner) Delete(ctx context.Context, volume *core.PersistentVolume) error {
 	klog.Infof("Deleting volume %v", volume)
 	ann, ok := volume.Annotations["hostPathProvisionerIdentity"]
 	if !ok {
diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md
index ee110983d..f0bbee706 100644
--- a/site/content/en/docs/commands/start.md
+++ b/site/content/en/docs/commands/start.md
@@ -26,7 +26,7 @@ minikube start [flags]
       --apiserver-names strings           A set of apiserver names which are used in the generated certificate for kubernetes.  This can be used if you want to make the apiserver available from outside the machine
       --apiserver-port int                The apiserver listening port (default 8443)
       --auto-update-drivers               If set, automatically updates drivers to the latest version. Defaults to true. (default true)
-      --base-image string                 The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.37-1679075007-16079@sha256:9d2bf610e530f47c7e43df9719717075e4c7ec510aea6047b29208bffe7f1978")
+      --base-image string                 The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.37-1678988071-16068@sha256:57f4012deea6a123117f6ae1c93cff056cdb7d4e3b534ed0e03818b49099d014")
       --binary-mirror string              Location to fetch kubectl, kubelet, & kubeadm binaries from.
       --cache-images                      If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none. (default true)
       --cert-expiration duration          Duration until minikube certificate expiration, defaults to three years (26280h). (default 26280h0m0s)
diff --git a/translations/de.json b/translations/de.json
index 2eac7eba1..361d65f7d 100644
--- a/translations/de.json
+++ b/translations/de.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "Das {{.minikube_addon}} Addon ist deaktiviert",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" wird in der nächsten Version veraltet (deprecated) sein, bitte wechsle zu \"minikube image load\"",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Der Kontext \"{{.context}}\" wurde aktualisiert, um auf {{.hostname}}:{{.port}} zu zeigen",
@@ -256,6 +257,7 @@
 	"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Fehler beim Ändern der Berechtigungen für {{.minikube_dir_path}}: {{.error}}",
 	"Failed to check main repository and mirrors for images": "Prüfen des Haupt-Repositories und der Mirrors für Images fehlgeschlagen",
 	"Failed to configure metallb IP {{.profile}}": "Konfiguration der metallb IP {{.profile}} fehlgeschlagen",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "Erstellen der Datei fehlgeschlagen",
 	"Failed to create runtime": "Erstellen der Runtime fehlgeschlagen",
@@ -815,7 +817,7 @@
 	"Unable to parse \"{{.kubernetes_version}}\": {{.error}}": "\"{{.kubernetes_version}}\" kann nicht geparst werden: {{.error}}",
 	"Unable to parse memory '{{.memory}}': {{.error}}": "Kann Speicher nicht parsen: '{{.memory}}': {{.error}}",
 	"Unable to parse version.json: {{.error}}, json: {{.json}}": "",
-	"Unable to pick a default driver. Here is what was considered, in preference order:": "Kann keinen Default-Treiber auswählen. Hier eine List der Treiber, die in Erwägung gezogen wurden, in der Reihe ihrer Präferenz",
+	"Unable to pick a default driver. Here is what was considered, in preference order:": "Kann keinen Default-Treiber auswählen. Hier eine List der Treiber, die in Erwähgung gezogen wurden, in der Reihe ihrer Präferenz",
 	"Unable to pull images, which may be OK: {{.error}}": "Bilder können nicht abgerufen werden, was möglicherweise kein Problem darstellt: {{.error}}",
 	"Unable to push cached images: {{.error}}": "Kann gecachete Image nicht veröffentlichen (push): {{.error}}",
 	"Unable to remove machine directory": "Kann Maschinen Verzeichnis nicht entfernen",
diff --git a/translations/es.json b/translations/es.json
index 584411cc4..0cb001733 100644
--- a/translations/es.json
+++ b/translations/es.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "El complemento \"{{.minikube_addon}}\" está desactivado",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "El contexto \"{{.context}}\" ha sido actualizado para apuntar a {{.hostname}}:{{.port}}",
@@ -265,6 +266,7 @@
 	"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "No se han podido cambiar los permisos de {{.minikube_dir_path}}: {{.error}}",
 	"Failed to check main repository and mirrors for images": "",
 	"Failed to configure metallb IP {{.profile}}": "",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "No se pudo crear el fichero",
 	"Failed to create runtime": "",
diff --git a/translations/fr.json b/translations/fr.json
index 6ef240e3b..698685683 100644
--- a/translations/fr.json
+++ b/translations/fr.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "Le module \"{{.minikube_addon}}\" est désactivé",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" sera obsolète dans les prochaines versions, veuillez passer à \"minikube image load\"",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Le contexte \"{{.context}}\" a été mis à jour pour pointer vers {{.hostname}}:{{.port}}",
diff --git a/translations/ja.json b/translations/ja.json
index e2e040df5..5657b3ccd 100644
--- a/translations/ja.json
+++ b/translations/ja.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "'{{.minikube_addon}}' アドオンが無効です",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "「minikube cache」は今後のバージョンで廃止予定になりますので、「minikube image load」に切り替えてください",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "「{{.context}}」コンテキストが更新されて、{{.hostname}}:{{.port}} を指すようになりました",
diff --git a/translations/ko.json b/translations/ko.json
index 94db97550..e1098ebcc 100644
--- a/translations/ko.json
+++ b/translations/ko.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "\"The '{{.minikube_addon}}' 이 비활성화되었습니다",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\"는 추후 버전에서 사용 중단됩니다. \"minikube image load\"로 전환하십시오",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "\"{{.context}}\" 컨텍스트가 {{.hostname}}:{{.port}}로 갱신되었습니다.",
@@ -276,6 +277,7 @@
 	"Failed to check if machine exists": "머신이 존재하는지 확인하는 데 실패하였습니다",
 	"Failed to check main repository and mirrors for images": "",
 	"Failed to configure metallb IP {{.profile}}": "",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "",
 	"Failed to create runtime": "",
diff --git a/translations/pl.json b/translations/pl.json
index f6046e034..f2e5f9bca 100644
--- a/translations/pl.json
+++ b/translations/pl.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "",
@@ -265,6 +266,7 @@
 	"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "Nie udało się zmienić uprawnień pliku {{.minikube_dir_path}}: {{.error}}",
 	"Failed to check main repository and mirrors for images": "",
 	"Failed to configure metallb IP {{.profile}}": "",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "",
 	"Failed to create runtime": "",
diff --git a/translations/ru.json b/translations/ru.json
index f2d0ae2fa..8325fe616 100644
--- a/translations/ru.json
+++ b/translations/ru.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "\"Дополнение '{{.minikube_addon}}' выключено",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "Контекст \"{{.context}}\" был обновлён и теперь указывает на {{.hostname}}:{{.port}}",
@@ -239,6 +240,7 @@
 	"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "",
 	"Failed to check main repository and mirrors for images": "",
 	"Failed to configure metallb IP {{.profile}}": "",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "",
 	"Failed to create runtime": "",
diff --git a/translations/strings.txt b/translations/strings.txt
index c56497e05..e51af9469 100644
--- a/translations/strings.txt
+++ b/translations/strings.txt
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "",
@@ -239,6 +240,7 @@
 	"Failed to change permissions for {{.minikube_dir_path}}: {{.error}}": "",
 	"Failed to check main repository and mirrors for images": "",
 	"Failed to configure metallb IP {{.profile}}": "",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "",
 	"Failed to create runtime": "",
diff --git a/translations/zh-CN.json b/translations/zh-CN.json
index 5c6638c5c..a6e5d6a6d 100644
--- a/translations/zh-CN.json
+++ b/translations/zh-CN.json
@@ -1,5 +1,6 @@
 {
 	"\n\n": "",
+	"\"'{{.minikube_addon}}' is not a valid minikube addon": "",
 	"\"The '{{.minikube_addon}}' addon is disabled": "'{{.minikube_addon}}' 插件已被禁用",
 	"\"minikube cache\" will be deprecated in upcoming versions, please switch to \"minikube image load\"": "\"minikube cache\" 将在即将发布的版本中弃用，请切换至 \"minikube image load\"",
 	"\"{{.context}}\" context has been updated to point to {{.hostname}}:{{.port}}": "",
@@ -326,6 +327,7 @@
 	"Failed to check main repository and mirrors for images": "",
 	"Failed to check main repository and mirrors for images for images": "无法检测主仓库和镜像仓库中的镜像",
 	"Failed to configure metallb IP {{.profile}}": "",
+	"Failed to configure network plugin": "",
 	"Failed to configure registry-aliases {{.profile}}": "",
 	"Failed to create file": "",
 	"Failed to create runtime": "",


Test patch:
diff --git a/.github/workflows/update-gotestsum-version.yml b/.github/workflows/update-gotestsum-version.yml
index 2c96ab2ea..3ccf5ed39 100644
--- a/.github/workflows/update-gotestsum-version.yml
+++ b/.github/workflows/update-gotestsum-version.yml
@@ -18,6 +18,7 @@ jobs:
       - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
         with:
           go-version: ${{env.GO_VERSION}}
+          cache: true
           cache-dependency-path: ./go.sum
       - name: Bump Gotestsum Versions
         id: bumpGotestsum
diff --git a/pkg/minikube/cruntime/cruntime_test.go b/pkg/minikube/cruntime/cruntime_test.go
index 60e068732..134806039 100644
--- a/pkg/minikube/cruntime/cruntime_test.go
+++ b/pkg/minikube/cruntime/cruntime_test.go
@@ -148,35 +148,30 @@ func TestCGroupDriver(t *testing.T) {
 func TestKubeletOptions(t *testing.T) {
 	var tests = []struct {
 		runtime string
-		version string
 		want    map[string]string
 	}{
-		{"docker", "1.23.0", map[string]string{"container-runtime": "docker"}},
-		{"docker", "1.24.0", map[string]string{
-			"container-runtime-endpoint": "unix:///var/run/cri-dockerd.sock",
-		}},
-		{"crio", "1.25.0", map[string]string{
-			"container-runtime-endpoint": "unix:///var/run/crio/crio.sock",
-		}},
-		{"containerd", "1.23.0", map[string]string{
+		{"docker", map[string]string{"container-runtime": "docker"}},
+		{"crio", map[string]string{
 			"container-runtime":          "remote",
-			"container-runtime-endpoint": "unix:///run/containerd/containerd.sock",
+			"container-runtime-endpoint": "/var/run/crio/crio.sock",
+			"image-service-endpoint":     "/var/run/crio/crio.sock",
 		}},
-		{"containerd", "1.24.0", map[string]string{
+		{"containerd", map[string]string{
+			"container-runtime":          "remote",
 			"container-runtime-endpoint": "unix:///run/containerd/containerd.sock",
+			"image-service-endpoint":     "unix:///run/containerd/containerd.sock",
 		}},
 	}
 	for _, tc := range tests {
 		t.Run(tc.runtime, func(t *testing.T) {
-			kv := semver.MustParse(tc.version)
-			r, err := New(Config{Type: tc.runtime, KubernetesVersion: kv})
+			r, err := New(Config{Type: tc.runtime})
 			if err != nil {
-				t.Fatalf("New(%s, %s): %v", tc.runtime, tc.version, err)
+				t.Fatalf("New(%s): %v", tc.runtime, err)
 			}
 
 			got := r.KubeletOptions()
 			if diff := cmp.Diff(tc.want, got); diff != "" {
-				t.Errorf("KubeletOptions(%s, %s) returned diff (-want +got):\n%s", tc.runtime, tc.version, diff)
+				t.Errorf("KubeletOptions(%s) returned diff (-want +got):\n%s", tc.runtime, diff)
 			}
 		})
 	}
@@ -257,11 +252,11 @@ func (f *FakeRunner) RunCmd(cmd *exec.Cmd) (*command.RunResult, error) {
 	}
 }
 
-func (f *FakeRunner) StartCmd(_ *exec.Cmd) (*command.StartedCmd, error) {
+func (f *FakeRunner) StartCmd(cmd *exec.Cmd) (*command.StartedCmd, error) {
 	return &command.StartedCmd{}, nil
 }
 
-func (f *FakeRunner) WaitCmd(_ *command.StartedCmd) (*command.RunResult, error) {
+func (f *FakeRunner) WaitCmd(sc *command.StartedCmd) (*command.RunResult, error) {
 	return &command.RunResult{}, nil
 }
 
@@ -277,7 +272,7 @@ func (f *FakeRunner) Remove(assets.CopyableFile) error {
 	return nil
 }
 
-func (f *FakeRunner) ReadableFile(_ string) (assets.ReadableFile, error) {
+func (f *FakeRunner) ReadableFile(sourcePath string) (assets.ReadableFile, error) {
 	return nil, nil
 }
 
diff --git a/pkg/minikube/machine/cache_binaries_test.go b/pkg/minikube/machine/cache_binaries_test.go
index 727d673d7..a6f1e3135 100644
--- a/pkg/minikube/machine/cache_binaries_test.go
+++ b/pkg/minikube/machine/cache_binaries_test.go
@@ -31,7 +31,7 @@ type copyFailRunner struct {
 	command.Runner
 }
 
-func (copyFailRunner) Copy(_ assets.CopyableFile) error {
+func (copyFailRunner) Copy(a assets.CopyableFile) error {
 	return fmt.Errorf("test error during copy file")
 }
 
diff --git a/pkg/minikube/machine/cluster_test.go b/pkg/minikube/machine/cluster_test.go
index a4cb3347c..646a704f8 100644
--- a/pkg/minikube/machine/cluster_test.go
+++ b/pkg/minikube/machine/cluster_test.go
@@ -38,7 +38,7 @@ import (
 	"k8s.io/minikube/pkg/minikube/tests"
 )
 
-func createMockDriverHost(_ config.ClusterConfig, _ config.Node) (interface{}, error) {
+func createMockDriverHost(c config.ClusterConfig, n config.Node) (interface{}, error) {
 	return nil, nil
 }
 
diff --git a/pkg/minikube/notify/notify_test.go b/pkg/minikube/notify/notify_test.go
index 9073ddf57..b6b0f8704 100644
--- a/pkg/minikube/notify/notify_test.go
+++ b/pkg/minikube/notify/notify_test.go
@@ -98,7 +98,7 @@ type URLHandlerCorrect struct {
 	releases []Release
 }
 
-func (h *URLHandlerCorrect) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
+func (h *URLHandlerCorrect) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	b, err := json.Marshal(h.releases)
 	if err != nil {
 		fmt.Println(err)
@@ -132,7 +132,7 @@ func TestLatestVersionFromURLCorrect(t *testing.T) {
 
 type URLHandlerNone struct{}
 
-func (h *URLHandlerNone) ServeHTTP(_ http.ResponseWriter, _ *http.Request) {
+func (h *URLHandlerNone) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 }
 
 func TestLatestVersionFromURLNone(t *testing.T) {
@@ -148,7 +148,7 @@ func TestLatestVersionFromURLNone(t *testing.T) {
 
 type URLHandlerMalformed struct{}
 
-func (h *URLHandlerMalformed) ServeHTTP(w http.ResponseWriter, _ *http.Request) {
+func (h *URLHandlerMalformed) ServeHTTP(w http.ResponseWriter, r *http.Request) {
 	w.Header().Set("Content-Type", "application/javascript")
 	fmt.Fprintf(w, "Malformed JSON")
 }
diff --git a/pkg/minikube/registry/drvs/docker/docker_test.go b/pkg/minikube/registry/drvs/docker/docker_test.go
index 2dcf69b2f..d8123eaa8 100644
--- a/pkg/minikube/registry/drvs/docker/docker_test.go
+++ b/pkg/minikube/registry/drvs/docker/docker_test.go
@@ -22,7 +22,6 @@ import (
 	"testing"
 
 	"github.com/blang/semver/v4"
-	"k8s.io/minikube/pkg/drivers/kic/oci"
 	"k8s.io/minikube/pkg/minikube/driver"
 	"k8s.io/minikube/pkg/minikube/registry"
 )
@@ -186,7 +185,6 @@ func TestStatus(t *testing.T) {
 	}
 	for _, tt := range tests {
 		dockerVersionOrState = func() (string, registry.State) { return tt.input, registry.State{} }
-		oci.CachedDaemonInfo = func(string) (oci.SysInfo, error) { return oci.SysInfo{}, nil }
 		state := status()
 		err := state.Error
 		if (err == nil && tt.shouldReturnError) || (err != nil && !tt.shouldReturnError) {
diff --git a/pkg/minikube/service/service_test.go b/pkg/minikube/service/service_test.go
index 7ac672da3..75ec349d3 100644
--- a/pkg/minikube/service/service_test.go
+++ b/pkg/minikube/service/service_test.go
@@ -63,7 +63,7 @@ func (m *MockClientGetter) GetCoreClient(string) (typed_core.CoreV1Interface, er
 		secretsMap:   m.secretsMap}, nil
 }
 
-func (m *MockCoreClient) Secrets(_ string) typed_core.SecretInterface {
+func (m *MockCoreClient) Secrets(ns string) typed_core.SecretInterface {
 	return &fake.FakeSecrets{Fake: &fake.FakeCoreV1{Fake: &testing_fake.Fake{}}}
 }
 
@@ -218,7 +218,7 @@ var endpointMap = map[string]*core.Endpoints{
 	},
 }
 
-func (e MockEndpointsInterface) Get(_ context.Context, name string, _ meta.GetOptions) (*core.Endpoints, error) {
+func (e MockEndpointsInterface) Get(ctx context.Context, name string, _ meta.GetOptions) (*core.Endpoints, error) {
 	endpoint, ok := endpointMap[name]
 	if !ok {
 		return nil, errors.New("Endpoint not found")
@@ -236,7 +236,7 @@ type MockSecretInterface struct {
 	SecretsList *core.SecretList
 }
 
-func (s MockServiceInterface) List(_ context.Context, opts meta.ListOptions) (*core.ServiceList, error) {
+func (s MockServiceInterface) List(ctx context.Context, opts meta.ListOptions) (*core.ServiceList, error) {
 	serviceList := &core.ServiceList{
 		Items: []core.Service{},
 	}
@@ -255,7 +255,7 @@ func (s MockServiceInterface) List(_ context.Context, opts meta.ListOptions) (*c
 	return s.ServiceList, nil
 }
 
-func (s MockServiceInterface) Get(_ context.Context, name string, _ meta.GetOptions) (*core.Service, error) {
+func (s MockServiceInterface) Get(ctx context.Context, name string, _ meta.GetOptions) (*core.Service, error) {
 	for _, svc := range s.ServiceList.Items {
 		if svc.ObjectMeta.Name == name {
 			return &svc, nil
@@ -265,7 +265,7 @@ func (s MockServiceInterface) Get(_ context.Context, name string, _ meta.GetOpti
 	return nil, errors.New("Service not found")
 }
 
-func (s MockServiceInterface) Create(_ context.Context, service *core.Service, _ meta.CreateOptions) (*core.Service, error) {
+func (s MockServiceInterface) Create(ctx context.Context, service *core.Service, _ meta.CreateOptions) (*core.Service, error) {
 	s.ServiceList.Items = append(s.ServiceList.Items, *service)
 	return service, nil
 }
diff --git a/pkg/minikube/shell/shell_test.go b/pkg/minikube/shell/shell_test.go
index a5e57d000..e0e2dc372 100644
--- a/pkg/minikube/shell/shell_test.go
+++ b/pkg/minikube/shell/shell_test.go
@@ -144,11 +144,15 @@ func TestDetectUnset(t *testing.T) {
 }
 
 func TestSetScript(t *testing.T) {
+	ec := EnvConfig{"bash"}
 	var w bytes.Buffer
-	if err := SetScript(&w, "foo", nil); err != nil {
+	if err := SetScript(ec, &w, "foo", nil); err != nil {
 		t.Fatalf("Unexpected error: '%v' during Setting script", err)
 	}
 	if w.String() != "foo" {
 		t.Fatalf("Expected foo writed by SetScript, but got '%v'", w.String())
 	}
+	if ec.Shell == "" {
+		t.Fatalf("Expected no empty shell")
+	}
 }
diff --git a/pkg/minikube/storageclass/storageclass_test.go b/pkg/minikube/storageclass/storageclass_test.go
index 3ed785a59..0686628f5 100644
--- a/pkg/minikube/storageclass/storageclass_test.go
+++ b/pkg/minikube/storageclass/storageclass_test.go
@@ -74,7 +74,7 @@ func (mockStorageV1InterfaceWithBadItem) StorageClasses() storagev1.StorageClass
 	return mockStorageClassInterfaceWithBadItem{}
 }
 
-func (mockStorageClassInterfaceOk) Get(_ context.Context, name string, _ metav1.GetOptions) (*v1.StorageClass, error) {
+func (mockStorageClassInterfaceOk) Get(ctx context.Context, name string, options metav1.GetOptions) (*v1.StorageClass, error) {
 	if strings.HasPrefix(name, "bad-class") {
 		return nil, fmt.Errorf("mocked error. No such class")
 	}
@@ -82,31 +82,31 @@ func (mockStorageClassInterfaceOk) Get(_ context.Context, name string, _ metav1.
 	return &sc, nil
 }
 
-func (m mockStorageClassInterfaceOk) List(_ context.Context, _ metav1.ListOptions) (*v1.StorageClassList, error) {
+func (m mockStorageClassInterfaceOk) List(ctx context.Context, opts metav1.ListOptions) (*v1.StorageClassList, error) {
 	scl := v1.StorageClassList{}
 	sc := v1.StorageClass{Provisioner: "standard"}
 	scl.Items = append(scl.Items, sc)
 	return &scl, nil
 }
 
-func (m mockStorageClassInterfaceWithBadItem) List(_ context.Context, _ metav1.ListOptions) (*v1.StorageClassList, error) {
+func (m mockStorageClassInterfaceWithBadItem) List(ctx context.Context, opts metav1.ListOptions) (*v1.StorageClassList, error) {
 	scl := v1.StorageClassList{}
 	sc := v1.StorageClass{Provisioner: "bad", ObjectMeta: metav1.ObjectMeta{Name: "standard"}}
 	scl.Items = append(scl.Items, sc)
 	return &scl, nil
 }
-func (mockStorageClassInterfaceListErr) List(_ context.Context, _ metav1.ListOptions) (*v1.StorageClassList, error) {
+func (mockStorageClassInterfaceListErr) List(ctx context.Context, opts metav1.ListOptions) (*v1.StorageClassList, error) {
 	return nil, fmt.Errorf("mocked list error")
 }
 
-func (mockStorageClassInterfaceOk) Update(_ context.Context, sc *v1.StorageClass, _ metav1.UpdateOptions) (*v1.StorageClass, error) {
+func (mockStorageClassInterfaceOk) Update(ctx context.Context, sc *v1.StorageClass, opts metav1.UpdateOptions) (*v1.StorageClass, error) {
 	if strings.HasPrefix(sc.Provisioner, "bad") {
 		return nil, fmt.Errorf("bad provisioner")
 	}
 	return &v1.StorageClass{}, nil
 }
 
-func (mockStorageClassInterfaceWithBadItem) Update(_ context.Context, sc *v1.StorageClass, _ metav1.UpdateOptions) (*v1.StorageClass, error) {
+func (mockStorageClassInterfaceWithBadItem) Update(ctx context.Context, sc *v1.StorageClass, opts metav1.UpdateOptions) (*v1.StorageClass, error) {
 	if strings.HasPrefix(sc.Provisioner, "bad") {
 		return nil, fmt.Errorf("bad provisioner")
 	}
diff --git a/pkg/minikube/tests/driver_mock.go b/pkg/minikube/tests/driver_mock.go
index 14b54b90c..a93201dbe 100644
--- a/pkg/minikube/tests/driver_mock.go
+++ b/pkg/minikube/tests/driver_mock.go
@@ -141,7 +141,7 @@ func (d *MockDriver) Restart() error {
 }
 
 // SetConfigFromFlags sets the machine config
-func (d *MockDriver) SetConfigFromFlags(_ drivers.DriverOptions) error {
+func (d *MockDriver) SetConfigFromFlags(opts drivers.DriverOptions) error {
 	return nil
 }
 
diff --git a/pkg/minikube/tests/provision_mock.go b/pkg/minikube/tests/provision_mock.go
index 1810b5d13..0b7abd55f 100644
--- a/pkg/minikube/tests/provision_mock.go
+++ b/pkg/minikube/tests/provision_mock.go
@@ -36,12 +36,12 @@ func (provisioner *MockProvisioner) String() string {
 }
 
 // Service performs an action for a service
-func (provisioner *MockProvisioner) Service(_ string, _ serviceaction.ServiceAction) error {
+func (provisioner *MockProvisioner) Service(name string, action serviceaction.ServiceAction) error {
 	return nil
 }
 
 // Package performs an action for a package
-func (provisioner *MockProvisioner) Package(_ string, _ pkgaction.PackageAction) error {
+func (provisioner *MockProvisioner) Package(name string, action pkgaction.PackageAction) error {
 	return nil
 }
 
@@ -51,7 +51,7 @@ func (provisioner *MockProvisioner) Hostname() (string, error) {
 }
 
 // SetHostname sets the hostname
-func (provisioner *MockProvisioner) SetHostname(_ string) error {
+func (provisioner *MockProvisioner) SetHostname(hostname string) error {
 	return nil
 }
 
@@ -66,7 +66,7 @@ func (provisioner *MockProvisioner) GetAuthOptions() auth.Options {
 }
 
 // GenerateDockerOptions generates Docker options
-func (provisioner *MockProvisioner) GenerateDockerOptions(_ int) (*provision.DockerOptions, error) {
+func (provisioner *MockProvisioner) GenerateDockerOptions(dockerPort int) (*provision.DockerOptions, error) {
 	return &provision.DockerOptions{}, nil
 }
 
@@ -76,7 +76,7 @@ func (provisioner *MockProvisioner) CompatibleWithHost() bool {
 }
 
 // SetOsReleaseInfo sets the os-release info
-func (provisioner *MockProvisioner) SetOsReleaseInfo(_ *provision.OsRelease) {
+func (provisioner *MockProvisioner) SetOsReleaseInfo(info *provision.OsRelease) {
 }
 
 // GetOsReleaseInfo gets the os-release info
@@ -85,17 +85,17 @@ func (provisioner *MockProvisioner) GetOsReleaseInfo() (*provision.OsRelease, er
 }
 
 // AttemptIPContact attempts to contact an IP and port
-func (provisioner *MockProvisioner) AttemptIPContact(_ int) {
+func (provisioner *MockProvisioner) AttemptIPContact(dockerPort int) {
 }
 
 // Provision provisions the machine
-func (provisioner *MockProvisioner) Provision(_ swarm.Options, _ auth.Options, _ engine.Options) error {
+func (provisioner *MockProvisioner) Provision(swarmOptions swarm.Options, authOptions auth.Options, engineOptions engine.Options) error {
 	provisioner.Provisioned = true
 	return nil
 }
 
 // SSHCommand runs a SSH command
-func (provisioner *MockProvisioner) SSHCommand(_ string) (string, error) {
+func (provisioner *MockProvisioner) SSHCommand(args string) (string, error) {
 	return "", nil
 }
 
@@ -115,6 +115,6 @@ type MockDetector struct {
 }
 
 // DetectProvisioner detects a provisioner
-func (m *MockDetector) DetectProvisioner(_ drivers.Driver) (provision.Provisioner, error) {
+func (m *MockDetector) DetectProvisioner(d drivers.Driver) (provision.Provisioner, error) {
 	return m.Provisioner, nil
 }
diff --git a/pkg/minikube/tunnel/loadbalancer_patcher_test.go b/pkg/minikube/tunnel/loadbalancer_patcher_test.go
index 0928d43ad..d746d9c0e 100644
--- a/pkg/minikube/tunnel/loadbalancer_patcher_test.go
+++ b/pkg/minikube/tunnel/loadbalancer_patcher_test.go
@@ -35,7 +35,7 @@ type stubCoreClient struct {
 	restClient   *rest.RESTClient
 }
 
-func (c *stubCoreClient) Services(_ string) typed_core.ServiceInterface {
+func (c *stubCoreClient) Services(namespace string) typed_core.ServiceInterface {
 	return &stubServices{
 		fake.FakeServices{Fake: &c.FakeCoreV1},
 		c.servicesList,
@@ -51,7 +51,7 @@ type stubServices struct {
 	servicesList *core.ServiceList
 }
 
-func (s *stubServices) List(_ context.Context, _ meta.ListOptions) (*core.ServiceList, error) {
+func (s *stubServices) List(ctx context.Context, opts meta.ListOptions) (*core.ServiceList, error) {
 	return s.servicesList, nil
 }
 
@@ -70,7 +70,7 @@ type countingRequestSender struct {
 	requests int
 }
 
-func (s *countingRequestSender) send(_ *rest.Request) (result []byte, err error) {
+func (s *countingRequestSender) send(request *rest.Request) (result []byte, err error) {
 	s.requests++
 	return nil, nil
 }
@@ -79,7 +79,7 @@ type recordingPatchConverter struct {
 	patches []*Patch
 }
 
-func (r *recordingPatchConverter) convert(_ rest.Interface, patch *Patch) *rest.Request {
+func (r *recordingPatchConverter) convert(restClient rest.Interface, patch *Patch) *rest.Request {
 	r.patches = append(r.patches, patch)
 	return nil
 }
diff --git a/pkg/minikube/tunnel/test_doubles.go b/pkg/minikube/tunnel/test_doubles.go
index 28a452a6c..1f5cd9c11 100644
--- a/pkg/minikube/tunnel/test_doubles.go
+++ b/pkg/minikube/tunnel/test_doubles.go
@@ -86,10 +86,10 @@ type stubConfigLoader struct {
 	e error
 }
 
-func (l *stubConfigLoader) WriteConfigToFile(_ string, _ *config.ClusterConfig, _ ...string) error {
+func (l *stubConfigLoader) WriteConfigToFile(profileName string, cc *config.ClusterConfig, miniHome ...string) error {
 	return l.e
 }
 
-func (l *stubConfigLoader) LoadConfigFromFile(_ string, _ ...string) (*config.ClusterConfig, error) {
+func (l *stubConfigLoader) LoadConfigFromFile(profile string, miniHome ...string) (*config.ClusterConfig, error) {
 	return l.c, l.e
 }
diff --git a/test/integration/addons_test.go b/test/integration/addons_test.go
index f40a4f93c..302870964 100644
--- a/test/integration/addons_test.go
+++ b/test/integration/addons_test.go
@@ -156,6 +156,11 @@ func TestAddons(t *testing.T) {
 		if err != nil {
 			t.Errorf("failed to disable dashboard addon: args %q : %v", rr.Command(), err)
 		}
+		// Disable a non-enabled addon
+		rr, err = Run(t, exec.CommandContext(ctx, Target(), "addons", "disable", "gvisor", "-p", profile))
+		if err != nil {
+			t.Errorf("failed to disable non-enabled addon: args %q : %v", rr.Command(), err)
+		}
 	})
 }
 
diff --git a/test/integration/functional_test.go b/test/integration/functional_test.go
index b6a0138ee..c06ee1e95 100644
--- a/test/integration/functional_test.go
+++ b/test/integration/functional_test.go
@@ -623,7 +623,7 @@ func validateStartWithCustomCerts(ctx context.Context, t *testing.T, profile str
 }
 
 // validateAuditAfterStart makes sure the audit log contains the correct logging after minikube start
-func validateAuditAfterStart(_ context.Context, t *testing.T, profile string) {
+func validateAuditAfterStart(ctx context.Context, t *testing.T, profile string) {
 	// docs: Read the audit log file and make sure it contains the current minikube profile name
 	got, err := auditContains(profile)
 	if err != nil {
@@ -1845,7 +1845,7 @@ func localEmptyCertPath() string {
 }
 
 // Copy extra file into minikube home folder for file sync test
-func setupFileSync(_ context.Context, t *testing.T, _ string) {
+func setupFileSync(ctx context.Context, t *testing.T, profile string) {
 	p := localSyncTestPath()
 	t.Logf("local sync path: %s", p)
 	syncFile := filepath.Join(*testdataDir, "sync.test")
diff --git a/test/integration/functional_test_tunnel_test.go b/test/integration/functional_test_tunnel_test.go
index 0d0317ecd..e96e8f568 100644
--- a/test/integration/functional_test_tunnel_test.go
+++ b/test/integration/functional_test_tunnel_test.go
@@ -274,7 +274,7 @@ func validateDNSDig(ctx context.Context, t *testing.T, profile string) {
 
 // validateDNSDscacheutil validates if the DNS forwarding works by dscacheutil command DNS lookup
 // NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental
-func validateDNSDscacheutil(ctx context.Context, t *testing.T, _ string) {
+func validateDNSDscacheutil(ctx context.Context, t *testing.T, profile string) {
 	if detect.GithubActionRunner() && runtime.GOOS == "darwin" {
 		t.Skip("skipping: access direct test is broken on github actions on macos https://github.com/kubernetes/minikube/issues/8434")
 	}
@@ -299,7 +299,7 @@ func validateDNSDscacheutil(ctx context.Context, t *testing.T, _ string) {
 
 // validateAccessDNS validates if the test service can be accessed with DNS forwarding from host
 // NOTE: DNS forwarding is experimental: https://minikube.sigs.k8s.io/docs/handbook/accessing/#dns-resolution-experimental
-func validateAccessDNS(_ context.Context, t *testing.T, profile string) {
+func validateAccessDNS(ctx context.Context, t *testing.T, profile string) {
 	if detect.GithubActionRunner() && runtime.GOOS == "darwin" {
 		t.Skip("skipping: access direct test is broken on github actions on macos https://github.com/kubernetes/minikube/issues/8434")
 	}
@@ -363,7 +363,7 @@ func validateAccessDNS(_ context.Context, t *testing.T, profile string) {
 }
 
 // validateTunnelDelete stops `minikube tunnel`
-func validateTunnelDelete(_ context.Context, t *testing.T, _ string) {
+func validateTunnelDelete(ctx context.Context, t *testing.T, profile string) {
 	checkRoutePassword(t)
 	// Stop tunnel
 	tunnelSession.Stop(t)
diff --git a/test/integration/json_output_test.go b/test/integration/json_output_test.go
index 12e2a18df..03e7d1691 100644
--- a/test/integration/json_output_test.go
+++ b/test/integration/json_output_test.go
@@ -103,7 +103,7 @@ func TestJSONOutput(t *testing.T) {
 }
 
 // validateDistinctCurrentSteps makes sure each step has a distinct step number
-func validateDistinctCurrentSteps(_ context.Context, t *testing.T, ces []*cloudEvent) {
+func validateDistinctCurrentSteps(ctx context.Context, t *testing.T, ces []*cloudEvent) {
 	steps := map[string]string{}
 	for _, ce := range ces {
 		currentStep, exists := ce.data["currentstep"]
@@ -118,7 +118,7 @@ func validateDistinctCurrentSteps(_ context.Context, t *testing.T, ces []*cloudE
 }
 
 // validateIncreasingCurrentSteps verifies that for a successful minikube start, 'current step' should be increasing
-func validateIncreasingCurrentSteps(_ context.Context, t *testing.T, ces []*cloudEvent) {
+func validateIncreasingCurrentSteps(ctx context.Context, t *testing.T, ces []*cloudEvent) {
 	step := -1
 	for i, ce := range ces {
 		currentStep, exists := ce.data["currentstep"]
diff --git a/test/integration/multinode_test.go b/test/integration/multinode_test.go
index 679b5027c..df9793a5c 100644
--- a/test/integration/multinode_test.go
+++ b/test/integration/multinode_test.go
@@ -28,11 +28,9 @@ import (
 	"path/filepath"
 	"strings"
 	"testing"
-	"time"
 
 	"k8s.io/minikube/cmd/minikube/cmd"
 	"k8s.io/minikube/pkg/minikube/config"
-	"k8s.io/minikube/pkg/util/retry"
 )
 
 // TestMultiNode tests all multi node cluster functionality
@@ -489,31 +487,20 @@ func validateDeployAppToMultiNode(ctx context.Context, t *testing.T, profile str
 	}
 
 	// resolve Pod IPs
-	resolvePodIPs := func() error {
-		rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].status.podIP}'"))
-		if err != nil {
-			err := fmt.Errorf("failed to retrieve Pod IPs (may be temporary): %v", err)
-			t.Logf(err.Error())
-			return err
-		}
-		podIPs := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ")
-		if len(podIPs) != 2 {
-			err := fmt.Errorf("expected 2 Pod IPs but got %d (may be temporary), output: %q", len(podIPs), rr.Output())
-			t.Logf(err.Error())
-			return err
-		} else if podIPs[0] == podIPs[1] {
-			err := fmt.Errorf("expected 2 different pod IPs but got %s and %s (may be temporary), output: %q", podIPs[0], podIPs[1], rr.Output())
-			t.Logf(err.Error())
-			return err
-		}
-		return nil
+	rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].status.podIP}'"))
+	if err != nil {
+		t.Errorf("failed to retrieve Pod IPs")
 	}
-	if err := retry.Expo(resolvePodIPs, 1*time.Second, Seconds(120)); err != nil {
-		t.Errorf("failed to resolve pod IPs: %v", err)
+	podIPs := strings.Split(strings.Trim(rr.Stdout.String(), "'"), " ")
+	if len(podIPs) != 2 {
+		t.Errorf("expected 2 Pod IPs but got %d, output: %q", len(podIPs), rr.Output())
+	} else if podIPs[0] == podIPs[1] {
+		t.Errorf("expected 2 different pod IPs but got %s and %s. output: %q", podIPs[0], podIPs[1], rr.Output())
+
 	}
 
 	// get Pod names
-	rr, err := Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'"))
+	rr, err = Run(t, exec.CommandContext(ctx, Target(), "kubectl", "-p", profile, "--", "get", "pods", "-o", "jsonpath='{.items[*].metadata.name}'"))
 	if err != nil {
 		t.Errorf("failed get Pod names")
 	}
diff --git a/test/integration/skaffold_test.go b/test/integration/skaffold_test.go
index a407426d5..ecdd92f82 100644
--- a/test/integration/skaffold_test.go
+++ b/test/integration/skaffold_test.go
@@ -82,9 +82,9 @@ func TestSkaffold(t *testing.T) {
 	}
 
 	if filepath.Base(Target()) != binaryName {
-		dst := filepath.Join(filepath.Dir(abs), binaryName)
-		t.Logf("copying %s to %s", Target(), dst)
-		if err := copy.Copy(Target(), dst); err != nil {
+		new := filepath.Join(filepath.Dir(abs), binaryName)
+		t.Logf("copying %s to %s", Target(), new)
+		if err := copy.Copy(Target(), new); err != nil {
 			t.Fatalf("error copying to minikube")
 		}
 	}
diff --git a/test/integration/start_stop_delete_test.go b/test/integration/start_stop_delete_test.go
index edfe9be87..e8435c3e3 100644
--- a/test/integration/start_stop_delete_test.go
+++ b/test/integration/start_stop_delete_test.go
@@ -181,7 +181,7 @@ func TestStartStop(t *testing.T) {
 }
 
 // validateFirstStart runs the initial minikube start
-func validateFirstStart(ctx context.Context, t *testing.T, profile, _, _ string, startArgs []string) {
+func validateFirstStart(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...))
 	if err != nil {
@@ -190,7 +190,7 @@ func validateFirstStart(ctx context.Context, t *testing.T, profile, _, _ string,
 }
 
 // validateDeploying deploys an app the minikube cluster
-func validateDeploying(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) {
+func validateDeploying(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	if !strings.Contains(tcName, "cni") {
 		testPodScheduling(ctx, t, profile)
@@ -198,7 +198,7 @@ func validateDeploying(ctx context.Context, t *testing.T, profile, tcName, _ str
 }
 
 // validateEnableAddonWhileActive makes sure addons can be enabled while cluster is active.
-func validateEnableAddonWhileActive(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) {
+func validateEnableAddonWhileActive(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 
 	// Enable an addon to assert it requests the correct image.
@@ -223,7 +223,7 @@ func validateEnableAddonWhileActive(ctx context.Context, t *testing.T, profile,
 }
 
 // validateStop tests minikube stop
-func validateStop(ctx context.Context, t *testing.T, profile, _, _ string, _ []string) {
+func validateStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	rr, err := Run(t, exec.CommandContext(ctx, Target(), "stop", "-p", profile, "--alsologtostderr", "-v=3"))
 	if err != nil {
@@ -232,7 +232,7 @@ func validateStop(ctx context.Context, t *testing.T, profile, _, _ string, _ []s
 }
 
 // validateEnableAddonAfterStop makes sure addons can be enabled on a stopped cluster
-func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile, _, _ string, _ []string) {
+func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	// The none driver never really stops
 	if !NoneDriver() {
@@ -251,7 +251,7 @@ func validateEnableAddonAfterStop(ctx context.Context, t *testing.T, profile, _,
 }
 
 // validateSecondStart verifies that starting a stopped cluster works
-func validateSecondStart(ctx context.Context, t *testing.T, profile, _, _ string, startArgs []string) {
+func validateSecondStart(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	rr, err := Run(t, exec.CommandContext(ctx, Target(), startArgs...))
 	if err != nil {
@@ -267,7 +267,7 @@ func validateSecondStart(ctx context.Context, t *testing.T, profile, _, _ string
 }
 
 // validateAppExistsAfterStop verifies that a user's app will not vanish after a minikube stop
-func validateAppExistsAfterStop(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) {
+func validateAppExistsAfterStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	if strings.Contains(tcName, "cni") {
 		t.Logf("WARNING: cni mode requires additional setup before pods can schedule :(")
@@ -278,7 +278,7 @@ func validateAppExistsAfterStop(ctx context.Context, t *testing.T, profile, tcNa
 }
 
 // validateAddonAfterStop validates that an addon which was enabled when minikube is stopped will be enabled and working..
-func validateAddonAfterStop(ctx context.Context, t *testing.T, profile, tcName, _ string, _ []string) {
+func validateAddonAfterStop(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	if strings.Contains(tcName, "cni") {
 		t.Logf("WARNING: cni mode requires additional setup before pods can schedule :(")
@@ -299,14 +299,14 @@ func validateAddonAfterStop(ctx context.Context, t *testing.T, profile, tcName,
 }
 
 // validateKubernetesImages verifies that a restarted cluster contains all the necessary images
-func validateKubernetesImages(ctx context.Context, t *testing.T, profile, _, tcVersion string, _ []string) {
+func validateKubernetesImages(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	if !NoneDriver() {
 		testPulledImages(ctx, t, profile, tcVersion)
 	}
 }
 
 // validatePauseAfterStart verifies that minikube pause works
-func validatePauseAfterStart(ctx context.Context, t *testing.T, profile, _, _ string, _ []string) {
+func validatePauseAfterStart(ctx context.Context, t *testing.T, profile string, tcName string, tcVersion string, startArgs []string) {
 	defer PostMortemLogs(t, profile)
 	testPause(ctx, t, profile)
 }
@@ -348,7 +348,7 @@ func testPodScheduling(ctx context.Context, t *testing.T, profile string) {
 }
 
 // testPulledImages asserts that this configuration pulls only expected images
-func testPulledImages(ctx context.Context, t *testing.T, profile, version string) {
+func testPulledImages(ctx context.Context, t *testing.T, profile string, version string) {
 	t.Helper()
 	defer PostMortemLogs(t, profile)
 
diff --git a/test/stress/stress_test.go b/test/stress/stress_test.go
index 17d930895..629119172 100644
--- a/test/stress/stress_test.go
+++ b/test/stress/stress_test.go
@@ -66,15 +66,15 @@ func TestStress(t *testing.T) {
 
 	for i := 1; i <= *loops; i++ {
 		t.Logf("Loop %d of %d: %s to HEAD", i, *loops, *upgradeFrom)
-		runStress(t, oldPath, profile)
+		runStress(t, oldPath, profile, i)
 		t.Logf("Loop %d of %d done.", i, *loops)
 	}
 }
 
-type stressFunc func(*testing.T, string, string)
+type stressFunc func(*testing.T, string, string, int)
 
 // This run the guts of the actual test
-func runStress(t *testing.T, oldPath string, profile string) {
+func runStress(t *testing.T, oldPath string, profile string, loop int) {
 	// Cleanup old runs
 	runCommand(t, false, newPath, "delete", "-p", profile)
 
@@ -91,32 +91,32 @@ func runStress(t *testing.T, oldPath string, profile string) {
 		for _, tc := range tests {
 			tc := tc
 			t.Run(tc.name, func(t *testing.T) {
-				tc.validator(t, oldPath, profile)
+				tc.validator(t, oldPath, profile, loop)
 			})
 		}
 	})
 }
 
-func validateHotOldToNewUpgrade(t *testing.T, oldPath string, profile string) {
+func validateHotOldToNewUpgrade(t *testing.T, oldPath string, profile string, i int) {
 	t.Logf("Hot upgrade from %s to HEAD", *upgradeFrom)
 	runCommand(t, true, oldPath, "start", "-p", profile, *startArgs, "--alsologtostderr")
 	runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr")
 	runCommand(t, false, newPath, "delete", "-p", profile)
 }
 
-func validateColdOldToNewUpgrade(t *testing.T, oldPath string, profile string) {
+func validateColdOldToNewUpgrade(t *testing.T, oldPath string, profile string, i int) {
 	t.Logf("Cold upgrade from %s to HEAD", *upgradeFrom)
 	runCommand(t, false, oldPath, "start", "-p", profile, *startArgs, "--alsologtostderr")
 	runCommand(t, false, oldPath, "stop", "-p", profile)
 	runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr")
 }
 
-func validateHotHeadRestart(t *testing.T, _ string, profile string) {
+func validateHotHeadRestart(t *testing.T, oldPath string, profile string, i int) {
 	t.Logf("Restart HEAD test")
 	runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr")
 }
 
-func validateColdHeadRestart(t *testing.T, _ string, profile string) {
+func validateColdHeadRestart(t *testing.T, oldPath string, profile string, i int) {
 	t.Logf("Cold HEAD restart")
 	runCommand(t, false, newPath, "stop", "-p", profile)
 	runCommand(t, true, newPath, "start", "-p", profile, *startArgs, "--alsologtostderr")