Repository: kubernetes/minikube
Pull request #16419 (2023-05-02 22:16:05)

none driver: check for CNI plugins
Closes https://github.com/kubernetes/minikube/issues/16378

spowelljr: /ok-to-test
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/minikube/pull/16419#" title="Author self-approved">spowelljr</a>*

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

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

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

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

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":[]} -->
minikube-pr-bot: **kvm2 driver with docker runtime**
```
+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 16419) |
+----------------+----------+---------------------+
| minikube start | 51.0s    | 51.0s               |
| enable ingress | 25.2s    | 24.7s               |
+----------------+----------+---------------------+
```

<details>

Times for minikube start: 51.5s 49.7s 51.3s 51.1s 51.3s 
Times for minikube (PR 16419) start: 50.9s 52.2s 50.9s 49.7s 51.5s 

Times for minikube ingress: 24.7s 24.2s 24.2s 28.7s 24.2s 
Times for minikube (PR 16419) ingress: 25.2s 25.1s 24.2s 24.2s 24.7s 

</details>

**docker driver with docker runtime**
```
+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 16419) |
+----------------+----------+---------------------+
| minikube start | 22.3s    | 23.2s               |
| enable ingress | 45.8s    | 21.5s               |
+----------------+----------+---------------------+
```

<details>

Times for minikube start: 21.9s 21.6s 21.9s 24.4s 21.8s 
Times for minikube (PR 16419) start: 23.6s 22.2s 21.9s 24.1s 24.3s 

Times for minikube ingress: 82.9s 20.0s 82.5s 19.5s 24.0s 
Times for minikube (PR 16419) ingress: 22.0s 21.9s 20.0s 21.0s 22.5s 

</details>

**docker driver with containerd runtime**
```
+----------------+----------+---------------------+
|    COMMAND     | MINIKUBE | MINIKUBE (PR 16419) |
+----------------+----------+---------------------+
| minikube start | 20.6s    | 21.0s               |
| enable ingress | 32.6s    | 36.0s               |
+----------------+----------+---------------------+
```

<details>

Times for minikube ingress: 32.0s 33.0s 32.0s 34.0s 32.0s 
Times for minikube (PR 16419) ingress: 33.0s 32.0s 33.0s 49.0s 33.0s 

Times for minikube start: 20.5s 19.8s 20.5s 20.9s 21.1s 
Times for minikube (PR 16419) start: 21.1s 20.2s 22.9s 20.6s 20.1s 

</details>
minikube-pr-bot: These are the flake rates of all failed tests.
|Environment|Failed Tests|Flake Rate (%)|
|---|---|---|
|[Docker_Windows](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows&period=last90)|TestStartStop/group/old-k8s-version/serial/AddonExistsAfterStop ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_Windows.html#fail_TestStartStop/group/old-k8s-version/serial/AddonExistsAfterStop))|0.00 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows&period=last90&test=TestStartStop/group/old-k8s-version/serial/AddonExistsAfterStop))|
|[Docker_Windows](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows&period=last90)|TestStartStop/group/old-k8s-version/serial/SecondStart ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_Windows.html#fail_TestStartStop/group/old-k8s-version/serial/SecondStart))|0.00 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows&period=last90&test=TestStartStop/group/old-k8s-version/serial/SecondStart))|
|[Docker_Windows](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows&period=last90)|TestStartStop/group/old-k8s-version/serial/UserAppExistsAfterStop ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_Windows.html#fail_TestStartStop/group/old-k8s-version/serial/UserAppExistsAfterStop))|0.00 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_Windows&period=last90&test=TestStartStop/group/old-k8s-version/serial/UserAppExistsAfterStop))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestInsufficientStorage ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestInsufficientStorage))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestInsufficientStorage))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestJSONOutput/pause/Command ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestJSONOutput/pause/Command))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestJSONOutput/pause/Command))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestJSONOutput/start/Command ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestJSONOutput/start/Command))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestJSONOutput/start/Command))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestJSONOutput/stop/Command ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestJSONOutput/stop/Command))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestJSONOutput/stop/Command))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestJSONOutput/unpause/Command ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestJSONOutput/unpause/Command))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestJSONOutput/unpause/Command))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestKicCustomNetwork/create_custom_network ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestKicCustomNetwork/create_custom_network))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestKicCustomNetwork/create_custom_network))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestKicCustomNetwork/use_default_bridge_network ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestKicCustomNetwork/use_default_bridge_network))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestKicCustomNetwork/use_default_bridge_network))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestKicCustomSubnet ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestKicCustomSubnet))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestKicCustomSubnet))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestKicExistingNetwork ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestKicExistingNetwork))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestKicExistingNetwork))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestKicStaticIP ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestKicStaticIP))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestKicStaticIP))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMinikubeProfile ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMinikubeProfile))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMinikubeProfile))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMountStart/serial/StartWithMountFirst ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMountStart/serial/StartWithMountFirst))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMountStart/serial/StartWithMountFirst))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/DeleteNode ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/DeleteNode))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/DeleteNode))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/ProfileList ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/ProfileList))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/ProfileList))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/RestartKeepsNodes ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/RestartKeepsNodes))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/RestartKeepsNodes))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/RestartMultiNode ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/RestartMultiNode))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/RestartMultiNode))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/StopMultiNode ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/StopMultiNode))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/StopMultiNode))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/ValidateNameConflict ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/ValidateNameConflict))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/ValidateNameConflict))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestOffline ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestOffline))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestOffline))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestPreload ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestPreload))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestPreload))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestScheduledStopUnix ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestScheduledStopUnix))|0.68 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestScheduledStopUnix))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestCertExpiration ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestCertExpiration))|1.37 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestCertExpiration))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestCertOptions ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestCertOptions))|1.37 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestCertOptions))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestDockerFlags ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestDockerFlags))|1.37 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestDockerFlags))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestForceSystemdEnv ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestForceSystemdEnv))|1.37 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestForceSystemdEnv))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestForceSystemdFlag ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestForceSystemdFlag))|1.37 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestForceSystemdFlag))|
|[Docker_macOS](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90)|TestMultiNode/serial/AddNode ([gopogh](https://storage.googleapis.com/minikube-builds/logs/16419/29059/Docker_macOS.html#fail_TestMultiNode/serial/AddNode))|1.37 ([chart](https://storage.googleapis.com/minikube-flake-rate/flake_chart.html?env=Docker_macOS&period=last90&test=TestMultiNode/serial/AddNode))|
|More tests...|Continued...|

Too many tests failed - See test logs for more details.

To see the flake rates of all tests by environment, click [here](https://minikube.sigs.k8s.io/docs/contrib/test_flakes/).

Patch:
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index f996e80b4..050837101 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -33,7 +33,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.gendocs.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: Update auto-generated docs and translations
diff --git a/.github/workflows/leaderboard.yml b/.github/workflows/leaderboard.yml
index ac562b2fb..2725d4772 100644
--- a/.github/workflows/leaderboard.yml
+++ b/.github/workflows/leaderboard.yml
@@ -34,7 +34,7 @@ jobs:
           GITHUB_TOKEN: ${{ secrets.MINIKUBE_BOT_PAT }}
       - name: Create PR
         if: ${{ steps.leaderboard.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: Update leaderboard
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 3f72272ed..6c7537c66 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -547,7 +547,7 @@ jobs:
           chmod a+x e2e-*
           chmod a+x minikube-*
           START_TIME=$(date -u +%s)
-          KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=none -test.timeout=10m -test.v -timeout-multiplier=1.5 -test.run TestFunctional -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
+          KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome sudo -E ./e2e-linux-amd64 -minikube-start-args=--driver=none -test.timeout=10m -test.v -timeout-multiplier=1.5 -test.run TestFunctional -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
           END_TIME=$(date -u +%s)
           TIME_ELAPSED=$(($END_TIME-$START_TIME))
           min=$((${TIME_ELAPSED}/60))
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index b99bccfd5..67bc18953 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -341,7 +341,7 @@ jobs:
         run: |
           go install github.com/medyagh/gopogh/cmd/gopogh@v0.17.0
       - name: Download Binaries
-        uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a
+        uses: actions/download-artifact@9782bd6a9848b53b110e712e20e42d89988822b7
         with:
           name: minikube_binaries
           path: minikube_binaries
@@ -381,7 +381,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce
+      - uses: actions/upload-artifact@83fd05a356d7e2593de66fc9913b3002723633cb
         with:
           name: functional_docker_rootless_containerd_ubuntu
           path: minikube_binaries/report
@@ -667,7 +667,7 @@ jobs:
           chmod a+x minikube-*
           MINIKUBE_HOME=$(pwd)/testhome ./minikube-linux-amd64 delete --all --purge
           START_TIME=$(date -u +%s)
-          KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=none -test.timeout=10m -test.v -timeout-multiplier=1.5 -test.run TestFunctional -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
+          KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome sudo -E ./e2e-linux-amd64 -minikube-start-args=--driver=none -test.timeout=10m -test.v -timeout-multiplier=1.5 -test.run TestFunctional -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
           END_TIME=$(date -u +%s)
           TIME_ELAPSED=$(($END_TIME-$START_TIME))
           min=$((${TIME_ELAPSED}/60))
diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml
index 20783abc8..e8a595d17 100644
--- a/.github/workflows/time-to-k8s.yml
+++ b/.github/workflows/time-to-k8s.yml
@@ -26,7 +26,7 @@ jobs:
           ./hack/benchmark/time-to-k8s/time-to-k8s.sh
           echo "version=$(minikube version --short)" >> $GITHUB_OUTPUT
       - name: Create PR
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: add time-to-k8s benchmark for ${{ steps.timeToK8sBenchmark.outputs.version }}
diff --git a/.github/workflows/update-buildkit-version.yml b/.github/workflows/update-buildkit-version.yml
index 076d7d865..201bea2f5 100644
--- a/.github/workflows/update-buildkit-version.yml
+++ b/.github/workflows/update-buildkit-version.yml
@@ -32,7 +32,7 @@ jobs:
       - name: Create PR
         id: createPR
         if: ${{ steps.bumpBuildkit.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Kicbase/ISO: Update buildkit from ${{ steps.bumpBuildkit.outputs.OLD_VERSION }} to ${{ steps.bumpBuildkit.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-cloud-spanner-emulator-version.yml b/.github/workflows/update-cloud-spanner-emulator-version.yml
index b3c07863e..769f343e8 100644
--- a/.github/workflows/update-cloud-spanner-emulator-version.yml
+++ b/.github/workflows/update-cloud-spanner-emulator-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpCloudSpannerEmulator.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Addon cloud-spanner: Update cloud-spanner-emulator/emulator image from ${{ steps.bumpCloudSpannerEmulator.outputs.OLD_VERSION }} to ${{ steps.bumpCloudSpannerEmulator.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-containerd-version.yml b/.github/workflows/update-containerd-version.yml
index cd0784f14..7c8fa6bf4 100644
--- a/.github/workflows/update-containerd-version.yml
+++ b/.github/workflows/update-containerd-version.yml
@@ -32,7 +32,7 @@ jobs:
       - name: Create PR
         id: createPR
         if: ${{ steps.bumpContainerd.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Kicbase/ISO: Update containerd from ${{ steps.bumpContainerd.outputs.OLD_VERSION }} to ${{ steps.bumpContainerd.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-cri-o-version.yml b/.github/workflows/update-cri-o-version.yml
index de8993d55..7c5688896 100644
--- a/.github/workflows/update-cri-o-version.yml
+++ b/.github/workflows/update-cri-o-version.yml
@@ -32,7 +32,7 @@ jobs:
       - name: Create PR
         id: createPR
         if: ${{ steps.bumpCrio.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Kicbase/ISO: Update cri-o from ${{ steps.bumpCrio.outputs.OLD_VERSION }} to ${{ steps.bumpCrio.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-docker-version.yml b/.github/workflows/update-docker-version.yml
index 0f34b5cd6..f8fbe5d9e 100644
--- a/.github/workflows/update-docker-version.yml
+++ b/.github/workflows/update-docker-version.yml
@@ -32,7 +32,7 @@ jobs:
       - name: Create PR
         id: createPR
         if: ${{ steps.bumpDocker.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Kicbase/ISO: Update docker from ${{ steps.bumpDocker.outputs.OLD_VERSION }} to ${{ steps.bumpDocker.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-docsy-version.yml b/.github/workflows/update-docsy-version.yml
index 0b0b2ad2f..4b8f53192 100644
--- a/.github/workflows/update-docsy-version.yml
+++ b/.github/workflows/update-docsy-version.yml
@@ -29,7 +29,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpDocsy.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: bump docsy version
diff --git a/.github/workflows/update-gh-version.yml b/.github/workflows/update-gh-version.yml
index 94eaa83be..426d506ff 100644
--- a/.github/workflows/update-gh-version.yml
+++ b/.github/workflows/update-gh-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpGh.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'CI: Update gh from ${{ steps.bumpGh.outputs.OLD_VERSION }} to ${{ steps.bumpGh.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-golang-version.yml b/.github/workflows/update-golang-version.yml
index 8d9ebfff3..18fa80600 100644
--- a/.github/workflows/update-golang-version.yml
+++ b/.github/workflows/update-golang-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpGolang.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Update go from ${{ steps.bumpGolang.outputs.OLD_VERSION }} to ${{ steps.bumpGolang.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-golint-version.yml b/.github/workflows/update-golint-version.yml
index 038e0fe0c..9a5bf3bf1 100644
--- a/.github/workflows/update-golint-version.yml
+++ b/.github/workflows/update-golint-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpGolint.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'CI: Update golint from ${{ steps.bumpGolint.outputs.OLD_VERSION }} to ${{ steps.bumpGolint.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-gopogh-version.yml b/.github/workflows/update-gopogh-version.yml
index 7233a4662..9dbad727d 100644
--- a/.github/workflows/update-gopogh-version.yml
+++ b/.github/workflows/update-gopogh-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpGopogh.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'CI: Update gopogh from ${{ steps.bumpGopogh.outputs.OLD_VERSION }} to ${{ steps.bumpGopogh.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-hugo-version.yml b/.github/workflows/update-hugo-version.yml
index c16c01629..81a6a2af3 100644
--- a/.github/workflows/update-hugo-version.yml
+++ b/.github/workflows/update-hugo-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpHugo.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Site: Update hugo from ${{ steps.bumpHugo.outputs.OLD_VERSION }} to ${{ steps.bumpHugo.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-k8s-versions.yml b/.github/workflows/update-k8s-versions.yml
index 4f778135d..a8362d058 100644
--- a/.github/workflows/update-k8s-versions.yml
+++ b/.github/workflows/update-k8s-versions.yml
@@ -34,7 +34,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpk8s.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: bump default/newest kubernetes versions
diff --git a/.github/workflows/update-kubeadm-constants.yml b/.github/workflows/update-kubeadm-constants.yml
index ca235d5c6..8696b7acb 100644
--- a/.github/workflows/update-kubeadm-constants.yml
+++ b/.github/workflows/update-kubeadm-constants.yml
@@ -32,7 +32,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpKubeadmConsts.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: update image constants for kubeadm images
diff --git a/.github/workflows/update-metrics-server-version.yml b/.github/workflows/update-metrics-server-version.yml
index a0be0f9be..84cf5ab7e 100644
--- a/.github/workflows/update-metrics-server-version.yml
+++ b/.github/workflows/update-metrics-server-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpMetricsServer.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Addon metrics-server: Update metrics-server/metrics-server image from ${{ steps.bumpMetricsServer.outputs.OLD_VERSION }} to ${{ steps.bumpMetricsServer.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-runc-version.yml b/.github/workflows/update-runc-version.yml
index c6c0ff839..21501e294 100644
--- a/.github/workflows/update-runc-version.yml
+++ b/.github/workflows/update-runc-version.yml
@@ -32,7 +32,7 @@ jobs:
       - name: Create PR
         id: createPR
         if: ${{ steps.bumpRunc.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'Kicbase/ISO: Update runc from ${{ steps.bumpRunc.outputs.OLD_VERSION }} to ${{ steps.bumpRunc.outputs.NEW_VERSION }}'
diff --git a/.github/workflows/update-ubuntu-version.yml b/.github/workflows/update-ubuntu-version.yml
deleted file mode 100644
index b7ce74d6f..000000000
--- a/.github/workflows/update-ubuntu-version.yml
+++ /dev/null
@@ -1,61 +0,0 @@
-name: "update-ubuntu-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.3'
-permissions:
-  contents: read
-
-jobs:
-  bump-ubuntu-version:
-    runs-on: ubuntu-20.04
-    steps:
-      - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab
-      - uses: actions/setup-go@4d34df0c2316fe8122ab82dc22947d607c0c91f9
-        with:
-          go-version: ${{env.GO_VERSION}}
-          cache-dependency-path: ./go.sum
-      - name: Bump Ubuntu version
-        id: bumpUbuntu
-        run: |
-          echo "OLD_VERSION=$(DEP=ubuntu make get-dependency-version)" >> $GITHUB_OUTPUT
-          make update-ubuntu-version
-          echo "NEW_VERSION=$(DEP=ubuntu make get-dependency-version)" >> $GITHUB_OUTPUT
-          c=$(git status --porcelain)
-          c="${c//$'\n'/'%0A'}"
-          c="${c//$'\r'/'%0D'}"
-          echo "changes<<EOF" >> $GITHUB_OUTPUT
-          echo "$c" >> $GITHUB_OUTPUT
-          echo "EOF" >> $GITHUB_OUTPUT
-      - name: Create PR
-        id: createPR
-        if: ${{ steps.bumpUbuntu.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
-        with:
-          token: ${{ secrets.MINIKUBE_BOT_PAT }}
-          commit-message: 'Kicbase: Bump ubuntu:focal from ${{ steps.bumpUbuntu.outputs.OLD_VERSION }} to ${{ steps.bumpUbuntu.outpus.NEW_VERSION }}'
-          committer: minikube-bot <minikube-bot@google.com>
-          author: minikube-bot <minikube-bot@google.com>
-          branch: auto_bump_ubuntu_version
-          push-to-fork: minikube-bot/minikube
-          base: master
-          delete-branch: true
-          title: 'Kicbase: Bump ubuntu:focal from ${{ steps.bumpUbuntu.outputs.OLD_VERSION }} to ${{ steps.bumpUbuntu.outpus.NEW_VERSION }}'
-          body: |
-            The ubuntu:focal image released a new version
-
-            This PR was auto-generated by `make update-ubuntu-version` using [update-ubuntu-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-ubuntu-version.yml) CI Workflow.
-      - uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410
-        with:
-          github-token: ${{ secrets.MINIKUBE_BOT_PAT }}
-          script: |
-            github.rest.issues.createComment({
-              issue_number: ${{ steps.createPR.outputs.pull-request-number }},
-              owner: context.repo.owner,
-              repo: context.repo.repo,
-              body: 'ok-to-build-image'
-            })
diff --git a/.github/workflows/yearly-leaderboard.yml b/.github/workflows/yearly-leaderboard.yml
index 4faa72305..cce17e8a2 100644
--- a/.github/workflows/yearly-leaderboard.yml
+++ b/.github/workflows/yearly-leaderboard.yml
@@ -36,7 +36,7 @@ jobs:
           GITHUB_TOKEN: ${{ secrets.MINIKUBE_BOT_PAT }}
       - name: Create PR
         if: ${{ steps.yearlyLeaderboard.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: Update yearly leaderboard
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 82d42af70..f8fc373d8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -652,7 +652,7 @@ Bug Fixes:
 * Fix port validation error on specifying tcp/udp or range of ports. [#13812](https://github.com/kubernetes/minikube/pull/13812)
 * Fix not downloading kic for offline mode [#13910](https://github.com/kubernetes/minikube/pull/13910)
 * Fix trying to pause multiple containers with runc [#13783](https://github.com/kubernetes/minikube/pull/13783)
-* Fix `minikube service` docker/port-forward issues [#13756](https://github.com/kubernetes/minikube/pull/13756)
+* Fix `minikube servce` docker/port-forward issues [#13756](https://github.com/kubernetes/minikube/pull/13756)
 
 Version Upgrades:
 * Upgrade Kubernetes default: v1.23.6 and latest: v1.23.6 [#14144](https://github.com/kubernetes/minikube/pull/14144)
diff --git a/Makefile b/Makefile
index 1d5b53472..d1f1d5a55 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.30.1-1683246251-16426
+ISO_VERSION ?= v1.30.1
 
 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta
 DEB_VERSION ?= $(subst -,~,$(RAW_VERSION))
@@ -367,7 +367,7 @@ integration: out/minikube$(IS_EXE) ## Trigger minikube integration test, logs to
 
 .PHONY: integration-none-driver
 integration-none-driver: e2e-linux-$(GOARCH) out/minikube-linux-$(GOARCH)  ## Trigger minikube none driver test, logs to ./out/testout_COMMIT.txt
-	out/e2e-linux-$(GOARCH) -testdata-dir "test/integration/testdata" -minikube-start-args="--driver=none" -test.v -test.timeout=60m -binary=out/minikube-linux-amd64 $(TEST_ARGS) 2>&1 | tee "./out/testout_$(COMMIT_SHORT).txt"
+	sudo -E out/e2e-linux-$(GOARCH) -testdata-dir "test/integration/testdata" -minikube-start-args="--driver=none" -test.v -test.timeout=60m -binary=out/minikube-linux-amd64 $(TEST_ARGS) 2>&1 | tee "./out/testout_$(COMMIT_SHORT).txt"
 
 .PHONY: integration-versioned
 integration-versioned: out/minikube ## Trigger minikube integration testing, logs to ./out/testout_COMMIT.txt
@@ -1107,11 +1107,6 @@ update-docker-version:
 	(cd hack/update/docker_version && \
 	 go run update_docker_version.go)
 
-.PHONY: update-ubuntu-version
-update-ubuntu-version:
-	(cd hack/update/ubuntu_version && \
-	 go run update_ubuntu_version.go)
-
 .PHONY: get-dependency-verison
 get-dependency-version:
 	@(cd hack/update/get_version && \
diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go
index b1b964756..cd7b59f3f 100644
--- a/cmd/minikube/cmd/start.go
+++ b/cmd/minikube/cmd/start.go
@@ -1581,7 +1581,7 @@ func validateInsecureRegistry() {
 	}
 }
 
-func createNode(cc config.ClusterConfig, existing *config.ClusterConfig) (config.ClusterConfig, config.Node, error) {
+func createNode(cc config.ClusterConfig, kubeNodeName string, existing *config.ClusterConfig) (config.ClusterConfig, config.Node, error) {
 	// Create the initial node, which will necessarily be a control plane
 	if existing != nil {
 		cp, err := config.PrimaryControlPlane(existing)
@@ -1608,6 +1608,7 @@ func createNode(cc config.ClusterConfig, existing *config.ClusterConfig) (config
 		Port:              cc.KubernetesConfig.NodePort,
 		KubernetesVersion: getKubernetesVersion(&cc),
 		ContainerRuntime:  getContainerRuntime(&cc),
+		Name:              kubeNodeName,
 		ControlPlane:      true,
 		Worker:            true,
 	}
diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go
index 4e6a3359b..12e22c982 100644
--- a/cmd/minikube/cmd/start_flags.go
+++ b/cmd/minikube/cmd/start_flags.go
@@ -329,7 +329,11 @@ func generateClusterConfig(cmd *cobra.Command, existing *config.ClusterConfig, k
 		proxy.SetDockerEnv()
 	}
 
-	return createNode(cc, existing)
+	var kubeNodeName string
+	if driver.BareMetal(cc.Driver) {
+		kubeNodeName = "m01"
+	}
+	return createNode(cc, kubeNodeName, existing)
 }
 
 func getCPUCount(drvName string) int {
diff --git a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl
index 0975149ea..467521d35 100644
--- a/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl
+++ b/deploy/addons/csi-hostpath-driver/deploy/csi-hostpath-plugin.yaml.tmpl
@@ -137,7 +137,7 @@ spec:
           - --health-port=9898
 
         - name: csi-provisioner
-          image: {{.CustomRegistries.Provisioner  | default .ImageRepository | default .Registries.Provisioner }}{{.Images.Provisioner}}
+          image: registry.k8s.io/sig-storage/csi-provisioner:v3.3.0
           args:
             - -v=5
             - --csi-address=/csi/csi.sock
diff --git a/deploy/addons/kong/kong-ingress-controller.yaml.tmpl b/deploy/addons/kong/kong-ingress-controller.yaml.tmpl
index 39180af7f..8ba9d1d2c 100644
--- a/deploy/addons/kong/kong-ingress-controller.yaml.tmpl
+++ b/deploy/addons/kong/kong-ingress-controller.yaml.tmpl
@@ -7,67 +7,12 @@ apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
-  creationTimestamp: null
-  name: ingressclassparameterses.configuration.konghq.com
-spec:
-  group: configuration.konghq.com
-  names:
-    kind: IngressClassParameters
-    listKind: IngressClassParametersList
-    plural: ingressclassparameterses
-    singular: ingressclassparameters
-  scope: Namespaced
-  versions:
-  - name: v1alpha1
-    schema:
-      openAPIV3Schema:
-        description: IngressClassParameters is the Schema for the IngressClassParameters
-          API.
-        properties:
-          apiVersion:
-            description: 'APIVersion defines the versioned schema of this representation
-              of an object. Servers should convert recognized schemas to the latest
-              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
-            type: string
-          kind:
-            description: 'Kind is a string value representing the REST resource this
-              object represents. Servers may infer this from the endpoint the client
-              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
-            type: string
-          metadata:
-            type: object
-          spec:
-            description: Spec is the IngressClassParameters specification.
-            properties:
-              enableLegacyRegexDetection:
-                default: false
-                description: EnableLegacyRegexDetection automatically detects if ImplementationSpecific
-                  Ingress paths are regular expression paths using the legacy 2.x
-                  heuristic. The controller adds the "~" prefix to those paths if
-                  the Kong version is 3.0 or higher.
-                type: boolean
-              serviceUpstream:
-                default: false
-                description: Offload load-balancing to kube-proxy or sidecar.
-                type: boolean
-            type: object
-        type: object
-    served: true
-    storage: true
----
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
-  annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
+    controller-gen.kubebuilder.io/version: v0.7.0
   creationTimestamp: null
   name: kongclusterplugins.configuration.konghq.com
 spec:
   group: configuration.konghq.com
   names:
-    categories:
-    - kong-ingress-controller
     kind: KongClusterPlugin
     listKind: KongClusterPluginList
     plural: kongclusterplugins
@@ -98,7 +43,7 @@ spec:
     name: v1
     schema:
       openAPIV3Schema:
-        description: KongClusterPlugin is the Schema for the kongclusterplugins API.
+        description: KongClusterPlugin is the Schema for the kongclusterplugins API
         properties:
           apiVersion:
             description: 'APIVersion defines the versioned schema of this representation
@@ -106,33 +51,24 @@ spec:
               internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
             type: string
           config:
-            description: Config contains the plugin configuration. It's a list of
-              keys and values required to configure the plugin. Please read the documentation
-              of the plugin being configured to set values in here. For any plugin
-              in Kong, anything that goes in the `config` JSON key in the Admin API
-              request, goes into this property. Only one of `config` or `configFrom`
-              may be used in a KongClusterPlugin, not both at once.
+            description: Config contains the plugin configuration.
             type: object
             x-kubernetes-preserve-unknown-fields: true
           configFrom:
             description: ConfigFrom references a secret containing the plugin configuration.
-              This should be used when the plugin configuration contains sensitive
-              information, such as AWS credentials in the Lambda plugin or the client
-              secret in the OIDC plugin. Only one of `config` or `configFrom` may
-              be used in a KongClusterPlugin, not both at once.
             properties:
               secretKeyRef:
-                description: Specifies a name, a namespace, and a key of a secret
-                  to refer to.
+                description: NamespacedSecretValueFromSource represents the source
+                  of a secret value specifying the secret namespace
                 properties:
                   key:
-                    description: The key containing the value.
+                    description: the key containing the value
                     type: string
                   name:
-                    description: The secret containing the key.
+                    description: the secret containing the key
                     type: string
                   namespace:
-                    description: The namespace containing the secret.
+                    description: The namespace containing the secret
                     type: string
                 required:
                 - key
@@ -141,10 +77,10 @@ spec:
                 type: object
             type: object
           consumerRef:
-            description: ConsumerRef is a reference to a particular consumer.
+            description: ConsumerRef is a reference to a particular consumer
             type: string
           disabled:
-            description: Disabled set if the plugin is disabled or not.
+            description: Disabled set if the plugin is disabled or not
             type: boolean
           kind:
             description: 'Kind is a string value representing the REST resource this
@@ -153,42 +89,14 @@ spec:
             type: string
           metadata:
             type: object
-          ordering:
-            description: 'Ordering overrides the normal plugin execution order. It''s
-              only available on Kong Enterprise. `<phase>` is a request processing
-              phase (for example, `access` or `body_filter`) and `<plugin>` is the
-              name of the plugin that will run before or after the KongPlugin. For
-              example, a KongPlugin with `plugin: rate-limiting` and `before.access:
-              ["key-auth"]` will create a rate limiting plugin that limits requests
-              _before_ they are authenticated.'
-            properties:
-              after:
-                additionalProperties:
-                  items:
-                    type: string
-                  type: array
-                description: PluginOrderingPhase indicates which plugins in a phase
-                  should affect the target plugin's order
-                type: object
-              before:
-                additionalProperties:
-                  items:
-                    type: string
-                  type: array
-                description: PluginOrderingPhase indicates which plugins in a phase
-                  should affect the target plugin's order
-                type: object
-            type: object
           plugin:
             description: PluginName is the name of the plugin to which to apply the
-              config.
+              config
             type: string
           protocols:
             description: Protocols configures plugin to run on requests received on
               specific protocols.
             items:
-              description: KongProtocol is a valid Kong protocol. This alias is necessary
-                to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342
               enum:
               - http
               - https
@@ -214,19 +122,23 @@ spec:
     storage: true
     subresources:
       status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
+    controller-gen.kubebuilder.io/version: v0.7.0
   creationTimestamp: null
   name: kongconsumers.configuration.konghq.com
 spec:
   group: configuration.konghq.com
   names:
-    categories:
-    - kong-ingress-controller
     kind: KongConsumer
     listKind: KongConsumerList
     plural: kongconsumers
@@ -247,7 +159,7 @@ spec:
     name: v1
     schema:
       openAPIV3Schema:
-        description: KongConsumer is the Schema for the kongconsumers API.
+        description: KongConsumer is the Schema for the kongconsumers API
         properties:
           apiVersion:
             description: 'APIVersion defines the versioned schema of this representation
@@ -261,8 +173,8 @@ spec:
               type: string
             type: array
           custom_id:
-            description: CustomID is a Kong cluster-unique existing ID for the consumer
-              - useful for mapping Kong with users in your existing database.
+            description: CustomID existing unique ID for the consumer - useful for
+              mapping Kong with users in your existing database
             type: string
           kind:
             description: 'Kind is a string value representing the REST resource this
@@ -272,26 +184,30 @@ spec:
           metadata:
             type: object
           username:
-            description: Username is a Kong cluster-unique username of the consumer.
+            description: Username unique username of the consumer.
             type: string
         type: object
     served: true
     storage: true
     subresources:
       status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
+    controller-gen.kubebuilder.io/version: v0.7.0
   creationTimestamp: null
   name: kongingresses.configuration.konghq.com
 spec:
   group: configuration.konghq.com
   names:
-    categories:
-    - kong-ingress-controller
     kind: KongIngress
     listKind: KongIngressList
     plural: kongingresses
@@ -303,7 +219,7 @@ spec:
   - name: v1
     schema:
       openAPIV3Schema:
-        description: KongIngress is the Schema for the kongingresses API.
+        description: KongIngress is the Schema for the kongingresses API
         properties:
           apiVersion:
             description: 'APIVersion defines the versioned schema of this representation
@@ -318,25 +234,15 @@ spec:
           metadata:
             type: object
           proxy:
-            description: Proxy defines additional connection options for the routes
-              to be configured in the Kong Gateway, e.g. `connection_timeout`, `retries`,
-              etc.
+            description: KongIngressService contains KongIngress service configuration
             properties:
               connect_timeout:
-                description: "The timeout in milliseconds for\testablishing a connection
-                  to the upstream server. Deprecated: use Service's \"konghq.com/connect-timeout\"
-                  annotation instead."
                 minimum: 0
                 type: integer
               path:
-                description: '(optional) The path to be used in requests to the upstream
-                  server. Deprecated: use Service''s "konghq.com/path" annotation
-                  instead.'
                 pattern: ^/.*$
                 type: string
               protocol:
-                description: 'The protocol used to communicate with the upstream.
-                  Deprecated: use Service''s "konghq.com/protocol" annotation instead.'
                 enum:
                 - http
                 - https
@@ -347,73 +253,39 @@ spec:
                 - udp
                 type: string
               read_timeout:
-                description: 'The timeout in milliseconds between two successive read
-                  operations for transmitting a request to the upstream server. Deprecated:
-                  use Service''s "konghq.com/read-timeout" annotation instead.'
                 minimum: 0
                 type: integer
               retries:
-                description: 'The number of retries to execute upon failure to proxy.
-                  Deprecated: use Service''s "konghq.com/retries" annotation instead.'
                 minimum: 0
                 type: integer
               write_timeout:
-                description: 'The timeout in milliseconds between two successive write
-                  operations for transmitting a request to the upstream server. Deprecated:
-                  use Service''s "konghq.com/write-timeout" annotation instead.'
                 minimum: 0
                 type: integer
             type: object
           route:
-            description: Route define rules to match client requests. Each Route is
-              associated with a Service, and a Service may have multiple Routes associated
-              to it.
+            description: KongIngressRoute contains KongIngress route configuration
             properties:
               headers:
                 additionalProperties:
                   items:
                     type: string
                   type: array
-                description: 'Headers contains one or more lists of values indexed
-                  by header name that will cause this Route to match if present in
-                  the request. The Host header cannot be used with this attribute.
-                  Deprecated: use Ingress'' "konghq.com/headers" annotation instead.'
                 type: object
               https_redirect_status_code:
-                description: 'HTTPSRedirectStatusCode is the status code Kong responds
-                  with when all properties of a Route match except the protocol. Deprecated:
-                  use Ingress'' "ingress.kubernetes.io/force-ssl-redirect" or "konghq.com/https-redirect-status-code"
-                  annotations instead.'
                 type: integer
               methods:
-                description: 'Methods is a list of HTTP methods that match this Route.
-                  Deprecated: use Ingress'' "konghq.com/methods" annotation instead.'
                 items:
                   type: string
                 type: array
               path_handling:
-                description: 'PathHandling controls how the Service path, Route path
-                  and requested path are combined when sending a request to the upstream.
-                  Deprecated: use Ingress'' "konghq.com/path-handling" annotation
-                  instead.'
                 enum:
                 - v0
                 - v1
                 type: string
               preserve_host:
-                description: 'PreserveHost sets When matching a Route via one of the
-                  hosts domain names, use the request Host header in the upstream
-                  request headers. If set to false, the upstream Host header will
-                  be that of the Service’s host. Deprecated: use Ingress'' "konghq.com/preserve-host"
-                  annotation instead.'
                 type: boolean
               protocols:
-                description: 'Protocols is an array of the protocols this Route should
-                  allow. Deprecated: use Ingress'' "konghq.com/protocols" annotation
-                  instead.'
                 items:
-                  description: KongProtocol is a valid Kong protocol. This alias is
-                    necessary to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342
                   enum:
                   - http
                   - https
@@ -425,91 +297,41 @@ spec:
                   type: string
                 type: array
               regex_priority:
-                description: 'RegexPriority is a number used to choose which route
-                  resolves a given request when several routes match it using regexes
-                  simultaneously. Deprecated: use Ingress'' "konghq.com/regex-priority"
-                  annotation instead.'
                 type: integer
               request_buffering:
-                description: 'RequestBuffering sets whether to enable request body
-                  buffering or not. Deprecated: use Ingress'' "konghq.com/request-buffering"
-                  annotation instead.'
                 type: boolean
               response_buffering:
-                description: 'ResponseBuffering sets whether to enable response body
-                  buffering or not. Deprecated: use Ingress'' "konghq.com/response-buffering"
-                  annotation instead.'
                 type: boolean
               snis:
-                description: 'SNIs is a list of SNIs that match this Route when using
-                  stream routing. Deprecated: use Ingress'' "konghq.com/snis" annotation
-                  instead.'
                 items:
                   type: string
                 type: array
               strip_path:
-                description: 'StripPath sets When matching a Route via one of the
-                  paths strip the matching prefix from the upstream request URL. Deprecated:
-                  use Ingress'' "konghq.com/strip-path" annotation instead.'
                 type: boolean
             type: object
           upstream:
-            description: Upstream represents a virtual hostname and can be used to
-              loadbalance incoming requests over multiple targets (e.g. Kubernetes
-              `Services` can be a target, OR `Endpoints` can be targets).
+            description: KongIngressUpstream contains KongIngress upstream configuration
             properties:
               algorithm:
-                description: Algorithm is the load balancing algorithm to use.
                 enum:
                 - round-robin
                 - consistent-hashing
                 - least-connections
                 type: string
               hash_fallback:
-                description: 'HashFallback defines What to use as hashing input if
-                  the primary hash_on does not return a hash. Accepted values are:
-                  "none", "consumer", "ip", "header", "cookie".'
                 type: string
               hash_fallback_header:
-                description: HashFallbackHeader is the header name to take the value
-                  from as hash input. Only required when "hash_fallback" is set to
-                  "header".
-                type: string
-              hash_fallback_query_arg:
-                description: HashFallbackQueryArg is the "hash_fallback" version of
-                  HashOnQueryArg.
-                type: string
-              hash_fallback_uri_capture:
-                description: HashFallbackURICapture is the "hash_fallback" version
-                  of HashOnURICapture.
                 type: string
               hash_on:
-                description: 'HashOn defines what to use as hashing input. Accepted
-                  values are: "none", "consumer", "ip", "header", "cookie", "path",
-                  "query_arg", "uri_capture".'
                 type: string
               hash_on_cookie:
-                description: The cookie name to take the value from as hash input.
-                  Only required when "hash_on" or "hash_fallback" is set to "cookie".
                 type: string
               hash_on_cookie_path:
-                description: The cookie path to set in the response headers. Only
-                  required when "hash_on" or "hash_fallback" is set to "cookie".
                 type: string
               hash_on_header:
-                description: HashOnHeader defines the header name to take the value
-                  from as hash input. Only required when "hash_on" is set to "header".
-                type: string
-              hash_on_query_arg:
-                description: HashOnQueryArg is the query string parameter whose value
-                  is the hash input when "hash_on" is set to "query_arg".
-                type: string
-              hash_on_uri_capture:
-                description: HashOnURICapture is the name of the capture group whose
-                  value is the hash input when "hash_on" is set to "uri_capture".
                 type: string
               healthchecks:
-                description: Healthchecks defines the health check configurations
+                description: Healthcheck represents a health-check config of an upstream
                   in Kong.
                 properties:
                   active:
@@ -615,11 +437,8 @@ spec:
                     type: number
                 type: object
               host_header:
-                description: HostHeader is The hostname to be used as Host header
-                  when proxying requests through Kong.
                 type: string
               slots:
-                description: Slots is the number of slots in the load balancer algorithm.
                 minimum: 10
                 type: integer
             type: object
@@ -628,19 +447,23 @@ spec:
     storage: true
     subresources:
       status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
+    controller-gen.kubebuilder.io/version: v0.7.0
   creationTimestamp: null
   name: kongplugins.configuration.konghq.com
 spec:
   group: configuration.konghq.com
   names:
-    categories:
-    - kong-ingress-controller
     kind: KongPlugin
     listKind: KongPluginList
     plural: kongplugins
@@ -671,7 +494,7 @@ spec:
     name: v1
     schema:
       openAPIV3Schema:
-        description: KongPlugin is the Schema for the kongplugins API.
+        description: KongPlugin is the Schema for the kongplugins API
         properties:
           apiVersion:
             description: 'APIVersion defines the versioned schema of this representation
@@ -679,30 +502,21 @@ spec:
               internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
             type: string
           config:
-            description: Config contains the plugin configuration. It's a list of
-              keys and values required to configure the plugin. Please read the documentation
-              of the plugin being configured to set values in here. For any plugin
-              in Kong, anything that goes in the `config` JSON key in the Admin API
-              request, goes into this property. Only one of `config` or `configFrom`
-              may be used in a KongPlugin, not both at once.
+            description: Config contains the plugin configuration.
             type: object
             x-kubernetes-preserve-unknown-fields: true
           configFrom:
             description: ConfigFrom references a secret containing the plugin configuration.
-              This should be used when the plugin configuration contains sensitive
-              information, such as AWS credentials in the Lambda plugin or the client
-              secret in the OIDC plugin. Only one of `config` or `configFrom` may
-              be used in a KongPlugin, not both at once.
             properties:
               secretKeyRef:
-                description: Specifies a name and a key of a secret to refer to. The
-                  namespace is implicitly set to the one of referring object.
+                description: SecretValueFromSource represents the source of a secret
+                  value
                 properties:
                   key:
-                    description: The key containing the value.
+                    description: the key containing the value
                     type: string
                   name:
-                    description: The secret containing the key.
+                    description: the secret containing the key
                     type: string
                 required:
                 - key
@@ -710,10 +524,10 @@ spec:
                 type: object
             type: object
           consumerRef:
-            description: ConsumerRef is a reference to a particular consumer.
+            description: ConsumerRef is a reference to a particular consumer
             type: string
           disabled:
-            description: Disabled set if the plugin is disabled or not.
+            description: Disabled set if the plugin is disabled or not
             type: boolean
           kind:
             description: 'Kind is a string value representing the REST resource this
@@ -722,42 +536,14 @@ spec:
             type: string
           metadata:
             type: object
-          ordering:
-            description: 'Ordering overrides the normal plugin execution order. It''s
-              only available on Kong Enterprise. `<phase>` is a request processing
-              phase (for example, `access` or `body_filter`) and `<plugin>` is the
-              name of the plugin that will run before or after the KongPlugin. For
-              example, a KongPlugin with `plugin: rate-limiting` and `before.access:
-              ["key-auth"]` will create a rate limiting plugin that limits requests
-              _before_ they are authenticated.'
-            properties:
-              after:
-                additionalProperties:
-                  items:
-                    type: string
-                  type: array
-                description: PluginOrderingPhase indicates which plugins in a phase
-                  should affect the target plugin's order
-                type: object
-              before:
-                additionalProperties:
-                  items:
-                    type: string
-                  type: array
-                description: PluginOrderingPhase indicates which plugins in a phase
-                  should affect the target plugin's order
-                type: object
-            type: object
           plugin:
             description: PluginName is the name of the plugin to which to apply the
-              config.
+              config
             type: string
           protocols:
             description: Protocols configures plugin to run on requests received on
               specific protocols.
             items:
-              description: KongProtocol is a valid Kong protocol. This alias is necessary
-                to deal with https://github.com/kubernetes-sigs/controller-tools/issues/342
               enum:
               - http
               - https
@@ -783,19 +569,23 @@ spec:
     storage: true
     subresources:
       status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
+    controller-gen.kubebuilder.io/version: v0.7.0
   creationTimestamp: null
   name: tcpingresses.configuration.konghq.com
 spec:
   group: configuration.konghq.com
   names:
-    categories:
-    - kong-ingress-controller
     kind: TCPIngress
     listKind: TCPIngressList
     plural: tcpingresses
@@ -814,7 +604,7 @@ spec:
     name: v1beta1
     schema:
       openAPIV3Schema:
-        description: TCPIngress is the Schema for the tcpingresses API.
+        description: TCPIngress is the Schema for the tcpingresses API
         properties:
           apiVersion:
             description: 'APIVersion defines the versioned schema of this representation
@@ -829,7 +619,7 @@ spec:
           metadata:
             type: object
           spec:
-            description: Spec is the TCPIngress specification.
+            description: TCPIngressSpec defines the desired state of TCPIngress
             properties:
               rules:
                 description: A list of rules used to configure the Ingress.
@@ -844,7 +634,6 @@ spec:
                       properties:
                         serviceName:
                           description: Specifies the name of the referenced service.
-                          minLength: 1
                           type: string
                         servicePort:
                           description: Specifies the port of the referenced service.
@@ -858,12 +647,9 @@ spec:
                       type: object
                     host:
                       description: Host is the fully qualified domain name of a network
-                        host, as defined by RFC 3986. If a Host is not specified,
-                        then port-based TCP routing is performed. Kong doesn't care
-                        about the content of the TCP stream in this case. If a Host
-                        is specified, the protocol must be TLS over TCP. A plain-text
-                        TCP request cannot be routed based on Host. It can only be
-                        routed based on Port.
+                        host, as defined by RFC 3986. If a Host is specified, the
+                        protocol must be TLS over TCP. A plain-text TCP request cannot
+                        be routed based on Host. It can only be routed based on Port.
                       type: string
                     port:
                       description: Port is the port on which to accept TCP or TLS
@@ -876,7 +662,6 @@ spec:
                       type: integer
                   required:
                   - backend
-                  - port
                   type: object
                 type: array
               tls:
@@ -904,7 +689,7 @@ spec:
                 type: array
             type: object
           status:
-            description: TCPIngressStatus defines the observed state of TCPIngress.
+            description: TCPIngressStatus defines the observed state of TCPIngress
             properties:
               loadBalancer:
                 description: LoadBalancer contains the current status of the load-balancer.
@@ -937,8 +722,8 @@ spec:
                                   the service port The format of the error shall comply
                                   with the following rules: - built-in error values
                                   shall be specified in this file and those shall
-                                  use CamelCase names - cloud provider specific error
-                                  values must have names that comply with the format
+                                  use   CamelCase names - cloud provider specific
+                                  error values must have names that comply with the   format
                                   foo.example.com/CamelCase. --- The regex it matches
                                   is (dns1123SubdomainFmt/)?(qualifiedNameFmt)'
                                 maxLength: 316
@@ -970,19 +755,23 @@ spec:
     storage: true
     subresources:
       status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
 ---
 apiVersion: apiextensions.k8s.io/v1
 kind: CustomResourceDefinition
 metadata:
   annotations:
-    controller-gen.kubebuilder.io/version: v0.11.3
+    controller-gen.kubebuilder.io/version: v0.7.0
   creationTimestamp: null
   name: udpingresses.configuration.konghq.com
 spec:
   group: configuration.konghq.com
   names:
-    categories:
-    - kong-ingress-controller
     kind: UDPIngress
     listKind: UDPIngressList
     plural: udpingresses
@@ -1001,7 +790,7 @@ spec:
     name: v1beta1
     schema:
       openAPIV3Schema:
-        description: UDPIngress is the Schema for the udpingresses API.
+        description: UDPIngress is the Schema for the udpingresses API
         properties:
           apiVersion:
             description: 'APIVersion defines the versioned schema of this representation
@@ -1016,7 +805,7 @@ spec:
           metadata:
             type: object
           spec:
-            description: Spec is the UDPIngress specification.
+            description: UDPIngressSpec defines the desired state of UDPIngress
             properties:
               rules:
                 description: A list of rules used to configure the Ingress.
@@ -1031,7 +820,6 @@ spec:
                       properties:
                         serviceName:
                           description: Specifies the name of the referenced service.
-                          minLength: 1
                           type: string
                         servicePort:
                           description: Specifies the port of the referenced service.
@@ -1047,9 +835,6 @@ spec:
                       description: Port indicates the port for the Kong proxy to accept
                         incoming traffic on, which will then be routed to the service
                         Backend.
-                      format: int32
-                      maximum: 65535
-                      minimum: 1
                       type: integer
                   required:
                   - backend
@@ -1058,7 +843,7 @@ spec:
                 type: array
             type: object
           status:
-            description: UDPIngressStatus defines the observed state of UDPIngress.
+            description: UDPIngressStatus defines the observed state of UDPIngress
             properties:
               loadBalancer:
                 description: LoadBalancer contains the current status of the load-balancer.
@@ -1091,8 +876,8 @@ spec:
                                   the service port The format of the error shall comply
                                   with the following rules: - built-in error values
                                   shall be specified in this file and those shall
-                                  use CamelCase names - cloud provider specific error
-                                  values must have names that comply with the format
+                                  use   CamelCase names - cloud provider specific
+                                  error values must have names that comply with the   format
                                   foo.example.com/CamelCase. --- The regex it matches
                                   is (dns1123SubdomainFmt/)?(qualifiedNameFmt)'
                                 maxLength: 316
@@ -1124,6 +909,12 @@ spec:
     storage: true
     subresources:
       status: {}
+status:
+  acceptedNames:
+    kind: ""
+    plural: ""
+  conditions: []
+  storedVersions: []
 ---
 apiVersion: v1
 kind: ServiceAccount
@@ -1233,14 +1024,6 @@ rules:
   - get
   - patch
   - update
-- apiGroups:
-  - configuration.konghq.com
-  resources:
-  - ingressclassparameterses
-  verbs:
-  - get
-  - list
-  - watch
 - apiGroups:
   - configuration.konghq.com
   resources:
@@ -1337,14 +1120,6 @@ rules:
   - get
   - patch
   - update
-- apiGroups:
-  - discovery.k8s.io
-  resources:
-  - endpointslices
-  verbs:
-  - get
-  - list
-  - watch
 - apiGroups:
   - extensions
   resources:
@@ -1362,15 +1137,7 @@ rules:
   - patch
   - update
 - apiGroups:
-  - networking.k8s.io
-  resources:
-  - ingressclasses
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - networking.k8s.io
+  - networking.internal.knative.dev
   resources:
   - ingresses
   verbs:
@@ -1378,22 +1145,15 @@ rules:
   - list
   - watch
 - apiGroups:
-  - networking.k8s.io
+  - networking.internal.knative.dev
   resources:
   - ingresses/status
   verbs:
   - get
   - patch
   - update
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  creationTimestamp: null
-  name: kong-ingress-gateway
-rules:
 - apiGroups:
-  - gateway.networking.k8s.io
+  - networking.k8s.io
   resources:
   - gatewayclasses
   verbs:
@@ -1401,46 +1161,27 @@ rules:
   - list
   - watch
 - apiGroups:
-  - gateway.networking.k8s.io
+  - networking.k8s.io
   resources:
   - gatewayclasses/status
   verbs:
   - get
-  - update
 - apiGroups:
-  - gateway.networking.k8s.io
+  - networking.k8s.io
   resources:
   - gateways
   verbs:
   - get
   - list
-  - update
   - watch
 - apiGroups:
-  - gateway.networking.k8s.io
+  - networking.k8s.io
   resources:
   - gateways/status
   verbs:
   - get
-  - update
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - grpcroutes
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - grpcroutes/status
-  verbs:
-  - get
-  - patch
-  - update
 - apiGroups:
-  - gateway.networking.k8s.io
+  - networking.k8s.io
   resources:
   - httproutes
   verbs:
@@ -1448,80 +1189,13 @@ rules:
   - list
   - watch
 - apiGroups:
-  - gateway.networking.k8s.io
+  - networking.k8s.io
   resources:
   - httproutes/status
   verbs:
   - get
-  - update
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - referencegrants
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - referencegrants/status
-  verbs:
-  - get
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - tcproutes
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - tcproutes/status
-  verbs:
-  - get
-  - update
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - tlsroutes
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - tlsroutes/status
-  verbs:
-  - get
-  - update
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - udproutes
-  verbs:
-  - get
-  - list
-  - watch
-- apiGroups:
-  - gateway.networking.k8s.io
-  resources:
-  - udproutes/status
-  verbs:
-  - get
-  - update
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRole
-metadata:
-  creationTimestamp: null
-  name: kong-ingress-knative
-rules:
 - apiGroups:
-  - networking.internal.knative.dev
+  - networking.k8s.io
   resources:
   - ingresses
   verbs:
@@ -1529,7 +1203,7 @@ rules:
   - list
   - watch
 - apiGroups:
-  - networking.internal.knative.dev
+  - networking.k8s.io
   resources:
   - ingresses/status
   verbs:
@@ -1564,47 +1238,6 @@ subjects:
   name: kong-serviceaccount
   namespace: kong
 ---
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: kong-ingress-gateway
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: kong-ingress-gateway
-subjects:
-- kind: ServiceAccount
-  name: kong-serviceaccount
-  namespace: kong
----
-apiVersion: rbac.authorization.k8s.io/v1
-kind: ClusterRoleBinding
-metadata:
-  name: kong-ingress-knative
-roleRef:
-  apiGroup: rbac.authorization.k8s.io
-  kind: ClusterRole
-  name: kong-ingress-knative
-subjects:
-- kind: ServiceAccount
-  name: kong-serviceaccount
-  namespace: kong
----
-apiVersion: v1
-kind: Service
-metadata:
-  name: kong-admin
-  namespace: kong
-spec:
-  clusterIP: None
-  ports:
-  - name: admin
-    port: 8444
-    protocol: TCP
-    targetPort: 8444
-  selector:
-    app: proxy-kong
----
 apiVersion: v1
 kind: Service
 metadata:
@@ -1624,7 +1257,7 @@ spec:
     protocol: TCP
     targetPort: 8443
   selector:
-    app: proxy-kong
+    app: ingress-kong
   type: LoadBalancer
 ---
 apiVersion: v1
@@ -1657,115 +1290,18 @@ spec:
     metadata:
       annotations:
         kuma.io/gateway: enabled
-        kuma.io/service-account-token-volume: kong-serviceaccount-token
         traffic.sidecar.istio.io/includeInboundPorts: ""
       labels:
         app: ingress-kong
     spec:
-      automountServiceAccountToken: false
-      containers:
-      - env:
-        - name: CONTROLLER_KONG_ADMIN_SVC
-          value: kong/kong-admin
-        - name: CONTROLLER_KONG_ADMIN_TLS_SKIP_VERIFY
-          value: "true"
-        - name: CONTROLLER_PUBLISH_SERVICE
-          value: kong/kong-proxy
-        - name: POD_NAME
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: metadata.name
-        - name: POD_NAMESPACE
-          valueFrom:
-            fieldRef:
-              apiVersion: v1
-              fieldPath: metadata.namespace
-        image: {{.CustomRegistries.KongIngress | default .ImageRepository | default .Registries.KongIngress}}{{.Images.KongIngress}}
-        imagePullPolicy: IfNotPresent
-        livenessProbe:
-          failureThreshold: 3
-          httpGet:
-            path: /healthz
-            port: 10254
-            scheme: HTTP
-          initialDelaySeconds: 5
-          periodSeconds: 10
-          successThreshold: 1
-          timeoutSeconds: 1
-        name: ingress-controller
-        ports:
-        - containerPort: 8080
-          name: webhook
-          protocol: TCP
-        - containerPort: 10255
-          name: cmetrics
-          protocol: TCP
-        readinessProbe:
-          failureThreshold: 3
-          httpGet:
-            path: /readyz
-            port: 10254
-            scheme: HTTP
-          initialDelaySeconds: 5
-          periodSeconds: 10
-          successThreshold: 1
-          timeoutSeconds: 1
-        volumeMounts:
-        - mountPath: /var/run/secrets/kubernetes.io/serviceaccount
-          name: kong-serviceaccount-token
-          readOnly: true
-      serviceAccountName: kong-serviceaccount
-      volumes:
-      - name: kong-serviceaccount-token
-        projected:
-          sources:
-          - serviceAccountToken:
-              expirationSeconds: 3607
-              path: token
-          - configMap:
-              items:
-              - key: ca.crt
-                path: ca.crt
-              name: kube-root-ca.crt
-          - downwardAPI:
-              items:
-              - fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-                path: namespace
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app: proxy-kong
-  name: proxy-kong
-  namespace: kong
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: proxy-kong
-  template:
-    metadata:
-      annotations:
-        kuma.io/gateway: enabled
-        kuma.io/service-account-token-volume: kong-serviceaccount-token
-        traffic.sidecar.istio.io/includeInboundPorts: ""
-      labels:
-        app: proxy-kong
-    spec:
-      automountServiceAccountToken: false
       containers:
       - env:
         - name: KONG_PROXY_LISTEN
-          value: 0.0.0.0:8000 reuseport backlog=16384, 0.0.0.0:8443 http2 ssl reuseport
-            backlog=16384
+          value: 0.0.0.0:8000, 0.0.0.0:8443 ssl http2
         - name: KONG_PORT_MAPS
           value: 80:8000, 443:8443
         - name: KONG_ADMIN_LISTEN
-          value: 0.0.0.0:8444 http2 ssl reuseport backlog=16384
+          value: 127.0.0.1:8444 ssl
         - name: KONG_STATUS_LISTEN
           value: 0.0.0.0:8100
         - name: KONG_DATABASE
@@ -1780,14 +1316,12 @@ spec:
           value: /dev/stderr
         - name: KONG_PROXY_ERROR_LOG
           value: /dev/stderr
-        - name: KONG_ROUTER_FLAVOR
-          value: traditional
-        image: {{.CustomRegistries.Kong | default .ImageRepository | default .Registries.Kong}}{{.Images.Kong}}               
+        image: {{.CustomRegistries.Kong | default .ImageRepository | default .Registries.Kong}}{{.Images.Kong}}
         lifecycle:
           preStop:
             exec:
               command:
-              - /bin/bash
+              - /bin/sh
               - -c
               - kong quit
         livenessProbe:
@@ -1821,29 +1355,51 @@ spec:
           periodSeconds: 10
           successThreshold: 1
           timeoutSeconds: 1
+      - env:
+        - name: CONTROLLER_KONG_ADMIN_URL
+          value: https://127.0.0.1:8444
+        - name: CONTROLLER_KONG_ADMIN_TLS_SKIP_VERIFY
+          value: "true"
+        - name: CONTROLLER_PUBLISH_SERVICE
+          value: kong/kong-proxy
+        - name: POD_NAME
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.name
+        - name: POD_NAMESPACE
+          valueFrom:
+            fieldRef:
+              apiVersion: v1
+              fieldPath: metadata.namespace
+        image: {{.CustomRegistries.KongIngress | default .ImageRepository | default .Registries.KongIngress}}{{.Images.KongIngress}}
+        imagePullPolicy: IfNotPresent
+        livenessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /healthz
+            port: 10254
+            scheme: HTTP
+          initialDelaySeconds: 5
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
+        name: ingress-controller
+        ports:
+        - containerPort: 8080
+          name: webhook
+          protocol: TCP
+        - containerPort: 10255
+          name: cmetrics
+          protocol: TCP
+        readinessProbe:
+          failureThreshold: 3
+          httpGet:
+            path: /readyz
+            port: 10254
+            scheme: HTTP
+          initialDelaySeconds: 5
+          periodSeconds: 10
+          successThreshold: 1
+          timeoutSeconds: 1
       serviceAccountName: kong-serviceaccount
-      volumes:
-      - name: kong-serviceaccount-token
-        projected:
-          sources:
-          - serviceAccountToken:
-              expirationSeconds: 3607
-              path: token
-          - configMap:
-              items:
-              - key: ca.crt
-                path: ca.crt
-              name: kube-root-ca.crt
-          - downwardAPI:
-              items:
-              - fieldRef:
-                  apiVersion: v1
-                  fieldPath: metadata.namespace
-                path: namespace
----
-apiVersion: networking.k8s.io/v1
-kind: IngressClass
-metadata:
-  name: kong
-spec:
-  controller: ingress-controllers.konghq.com/kong
\ No newline at end of file
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 cfa30a64b..c162a05fb 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
@@ -2,4 +2,3 @@ sha256 0a834a749e86525e0eb16e7e80ce726e7c6a8e8d26fc5cc36c712305024da4e7  buildki
 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
-sha256 82b7452ffea166d3ef445597f9dbe3fa57c4d651e51ca7a9a581199116905524  buildkit-v0.11.6.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 cb5ecc53f..01c4e6c9a 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.6
-BUILDKIT_BIN_AARCH64_COMMIT = 2951a28cd7085eb18979b1f710678623d94ed578
+BUILDKIT_BIN_AARCH64_VERSION = v0.11.4
+BUILDKIT_BIN_AARCH64_COMMIT = 3abd1ef0c195cdc078d1657cb50f62a2cdc26f8f
 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 667ef5e33..ac277ad96 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
@@ -6,4 +6,3 @@ sha256 1b307268735c8f8e68b55781a6f4c03af38acc1bc29ba39ebaec6d422bccfb25  buildki
 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
-sha256 3f66f5bfbe509aadf1c21a26acfa472fe4c19046aa00a2d59b99733da867cd76  buildkit-v0.11.6.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 459bd10ab..337febf17 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.6
-BUILDKIT_BIN_COMMIT = 2951a28cd7085eb18979b1f710678623d94ed578
+BUILDKIT_BIN_VERSION = v0.11.4
+BUILDKIT_BIN_COMMIT = 3abd1ef0c195cdc078d1657cb50f62a2cdc26f8f
 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/iso/minikube-iso/package/runc-master/runc-master.hash b/deploy/iso/minikube-iso/package/runc-master/runc-master.hash
index 9710791f5..ce8e10338 100644
--- a/deploy/iso/minikube-iso/package/runc-master/runc-master.hash
+++ b/deploy/iso/minikube-iso/package/runc-master/runc-master.hash
@@ -17,4 +17,3 @@ sha256 49fbb25fda9fc416ec79a23e5382d504a8972a88247fe074f63ab71b6f38a0a0 52de29d7
 sha256 9bb3be747237647cd232a47796d855e44fe295493f9661a4013835393ea65d46 a916309fff0f838eb94e928713dbc3c0d0ac7aa4.tar.gz
 sha256 ab2b685fcece3a97ddcb8402879d1e05580a5b94f9d0aa3bae339db1e5dae686 5fd4c4d144137e991c4acebb2146ab1483a97925.tar.gz
 sha256 76cbf30637cbb828794d72d32fb3fd6ff3139cd9743b8b44790fd110f43d96b2 v1.1.5.tar.gz
-sha256 f1885d6dfa188f8112328ac2355e5d67346174a2e2e795ec514a972bcbfcc2fa v1.1.7.tar.gz
diff --git a/deploy/iso/minikube-iso/package/runc-master/runc-master.mk b/deploy/iso/minikube-iso/package/runc-master/runc-master.mk
index efff39d94..464d1b470 100644
--- a/deploy/iso/minikube-iso/package/runc-master/runc-master.mk
+++ b/deploy/iso/minikube-iso/package/runc-master/runc-master.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-RUNC_MASTER_VERSION = v1.1.7
-RUNC_MASTER_COMMIT = 860f061b76bb4fc671f0f9e900f7d80ff93d4eb7
+RUNC_MASTER_VERSION = v1.1.5
+RUNC_MASTER_COMMIT = f19387a6bec4944c770f7668ab51c4348d9c2f38
 RUNC_MASTER_SITE = https://github.com/opencontainers/runc/archive
 RUNC_MASTER_SOURCE = $(RUNC_MASTER_VERSION).tar.gz
 RUNC_MASTER_LICENSE = Apache-2.0
diff --git a/deploy/kicbase/Dockerfile b/deploy/kicbase/Dockerfile
index b1891ab99..22e015366 100644
--- a/deploy/kicbase/Dockerfile
+++ b/deploy/kicbase/Dockerfile
@@ -18,8 +18,6 @@
 # https://systemd.io/CONTAINER_INTERFACE/
 
 
-# this ARG needs to be global to use it in `FROM` & is updated for new versions of ubuntu:focal-*
-ARG UBUNTU_FOCAL_IMAGE="ubuntu:focal-20230308"
 # multi-stage docker build so we can build auto-pause for arm64
 FROM golang:1.20.3 as auto-pause
 WORKDIR /src
@@ -39,9 +37,9 @@ RUN if [ "$PREBUILT_AUTO_PAUSE" != "true" ]; then cd ./cmd/auto-pause/ && go bui
 
 # start from ubuntu 20.04, this image is reasonably small as a starting point
 # for a kubernetes node image, it doesn't contain much we don't need
-FROM ${UBUNTU_FOCAL_IMAGE} as kicbase
+FROM ubuntu:focal-20230308 as kicbase
 
-ARG BUILDKIT_VERSION="v0.11.6"
+ARG BUILDKIT_VERSION="v0.11.4"
 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 dd268900f..d75310f3e 100644
--- a/go.mod
+++ b/go.mod
@@ -15,13 +15,13 @@ require (
 	github.com/cenkalti/backoff/v4 v4.2.1
 	github.com/cheggaaa/pb/v3 v3.1.2
 	github.com/cloudevents/sdk-go/v2 v2.14.0
-	github.com/docker/docker v23.0.6+incompatible
+	github.com/docker/docker v23.0.3+incompatible
 	github.com/docker/go-units v0.5.0
 	github.com/docker/machine v0.16.2
 	github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e
 	github.com/golang-collections/collections v0.0.0-20130729185459-604e922904d3
 	github.com/google/go-cmp v0.5.9
-	github.com/google/go-containerregistry v0.15.1
+	github.com/google/go-containerregistry v0.14.0
 	github.com/google/slowjam v1.0.1
 	github.com/google/uuid v1.3.0
 	github.com/hashicorp/go-getter v1.7.1
@@ -48,33 +48,33 @@ require (
 	github.com/pkg/profile v1.7.0
 	github.com/pmezard/go-difflib v1.0.0
 	github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect
-	github.com/shirou/gopsutil/v3 v3.23.4
+	github.com/shirou/gopsutil/v3 v3.23.3
 	github.com/spf13/cobra v1.7.0
 	github.com/spf13/pflag v1.0.5
 	github.com/spf13/viper v1.15.0
 	github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097
 	go.opencensus.io v0.24.0
-	go.opentelemetry.io/otel v1.15.1
-	go.opentelemetry.io/otel/sdk v1.15.1
-	go.opentelemetry.io/otel/trace v1.15.1
+	go.opentelemetry.io/otel v1.14.0
+	go.opentelemetry.io/otel/sdk v1.14.0
+	go.opentelemetry.io/otel/trace v1.14.0
 	golang.org/x/build v0.0.0-20190927031335-2835ba2e683f
 	golang.org/x/crypto v0.8.0
 	golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561
 	golang.org/x/mod v0.10.0
 	golang.org/x/oauth2 v0.7.0
-	golang.org/x/sync v0.2.0
-	golang.org/x/sys v0.8.0
-	golang.org/x/term v0.8.0
+	golang.org/x/sync v0.1.0
+	golang.org/x/sys v0.7.0
+	golang.org/x/term v0.7.0
 	golang.org/x/text v0.9.0
 	gonum.org/v1/plot v0.12.0
-	google.golang.org/api v0.121.0
+	google.golang.org/api v0.119.0
 	gopkg.in/yaml.v2 v2.4.0
 	k8s.io/api v0.27.1
 	k8s.io/apimachinery v0.27.1
 	k8s.io/client-go v0.27.1
 	k8s.io/cluster-bootstrap v0.0.0
 	k8s.io/component-base v0.27.1
-	k8s.io/klog/v2 v2.100.1
+	k8s.io/klog/v2 v2.90.1
 	k8s.io/kubectl v0.27.1
 	k8s.io/utils v0.0.0-20230209194617-a36077c30491
 	libvirt.org/go/libvirt v1.9002.0
@@ -84,19 +84,19 @@ require (
 require (
 	github.com/Xuanwo/go-locale v1.1.0
 	github.com/blang/semver v3.5.1+incompatible
-	github.com/docker/cli v23.0.6+incompatible
+	github.com/docker/cli v23.0.4+incompatible
 	github.com/docker/go-connections v0.4.0
 	github.com/google/go-github/v43 v43.0.0
 	github.com/juju/clock v1.0.3
 	github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b
 	github.com/juju/mutex/v2 v2.0.0
-	github.com/opencontainers/runc v1.1.7
+	github.com/opencontainers/runc v1.1.6
 	github.com/santhosh-tekuri/jsonschema/v5 v5.3.0
 )
 
 require (
 	cloud.google.com/go v0.110.0 // indirect
-	cloud.google.com/go/compute v1.19.1 // indirect
+	cloud.google.com/go/compute v1.19.0 // indirect
 	cloud.google.com/go/compute/metadata v0.2.3 // indirect
 	cloud.google.com/go/iam v0.13.0 // indirect
 	cloud.google.com/go/monitoring v1.13.0 // indirect
@@ -105,7 +105,7 @@ require (
 	github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
 	github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.37.1 // indirect
 	github.com/MakeNowJust/heredoc v1.0.0 // indirect
-	github.com/Microsoft/go-winio v0.6.1 // indirect
+	github.com/Microsoft/go-winio v0.6.0 // indirect
 	github.com/VividCortex/ewma v1.2.0 // indirect
 	github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect
 	github.com/aws/aws-sdk-go v1.44.122 // indirect
@@ -129,7 +129,7 @@ require (
 	github.com/fvbommel/sortorder 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.4 // indirect
+	github.com/go-logr/logr v1.2.3 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-ole/go-ole v1.2.6 // indirect
 	github.com/go-openapi/jsonpointer v0.19.6 // indirect
@@ -145,7 +145,7 @@ require (
 	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/s2a-go v0.1.3 // indirect
+	github.com/google/s2a-go v0.1.2 // indirect
 	github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect
 	github.com/googleapis/gax-go/v2 v2.8.0 // indirect
 	github.com/gookit/color v1.5.2 // indirect
@@ -160,7 +160,7 @@ require (
 	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.5 // indirect
+	github.com/klauspost/compress v1.16.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
@@ -181,7 +181,7 @@ require (
 	github.com/modern-go/reflect2 v1.0.2 // indirect
 	github.com/muesli/reflow v0.3.0 // indirect
 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
-	github.com/opencontainers/image-spec v1.1.0-rc3 // 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/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
@@ -192,7 +192,7 @@ require (
 	github.com/prometheus/prometheus v0.35.0 // indirect
 	github.com/rivo/uniseg v0.2.0 // indirect
 	github.com/russross/blackfriday/v2 v2.1.0 // indirect
-	github.com/shoenig/go-m1cpu v0.1.5 // indirect
+	github.com/shoenig/go-m1cpu v0.1.4 // indirect
 	github.com/sirupsen/logrus v1.9.0 // indirect
 	github.com/spf13/afero v1.9.3 // indirect
 	github.com/spf13/cast v1.5.0 // indirect
@@ -201,7 +201,7 @@ require (
 	github.com/tklauser/go-sysconf v0.3.11 // indirect
 	github.com/tklauser/numcpus v0.6.0 // indirect
 	github.com/ulikunitz/xz v0.5.10 // indirect
-	github.com/vbatts/tar-split v0.11.3 // indirect
+	github.com/vbatts/tar-split v0.11.2 // indirect
 	github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
 	github.com/yusufpapurcu/wmi v1.2.2 // indirect
 	go.uber.org/atomic v1.10.0 // indirect
@@ -210,7 +210,7 @@ require (
 	golang.org/x/image v0.5.0 // indirect
 	golang.org/x/net v0.9.0 // indirect
 	golang.org/x/time v0.1.0 // indirect
-	golang.org/x/tools v0.8.0 // indirect
+	golang.org/x/tools v0.7.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-20230410155749-daa745c078e1 // indirect
diff --git a/go.sum b/go.sum
index 0bd5598cc..1baf77ca4 100644
--- a/go.sum
+++ b/go.sum
@@ -73,8 +73,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz
 cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU=
 cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U=
 cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU=
-cloud.google.com/go/compute v1.19.1 h1:am86mquDUgjGNWxiGn+5PGLbmgiWXlE/yNWpIpNvuXY=
-cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE=
+cloud.google.com/go/compute v1.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ=
+cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU=
 cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY=
 cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA=
 cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I=
@@ -241,7 +241,6 @@ github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZ
 github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
 github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU=
 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
-github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
 github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
 github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
 github.com/Delta456/box-cli-maker/v2 v2.3.0 h1:rGdoK/Qt3shdT1uqRMGgPqrhtisGD7PamTW8vY5MyCA=
@@ -262,8 +261,8 @@ github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3/go.mod h1:JP
 github.com/Microsoft/go-winio v0.4.17-0.20210324224401-5516f17a5958/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
 github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
 github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
-github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow=
-github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM=
+github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
+github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
 github.com/Microsoft/hcsshim v0.8.6/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
 github.com/Microsoft/hcsshim v0.8.7-0.20190325164909-8abdbb8205e4/go.mod h1:Op3hHsoHPAvb6lceZHDtd9OkTew38wNoXnJs8iY7rUg=
 github.com/Microsoft/hcsshim v0.8.7/go.mod h1:OHd7sQqRFrYd3RmSgbgji+ctCwkbq2wbEYNSzOYtcBQ=
@@ -560,8 +559,8 @@ github.com/digitalocean/godo v1.78.0/go.mod h1:GBmu8MkjZmNARE7IXRPmkbbnocNN8+uBm
 github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
 github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ=
 github.com/docker/cli v0.0.0-20191017083524-a8ff7f821017/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
-github.com/docker/cli v23.0.6+incompatible h1:CScadyCJ2ZKUDpAMZta6vK8I+6/m60VIjGIV7Wg/Eu4=
-github.com/docker/cli v23.0.6+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v23.0.4+incompatible h1:xClB7PsiATttDHj8ce5qvJcikiApNy7teRR1XkoBZGs=
+github.com/docker/cli v23.0.4+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
 github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
 github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
@@ -572,8 +571,8 @@ github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r
 github.com/docker/docker v17.12.0-ce-rc1.0.20181225093023-5ddb1d410a8b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker v17.12.0-ce-rc1.0.20190115220918-5ec31380a5d3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker v20.10.14+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker v23.0.6+incompatible h1:aBD4np894vatVX99UTx/GyOUOK4uEcROwA3+bQhEcoU=
-github.com/docker/docker v23.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho=
+github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
 github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A=
 github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0=
@@ -677,9 +676,8 @@ github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTg
 github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
 github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.4 h1:g01GSCwiDw2xSZfjJ2/T9M+S6pFdcNtFYsp+Y43HYDQ=
-github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
@@ -844,8 +842,8 @@ github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
 github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-containerregistry v0.5.1/go.mod h1:Ct15B4yir3PLOP5jsy0GNeYVaIZs/MK/Jz5any1wFW0=
-github.com/google/go-containerregistry v0.15.1 h1:RsJ9NbfxYWF8Wl4VmvkpN3zYATwuvlPq2j20zmcs63E=
-github.com/google/go-containerregistry v0.15.1/go.mod h1:wWK+LnOv4jXMM23IT/F1wdYftGWGr47Is8CG+pmHK1Q=
+github.com/google/go-containerregistry v0.14.0 h1:z58vMqHxuwvAsVwvKEkmVBz2TlgBgH5k6koEXBtlYkw=
+github.com/google/go-containerregistry v0.14.0/go.mod h1:aiJ2fp/SXvkWgmYHioXnbMdlgB8eXiiYOY55gfN91Wk=
 github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
 github.com/google/go-github/v43 v43.0.0 h1:y+GL7LIsAIF2NZlJ46ZoC/D1W1ivZasT0lnWHMYPZ+U=
 github.com/google/go-github/v43 v43.0.0/go.mod h1:ZkTvvmCXBvsfPpTHXnH/d2hP9Y0cTbvN9kr5xqyXOIc=
@@ -882,8 +880,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/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE=
-github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A=
+github.com/google/s2a-go v0.1.2 h1:WVtYAYuYxKeYajAmThMRYWP6K3wXkcqbGHeUgeubUHY=
+github.com/google/s2a-go v0.1.2/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM=
 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=
@@ -1079,8 +1077,8 @@ github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs
 github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
 github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
 github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM=
-github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
-github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
+github.com/klauspost/compress v1.16.0 h1:iULayQNOReoYUe+1qtKOqw9CwJv3aNQu8ivo7lw1HU4=
+github.com/klauspost/compress v1.16.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
 github.com/klauspost/cpuid v1.2.0 h1:NMpwD2G9JSFOE1/TJjGSo5zG7Yb2bTe7eq1jH+irmeE=
 github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
 github.com/kolo/xmlrpc v0.0.0-20201022064351-38db28db192b/go.mod h1:pcaDhQK0/NJZEvtCO0qQPPropqV0sJOJ6YW7X+9kRwM=
@@ -1279,8 +1277,8 @@ github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zM
 github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
 github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
 github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
-github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8=
-github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
+github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034=
+github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ=
 github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
 github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
 github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
@@ -1288,8 +1286,8 @@ github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rm
 github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
 github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
 github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc=
-github.com/opencontainers/runc v1.1.7 h1:y2EZDS8sNng4Ksf0GUYNhKbTShZJPJg1FiXJNH/uoCk=
-github.com/opencontainers/runc v1.1.7/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
+github.com/opencontainers/runc v1.1.6 h1:XbhB8IfG/EsnhNvZtNdLB0GBw92GYEFvKlhaJk9jUgA=
+github.com/opencontainers/runc v1.1.6/go.mod h1:CbUumNnWCuTGFukNXahoo/RFBZvDAgRh/smNYNOhA50=
 github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
 github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
 github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
@@ -1429,10 +1427,10 @@ github.com/sclevine/spec v1.2.0/go.mod h1:W4J29eT/Kzv7/b9IWLB055Z+qvVC9vt0Arko24
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
 github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
-github.com/shirou/gopsutil/v3 v3.23.4 h1:hZwmDxZs7Ewt75DV81r4pFMqbq+di2cbt9FsQBqLD2o=
-github.com/shirou/gopsutil/v3 v3.23.4/go.mod h1:ZcGxyfzAMRevhUR2+cfhXDH6gQdFYE/t8j1nsU4mPI8=
-github.com/shoenig/go-m1cpu v0.1.5 h1:LF57Z/Fpb/WdGLjt2HZilNnmZOxg/q2bSKTQhgbrLrQ=
-github.com/shoenig/go-m1cpu v0.1.5/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
+github.com/shirou/gopsutil/v3 v3.23.3 h1:Syt5vVZXUDXPEXpIBt5ziWsJ4LdSAAxF4l/xZeQgSEE=
+github.com/shirou/gopsutil/v3 v3.23.3/go.mod h1:lSBNN6t3+D6W5e5nXTxc8KIMMVxAcS+6IJlffjRRlMU=
+github.com/shoenig/go-m1cpu v0.1.4 h1:SZPIgRM2sEF9NJy50mRHu9PKGwxyyTTJIWvCtgVbozs=
+github.com/shoenig/go-m1cpu v0.1.4/go.mod h1:Wwvst4LR89UxjeFtLRMrpgRiyY4xPsejnVZym39dbAQ=
 github.com/shoenig/test v0.6.3 h1:GVXWJFk9PiOjN0KoJ7VrJGH6uLPnqxR7/fe3HUPfE0c=
 github.com/shoenig/test v0.6.3/go.mod h1:byHiCGXqrVaflBLAMq/srcZIHynQPQgeyvkvXnjqq0k=
 github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg=
@@ -1538,10 +1536,9 @@ github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijb
 github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
 github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
-github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8=
 github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
-github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck=
-github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY=
+github.com/vbatts/tar-split v0.11.2 h1:Via6XqJr0hceW4wff3QRzD5gAk/tatMw/4ZA7cTlIME=
+github.com/vbatts/tar-split v0.11.2/go.mod h1:vV3ZuO2yWSVsz+pfFzDG/upWH1JhjOiEaWq6kXyQ3VI=
 github.com/vishvananda/netlink v0.0.0-20181108222139-023a6dafdcdf/go.mod h1:+SR5DhBJrl6ZM7CoCKvpw5BKroDKQ+PJqOg65H/2ktk=
 github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
 github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852/go.mod h1:twkDnbuQxJYemMlGd4JFIcuhgX83tXhKS2B/PRMpOho=
@@ -1615,8 +1612,8 @@ go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzox
 go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
 go.opentelemetry.io/otel v1.6.0/go.mod h1:bfJD2DZVw0LBxghOTlgnlI0CV3hLDu9XF/QKOUXMTQQ=
 go.opentelemetry.io/otel v1.6.1/go.mod h1:blzUabWHkX6LJewxvadmzafgh/wnvBSDBdOuwkAtrWQ=
-go.opentelemetry.io/otel v1.15.1 h1:3Iwq3lfRByPaws0f6bU3naAqOR1n5IeDWd9390kWHa8=
-go.opentelemetry.io/otel v1.15.1/go.mod h1:mHHGEHVDLal6YrKMmk9LqC4a3sF5g+fHfrttQIB1NTc=
+go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM=
+go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU=
 go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
 go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0/go.mod h1:VpP4/RMn8bv8gNo9uK7/IMY4mtWLELsS+JIP0inH0h4=
 go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.6.1/go.mod h1:NEu79Xo32iVb+0gVNV8PMd7GoWqnyDXRlj04yFjqz40=
@@ -1632,16 +1629,16 @@ go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa
 go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
 go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
 go.opentelemetry.io/otel/sdk v1.6.1/go.mod h1:IVYrddmFZ+eJqu2k38qD3WezFR2pymCzm8tdxyh3R4E=
-go.opentelemetry.io/otel/sdk v1.15.1 h1:5FKR+skgpzvhPQHIEfcwMYjCBr14LWzs3uSqKiQzETI=
-go.opentelemetry.io/otel/sdk v1.15.1/go.mod h1:8rVtxQfrbmbHKfqzpQkT5EzZMcbMBwTzNAggbEAM0KA=
+go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY=
+go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM=
 go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
 go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
 go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
 go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
 go.opentelemetry.io/otel/trace v1.6.0/go.mod h1:qs7BrU5cZ8dXQHBGxHMOxwME/27YH2qEp4/+tZLLwJE=
 go.opentelemetry.io/otel/trace v1.6.1/go.mod h1:RkFRM1m0puWIq10oxImnGEduNBzxiN7TXluRBtE+5j0=
-go.opentelemetry.io/otel/trace v1.15.1 h1:uXLo6iHJEzDfrNC0L0mNjItIp06SyaBQxu5t3xMlngY=
-go.opentelemetry.io/otel/trace v1.15.1/go.mod h1:IWdQG/5N1x7f6YUlmdLeJvH9yxtuJAfc4VW5Agv9r/8=
+go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M=
+go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8=
 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=
@@ -1698,7 +1695,6 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
 golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
 golang.org/x/crypto v0.0.0-20211202192323-5770296d904e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
-golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.8.0 h1:pd9TJtTueMTVQXzk8E2XESSMQDj/U7OUu0PqJqPXQjQ=
 golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
@@ -1877,8 +1873,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ
 golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
-golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
+golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -2019,14 +2015,12 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
 golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU=
-golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -2034,8 +2028,8 @@ golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuX
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/term v0.0.0-20221017184919-83659145692c/go.mod h1:VTIZ7TEbF0BS9Sv9lPTvGbtW8i4z6GGbJBCM37uMCzY=
 golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols=
-golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
+golang.org/x/term v0.7.0 h1:BEvjmm5fURWqcfbSKTdpkDXYBrUS1c0m8agp14W48vQ=
+golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -2045,7 +2039,6 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
-golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ=
 golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
 golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
@@ -2138,8 +2131,8 @@ golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyj
 golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
 golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
 golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
-golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
+golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4=
+golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -2202,8 +2195,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ
 google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
 google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s=
 google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70=
-google.golang.org/api v0.121.0 h1:8Oopoo8Vavxx6gt+sgs8s8/X60WBAtKQq6JqnkF+xow=
-google.golang.org/api v0.121.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms=
+google.golang.org/api v0.119.0 h1:Dzq+ARD6+8jmd5wknJE1crpuzu1JiovEU6gCp9PkoKA=
+google.golang.org/api v0.119.0/go.mod h1:CrSvlNEFCFLae9ZUtL1z+61+rEBD7J/aCYwVYKZoWFU=
 google.golang.org/appengine v0.0.0-20160205025855-6a436539be38/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -2500,8 +2493,8 @@ k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
 k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg=
-k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=
+k8s.io/klog/v2 v2.90.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
 k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
diff --git a/hack/jenkins/common.sh b/hack/jenkins/common.sh
index 0d6b8cd86..0a1161089 100755
--- a/hack/jenkins/common.sh
+++ b/hack/jenkins/common.sh
@@ -123,6 +123,7 @@ echo "driver:    ${DRIVER}"
 echo "runtime:   ${CONTAINER_RUNTIME}"
 echo "job:       ${JOB_NAME}"
 echo "test home: ${TEST_HOME}"
+echo "sudo:      ${SUDO_PREFIX}"
 echo "kernel:    $(uname -v)"
 echo "uptime:    $(uptime)"
 # Setting KUBECONFIG prevents the version check from erroring out due to permission issues
@@ -292,7 +293,7 @@ function cleanup_procs() {
   if [[ "${kprocs}" != "" ]]; then
     echo "error: killing hung kubectl processes ..."
     ps -f -p ${kprocs} || true
-    kill ${kprocs} || true
+    sudo -E kill ${kprocs} || true
   fi
 
 
@@ -302,10 +303,10 @@ function cleanup_procs() {
     echo "Found stale api servers listening on 8443 processes to kill: "
     for p in $none_procs
     do
-      echo "Killing stale none driver: $p"
-      ps -f -p $p || true
-      kill $p || true
-      kill -9 $p || true
+      echo "Kiling stale none driver:  $p"
+      sudo -E ps -f -p $p || true
+      sudo -E kill $p || true
+      sudo -E kill -9 $p || true
     done
   fi
 }
@@ -386,7 +387,7 @@ touch "${JSON_OUT}"
 
 gotestsum --jsonfile "${JSON_OUT}" -f standard-verbose --raw-command -- \
   go tool test2json -t \
-  ${E2E_BIN} \
+  ${SUDO_PREFIX}${E2E_BIN} \
     -minikube-start-args="--driver=${DRIVER} ${EXTRA_START_ARGS}" \
     -test.timeout=${TIMEOUT} -test.v \
     ${EXTRA_TEST_ARGS} \
@@ -483,16 +484,16 @@ else
 fi
 
 echo ">> Cleaning up after ourselves ..."
-timeout 3m ${MINIKUBE_BIN} tunnel --cleanup || true
-timeout 5m ${MINIKUBE_BIN} delete --all --purge >/dev/null 2>/dev/null || true
+timeout 3m ${SUDO_PREFIX}${MINIKUBE_BIN} tunnel --cleanup || true
+timeout 5m ${SUDO_PREFIX}${MINIKUBE_BIN} delete --all --purge >/dev/null 2>/dev/null || true
 cleanup_stale_routes || true
 
-rm -Rf "${MINIKUBE_HOME}" || true
-rm -f "${KUBECONFIG}" || true
-rm -f "${TEST_OUT}" || true
-rm -f "${JSON_OUT}" || true
-rm -f "${HTML_OUT}" || true
-rm -f "${SUMMARY_OUT}" || true
+${SUDO_PREFIX} rm -Rf "${MINIKUBE_HOME}" || true
+${SUDO_PREFIX} rm -f "${KUBECONFIG}" || true
+${SUDO_PREFIX} rm -f "${TEST_OUT}" || true
+${SUDO_PREFIX} rm -f "${JSON_OUT}" || true
+${SUDO_PREFIX} rm -f "${HTML_OUT}" || true
+${SUDO_PREFIX} rm -f "${SUMMARY_OUT}" || true
 
 rmdir "${TEST_HOME}" || true
 echo ">> ${TEST_HOME} completed at $(date)"
diff --git a/hack/update/get_version/get_version.go b/hack/update/get_version/get_version.go
index cc3c98ba1..d1c704311 100644
--- a/hack/update/get_version/get_version.go
+++ b/hack/update/get_version/get_version.go
@@ -41,7 +41,6 @@ var dependencies = map[string]dependency{
 	"hugo":           {"netlify.toml", `HUGO_VERSION = "(.*)"`},
 	"metrics-server": {"pkg/minikube/assets/addons.go", `metrics-server/metrics-server:(.*)@`},
 	"runc":           {"deploy/iso/minikube-iso/package/runc-master/runc-master.mk", `RUNC_MASTER_VERSION = (.*)`},
-	"ubuntu":         {"deploy/kicbase/Dockerfile", `UBUNTU_FOCAL_IMAGE="(.*)"`},
 }
 
 func main() {
diff --git a/hack/update/golang_version/update_golang_version.go b/hack/update/golang_version/update_golang_version.go
index 5e6f12a03..f21e6513b 100644
--- a/hack/update/golang_version/update_golang_version.go
+++ b/hack/update/golang_version/update_golang_version.go
@@ -110,11 +110,6 @@ var (
 				`GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`,
 			},
 		},
-		".github/workflows/update-ubuntu-version.yml": {
-			Replace: map[string]string{
-				`GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`,
-			},
-		},
 		".github/workflows/update-cloud-spanner-emulator-version.yml": {
 			Replace: map[string]string{
 				`GO_VERSION: .*`: `GO_VERSION: '{{.StableVersion}}'`,
diff --git a/hack/update/ubuntu_version/update_ubuntu_version.go b/hack/update/ubuntu_version/update_ubuntu_version.go
deleted file mode 100644
index 48768e88e..000000000
--- a/hack/update/ubuntu_version/update_ubuntu_version.go
+++ /dev/null
@@ -1,107 +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.
-*/
-
-/*
-Copyright 2022 The Kubernetes Authors All rights reserved.
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-    http://www.apache.org/licenses/LICENSE-2.0
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-package main
-
-import (
-	"encoding/json"
-	"fmt"
-	"io"
-	"net/http"
-	"strings"
-
-	"k8s.io/klog/v2"
-
-	"k8s.io/minikube/hack/update"
-)
-
-const (
-	dockerHubUbuntuBaseURL = "https://hub.docker.com/v2/repositories/library/ubuntu/tags"
-)
-
-var (
-	schema = map[string]update.Item{
-		"deploy/kicbase/Dockerfile": {
-			Replace: map[string]string{
-				`UBUNTU_FOCAL_IMAGE=.*`: `UBUNTU_FOCAL_IMAGE="{{.LatestVersion}}"`,
-			},
-		},
-	}
-)
-
-// Data holds latest Ubuntu focal version in semver format.
-type Data struct {
-	LatestVersion string
-}
-
-// Response is used to unmarshal the response from Docker Hub
-type Response struct {
-	Results []struct {
-		Name string `json:"name"`
-	}
-}
-
-func getLatestVersion() (string, error) {
-	resp, err := http.Get(dockerHubUbuntuBaseURL)
-	if err != nil {
-		return "", fmt.Errorf("unable to get Ubuntu focal's latest version: %v", err)
-	}
-	defer resp.Body.Close()
-
-	body, err := io.ReadAll(resp.Body)
-	if err != nil {
-		return "", fmt.Errorf("unable to read HTTP response from Docker Hub: %v", err)
-	}
-
-	var content Response
-	err = json.Unmarshal(body, &content)
-	if err != nil {
-		return "", fmt.Errorf("unable to unmarshal response from Docker Hub: %v", err)
-	}
-
-	for _, i := range content.Results {
-		if strings.Contains(i.Name, "focal-") {
-			return i.Name, nil
-		}
-	}
-
-	return "", fmt.Errorf("response from Docker Hub does not contain a latest focal image")
-}
-
-func main() {
-	// get Ubuntu Focal latest version
-	latest, err := getLatestVersion()
-	if err != nil {
-		klog.Fatalf("Unable to find latest ubuntu:focal version: %v\n", err)
-	}
-	data := Data{LatestVersion: fmt.Sprintf("ubuntu:%s", latest)}
-	klog.Infof("Ubuntu focal latest version: %s", latest)
-
-	update.Apply(schema, data)
-}
diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go
index e92f728a0..931f26874 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.39-1683246328-16426"
+	Version = "v0.0.39-1680813808-16252"
 
 	// SHA of the kic base image
-	baseImageSHA = "c063371f0e8933096fec0d2952100c31c4e17f2898a91dfbf036ee0048f9ee72"
+	baseImageSHA = "4d62d233cf4143189be209981d7b5b8b7fbf20ac03586d159c4c05276e84e45f"
 	// 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/minikube/assets/addons.go b/pkg/minikube/assets/addons.go
index 08d727fb1..eaafc08b0 100644
--- a/pkg/minikube/assets/addons.go
+++ b/pkg/minikube/assets/addons.go
@@ -293,9 +293,9 @@ var Addons = map[string]*Addon{
 			vmpath.GuestAddonsDir,
 			"kong-ingress-controller.yaml",
 			"0640"),
-	}, false, "kong", "3rd party (Kong HQ)", "@gAmUssA", "https://minikube.sigs.k8s.io/docs/handbook/addons/kong-ingress/", map[string]string{
-		"Kong":        "kong:3.2@sha256:f5f51af49fa1f5a7600e60bb51ebd760b16fd020bb16bba2b70d36a54f3d6ac8",
-		"KongIngress": "kong/kubernetes-ingress-controller:2.9.3@sha256:debe488e0f1ac0019f5f36d8185476526cdcec972486886a5e23e27e00960814",
+	}, false, "kong", "3rd party (Kong HQ)", "", "https://minikube.sigs.k8s.io/docs/handbook/addons/kong-ingress/", map[string]string{
+		"Kong":        "kong:2.7@sha256:4d3e93207305ace881fe9e95ac27717b6fbdd9e0ec1873c34e94908a4f4c9335",
+		"KongIngress": "kong/kubernetes-ingress-controller:2.1.1@sha256:60e4102ab2da7f61e9c478747f0762d06a6166b5f300526b237ed7354c3cb4c8",
 	}, map[string]string{
 		"Kong":        "docker.io",
 		"KongIngress": "docker.io",
@@ -729,11 +729,11 @@ var Addons = map[string]*Addon{
 		"Helm3": "docker.io",
 	}),
 	"headlamp": NewAddon([]*BinAsset{
-		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-namespace.yaml", vmpath.GuestAddonsDir, "headlamp-namespace.yaml", "0640"),
-		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-service.yaml", vmpath.GuestAddonsDir, "headlamp-service.yaml", "0640"),
-		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-deployment.yaml.tmpl", vmpath.GuestAddonsDir, "headlamp-deployment.yaml", "0640"),
-		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-serviceaccount.yaml", vmpath.GuestAddonsDir, "headlamp-serviceaccount.yaml", "0640"),
-		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-clusterrolebinding.yaml", vmpath.GuestAddonsDir, "headlamp-clusterrolebinding.yaml", "0640"),
+		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-namespace.yaml", vmpath.GuestAddonsDir, "headlamp-namespace.yaml", "6040"),
+		MustBinAsset(addons.HeadlampAssets, "headlamp/headlamp-service.yaml", vmpath.GuestAddonsDir, "headlamp-service.yaml", "6040"),
+		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/",
 		map[string]string{
 			"Headlamp": "headlamp-k8s/headlamp:v0.17.0@sha256:945b59342f792e90666d4eb3fb537c7f66c63e8e4ae661c9624136d2e8c37f78",
@@ -742,7 +742,7 @@ var Addons = map[string]*Addon{
 			"Headlamp": "ghcr.io",
 		}),
 	"cloud-spanner": NewAddon([]*BinAsset{
-		MustBinAsset(addons.CloudSpanner, "cloud-spanner/deployment.yaml", vmpath.GuestAddonsDir, "deployment.yaml", "0640"),
+		MustBinAsset(addons.CloudSpanner, "cloud-spanner/deployment.yaml", vmpath.GuestAddonsDir, "deployment.yaml", "6040"),
 	}, false, "cloud-spanner", "Google", "", "https://minikube.sigs.k8s.io/docs/handbook/addons/cloud-spanner/", map[string]string{
 		"CloudSpanner": "cloud-spanner-emulator/emulator:1.5.4@sha256:026cec4d30c4b75ab49e01b1f7b43c4b97485b1df9f79b8a0be3ab156fb6bb68",
 	}, map[string]string{
diff --git a/pkg/minikube/bootstrapper/bsutil/files.go b/pkg/minikube/bootstrapper/bsutil/files.go
index 9a6b7d96d..28e91dff4 100644
--- a/pkg/minikube/bootstrapper/bsutil/files.go
+++ b/pkg/minikube/bootstrapper/bsutil/files.go
@@ -19,12 +19,17 @@ package bsutil
 
 import (
 	"os/exec"
+	"path"
 
 	"github.com/pkg/errors"
 	"k8s.io/minikube/pkg/minikube/assets"
 	"k8s.io/minikube/pkg/minikube/command"
+	"k8s.io/minikube/pkg/minikube/vmpath"
 )
 
+// KubeadmYamlPath is the path to the kubeadm configuration
+var KubeadmYamlPath = path.Join(vmpath.GuestEphemeralDir, "kubeadm.yaml")
+
 const (
 	// KubeletServiceFile is the file for the systemd kubelet.service
 	KubeletServiceFile = "/lib/systemd/system/kubelet.service"
diff --git a/pkg/minikube/bootstrapper/certs.go b/pkg/minikube/bootstrapper/certs.go
index 766655a5d..8b4b11b76 100644
--- a/pkg/minikube/bootstrapper/certs.go
+++ b/pkg/minikube/bootstrapper/certs.go
@@ -140,10 +140,6 @@ func SetupCerts(cmd command.Runner, k8s config.ClusterConfig, n config.Node) err
 	if err := installCertSymlinks(cmd, caCerts); err != nil {
 		return errors.Wrapf(err, "certificate symlinks")
 	}
-
-	if err := generateKubeadmCerts(cmd, k8s); err != nil {
-		return fmt.Errorf("failed to renew kubeadm certs: %v", err)
-	}
 	return nil
 }
 
@@ -348,38 +344,6 @@ func generateProfileCerts(cfg config.ClusterConfig, n config.Node, ccs CACerts,
 	return xfer, nil
 }
 
-func generateKubeadmCerts(cmd command.Runner, cc config.ClusterConfig) error {
-	if _, err := cmd.RunCmd(exec.Command("ls", path.Join(vmpath.GuestPersistentDir, "certs", "etcd"))); err != nil {
-		klog.Infof("certs directory doesn't exist, likely first start: %v", err)
-		return nil
-	}
-
-	expiredCerts := false
-	certs := []string{"apiserver-etcd-client", "apiserver-kubelet-client", "etcd-server", "etcd-healthcheck-client", "etcd-peer", "front-proxy-client"}
-	for _, cert := range certs {
-		certPath := []string{vmpath.GuestPersistentDir, "certs"}
-		// certs starting with "etcd-" are in the "etcd" dir
-		// ex: etcd-server => etcd/server
-		if strings.HasPrefix(cert, "etcd-") {
-			certPath = append(certPath, "etcd")
-		}
-		certPath = append(certPath, strings.TrimPrefix(cert, "etcd-")+".crt")
-		if !isKubeadmCertValid(cmd, path.Join(certPath...)) {
-			expiredCerts = true
-		}
-	}
-	if !expiredCerts {
-		return nil
-	}
-	out.WarningT("kubeadm certificates have expired. Generating new ones...")
-	kubeadmPath := path.Join(vmpath.GuestPersistentDir, "binaries", cc.KubernetesConfig.KubernetesVersion)
-	bashCmd := fmt.Sprintf("sudo env PATH=\"%s:$PATH\" kubeadm certs renew all --config %s", kubeadmPath, constants.KubeadmYamlPath)
-	if _, err := cmd.RunCmd(exec.Command("/bin/bash", "-c", bashCmd)); err != nil {
-		return fmt.Errorf("failed to renew kubeadm certs: %v", err)
-	}
-	return nil
-}
-
 // isValidPEMCertificate checks whether the input file is a valid PEM certificate (with at least one CERTIFICATE block)
 func isValidPEMCertificate(filePath string) (bool, error) {
 	fileBytes, err := os.ReadFile(filePath)
@@ -581,11 +545,3 @@ func isValid(certPath, keyPath string) bool {
 
 	return true
 }
-
-func isKubeadmCertValid(cmd command.Runner, certPath string) bool {
-	_, err := cmd.RunCmd(exec.Command("openssl", "x509", "-noout", "-in", certPath, "-checkend", "86400"))
-	if err != nil {
-		klog.Infof("%v", err)
-	}
-	return err == nil
-}
diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
index 3497863e5..ad2742751 100644
--- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
+++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
@@ -238,7 +238,7 @@ func (k *Bootstrapper) init(cfg config.ClusterConfig) error {
 		return errors.Wrap(err, "clearing stale configs")
 	}
 
-	conf := constants.KubeadmYamlPath
+	conf := bsutil.KubeadmYamlPath
 	ctx, cancel := context.WithTimeout(context.Background(), initTimeoutMinutes*time.Minute)
 	defer cancel()
 	kr, kw := io.Pipe()
@@ -429,7 +429,7 @@ func (k *Bootstrapper) StartCluster(cfg config.ClusterConfig) error {
 		// Fall-through to init
 	}
 
-	conf := constants.KubeadmYamlPath
+	conf := bsutil.KubeadmYamlPath
 	if _, err := k.c.RunCmd(exec.Command("sudo", "cp", conf+".new", conf)); err != nil {
 		return errors.Wrap(err, "cp")
 	}
@@ -678,7 +678,7 @@ func (k *Bootstrapper) restartControlPlane(cfg config.ClusterConfig) error {
 	}
 
 	// If the cluster is running, check if we have any work to do.
-	conf := constants.KubeadmYamlPath
+	conf := bsutil.KubeadmYamlPath
 
 	if !k.needsReconfigure(conf, hostname, port, client, cfg.KubernetesConfig.KubernetesVersion) {
 		klog.Infof("Taking a shortcut, as the cluster seems to be properly configured")
@@ -982,7 +982,7 @@ func (k *Bootstrapper) UpdateNode(cfg config.ClusterConfig, n config.Node, r cru
 	}
 
 	if n.ControlPlane {
-		files = append(files, assets.NewMemoryAssetTarget(kubeadmCfg, constants.KubeadmYamlPath+".new", "0640"))
+		files = append(files, assets.NewMemoryAssetTarget(kubeadmCfg, bsutil.KubeadmYamlPath+".new", "0640"))
 	}
 
 	// Installs compatibility shims for non-systemd environments
diff --git a/pkg/minikube/cni/flannel.yaml b/pkg/minikube/cni/flannel.yaml
index 362f8eb8b..378def674 100644
--- a/pkg/minikube/cni/flannel.yaml
+++ b/pkg/minikube/cni/flannel.yaml
@@ -130,8 +130,8 @@ spec:
       serviceAccountName: flannel
       initContainers:
       - name: install-cni-plugin
-        image: docker.io/flannel/flannel-cni-plugin:v1.1.2
-       #image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2
+        #image: flannelcni/flannel-cni-plugin:v1.1.2 #for ppc64le and mips64le (dockerhub limitations may apply)
+        image: docker.io/rancher/mirrored-flannelcni-flannel-cni-plugin:v1.1.2
         command:
         - cp
         args:
@@ -142,8 +142,8 @@ spec:
         - name: cni-plugin
           mountPath: /opt/cni/bin
       - name: install-cni
-        image: docker.io/flannel/flannel:v0.21.4
-       #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.21.4
+       #image: flannelcni/flannel:v0.20.2 #for ppc64le and mips64le (dockerhub limitations may apply)
+        image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2
         command:
         - cp
         args:
@@ -157,8 +157,8 @@ spec:
           mountPath: /etc/kube-flannel/
       containers:
       - name: kube-flannel
-        image: docker.io/flannel/flannel:v0.21.4
-       #image: docker.io/rancher/mirrored-flannelcni-flannel:v0.21.4
+       #image: flannelcni/flannel:v0.20.2 #for ppc64le and mips64le (dockerhub limitations may apply)
+        image: docker.io/rancher/mirrored-flannelcni-flannel:v0.20.2
         command:
         - /opt/bin/flanneld
         args:
diff --git a/pkg/minikube/command/command_runner.go b/pkg/minikube/command/command_runner.go
index 672ff711d..88b6d5ad3 100644
--- a/pkg/minikube/command/command_runner.go
+++ b/pkg/minikube/command/command_runner.go
@@ -209,10 +209,5 @@ func writeFile(dst string, f assets.CopyableFile, perms os.FileMode) error {
 	if n != int64(f.GetLength()) {
 		return fmt.Errorf("%s: expected to write %d bytes, but wrote %d instead", dst, f.GetLength(), n)
 	}
-
-	if err := w.Chmod(perms); err != nil {
-		return errors.Wrap(err, "chmod")
-	}
-
 	return w.Close()
 }
diff --git a/pkg/minikube/command/exec_runner.go b/pkg/minikube/command/exec_runner.go
index ac0e8e7d9..f9bcdf516 100644
--- a/pkg/minikube/command/exec_runner.go
+++ b/pkg/minikube/command/exec_runner.go
@@ -162,19 +162,23 @@ func (e *execRunner) Copy(f assets.CopyableFile) error {
 		// write to temp location ...
 		tmpfile, err := os.CreateTemp("", "minikube")
 		if err != nil {
-			return errors.Wrap(err, "error creating tempfile")
+			return errors.Wrapf(err, "error creating tempfile")
 		}
 		defer os.Remove(tmpfile.Name())
-
-		if err := writeFile(tmpfile.Name(), f, os.FileMode(perms)); err != nil {
+		err = writeFile(tmpfile.Name(), f, os.FileMode(perms))
+		if err != nil {
 			return errors.Wrapf(err, "error writing to tempfile %s", tmpfile.Name())
 		}
 
-		// ... then use sudo to move to target
-		if _, err := e.RunCmd(exec.Command("sudo", "cp", "-a", tmpfile.Name(), dst)); err != nil {
+		// ... then use sudo to move to target ...
+		_, err = e.RunCmd(exec.Command("sudo", "cp", "-a", tmpfile.Name(), dst))
+		if err != nil {
 			return errors.Wrapf(err, "error copying tempfile %s to dst %s", tmpfile.Name(), dst)
 		}
-		return nil
+
+		// ... then fix file permission that should have been fine because of "cp -a"
+		err = os.Chmod(dst, os.FileMode(perms))
+		return err
 	}
 	return writeFile(dst, f, os.FileMode(perms))
 }
diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go
index bf40edfc9..e97a8740a 100644
--- a/pkg/minikube/constants/constants.go
+++ b/pkg/minikube/constants/constants.go
@@ -18,13 +18,11 @@ package constants
 
 import (
 	"errors"
-	"path"
 	"path/filepath"
 	"time"
 
 	"k8s.io/client-go/tools/clientcmd"
 	"k8s.io/client-go/util/homedir"
-	"k8s.io/minikube/pkg/minikube/vmpath"
 )
 
 var (
@@ -34,10 +32,10 @@ var (
 
 const (
 	// DefaultKubernetesVersion is the default Kubernetes version
-	DefaultKubernetesVersion = "v1.27.1"
+	DefaultKubernetesVersion = "v1.26.3"
 	// NewestKubernetesVersion is the newest Kubernetes version to test against
 	// NOTE: You may need to update coreDNS & etcd versions in pkg/minikube/bootstrapper/images/images.go
-	NewestKubernetesVersion = "v1.27.1"
+	NewestKubernetesVersion = "v1.27.0-rc.1"
 	// OldestKubernetesVersion is the oldest Kubernetes version to test against
 	OldestKubernetesVersion = "v1.16.0"
 	// NoKubernetesVersion is the version used when users does NOT want to install kubernetes
@@ -205,7 +203,4 @@ var (
 
 	// ErrMachineMissing is returned when virtual machine does not exist due to user interrupt cancel(i.e. Ctrl + C)
 	ErrMachineMissing = errors.New("machine does not exist")
-
-	// KubeadmYamlPath is the path to the kubeadm configuration
-	KubeadmYamlPath = path.Join(vmpath.GuestEphemeralDir, "kubeadm.yaml")
 )
diff --git a/pkg/minikube/cruntime/containerd.go b/pkg/minikube/cruntime/containerd.go
index 9746ffda8..1d52a1b55 100644
--- a/pkg/minikube/cruntime/containerd.go
+++ b/pkg/minikube/cruntime/containerd.go
@@ -124,7 +124,7 @@ func (r *Containerd) Available() error {
 	if _, err := r.Runner.RunCmd(c); err != nil {
 		return errors.Wrap(err, "check containerd availability")
 	}
-	return nil
+	return checkCNIPlugins(r.KubernetesVersion)
 }
 
 // generateContainerdConfig sets up /etc/containerd/config.toml & /etc/containerd/containerd.conf.d/02-containerd.conf
diff --git a/pkg/minikube/cruntime/cri.go b/pkg/minikube/cruntime/cri.go
index 9a7f86869..1244defb0 100644
--- a/pkg/minikube/cruntime/cri.go
+++ b/pkg/minikube/cruntime/cri.go
@@ -21,6 +21,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"html/template"
+	"os"
 	"os/exec"
 	"path"
 	"strings"
@@ -349,3 +350,11 @@ func kubeletCRIOptions(cr Manager, kubernetesVersion semver.Version) map[string]
 	}
 	return opts
 }
+
+func checkCNIPlugins(kubernetesVersion semver.Version) error {
+	if kubernetesVersion.LT(semver.Version{Major: 1, Minor: 24}) {
+		return nil
+	}
+	_, err := os.Stat("/opt/cni/bin")
+	return err
+}
diff --git a/pkg/minikube/cruntime/crio.go b/pkg/minikube/cruntime/crio.go
index aec689f7d..a1676cff1 100644
--- a/pkg/minikube/cruntime/crio.go
+++ b/pkg/minikube/cruntime/crio.go
@@ -130,7 +130,7 @@ func (r *CRIO) Available() error {
 	if _, err := r.Runner.RunCmd(c); err != nil {
 		return errors.Wrapf(err, "check crio available")
 	}
-	return nil
+	return checkCNIPlugins(r.KubernetesVersion)
 }
 
 // Active returns if CRIO is active on the host
diff --git a/pkg/minikube/cruntime/docker.go b/pkg/minikube/cruntime/docker.go
index 93eb33c64..044ce41c8 100644
--- a/pkg/minikube/cruntime/docker.go
+++ b/pkg/minikube/cruntime/docker.go
@@ -117,6 +117,9 @@ func (r *Docker) Available() error {
 			return err
 		}
 	}
+	if err := checkCNIPlugins(r.KubernetesVersion); err != nil {
+		return err
+	}
 	_, err := exec.LookPath("docker")
 	return err
 }
diff --git a/pkg/minikube/download/iso.go b/pkg/minikube/download/iso.go
index 1d6cd4ca4..9b22af405 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/16426"
+	isoBucket := "minikube/iso"
 
 	return []string{
 		fmt.Sprintf("https://storage.googleapis.com/%s/minikube-%s-%s.iso", isoBucket, v, runtime.GOARCH),
diff --git a/pkg/minikube/machine/start.go b/pkg/minikube/machine/start.go
index 1afad1f1c..9f1c4692f 100644
--- a/pkg/minikube/machine/start.go
+++ b/pkg/minikube/machine/start.go
@@ -307,15 +307,13 @@ func postStartSetup(h *host.Host, mc config.ClusterConfig) error {
 		return nil
 	}
 
-	// If none driver with docker container-runtime, require cri-dockerd and dockerd.
-	if driver.IsNone(h.DriverName) && mc.KubernetesConfig.ContainerRuntime == constants.Docker {
-		// If Kubernetes version >= 1.24, require both cri-dockerd and dockerd.
-		k8sVer, err := semver.ParseTolerant(mc.KubernetesConfig.KubernetesVersion)
-		if err != nil {
-			klog.Errorf("unable to parse Kubernetes version: %s", mc.KubernetesConfig.KubernetesVersion)
-			return err
-		}
-		if k8sVer.GTE(semver.Version{Major: 1, Minor: 24}) {
+	k8sVer, err := semver.ParseTolerant(mc.KubernetesConfig.KubernetesVersion)
+	if err != nil {
+		klog.Errorf("unable to parse Kubernetes version: %s", mc.KubernetesConfig.KubernetesVersion)
+		return err
+	}
+	if driver.IsNone(h.DriverName) && k8sVer.GTE(semver.Version{Major: 1, Minor: 24}) {
+		if mc.KubernetesConfig.ContainerRuntime == constants.Docker {
 			if _, err := exec.LookPath("cri-dockerd"); err != nil {
 				exit.Message(reason.NotFoundCriDockerd, "\n\n")
 			}
@@ -323,6 +321,9 @@ func postStartSetup(h *host.Host, mc config.ClusterConfig) error {
 				exit.Message(reason.NotFoundDockerd, "\n\n")
 			}
 		}
+		if _, err := os.Stat("/opt/cni/bin"); err != nil {
+			exit.Message(reason.NotFoundCNIPlugins, "\n\n")
+		}
 	}
 
 	klog.Infof("creating required directories: %v", requiredDirectories)
diff --git a/pkg/minikube/node/cache.go b/pkg/minikube/node/cache.go
index 9deb00400..742a00e50 100644
--- a/pkg/minikube/node/cache.go
+++ b/pkg/minikube/node/cache.go
@@ -87,9 +87,7 @@ func handleDownloadOnly(cacheGroup, kicGroup *errgroup.Group, k8sVersion, contai
 		exit.Error(reason.InetCacheKubectl, "Failed to cache kubectl", err)
 	}
 	waitCacheRequiredImages(cacheGroup)
-	if driver.IsKIC(driverName) {
-		waitDownloadKicBaseImage(kicGroup)
-	}
+	waitDownloadKicBaseImage(kicGroup)
 	if err := saveImagesToTarFromConfig(); err != nil {
 		exit.Error(reason.InetCacheTar, "Failed to cache images to tar", err)
 	}
diff --git a/pkg/minikube/node/node.go b/pkg/minikube/node/node.go
index 273a59a2a..1e854543d 100644
--- a/pkg/minikube/node/node.go
+++ b/pkg/minikube/node/node.go
@@ -28,6 +28,7 @@ import (
 	"k8s.io/klog/v2"
 	"k8s.io/minikube/pkg/kapi"
 	"k8s.io/minikube/pkg/minikube/config"
+	"k8s.io/minikube/pkg/minikube/driver"
 	"k8s.io/minikube/pkg/minikube/machine"
 )
 
@@ -155,6 +156,10 @@ func Delete(cc config.ClusterConfig, name string) (*config.Node, error) {
 
 // Retrieve finds the node by name in the given cluster
 func Retrieve(cc config.ClusterConfig, name string) (*config.Node, int, error) {
+	if driver.BareMetal(cc.Driver) {
+		name = "m01"
+	}
+
 	for i, n := range cc.Nodes {
 		if n.Name == name {
 			return &n, i, nil
diff --git a/pkg/minikube/reason/reason.go b/pkg/minikube/reason/reason.go
index 8d6ed7dbd..3619ef38e 100644
--- a/pkg/minikube/reason/reason.go
+++ b/pkg/minikube/reason/reason.go
@@ -491,6 +491,16 @@ var (
 		https://docs.docker.com/engine/install/`),
 		Style: style.Docker,
 	}
+	NotFoundCNIPlugins = Kind{
+		ID:       "NOT_FOUND_CNI_PLUGINS",
+		ExitCode: ExProgramNotFound,
+		Advice: translate.T(`The none driver with Kubernetes v1.24+ requires containernetworking-plugins.
+
+		Please install containernetworking-plugins using these instructions:
+
+		https://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver`),
+		Style: style.CNI,
+	}
 	NotFoundSocketVMNet = Kind{
 		ID:       "NOT_FOUND_SOCKET_VMNET",
 		ExitCode: ExProgramNotFound,
diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md
index 45a512dfc..38a0c2a73 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.39-1683246328-16426@sha256:c063371f0e8933096fec0d2952100c31c4e17f2898a91dfbf036ee0048f9ee72")
+      --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.39-1680813808-16252@sha256:4d62d233cf4143189be209981d7b5b8b7fbf20ac03586d159c4c05276e84e45f")
       --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)
@@ -71,7 +71,7 @@ minikube start [flags]
       --interactive                       Allow user prompts for more information (default true)
       --iso-url strings                   Locations to fetch the minikube ISO from. The list depends on the machine architecture.
       --keep-context                      This will keep the existing kubectl context and will create a minikube context.
-      --kubernetes-version string         The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.27.1, 'latest' for v1.27.1). Defaults to 'stable'.
+      --kubernetes-version string         The Kubernetes version that the minikube VM will use (ex: v1.2.3, 'stable' for v1.26.3, 'latest' for v1.27.0-rc.1). Defaults to 'stable'.
       --kvm-gpu                           Enable experimental NVIDIA GPU support in minikube
       --kvm-hidden                        Hide the hypervisor signature from the guest in minikube (kvm2 driver only)
       --kvm-network string                The KVM default network name. (kvm2 driver only) (default "default")
diff --git a/site/content/en/docs/contrib/errorcodes.en.md b/site/content/en/docs/contrib/errorcodes.en.md
index 6f766dede..15df197b7 100644
--- a/site/content/en/docs/contrib/errorcodes.en.md
+++ b/site/content/en/docs/contrib/errorcodes.en.md
@@ -455,6 +455,8 @@ minikube was unable to safely downgrade installed Kubernetes version
 
 "NOT_FOUND_DOCKERD" (Exit code ExProgramNotFound)  
 
+"NOT_FOUND_CNI_PLUGINS" (Exit code ExProgramNotFound)  
+
 "NOT_FOUND_SOCKET_VMNET" (Exit code ExProgramNotFound)  
 
 ## Error Codes
diff --git a/site/content/en/docs/drivers/includes/none_usage.inc b/site/content/en/docs/drivers/includes/none_usage.inc
index 452612e48..0d62547fa 100644
--- a/site/content/en/docs/drivers/includes/none_usage.inc
+++ b/site/content/en/docs/drivers/includes/none_usage.inc
@@ -4,8 +4,10 @@ A Linux VM with the following:
 
 * systemd or OpenRC
 * a Container Runtime Interface (CRI), such as Docker or CRI-O
-* [containernetworking-plugins]({{<ref "/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver" >}})
-* [cri-dockerd](https://github.com/Mirantis/cri-dockerd) (Only if using Docker CRI)
+
+If using Kubernetes v1.24+ & Docker CRI you will also need the following:
+* [cri-dockerd](https://github.com/Mirantis/cri-dockerd)
+* [containernetworking-plugins](https://github.com/containernetworking/plugins)
 
 This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/), such as:
 
@@ -19,8 +21,10 @@ This VM must also meet the [kubeadm requirements](https://kubernetes.io/docs/set
 
 ## Usage
 
+The none driver requires minikube to be run as root, until [#3760](https://github.com/kubernetes/minikube/issues/3760) can be addressed.
+
 ```shell
-minikube start --driver=none
+sudo -E minikube start --driver=none
 ```
 
 To make `none` the default driver:
diff --git a/site/content/en/docs/drivers/none.md b/site/content/en/docs/drivers/none.md
index be3b44195..42e35efbd 100644
--- a/site/content/en/docs/drivers/none.md
+++ b/site/content/en/docs/drivers/none.md
@@ -68,7 +68,7 @@ As Kubernetes has full access to both your filesystem as well as your docker ima
 * Many `minikube` commands are not supported, such as: `dashboard`, `mount`, `ssh`
 * minikube with the `none` driver has a confusing permissions model, as some commands need to be run as root ("start"), and others by a regular user ("dashboard")
 * CoreDNS detects resolver loop, goes into CrashLoopBackOff - [#3511](https://github.com/kubernetes/minikube/issues/3511)
-* Some versions of Linux have a version of docker that is newer than what Kubernetes expects. To overwrite this, run minikube with the following parameters: `minikube start --driver=none --kubernetes-version v1.11.8 --extra-config kubeadm.ignore-preflight-errors=SystemVerification`
+* Some versions of Linux have a version of docker that is newer than what Kubernetes expects. To overwrite this, run minikube with the following parameters: `sudo -E minikube start --driver=none --kubernetes-version v1.11.8 --extra-config kubeadm.ignore-preflight-errors=SystemVerification`
 
 * [Full list of open 'none' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fnone-driver)
 
diff --git a/site/content/en/docs/faq/_index.md b/site/content/en/docs/faq/_index.md
index 13677ad58..d75c9c98e 100644
--- a/site/content/en/docs/faq/_index.md
+++ b/site/content/en/docs/faq/_index.md
@@ -188,18 +188,5 @@ Minikube is an open community and we are always willing to help users from any c
   
 3. Use a proxy server/VPN, if you have one. <br/> *Note: please obey the local laws. In some area, using an unauthorized proxy server/VPN is ILLEGAL* 
 
-## How do I install containernetworking-plugins for none driver?
 
-Go to [containernetworking-plugins](https://github.com/containernetworking/plugins/releases) to find the latest version.
 
-Then execute the following:
-```shell
-CNI_PLUGIN_VERSION="<version_here>"
-CNI_PLUGIN_TAR="cni-plugins-linux-amd64-$CNI_PLUGIN_VERSION.tgz" # change arch if not on amd64
-CNI_PLUGIN_INSTALL_DIR="/opt/cni/bin"
-
-curl -LO "https://github.com/containernetworking/plugins/releases/download/$CNI_PLUGIN_VERSION/$CNI_PLUGIN_TAR"
-sudo mkdir -p "$CNI_PLUGIN_INSTALL_DIR"
-sudo tar -xf "$CNI_PLUGIN_TAR" -C "$CNI_PLUGIN_INSTALL_DIR"
-rm "$CNI_PLUGIN_TAR"
-```
diff --git a/site/content/en/docs/handbook/addons/kong-ingress.md b/site/content/en/docs/handbook/addons/kong-ingress.md
index f197d073b..75ee7e76e 100644
--- a/site/content/en/docs/handbook/addons/kong-ingress.md
+++ b/site/content/en/docs/handbook/addons/kong-ingress.md
@@ -61,17 +61,17 @@ $ curl -v localhost
 * Connected to localhost (127.0.0.1) port 80 (#0)
 > GET / HTTP/1.1
 > Host: localhost
-> User-Agent: curl/7.86.0
+> User-Agent: curl/7.77.0
 > Accept: */*
 >
 * Mark bundle as not supporting multiuse
 < HTTP/1.1 404 Not Found
-< Date: Wed, 03 May 2023 01:34:31 GMT
+< Date: Tue, 25 Jan 2022 22:35:27 GMT
 < Content-Type: application/json; charset=utf-8
 < Connection: keep-alive
 < Content-Length: 48
 < X-Kong-Response-Latency: 0
-< Server: kong/3.2.2
+< Server: kong/2.7.0
 <
 * Connection #0 to host localhost left intact
 {"message":"no Route matched with those values"}%
@@ -79,125 +79,70 @@ $ curl -v localhost
 
 ## Creating Ingress object
 
-To proxy requests, you need an upstream application to proxy to. 
-Deploying this echo server provides a simple application that returns information about the Pod it’s running in:
+Let's create a service.
+As an example, we use `type=ExternalName` to point to https://httpbin.org
 
 ```bash
 echo "
-apiVersion: v1
 kind: Service
+apiVersion: v1
 metadata:
-  labels:
-    app: echo
-  name: echo
+  name: proxy-to-httpbin
 spec:
   ports:
-  - port: 1025
-    name: tcp
-    protocol: TCP
-    targetPort: 1025
-  - port: 1026
-    name: udp
-    protocol: TCP
-    targetPort: 1026
-  - port: 1027
-    name: http
-    protocol: TCP
-    targetPort: 1027
-  selector:
-    app: echo
----
-apiVersion: apps/v1
-kind: Deployment
-metadata:
-  labels:
-    app: echo
-  name: echo
-spec:
-  replicas: 1
-  selector:
-    matchLabels:
-      app: echo
-  strategy: {}
-  template:
-    metadata:
-      creationTimestamp: null
-      labels:
-        app: echo
-    spec:
-      containers:
-      - image: kong/go-echo:latest
-        name: echo
-        ports:
-        - containerPort: 1027
-        env:
-          - name: NODE_NAME
-            valueFrom:
-              fieldRef:
-                fieldPath: spec.nodeName
-          - name: POD_NAME
-            valueFrom:
-              fieldRef:
-                fieldPath: metadata.name
-          - name: POD_NAMESPACE
-            valueFrom:
-              fieldRef:
-                fieldPath: metadata.namespace
-          - name: POD_IP
-            valueFrom:
-              fieldRef:
-                fieldPath: status.podIP
-        resources: {}
-" | kubectl apply -f -
+  - protocol: TCP
+    port: 80
+  type: ExternalName
+  externalName: httpbin.org
+" | kubectl create -f -
 ```
 
-Next, we will create routing configuration to proxy `/echo` requests to the echo server:
+Next, we will create the ingress object points to httpbin service.
 
 ```bash
-echo "
+echo '
 apiVersion: networking.k8s.io/v1
 kind: Ingress
 metadata:
-  name: echo
+  name: proxy-from-k8s-to-httpbin
   annotations:
-    konghq.com/strip-path: 'true'
+    konghq.com/strip-path: "true"
 spec:
   ingressClassName: kong
   rules:
-  - host: kong.example
-    http:
+  - http:
       paths:
-      - path: /echo
+      - path: /foo
         pathType: ImplementationSpecific
         backend:
           service:
-            name: echo
+            name: proxy-to-httpbin
             port:
-              number: 1027
-" | kubectl apply -f -
+              number: 80
+' | kubectl create -f -
 ```
 
 Let's test our ingress object.
 
 ```bash
-$ curl -i localhost/echo -H "Host: kong.example"
+$ curl -i localhost/foo -H "Host: httpbin.org"
+
 
 HTTP/1.1 200 OK
 Content-Type: text/plain; charset=utf-8
-Content-Length: 133
+Content-Length: 4
 Connection: keep-alive
-Date: Wed, 03 May 2023 01:59:25 GMT
+X-App-Name:
+X-App-Version: 0.2.4
+Date: Tue, 25 Jan 2022 22:44:57 GMT
 X-Kong-Upstream-Latency: 1
 X-Kong-Proxy-Latency: 1
-Via: kong/3.2.2
+Via: kong/2.7.0
 
-Welcome, you are connected to node minikube.
-Running on Pod echo-f4fdf987c-qdv7s.
-In namespace default.
-With IP address 10.244.0.6.
+foo
 ```
 
 ## Next
 
 **Note:** Read more about KIC and different use cases in official
-[documentation](https://docs.konghq.com/kubernetes-ingress-controller/latest/guides/overview/).
+[documentation](https://docs.konghq.com/kubernetes-ingress-controller/2.1.x/guides/overview/).
diff --git a/site/content/en/docs/presentations/_index.md b/site/content/en/docs/presentations/_index.md
index 941d16916..7ca24c149 100644
--- a/site/content/en/docs/presentations/_index.md
+++ b/site/content/en/docs/presentations/_index.md
@@ -9,11 +9,6 @@ Presentations about the minikube project, mostly from the Kubernetes blog and th
 
 ## Conferences
 
-### KubeCon EU 2023 (Amsterdam, Netherlands)
-
-* [Minikube from CLI to GUI! - YouTube](https://youtu.be/74X1RmqfUzs) (38:35)
-  * Medya Ghazizadeh, Google
-
 ### KubeCon EU 2022 (Valencia, Spain)
 
 * [Deep Dive into Minikube - YouTube](https://youtu.be/Iyq_MlSku-I) (38:37)
diff --git a/site/content/en/docs/tutorials/kubernetes_101/_index.md b/site/content/en/docs/tutorials/kubernetes_101/_index.md
deleted file mode 100644
index 0e626323c..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/_index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: "Kubernetes 101"
-weight: -1
-description: >     
-  Tutorial showing how to deploy, explore, expose, scale, and update your applications
---- 
diff --git a/site/content/en/docs/tutorials/kubernetes_101/module1.md b/site/content/en/docs/tutorials/kubernetes_101/module1.md
deleted file mode 100644
index fdcf12e5a..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/module1.md
+++ /dev/null
@@ -1,53 +0,0 @@
----
-title: "Module 1 - Create a Kubernetes Cluster"
-weight: 1
---- 
-
-**Difficulty**: Beginner
-**Estimated Time:** 10 minutes
-
-The goal of this scenario is to deploy a local development Kubernetes cluster using minikube
-
-## Step 1 - Cluster up and running
-
-If you haven't already, first [install minikube]({{< ref "/docs/start" >}}). Check that it is properly installed, by running the *minikube version* command:
-
-```shell
-minikube version
-```
-
-Once minikube is installed, start the cluster, by running the *minikube start* command:
-
-```shell
-minikube start
-```
-
-Great! You now have a runnning Kubernetes cluster in your terminal. minikube started a virtual environment for you, and a Kubernetes cluster is now running in that environment.
-
-## Step 2 - Cluster version
-
-To interact with Kubernetes during this bootcamp we'll use the command line interface, kubectl. We'll explain kubectl in detail in the next modules, but for now, we're just going to look at some cluster information. To check if kubectl is installed you can run the *kubectl version* command:
-
-```shell
-kubectl version
-```
-
-OK, kubectl is configured and we can see both the version of the client and as well as the server. The client version is the kubectl version; the server version is the Kubernetes version installed on the master. You can also see details about the build.
-
-## Step 3 - Cluster details
-
-Let's view the cluster details. We'll do that by running *kubectl cluster-info*:
-
-```shell
-kubectl cluster-info
-```
-
-During this tutorial, we'll be focusing on the command line for deploying and exploring our application. To view the nodes in the cluster, run the *kubectl get nodes* command:
-
-```shell
-kubectl get nodes
-```
-
-This command shows all nodes that can be used to host our applications. Now we have only one node, and we can see that its status it ready (it is ready to accept applications for deployment).
-
-{{% button link="/docs/tutorials/kubernetes_101/module2" %}}
diff --git a/site/content/en/docs/tutorials/kubernetes_101/module2.md b/site/content/en/docs/tutorials/kubernetes_101/module2.md
deleted file mode 100644
index a3bda9c5c..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/module2.md
+++ /dev/null
@@ -1,93 +0,0 @@
----
-title: "Module 2 - Deploy an app"                  
-weight: 2
---- 
-
-**Difficulty**: Beginner
-**Estimated Time:** 10 minutes
-
-The goal of this scenario is to help you deploy your first app on Kubernetes using kubectl. You will learn the basics about kubectl cli and how to interact with your application.
-
-## Step 1 - kubectl basics
-
-Type kubectl in the terminal to see its usage. The common format of a kubectl command is: kubectl action resource. This performs the specified action (like create, describe) on the specified resource (like node, container). You can use `--help` after the command to get additional info about possible parameters (`kubectl get nodes --help`).
-
-Check the kubectl is configured to talk to your cluster, by running the `kubectl version` command:
-
-```shell
-kubectl version
-```
-
-OK, kubectl is installed and you can see both the client and the server versions.
-
-To view the nodes in the cluster, run the `kubectl get nodes` command:
-
-```shell
-kubectl get nodes
-```
-
-Here we see the available nodes (1 in our case). Kubernetes will choose where to deploy our application based on Node available resources.
-
-## Step 2 - Deploy our app
-
-Let's deploy our first app on Kubernetes with the `kubectl create deployment` command. We need to provide the deployment name and app image location (include the full repository url for images hosted outside Docker Hub).
-
-```shell
-kubectl create deployment kubernetes-bootcamp --image=gcr.io/google-samples/kubernetes-bootcamp:v1
-```
-
-Great! You just deployed your first application by creating a deployment. This performed a few things for you:
-
-- searched for a suitable node where an instance of the application could be run (we have only 1 available node)
-- scheduled the application to run on that Node
-- configured the cluster to reschedule the instance on a new Node when needed
-
-To list your deployments use the `get deployments` command:
-
-```shell
-kubectl get deployments
-```
-
-We see that there is 1 deployment running a single instance of your app. The instance is running inside a Docker container on your node.
-
-## Step 3 - View our app
-
-Pods that are running inside Kubernetes are running on a private, isolated network. By default they are visible from other pods and services within the same Kubernetes cluster, but not outside that network. When we use `kubectl`, we're interacting through an API endpoint to communicate with our application.
-
-We will cover other options on how to expose your application outside the Kubernetes cluster in Module 4.
-
-The `kubectl` command can create a proxy that will forward communications into the cluster-wide, private network. The proxy can be terminiated by pressing control-C and won't show any output while its running.
-
-We will open a second terminal window to run the proxy.
-
-```shell
-echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy
-```
-
-We now have a connection between our host (the online terminal) and the Kubernetes cluster. The proxy enabled direct access to the API from these terminals.
-
-You can see all those APIs hosted through the proxy endpoint. For example, we can query the version directly through the API using the `curl` command:
-```shell
-curl http://localhost:8001/version
-```
-
-*Note: The proxy was run in a new tab, and the recent commands were executed in the original tab. The proxy still runs in the second tab, and this allowed our curl command to work using `localhost:8001`.*
-
-**If Port 8001 is not accessible, ensure that the `kubectl proxy` started above is running.**
-
-The API server will automatically create an endpoint for each pod, based on the pod name, that is also accessible through the proxy.
-
-First we need to get the Pod name, and we'll store in the environment variable POD_NAME:
-```shell
-export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
-echo Name of the Pod: $POD_NAME
-```
-
-You can access the Pod through the API by running:
-```shell
-curl http://localhost:8001/api/v1/namespaces/default/pods/$PODNAME
-```
-
-In order for the new deployment to be accessible without using the Proxy, a Service is required which will be explained in the next modules.
-
-{{% button link="/docs/tutorials/kubernetes_101/module3" %}}
diff --git a/site/content/en/docs/tutorials/kubernetes_101/module3.md b/site/content/en/docs/tutorials/kubernetes_101/module3.md
deleted file mode 100644
index 794d00183..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/module3.md
+++ /dev/null
@@ -1,96 +0,0 @@
----
-title: "Module 3 - Explore your app"                                
-weight: 3
---- 
-
-**Difficulty**: Beginner
-**Estimated Time:** 10 minutes
-
-In this scenario you will learn how to troubleshoot Kubernetes applications using the kubectl get, describe, logs and exec commands.
-
-## Step 1 - Check application configuration
-
-Let's verify that the application we deployed in the previous scenario is running. We'll use the `kubectl get` command and look for existing Pods:
-
-```shell
-kubectl get pods
-```
-
-Next, to view what containers are inside that Pod and what images are used to build those containers we run the `describe pods` command:
-
-```shell
-kubectl describe pods
-```
-
-We see here details about the Pod's container: IP address, the ports used and a list of events related to the lifecycle of the Pod.
-
-The output of the `describe` command is extensive and covers some concepts that we didn't explain yet, but don't worry, they will become familiar by the end of this bootcamp.
-
-*Note: the describe command can be used to get detailed information about most of the Kubernetes primitives: node, pods, deployments. The describe output is designed to be human readable, not to be scripted against.*
-
-## Step 2 - Show the app in the terminal
-
-Recall that Pods are running in an isolated, private network - so we need to proxy access to them so we can debug and interact with them. To do this, we'll use the `kubectl proxy` command to run a proxy in a second terminal window. Run the command below in a new terminal window to run the proxy:
-
-```shell
-echo -e "Starting Proxy. After starting it will not output a response. Please return to your original terminal window\n"; kubectl proxy
-```
-
-Now again, we'll get the Pod name and query that pod directly through the proxy. To get the Pod name and store it in the POD_NAME ennvironment variable:
-
-```shell
-export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
-echo Name of the Pod: $POD_NAME
-```
-
-To see the output of our application, run a `curl` request.
-
-```shell
-curl http://localhost:8001/api/v1/namespaces/default/pods/$POD_NAME
-```
-
-The url is the route to the API of the Pod.
-
-## Step 3 - View the container logs
-
-Anything that the application would normally send to `STDOUT` becomes logs for the container within the Pod. We can retrieve these logs using the `kubectl logs` command:
-
-```shell
-kubectl logs $POD_NAME
-```
-
-*Note: We don't need to specify the container name, because we only have one container inside the pod.
-
-## Step 4 - Executing command on the container
-
-We can execute commands directly on the container once the Pod is up and running. For this, we use the `exec` command and use the name of the Pod as a paramater. Let's list the environment variables:
-
-```shell
-kubectl exec $POD_NAME -- env
-```
-
-Again, worth mentioning that the name of the container itself can be omitted since we only have a single container in the Pod.
-
-Next let's start a bash session in the Pod's container:
-
-```shell
-kubectl exec -ti $POD_NAME -- bash
-```
-
-We have now an open console on the container where we run our NodeJS application. The source code of the app is in the server.js file:
-
-```shell
-cat server.js
-```
-
-You can check that the application is up by running a curl command:
-
-```shell
-curl localhost:8080
-```
-
-*Note: here we used localhost because we executed the command inside the NodeJS Pod. If you cannot connect to localhost:8080, check to make sure you have run the kubectl exec command and are launching the command from within the Pod*
-
-To close your container connection type `exit`.
-
-{{% button link="/docs/tutorials/kubernetes_101/module4" %}}
diff --git a/site/content/en/docs/tutorials/kubernetes_101/module4.md b/site/content/en/docs/tutorials/kubernetes_101/module4.md
deleted file mode 100644
index 3561655af..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/module4.md
+++ /dev/null
@@ -1,137 +0,0 @@
----
-title: "Module 4 - Expose your app publicly"                                
-weight: 4
---- 
-
-**Difficulty**: Beginner
-**Estimated Time:** 10 minutes
-
-In this scenario you will learn how to expose Kubernetes applications outside the cluster using the kubectl expose command. You will also learn how to view and apply labels to objects with the kubectl label command.
-
-## Step 1 - Create a new service
-
-Let's verify that our application is running. We'll use the `kubectl get` command and look for existing Pods:
-
-```shell
-kubectl get pods
-```
-
-Next, let's list the current Services from our cluster:
-
-```shell
-kubectl get services
-```
-
-We have a Service called Kubernetes that is created by default when minikube starts the cluster. To create a new service and expose it to external traffic we'll use the expose command with NodePort as parameter.
-
-```shell
-kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
-```
-
-Let's run again the `get services` command:
-
-```shell
-kubectl get services
-```
-
-**Note for Docker Desktop users:** Due to Docker Desktop networking limitations, by default you're unable to access pods directly from the host. Run `minikube service kubernetes-bootcamp`, this will create a SSH tunnel from the pod to your host and open a window in your default browser that's connected to the service. The tunnel can be terminated by pressing control-C, then continue on to Step 2.
-
-We have now a running Service called kubernetes-bootcamp. Here we see that the Service received a unique cluster-IP, an internal port and an external-IP (the IP of the Node).
-
-To find out what port was opened externally (by the NodePort option) we'll run the `describe service` command:
-
-```shell
-kubectl describe services/kubernetes-bootcamp
-```
-
-Create an environment variable called NODE_PORT that has the value of the Node port assigned:
-
-```shell
-export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
-echo NODE_PORT=$NODE_PORT
-```
-
-Now we can test that the app is exposed outside of the cluster using `curl`, the IP of the Node and the externally exposed port:
-
-```shell
-curl $(minikube ip):$NODE_PORT
-```
-
-And we get a response from the server. The Service is exposed.
-
-## Step 2 - Using labels
-
-The Deployment created automatically a label for our Pod. With `describe deployment` command you can see the name of the label:
-
-```shell
-kubectl describe deployment
-```
-
-Let's use this label to query our list of Pods. We'll use the `kubectl get pods` command with `-l` as a parameter, followed by the label values:
-
-```shell
-kubectl get pods -l app=kubernetes-bootcamp
-```
-
-You can do the same to list the existing services:
-
-```shell
-kubectl get services -l app=kubernetes-bootcamp
-```
-
-Get the name of the Pod and store it in the POD_NAME environment variable:
-
-```shell
-export POD_NAME=$(kubectl get pods -o go-template --template '{{range .items}}{{.metadata.name}}{{"\n"}}{{end}}')
-echo Name of the Pod: $POD_NAME
-```
-
-To apply a new label we use the label command followed by the object type, object name and the new label:
-
-```shell
-kubectl label pods $POD_NAME version=v1
-```
-
-This will apply a new label to our Pod (we pinned the application version to the Pod), and we can check it with the describe pod command:
-
-```shell
-kubectl describe pods $POD_NAME
-```
-
-We see here that the label is attached new to our Pod. And we can query now the list of pods using the new label:
-
-```shell
-kubectl get pods -l version=v1
-```
-
-And we see the Pod.
-
-## Step 3 - Deleting a service
-
-To delete Services you can use the `delete service` command. Labels can be used also here:
-
-```shell
-kubectl delete service -l app=kubernetes-bootcamp
-```
-
-Confirm that the service is gone:
-
-```shell
-kubectl get services
-```
-
-This confirms that our Service was removed. To confirm that route is not exposed anymore you can `curl` the previously exposed IP and port:
-
-```shell
-curl $(minikube ip):$NODE_PORT
-```
-
-This proces that the app is not reachable anymore from outside of the cluster. You can confirm that the app is still running with a curl inside the pod:
-
-```shell
-kubectl exec -ti $POD_NAME -- curl localhost:8080
-```
-
-We see here that the application is up. This is because the Deployment is managing the application. To shut down the application, you would need to delete the Deployment as well.
-
-{{% button link="/docs/tutorials/kubernetes_101/module5" %}}
diff --git a/site/content/en/docs/tutorials/kubernetes_101/module5.md b/site/content/en/docs/tutorials/kubernetes_101/module5.md
deleted file mode 100644
index a149bbf8b..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/module5.md
+++ /dev/null
@@ -1,126 +0,0 @@
----
-title: "Module 5 - Scale up your app"
-weight: 5
----
-
-**Difficulty**: Beginner
-**Estimated Time:** 10 minutes
-
-The goal of this scenario is to scale a deployment with kubectl scale and to see the load balancing in action
-
-## Step 1 - Scaling a deployment
-
-First, let's recreate the Deployment we deleted in the previous module:
-
-```shell
-kubectl expose deployment/kubernetes-bootcamp --type="NodePort" --port 8080
-```
-
-To list your deployments use the `get deployment` command:
-
-```shell
-kubectl get deployments
-```
-
-The output should be similar to:
-
-```shell
-NAME                  READY   UP-TO_DATE   AVAILABLE   AGE
-kubernetes-bootcamp   1/1     1            1           11m
-```
-
-We should have 1 Pod. If not, run the command again. This shows:
-
-- *NAME* lists the names of the Deployments in the cluster.
-- *READY* shows the ratio of CURRENT/DESIRED replicas
-- *UP-TO-DATE* displays the number of replicas that have been updated to achieve the desired state.
-- *AVAILABLE* displays how many replicas of the application are available to your users.
-- *AGE* displays the amount of time that the application has been running.
-
-To see the ReplicaSet created by the Deployment, run:
-
-```shell
-kubectl get rs
-```
-
-Notice that the name of the ReplicaSet is always formatted as `[DEPLOYMENT-NAME]-[RANDOM-STRING]`. The random string is randomly generated and uses the pod-template-hash as a seed.
-
-Two important columns of this command are:
-
-- *DESIRED* displays the desired number of replicas of the application, which you define when you create the Deployment. This is the desired state.
-- *CURRENT* displays how many replicas are currently running.
-
-Next, let's scan the Deployment to 4 replicas. We'll use the `kubectl scale` command, following by the deployment type, name and desired number of instances:
-
-```shell
-kubectl scale deployments/kubernetes-bootcamp --replicas=4
-```
-
-To list your Deployments once again, use `get deployments`:
-
-```shell
-kubectl get deployments
-```
-
-The change was applied, and we have 4 instances of the application available. Next, let's check if the number of Pods changed:
-
-```shell
-kubectl get pods -o wide
-```
-
-There are 4 Pods now, with different IP addresses. The change was registered in the Deployment events log. The check that, use the describe command:
-
-```shell
-kubectl describe deployments/kubernetes-bootcamp
-```
-
-You can also view in the output of this command that there are 4 replicas now.
-
-## Step 2 - Load Balancing
-
-Let's check that the Service is load-balancing the traffic. To find out the exposed IP and Port we can use the describe service as we learned in the previous Module:
-
-```shell
-kubectl describe services/kubernetes-bootcamp
-```
-
-**Note for Docker Desktop users:** Due to Docker Desktop networking limitations, by default you're unable to access pods directly from the host. Run `minikube service kubernetes-bootcamp`, this will create a SSH tunnel from the pod to your host and open a window in your default browser that's connected to the service. Refresh the browser page to see the load-balancing working. The tunnel can be terminated by pressing control-C, then continue on to Step 3.
-
-Create an environment variable called NODE_PORT that has a value as the Node port:
-
-```shell
-export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
-echo NODE_PORT=$NODE_PORT
-```
-
-Next, we'll do a `curl` to the exposed IP and port. Execute the command mulitple times:
-
-```shell
-curl $(minikube ip):$NODE_PORT
-```
-
-We hit a different Pod with every request. This demonstrates that the load-balancing is working.
-
-## Step 3 - Scale Down
-
-To scale down the Service to 2 replicas, run again the `scale` command:
-
-```shell
-kubectl scale deployments/kubernetes-bootcamp --replicas=2
-```
-
-List the Deployments to check if the change was applied with the `get deployments` command:
-
-```shell
-kubectl get deployments
-```
-
-The number of replicas decreased to 2. List the number of Pods, with `get pods`:
-
-```shell
-kubectl get pods -o wide
-```
-
-This confirms that 2 Pods were terminated.
-
-{{% button link="/docs/tutorials/kubernetes_101/module6" %}}
diff --git a/site/content/en/docs/tutorials/kubernetes_101/module6.md b/site/content/en/docs/tutorials/kubernetes_101/module6.md
deleted file mode 100644
index 37f6ddee0..000000000
--- a/site/content/en/docs/tutorials/kubernetes_101/module6.md
+++ /dev/null
@@ -1,133 +0,0 @@
----
-title: "Module 6 - Update your app"
-weight: 6
----
-
-**Difficulty:** Beginner
-**Estimated Time:** 10 minutes
-
-The goal of this scenario is to update a deployed application with kubectl set image and to rollback with the rollout undo command.
-
-## Step 1 - Update the version of the app
-
-To list your deployments, run the `get deployments` command:
-
-```shell
-kubectl get deployments
-```
-
-To list the running Pods, run the `get pods` command:
-
-```shell
-kubectl get pods
-```
-
-To view the current image version of the app, run the `describe pods` command and look for the `Image` field:
-
-```shell
-kubectl describe pods
-```
-
-To update the image of the application to version 2, use the `set image` command, followed by the deployment name and the new image version:
-
-```shell
-kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
-```
-
-The command notified the Deployment to use a different image for your app and initiated a rolling update. Check the status of the new Pods, and view the old one terminating with the `get pods` command:
-
-```shell
-kubectl get pods
-```
-
-## Step 2 - Verify an update
-
-First, check that the app is running. To find the exposed IP and Port, run the `describe service` command:
-
-```shell
-kubectl describe services/kubernetes-bootcamp
-```
-
-**Note for Docker Desktop users:** Due to Docker Desktop networking limitations, by default you're unable to access pods directly from the host. Run `minikube service kubernetes-bootcamp`, this will create a SSH tunnel from the pod to your host and open a window in your default browser that's connected to the service. The tunnel can be terminated by pressing control-C, then continue the tutorial after the `curl $(minikube ip):$NODE_PORT` command.
-
-Create an environment variable called `NODE_PORT` that has the value of the Node port assigned:
-
-```shell
-export NODE_PORT=$(kubectl get services/kubernetes-bootcamp -o go-template='{{(index .spec.ports 0).nodePort}}')
-echo NODE_PORT=$NODE_PORT
-```
-
-Next, do a `curl` to the exposed IP and port:
-
-```shell
-curl $(minikube ip):$NODE_PORT
-```
-
-Every time you run the `curl` command, you will hit a different Pod. Notice that all Pods are running the latest version (v2).
-
-You can also confirm the update by running the `rollout status` command:
-
-```shell
-kubectl rollout status deployments/kubernetes-bootcamp
-```
-
-To view the current image version of the app, run the `describe pods` command:
-
-```shell
-kubectl describe pods
-```
-
-In the `Image` field of the output, verify that you are running the latest image version (v2).
-
-
-## Step 3 - Rollback an update
-
-Let's perform another update, and deploy an image tagged with `v10`:
-
-```shell
-kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
-```
-
-Use `get deployments` to see the status of the deployment:
-
-```shell
-kubectl get deployments
-```
-
-Notice that the output doesn't list the desired number of available Pods. Run the `get pods` command to list all Pods:
-
-```shell
-kubectl get pods
-```
-
-Notice that some of the Pods have a status of `ImagePullBackOff`.
-
-To get more insight into the problem, run the `describe pods` command:
-
-```shell
-kubectl describe pods
-```
-
-In the `Events` section of the output for the affected Pods, notice that the `v10` image version did not exist in the repository.
-
-To roll back the deployment to your last working version, use the `rollout undo` command:
-
-```shell
-kubectl rollout undo deployments/kubernetes-bootcamp
-```
-
-The `rollout undo` command reverts the deployment to the previous known state (v2 of the image). Updates are versioned and you can revert to any previously known state of a deployment.
-
-Use the `get pods` commands to list the Pods again:
-
-```shell
-kubectl get pods
-```
-
-Four Pods are running. To check the image deployed on these Pods, use the `describe pods` command:
-
-```shell
-kubectl describe pods
-```
-
-The deployment is once again using a stable version of the app (v2). The rollback was successful.
diff --git a/site/layouts/partials/hooks/head-end.html b/site/layouts/partials/hooks/head-end.html
index 55c9fedf8..3561d7343 100644
--- a/site/layouts/partials/hooks/head-end.html
+++ b/site/layouts/partials/hooks/head-end.html
@@ -1,7 +1,6 @@
 <!-- start: minikube override head-end partial -->
 <link href="https://fonts.googleapis.com/css2?family=Lora:wght@400;500;600;700&family=Open+Sans:wght@600;700&display=swap" rel="stylesheet">
 <link href="/css/tabs.css" rel="stylesheet">
-<link href="/css/button.css" rel="stylesheet">
 <script src="/js/tabs.js"></script>
 <script src="/js/quiz.js"></script>
 <!-- end: minikube override head-end partial -->
diff --git a/site/layouts/shortcodes/button.html b/site/layouts/shortcodes/button.html
deleted file mode 100644
index 095e30b37..000000000
--- a/site/layouts/shortcodes/button.html
+++ /dev/null
@@ -1,1 +0,0 @@
-<a href="{{ .Get "link" }}"><button type="button" class="module-button">Next Module ➔</button></a>
diff --git a/site/static/css/button.css b/site/static/css/button.css
deleted file mode 100644
index 5b1a0ea4a..000000000
--- a/site/static/css/button.css
+++ /dev/null
@@ -1,13 +0,0 @@
-.module-button {
-  color: #fff;
-  background: #306EE5;
-  border-radius: 0.5rem;
-  font-size: 2rem;
-  border: none;
-  padding: 0.5rem 1rem;
-  margin: 2rem 0;
-}
-
-.module-button:hover {
-  background: #164cb2;
-}
diff --git a/translations/de.json b/translations/de.json
index 6b359f6ab..2ca4c2e8b 100644
--- a/translations/de.json
+++ b/translations/de.json
@@ -740,6 +740,7 @@
 	"The none driver is not compatible with multi-node clusters.": "Der 'none' Treiber ist nicht kompatibel mit Multi-Node Clustern.",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "Die Anzahl der zu startenden Nodes. Default: 1",
 	"The output format. One of 'json', 'table'": "Das Ausgabe Format. (Entweder 'json' oder 'table')",
 	"The path on the file system where the docs in markdown need to be saved": "Der Pfad auf dem Dateisystem indem die Dokumente in Markdown gespeichert werden müssen",
@@ -980,7 +981,6 @@
 	"invalid kubernetes version": "Invalide Kubernetes Version",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "Halte den kube-context aktiv, wenn der Cluster gestoppt ist. Default: false",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm erkannte einen TCP Port Konflikt mit anderen Prozessen: wahrscheinlich eine andere lokale Kubernetes Installation. Führe lsof -p\u003cport\u003e aus um den Prozess zu finden und zu töten",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "Konfiguration von Kubectl und minikube wird in {{.home_folder}} gespeichert",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl nicht gefunden. Falls Sie es benötigen, versuchen Sie 'minikube kubectl -- get pods -A' aufzurufen",
diff --git a/translations/es.json b/translations/es.json
index b64ab2715..8cff5a21a 100644
--- a/translations/es.json
+++ b/translations/es.json
@@ -741,6 +741,7 @@
 	"The none driver is not compatible with multi-node clusters.": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "",
 	"The output format. One of 'json', 'table'": "",
 	"The path on the file system where the docs in markdown need to be saved": "",
@@ -976,7 +977,6 @@
 	"invalid kubernetes version": "",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "La configuración de kubectl y de minikube se almacenará en {{.home_folder}}",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "",
diff --git a/translations/fr.json b/translations/fr.json
index e1eefcb86..5caa447f2 100644
--- a/translations/fr.json
+++ b/translations/fr.json
@@ -723,6 +723,7 @@
 	"The none driver is not compatible with multi-node clusters.": "Le pilote none n'est pas compatible avec les clusters multi-nœuds.",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Le pilote none avec Kubernetes v1.24+ et l'environnement d'exécution du conteneur docker nécessitent cri-dockerd.\n\t\t\n\t\tVeuillez installer cri-dockerd en suivant ces instructions :\n\n\t\thttps://github.com/Mirantis/cri-dockerd",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Le pilote none avec Kubernetes v1.24+ et l'environnement d'exécution du conteneur docker nécessitent dockerd.\n\t\t\n\t\tVeuillez installer dockerd en suivant ces instructions :\n\n\t\thttps://docs.docker.com/engine/install/",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of bytes to use for 9p packet payload": "Le nombre d'octets à utiliser pour la charge utile du paquet 9p",
 	"The number of nodes to spin up. Defaults to 1.": "Le nombre de nœuds à faire tourner. La valeur par défaut est 1.",
 	"The output format. One of 'json', 'table'": "Le format de sortie. 'json' ou 'table'",
@@ -961,7 +962,6 @@
 	"invalid kubernetes version": "version kubernetes invalide",
 	"json encoding failure": "échec de l'encodage json",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "garder le kube-context actif après l'arrêt du cluster. La valeur par défaut est false.",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm a détecté un conflit de port TCP avec un autre processus : probablement une autre installation locale de Kubernetes. Exécutez lsof -p\u003cport\u003e pour trouver le processus et le tuer",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "Les configurations kubectl et minikube seront stockées dans le dossier {{.home_folder}}.",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl introuvable. Si vous en avez besoin, essayez : 'minikube kubectl -- get pods -A'",
diff --git a/translations/ja.json b/translations/ja.json
index ba8ab7754..0917e6807 100644
--- a/translations/ja.json
+++ b/translations/ja.json
@@ -695,6 +695,7 @@
 	"The none driver is not compatible with multi-node clusters.": "none ドライバーはマルチノードクラスターと互換性がありません。",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "Kubernetes v1.24+ の none ドライバーと docker container-runtime は cri-dockerd を要求します。\n\t\t\n\t\tこれらの手順を参照して cri-dockerd をインストールしてください:\n\n\t\thttps://github.com/Mirantis/cri-dockerd",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "Kubernetes v1.24+ の none ドライバーと docker container-runtime は dockerd を要求します。\n\t\t\n\t\tこれらの手順を参照して dockerd をインストールしてください:\n\n\t\thttps://docs.docker.com/engine/install/",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "起動するノード数。デフォルトは 1。",
 	"The output format. One of 'json', 'table'": "出力形式。'json', 'table' のいずれか",
 	"The path on the file system where the docs in markdown need to be saved": "markdown で書かれたドキュメントの保存先のファイルシステムパス",
@@ -918,7 +919,6 @@
 	"invalid kubernetes version": "無効な Kubernetes バージョン",
 	"json encoding failure": "json エンコード失敗",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "クラスター停止後に kube-context をアクティブのままにします。デフォルトは false です。",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm が他のプロセス (おそらくローカルにインストールされた他の Kubernetes) との TCP ポート衝突を検出しました。 lsof -p\u003cport\u003e を実行してそのプロセスを特定し、停止してください",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "kubectl と minikube の構成は {{.home_folder}} に保存されます",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "kubectl が見つかりません。kubectl が必要な場合、'minikube kubectl -- get pods -A' を試してください",
diff --git a/translations/ko.json b/translations/ko.json
index 2384b0b84..a83d68ecf 100644
--- a/translations/ko.json
+++ b/translations/ko.json
@@ -744,6 +744,7 @@
 	"The none driver is not compatible with multi-node clusters.": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "",
 	"The output format. One of 'json', 'table'": "",
 	"The path on the file system where the docs in markdown need to be saved": "",
@@ -980,7 +981,6 @@
 	"invalid kubernetes version": "",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "kubectl 과 minikube 환경 정보는 {{.home_folder}} 에 저장될 것입니다",
 	"kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "kubectl 이 PATH 에 없습니다, 하지만 이는 대시보드에서 필요로 합니다. 설치 가이드:https://kubernetes.io/docs/tasks/tools/install-kubectl/",
diff --git a/translations/pl.json b/translations/pl.json
index 78456bc1f..818bd245e 100644
--- a/translations/pl.json
+++ b/translations/pl.json
@@ -755,6 +755,7 @@
 	"The none driver is not compatible with multi-node clusters.": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "",
 	"The output format. One of 'json', 'table'": "",
 	"The path on the file system where the docs in markdown need to be saved": "",
@@ -988,7 +989,6 @@
 	"invalid kubernetes version": "Nieprawidłowa wersja Kubernetesa",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "konfiguracja minikube i kubectl będzie przechowywana w katalogu {{.home_folder}}",
 	"kubectl not found in PATH, but is required for the dashboard. Installation guide: https://kubernetes.io/docs/tasks/tools/install-kubectl/": "kubectl nie zostało odnalezione w zmiennej środowiskowej ${PATH}. Instrukcja instalacji:  https://kubernetes.io/docs/tasks/tools/install-kubectl/",
diff --git a/translations/ru.json b/translations/ru.json
index 7d27908a6..30825928e 100644
--- a/translations/ru.json
+++ b/translations/ru.json
@@ -686,6 +686,7 @@
 	"The none driver is not compatible with multi-node clusters.": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "",
 	"The output format. One of 'json', 'table'": "",
 	"The path on the file system where the docs in markdown need to be saved": "",
@@ -908,7 +909,6 @@
 	"invalid kubernetes version": "",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "",
diff --git a/translations/strings.txt b/translations/strings.txt
index 662a1ec39..6e04e67f5 100644
--- a/translations/strings.txt
+++ b/translations/strings.txt
@@ -686,6 +686,7 @@
 	"The none driver is not compatible with multi-node clusters.": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "",
 	"The output format. One of 'json', 'table'": "",
 	"The path on the file system where the docs in markdown need to be saved": "",
@@ -908,7 +909,6 @@
 	"invalid kubernetes version": "",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "",
diff --git a/translations/zh-CN.json b/translations/zh-CN.json
index faa1aa358..56dffd8ad 100644
--- a/translations/zh-CN.json
+++ b/translations/zh-CN.json
@@ -844,6 +844,7 @@
 	"The none driver is not compatible with multi-node clusters.": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires cri-dockerd.\n\t\t\n\t\tPlease install cri-dockerd using these instructions:\n\n\t\thttps://github.com/Mirantis/cri-dockerd": "",
 	"The none driver with Kubernetes v1.24+ and the docker container-runtime requires dockerd.\n\t\t\n\t\tPlease install dockerd using these instructions:\n\n\t\thttps://docs.docker.com/engine/install/": "",
+	"The none driver with Kubernetes v1.24+ requires containernetworking-plugins.\n\n\t\tPlease install containernetworking-plugins using these instructions:\n\n\t\thttps://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver": "",
 	"The number of nodes to spin up. Defaults to 1.": "",
 	"The output format. One of 'json', 'table'": "输出的格式。'json' 或者 'table'",
 	"The path on the file system where the docs in markdown need to be saved": "",
@@ -1096,7 +1097,6 @@
 	"invalid kubernetes version": "",
 	"json encoding failure": "",
 	"keep the kube-context active after cluster is stopped. Defaults to false.": "",
-	"kubeadm certificates have expired. Generating new ones...": "",
 	"kubeadm detected a TCP port conflict with another process: probably another local Kubernetes installation. Run lsof -p\u003cport\u003e to find the process and kill it": "kubeadm 检测一个到与其他进程的 TCP 端口冲突：或许是另外的本地安装的 Kubernetes 导致。执行 lsof -p\u003cport\u003e  查找并杀死这些进程",
 	"kubectl and minikube configuration will be stored in {{.home_folder}}": "kubectl 和 minikube 配置将存储在 {{.home_folder}} 中",
 	"kubectl not found. If you need it, try: 'minikube kubectl -- get pods -A'": "",


Test patch:
diff --git a/.github/workflows/update-gotestsum-version.yml b/.github/workflows/update-gotestsum-version.yml
index 970984b06..a5710ee06 100644
--- a/.github/workflows/update-gotestsum-version.yml
+++ b/.github/workflows/update-gotestsum-version.yml
@@ -31,7 +31,7 @@ jobs:
           echo "EOF" >> $GITHUB_OUTPUT
       - name: Create PR
         if: ${{ steps.bumpGotestsum.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@284f54f989303d2699d373481a0cfa13ad5a6666
+        uses: peter-evans/create-pull-request@5b4a9f6a9e2af26e5f02351490b90d01eb8ec1e5
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: 'CI: Update gotestsum from ${{ steps.bumpGotestsum.outputs.OLD_VERSION }} to ${{ steps.bumpGotestsum.outputs.NEW_VERSION }}'
diff --git a/hack/jenkins/linux_integration_tests_none.sh b/hack/jenkins/linux_integration_tests_none.sh
index 15c46a92d..dedb14fae 100755
--- a/hack/jenkins/linux_integration_tests_none.sh
+++ b/hack/jenkins/linux_integration_tests_none.sh
@@ -31,8 +31,8 @@ DRIVER="none"
 JOB_NAME="none_Linux"
 EXTRA_START_ARGS="--bootstrapper=kubeadm"
 
-# add install location of iptables and conntrack to PATH
-PATH="/usr/sbin:$PATH"
+SUDO_PREFIX="sudo -E "
+export KUBECONFIG="/root/.kube/config"
 
 if ! kubeadm &>/dev/null; then
   echo "WARNING: kubeadm is not installed. will try to install."
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-api-port.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-api-port.yaml
index 9c66e8115..28ab4193b 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-api-port.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-api-port.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-pod-network-cidr.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-pod-network-cidr.yaml
index fa6f78d2f..d7ed3067f 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-pod-network-cidr.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd-pod-network-cidr.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "192.168.32.0/20"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd.yaml
index f7b988d9c..3c942544f 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/containerd.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio-options-gates.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio-options-gates.yaml
index 3c314f68c..1917e5f92 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio-options-gates.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio-options-gates.yaml
@@ -44,7 +44,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio.yaml
index 92cc612d9..5964c1db0 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/crio.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/default.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/default.yaml
index f4cd34ba3..543df91cb 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/default.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/default.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/dns.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/dns.yaml
index a527103e4..04260d265 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/dns.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/dns.yaml
@@ -38,7 +38,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: minikube.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/image-repository.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/image-repository.yaml
index 3ffc93e85..63b4b3873 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/image-repository.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/image-repository.yaml
@@ -39,7 +39,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/options.yaml b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/options.yaml
index 57bf6a75d..828d67dcc 100644
--- a/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/options.yaml
+++ b/pkg/minikube/bootstrapper/bsutil/testdata/v1.27/options.yaml
@@ -41,7 +41,7 @@ etcd:
     dataDir: /var/lib/minikube/etcd
     extraArgs:
       proxy-refresh-interval: "70000"
-kubernetesVersion: v1.27.0
+kubernetesVersion: v1.27.0-rc.1
 networking:
   dnsDomain: cluster.local
   podSubnet: "10.244.0.0/16"
diff --git a/pkg/minikube/bootstrapper/certs_test.go b/pkg/minikube/bootstrapper/certs_test.go
index 277fbdf7d..e46a32a82 100644
--- a/pkg/minikube/bootstrapper/certs_test.go
+++ b/pkg/minikube/bootstrapper/certs_test.go
@@ -20,7 +20,6 @@ import (
 	"os"
 	"path/filepath"
 	"testing"
-	"time"
 
 	"k8s.io/minikube/pkg/minikube/command"
 	"k8s.io/minikube/pkg/minikube/config"
@@ -56,7 +55,6 @@ func TestSetupCerts(t *testing.T) {
 	expected := map[string]string{
 		`sudo /bin/bash -c "test -s /usr/share/ca-certificates/mycert.pem && ln -fs /usr/share/ca-certificates/mycert.pem /etc/ssl/certs/mycert.pem"`:             "-",
 		`sudo /bin/bash -c "test -s /usr/share/ca-certificates/minikubeCA.pem && ln -fs /usr/share/ca-certificates/minikubeCA.pem /etc/ssl/certs/minikubeCA.pem"`: "-",
-		`date -u +%d-%m-%y-%T`: time.Now().Format("02-01-06-15:04:05"),
 	}
 	f := command.NewFakeCommandRunner()
 	f.SetCommandToOutput(expected)
diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md
index bdf6c26f5..1d3ff3407 100644
--- a/site/content/en/docs/contrib/tests.en.md
+++ b/site/content/en/docs/contrib/tests.en.md
@@ -615,7 +615,7 @@ validates that profile list works with --no-kubernetes
 validates that minikube start with no args works.
 
 ## TestChangeNoneUser
-tests to make sure the CHANGE_MINIKUBE_NONE_USER environment variable is respected
+tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected
 and changes the minikube file permissions from root to the correct user.
 
 ## TestPause
diff --git a/test/integration/none_test.go b/test/integration/none_test.go
index e1fa72cc3..c9270169f 100644
--- a/test/integration/none_test.go
+++ b/test/integration/none_test.go
@@ -31,11 +31,11 @@ import (
 	"k8s.io/minikube/pkg/minikube/localpath"
 )
 
-// TestChangeNoneUser tests to make sure the CHANGE_MINIKUBE_NONE_USER environment variable is respected
+// TestChangeNoneUser tests to make sure the CHANGE_MINIKUBE_NONE_USER environemt variable is respected
 // and changes the minikube file permissions from root to the correct user.
 func TestChangeNoneUser(t *testing.T) {
-	if !NoneDriver() || os.Getenv("SUDO_USER") == "" {
-		t.Skip("Test requires none driver and SUDO_USER env to not be empty")
+	if !NoneDriver() {
+		t.Skip("Only test none driver.")
 	}
 	MaybeParallel(t)
 
@@ -64,7 +64,11 @@ func TestChangeNoneUser(t *testing.T) {
 		t.Errorf("%s failed: %v", rr.Command(), err)
 	}
 
-	u, err := user.Lookup(os.Getenv("SUDO_USER"))
+	username := os.Getenv("SUDO_USER")
+	if username == "" {
+		t.Fatal("Expected $SUDO_USER env to not be empty")
+	}
+	u, err := user.Lookup(username)
 	if err != nil {
 		t.Fatalf("Getting user failed: %v", err)
 	}
diff --git a/test/integration/version_upgrade_test.go b/test/integration/version_upgrade_test.go
index dac96d4cc..079e0eb77 100644
--- a/test/integration/version_upgrade_test.go
+++ b/test/integration/version_upgrade_test.go
@@ -69,10 +69,6 @@ func legacyVersion() string {
 			version = "v1.9.0"
 		}
 	}
-	if NoneDriver() {
-		// oldest version where none driver doesn't have to be run as root
-		version = "v1.16.0"
-	}
 	// the version containerd in ISO was upgraded to 1.4.2
 	// we need it to use runc.v2 plugin
 	// note: Test*BinaryUpgrade require minikube v1.22+ to satisfy newer containerd config structure