Repository: kubernetes/minikube
Pull request #19213 (2024-07-09 15:03:54)

Build(deps): Bump github.com/google/go-containerregistry from 0.19.2 to 0.20.0
Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.19.2 to 0.20.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a href="https://github.com/google/go-containerregistry/releases">github.com/google/go-containerregistry's releases</a>.</em></p>
<blockquote>
<h2>v0.20.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Referrer API must return correct Content-Type by <a href="https://github.com/GregoireW"><code>@​GregoireW</code></a> in <a href="https://redirect.github.com/google/go-containerregistry/pull/1968">google/go-containerregistry#1968</a></li>
<li>🚨 POTENTIALLY BREAKING: Restore blind-write to remote.Put by <a href="https://github.com/jonjohnsonjr"><code>@​jonjohnsonjr</code></a> in <a href="https://redirect.github.com/google/go-containerregistry/pull/1970">google/go-containerregistry#1970</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/GregoireW"><code>@​GregoireW</code></a> made their first contribution in <a href="https://redirect.github.com/google/go-containerregistry/pull/1968">google/go-containerregistry#1968</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a href="https://github.com/google/go-containerregistry/compare/v0.19.2...v0.20.0">https://github.com/google/go-containerregistry/compare/v0.19.2...v0.20.0</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a href="https://github.com/google/go-containerregistry/commit/d36047ae385302d20acd872e28f036a475fb9417"><code>d36047a</code></a> Restore blind-write to remote.Put (<a href="https://redirect.github.com/google/go-containerregistry/issues/1970">#1970</a>)</li>
<li><a href="https://github.com/google/go-containerregistry/commit/9915a85d155f894e18a05d2e3d3f8d249244206f"><code>9915a85</code></a> Referrer API must return correct Content-Type (<a href="https://redirect.github.com/google/go-containerregistry/issues/1968">#1968</a>)</li>
<li>See full diff in <a href="https://github.com/google/go-containerregistry/compare/v0.19.2...v0.20.0">compare view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/google/go-containerregistry&package-manager=go_modules&previous-version=0.19.2&new-version=0.20.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)


</details>


Patch:
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index c0ab94490..97b3e2921 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -18,7 +18,7 @@ permissions:
 
 jobs:
   build_minikube:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -44,7 +44,7 @@ jobs:
           name: minikube_binaries
           path: out
   lint:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -62,7 +62,7 @@ jobs:
         run: make test
         continue-on-error: false
   unit_test:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index 3ffe8b68a..3b1e965d5 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -13,7 +13,7 @@ permissions:
 jobs:
   generate-docs:
     if: github.repository == 'kubernetes/minikube'
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/functional_verified.yml b/.github/workflows/functional_verified.yml
index 0c1b61893..b58019f23 100644
--- a/.github/workflows/functional_verified.yml
+++ b/.github/workflows/functional_verified.yml
@@ -32,7 +32,7 @@ jobs:
   # builds the minikube binaries
   build_minikube:
     if: contains(github.event.pull_request.labels.*.name, 'ok-to-test')
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -199,7 +199,7 @@ jobs:
       [
         functional_docker_ubuntu_arm64,
       ]
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: download all extra reports
         uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
diff --git a/.github/workflows/hide-minikube-bot-comments.yml b/.github/workflows/hide-minikube-bot-comments.yml
index 63a072f02..e8b491339 100644
--- a/.github/workflows/hide-minikube-bot-comments.yml
+++ b/.github/workflows/hide-minikube-bot-comments.yml
@@ -6,7 +6,7 @@ permissions:
 jobs:
   hide-comments:
     if: ${{ github.event.issue.pull_request }}
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: spowelljr/hide-minikube-bot-comments@7d9688dd9b7fce605c24be174110c344728160de
         with:
diff --git a/.github/workflows/leaderboard.yml b/.github/workflows/leaderboard.yml
index c1065b41e..8342873de 100644
--- a/.github/workflows/leaderboard.yml
+++ b/.github/workflows/leaderboard.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   update-leaderboard:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 38533275b..0d6f0fe5c 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -22,7 +22,7 @@ jobs:
   # Runs before before the functional tests
   # builds the binaries required for testing
   build_minikube_test_binaries:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -47,7 +47,7 @@ jobs:
           name: minikube_binaries
           path: out
   build_minikube:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -60,7 +60,7 @@ jobs:
           make cross
           make e2e-cross
   lint:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -78,7 +78,7 @@ jobs:
         run: make test
         continue-on-error: false
   unit_test:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -106,7 +106,7 @@ jobs:
       JOB_NAME: "functional_docker_ubuntu"
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -153,6 +153,7 @@ jobs:
           chmod a+x minikube-*
           sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
           sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
+          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=--vm-driver=docker  -test.run TestFunctional -test.timeout=15m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
           END_TIME=$(date -u +%s)
@@ -205,7 +206,7 @@ jobs:
       JOB_NAME: "functional_docker_containerd_ubuntu"
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -252,6 +253,7 @@ jobs:
           chmod a+x minikube-*
           sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
           sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
+          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="--vm-driver=docker --container-runtime=containerd" -test.run TestFunctional -test.timeout=30m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
           END_TIME=$(date -u +%s)
@@ -296,6 +298,124 @@ jobs:
           if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi
           if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
 
+  functional_docker_rootless_containerd_ubuntu:
+    permissions:
+      contents: none
+    needs: [build_minikube_test_binaries]
+    env:
+      TIME_ELAPSED: time
+      JOB_NAME: "functional_docker_rootless_containerd_ubuntu"
+      GOPOGH_RESULT: ""
+      SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
+      DEBIAN_FRONTEND: noninteractive
+    # ubuntu-22.04 is needed for cgroup v2
+    runs-on: ubuntu-22.04
+    steps:
+      - name: Install kubectl
+        shell: bash
+        run: |
+          curl -LO "https://dl.k8s.io/release/$(curl -sSL https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
+          sudo install kubectl /usr/local/bin/kubectl
+          kubectl version --client=true
+      # https://rootlesscontaine.rs/getting-started/common/cgroup2/
+      - name: Set up cgroup v2 delegation
+        run: |
+          sudo mkdir -p /etc/systemd/system/user@.service.d
+          cat <<EOF | sudo tee /etc/systemd/system/user@.service.d/delegate.conf
+          [Service]
+          Delegate=cpu cpuset io memory pids
+          EOF
+          sudo systemctl daemon-reload
+      - name: Set up Rootless Docker
+        run: |
+          sudo apt-get remove moby-engine-*
+          curl https://get.docker.com | sudo sh
+          dockerd-rootless-setuptool.sh install -f
+          docker context use rootless
+      - name: Docker Info
+        shell: bash
+        run: |
+          echo "--------------------------"
+          docker version || true
+          echo "--------------------------"
+          docker info || true
+          echo "--------------------------"
+          docker system df || true
+          echo "--------------------------"
+          docker system info --format='{{json .}}'|| true
+          echo "--------------------------"
+          docker ps || true
+          echo "--------------------------"
+      - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
+        with:
+          cache: false
+          go-version: ${{env.GO_VERSION}}
+      - name: Install gopogh
+        shell: bash
+        run: |
+          go install github.com/medyagh/gopogh/cmd/gopogh@v0.27.0
+      - name: Download Binaries
+        uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
+        with:
+          name: minikube_binaries
+          path: minikube_binaries
+      - name: Run Integration Test
+        continue-on-error: false
+        # bash {0} to allow test to continue to next step. in case of
+        shell: bash {0}
+        run: |
+          cd minikube_binaries
+          mkdir -p report
+          mkdir -p testhome
+          chmod a+x e2e-*
+          chmod a+x minikube-*
+          sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
+          sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
+          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="--vm-driver=docker --rootless --container-runtime=containerd" -test.run TestFunctional -test.timeout=30m -test.v -timeout-multiplier=1.5 -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))
+          sec=$((${TIME_ELAPSED}%60))
+          TIME_ELAPSED="${min} min $sec seconds "
+          echo "TIME_ELAPSED=${TIME_ELAPSED}" >> $GITHUB_ENV
+      - name: Generate HTML Report
+        shell: bash
+        run: |
+          cd minikube_binaries
+          export PATH=${PATH}:`go env GOPATH`/bin
+          go tool test2json -t < ./report/testout.txt > ./report/testout.json || true
+          STAT=$(gopogh -in ./report/testout.json -out_html ./report/testout.html -out_summary ./report/testout_summary.json -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}"  -details "${GITHUB_SHA}")  || true
+          echo status: ${STAT}
+          FailNum=$(echo $STAT | jq '.NumberOfFail')
+          TestsNum=$(echo $STAT | jq '.NumberOfTests')
+          GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}"
+          echo "GOPOGH_RESULT=${GOPOGH_RESULT}" >> $GITHUB_ENV
+          echo 'STAT<<EOF' >> $GITHUB_ENV
+          echo "${STAT}" >> $GITHUB_ENV
+          echo 'EOF' >> $GITHUB_ENV
+      - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b
+        with:
+          name: functional_docker_rootless_containerd_ubuntu
+          path: minikube_binaries/report
+      - name: The End Result functional_docker_rootless_containerd_ubuntu
+        shell: bash
+        run: |
+          echo ${GOPOGH_RESULT}
+          numFail=$(echo $STAT | jq '.NumberOfFail')
+          numPass=$(echo $STAT | jq '.NumberOfPass')
+          echo "*******************${numPass} Passes :) *******************"
+          echo $STAT | jq '.PassedTests' || true
+          echo "*******************************************************"
+          echo "---------------- ${numFail} Failures :( ----------------------------"
+          echo $STAT | jq '.FailedTests' || true
+          echo "-------------------------------------------------------"
+          if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
+          if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi
+          if [ "$numPass" -lt 36 ];then echo "*** Failed to pass at least 36 ! ***";exit 2;fi
+          if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
+
   functional_podman_ubuntu:
     permissions:
       contents: none
@@ -305,7 +425,7 @@ jobs:
       JOB_NAME: functional_podman_ubuntu
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -355,6 +475,7 @@ jobs:
           chmod a+x minikube-*
           sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/
           sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld
+          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=--vm-driver=podman -v=6 --alsologtostderr -test.run TestFunctional -test.timeout=15m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
           END_TIME=$(date -u +%s)
@@ -463,6 +584,7 @@ jobs:
           mkdir -p testhome
           chmod a+x e2e-*
           chmod a+x minikube-*
+          MINIKUBE_HOME=$(pwd)/testhome ./minikube-darwin-amd64 delete --all --purge
           START_TIME=$(date -u +%s)
           KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-darwin-amd64 -minikube-start-args=--vm-driver=virtualbox  -test.run "TestFunctional" -test.timeout=35m -test.v -timeout-multiplier=1.5 -binary=./minikube-darwin-amd64 2>&1 | tee ./report/testout.txt
           END_TIME=$(date -u +%s)
@@ -506,16 +628,16 @@ jobs:
           if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi
           if [ "$numPass" -lt 33 ];then echo "*** Failed to pass at least 33 ! ***";exit 2;fi
           if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
-  functional_baremetal_ubuntu20_04:
+  functional_baremetal_ubuntu22_04:
     permissions:
       contents: none
     needs: [build_minikube_test_binaries]
     env:
       TIME_ELAPSED: time
-      JOB_NAME: "functional_baremetal_ubuntu20_04"
+      JOB_NAME: "functional_baremetal_ubuntu22_04"
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -530,14 +652,17 @@ jobs:
       # conntrack is required for kubernetes 1.18 and higher
       # socat is required for kubectl port forward which is used in some tests such as validateHelmTillerAddon
       # cri-dockerd is required for Kubernetes 1.24 and higher for none driver
-      - name: Install tools for none
+      - name: Install conntrack and socat
         shell: bash
         run: |
           sudo apt-get update -qq
           sudo apt-get -qq -y install conntrack
           sudo apt-get -qq -y install socat
-          CRI_DOCKERD_VERSION="v0.3.12"
-          CRI_DOCKERD_COMMIT="c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742"
+      - name: Install cri_dockerd & crictl
+        shell: bash
+        run: |
+          CRI_DOCKERD_VERSION="v0.3.14"
+          CRI_DOCKERD_COMMIT="683f70f69901e66d49dfac802841ff843171f131"
           CRI_DOCKERD_BASE_URL="https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}"
           sudo curl -L "${CRI_DOCKERD_BASE_URL}/amd64/cri-dockerd" -o /usr/bin/cri-dockerd
           sudo curl -L "${CRI_DOCKERD_BASE_URL}/cri-docker.socket" -o /usr/lib/systemd/system/cri-docker.socket
@@ -546,6 +671,18 @@ jobs:
           CRICTL_VERSION="v1.28.0"
           curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$CRICTL_VERSION/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz --output crictl-${CRICTL_VERSION}-linux-amd64.tar.gz
           sudo tar zxvf crictl-$CRICTL_VERSION-linux-amd64.tar.gz -C /usr/local/bin
+      # https://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver
+      - name: Install container networking plugins
+        shell: bash
+        run: |
+          CNI_PLUGIN_VERSION="v1.5.1"
+          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"
       - name: Install gopogh
         shell: bash
         run: |
@@ -569,6 +706,7 @@ jobs:
           mkdir -p testhome
           chmod a+x e2e-*
           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
           END_TIME=$(date -u +%s)
@@ -594,9 +732,9 @@ jobs:
           echo 'EOF' >> $GITHUB_ENV
       - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b
         with:
-          name: functional_baremetal_ubuntu20_04
+          name: functional_baremetal_ubuntu22_04
           path: minikube_binaries/report
-      - name: The End Result functional_baremetal_ubuntu20_04
+      - name: The End Result functional_baremetal_ubuntu22_04
         shell: bash
         run: |
           echo ${GOPOGH_RESULT}
@@ -622,11 +760,12 @@ jobs:
       [
         functional_docker_ubuntu,
         functional_docker_containerd_ubuntu,
+        functional_docker_rootless_containerd_ubuntu,
         functional_podman_ubuntu,
         functional_virtualbox_macos,
-        functional_baremetal_ubuntu20_04,
+        functional_baremetal_ubuntu22_04,
       ]
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: download all reports
         uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
@@ -638,9 +777,10 @@ jobs:
           ls -lah
           cp -r ./functional_docker_ubuntu ./all_reports/
           cp -r ./functional_docker_containerd_ubuntu ./all_reports/
+          cp -r ./functional_docker_rootless_containerd_ubuntu ./all_reports/
           cp -r ./functional_podman_ubuntu ./all_reports/
           cp -r ./functional_virtualbox_macos ./all_reports/
-          cp -r ./functional_baremetal_ubuntu20_04 ./all_reports/
+          cp -r ./functional_baremetal_ubuntu22_04 ./all_reports/
 
       - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b
         with:
diff --git a/.github/workflows/minikube-image-benchmark.yml b/.github/workflows/minikube-image-benchmark.yml
index f1e54f3a3..d8936f05d 100644
--- a/.github/workflows/minikube-image-benchmark.yml
+++ b/.github/workflows/minikube-image-benchmark.yml
@@ -13,7 +13,7 @@ permissions:
 jobs:
   image-benchmark:
     if: github.repository == 'kubernetes/minikube'
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     env:
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 27d7f2a35..a34851b72 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -20,7 +20,7 @@ jobs:
   # Runs before before the functional tests
   # builds the binaries required for testing
   build_minikube_test_binaries:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -45,7 +45,7 @@ jobs:
           name: minikube_binaries
           path: out
   build_minikube:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -58,7 +58,7 @@ jobs:
           make cross
           make e2e-cross
   lint:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -76,7 +76,7 @@ jobs:
         run: make test
         continue-on-error: false
   unit_test:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
@@ -104,7 +104,7 @@ jobs:
       JOB_NAME: "functional_docker_ubuntu"
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -204,7 +204,7 @@ jobs:
       JOB_NAME: "functional_docker_containerd_ubuntu"
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -423,7 +423,7 @@ jobs:
       JOB_NAME: functional_podman_ubuntu
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -626,16 +626,16 @@ jobs:
           if [ "$numPass" -eq 0 ];then echo "*** 0 Passed! ***";exit 2;fi
           if [ "$numPass" -lt 33 ];then echo "*** Failed to pass at least 33 ! ***";exit 2;fi
           if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
-  functional_baremetal_ubuntu20_04:
+  functional_baremetal_ubuntu22_04:
     permissions:
       contents: none
     needs: [build_minikube_test_binaries]
     env:
       TIME_ELAPSED: time
-      JOB_NAME: "functional_baremetal_ubuntu20_04"
+      JOB_NAME: "functional_baremetal_ubuntu22_04"
       GOPOGH_RESULT: ""
       SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Install kubectl
         shell: bash
@@ -650,14 +650,17 @@ jobs:
       # conntrack is required for kubernetes 1.18 and higher
       # socat is required for kubectl port forward which is used in some tests such as validateHelmTillerAddon
       # cri-dockerd is required for Kubernetes 1.24 and higher for none driver
-      - name: Install tools for none
+      - name: Install conntrack and socat
         shell: bash
         run: |
           sudo apt-get update -qq
           sudo apt-get -qq -y install conntrack
           sudo apt-get -qq -y install socat
-          CRI_DOCKERD_VERSION="v0.3.12"
-          CRI_DOCKERD_COMMIT="c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742"
+      - name: Install cri_dockerd & crictl
+        shell: bash
+        run: |
+          CRI_DOCKERD_VERSION="v0.3.14"
+          CRI_DOCKERD_COMMIT="683f70f69901e66d49dfac802841ff843171f131"
           CRI_DOCKERD_BASE_URL="https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}"
           sudo curl -L "${CRI_DOCKERD_BASE_URL}/amd64/cri-dockerd" -o /usr/bin/cri-dockerd
           sudo curl -L "${CRI_DOCKERD_BASE_URL}/cri-docker.socket" -o /usr/lib/systemd/system/cri-docker.socket
@@ -666,6 +669,18 @@ jobs:
           CRICTL_VERSION="v1.28.0"
           curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$CRICTL_VERSION/crictl-${CRICTL_VERSION}-linux-amd64.tar.gz --output crictl-${CRICTL_VERSION}-linux-amd64.tar.gz
           sudo tar zxvf crictl-$CRICTL_VERSION-linux-amd64.tar.gz -C /usr/local/bin
+      # https://minikube.sigs.k8s.io/docs/faq/#how-do-i-install-containernetworking-plugins-for-none-driver
+      - name: Install container networking plugins
+        shell: bash
+        run: |
+          CNI_PLUGIN_VERSION="v1.5.1"
+          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"
       - name: Install gopogh
         shell: bash
         run: |
@@ -715,9 +730,9 @@ jobs:
           echo 'EOF' >> $GITHUB_ENV
       - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b
         with:
-          name: functional_baremetal_ubuntu20_04
+          name: functional_baremetal_ubuntu22_04
           path: minikube_binaries/report
-      - name: The End Result functional_baremetal_ubuntu20_04
+      - name: The End Result functional_baremetal_ubuntu22_04
         shell: bash
         run: |
           echo ${GOPOGH_RESULT}
@@ -746,9 +761,9 @@ jobs:
         functional_docker_rootless_containerd_ubuntu,
         functional_podman_ubuntu,
         functional_virtualbox_macos,
-        functional_baremetal_ubuntu20_04,
+        functional_baremetal_ubuntu22_04,
       ]
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: download all reports
         uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16
@@ -763,7 +778,7 @@ jobs:
           cp -r ./functional_docker_rootless_containerd_ubuntu ./all_reports/
           cp -r ./functional_podman_ubuntu ./all_reports/
           cp -r ./functional_virtualbox_macos ./all_reports/
-          cp -r ./functional_baremetal_ubuntu20_04 ./all_reports/
+          cp -r ./functional_baremetal_ubuntu22_04 ./all_reports/
 
       - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b
         with:
diff --git a/.github/workflows/time-to-k8s-public-chart.yml b/.github/workflows/time-to-k8s-public-chart.yml
index ba61d1be5..5a2b5ed01 100644
--- a/.github/workflows/time-to-k8s-public-chart.yml
+++ b/.github/workflows/time-to-k8s-public-chart.yml
@@ -13,7 +13,7 @@ permissions:
 jobs:
   time-to-k8s-public-chart-docker:
     if: github.repository == 'kubernetes/minikube'
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     env:
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml
index 826ca86c7..4cab9d795 100644
--- a/.github/workflows/time-to-k8s.yml
+++ b/.github/workflows/time-to-k8s.yml
@@ -11,7 +11,7 @@ permissions:
 
 jobs:
   benchmark:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - name: Checkout submodules
diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml
index 90cd54073..c2171aedc 100644
--- a/.github/workflows/translations.yml
+++ b/.github/workflows/translations.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   unit_test:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/twitter-bot.yml b/.github/workflows/twitter-bot.yml
index 3880d01c0..eaaf3cdc5 100644
--- a/.github/workflows/twitter-bot.yml
+++ b/.github/workflows/twitter-bot.yml
@@ -7,7 +7,7 @@ permissions:
   contents: read
 jobs:
   twitter-release:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: ethomson/send-tweet-action@288f9339e0412e3038dce350e0da5ecdf12133a6
         with:
diff --git a/.github/workflows/update-buildkit-version.yml b/.github/workflows/update-buildkit-version.yml
index 4a66b9358..422964d94 100644
--- a/.github/workflows/update-buildkit-version.yml
+++ b/.github/workflows/update-buildkit-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-buildkit-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-calico-version.yml b/.github/workflows/update-calico-version.yml
index 1cdbdda19..4de111834 100644
--- a/.github/workflows/update-calico-version.yml
+++ b/.github/workflows/update-calico-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-calico-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-cilium-version.yml b/.github/workflows/update-cilium-version.yml
index a60e1f75c..1d670d64a 100644
--- a/.github/workflows/update-cilium-version.yml
+++ b/.github/workflows/update-cilium-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-cilium-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-cloud-spanner-emulator-version.yml b/.github/workflows/update-cloud-spanner-emulator-version.yml
index 2653a5bc4..3e29d615c 100644
--- a/.github/workflows/update-cloud-spanner-emulator-version.yml
+++ b/.github/workflows/update-cloud-spanner-emulator-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-cloud-spanner-emulator-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-cni-plugins-version.yml b/.github/workflows/update-cni-plugins-version.yml
index 7065ef3db..9de77803a 100644
--- a/.github/workflows/update-cni-plugins-version.yml
+++ b/.github/workflows/update-cni-plugins-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-cni-plugins-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-containerd-version.yml b/.github/workflows/update-containerd-version.yml
index 19cea9da1..a54c71749 100644
--- a/.github/workflows/update-containerd-version.yml
+++ b/.github/workflows/update-containerd-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-containerd-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-cri-dockerd-version.yml b/.github/workflows/update-cri-dockerd-version.yml
index c1207e109..ca0f6d773 100644
--- a/.github/workflows/update-cri-dockerd-version.yml
+++ b/.github/workflows/update-cri-dockerd-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-cri-dockerd-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-cri-o-version.yml b/.github/workflows/update-cri-o-version.yml
index 5eaf0bff6..608402a3d 100644
--- a/.github/workflows/update-cri-o-version.yml
+++ b/.github/workflows/update-cri-o-version.yml
@@ -13,7 +13,7 @@ permissions:
 
 jobs:
   bump-cri-o-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-crictl-version.yml b/.github/workflows/update-crictl-version.yml
index 200ec745d..0fd2d0306 100644
--- a/.github/workflows/update-crictl-version.yml
+++ b/.github/workflows/update-crictl-version.yml
@@ -13,7 +13,7 @@ permissions:
 
 jobs:
   bump-crictl-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-crun-version.yml b/.github/workflows/update-crun-version.yml
index 0558bedd0..3947deedc 100644
--- a/.github/workflows/update-crun-version.yml
+++ b/.github/workflows/update-crun-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-crun-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-docker-buildx-version.yml b/.github/workflows/update-docker-buildx-version.yml
index 15f009a73..b78b33e15 100644
--- a/.github/workflows/update-docker-buildx-version.yml
+++ b/.github/workflows/update-docker-buildx-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-docker-buildx-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-docker-version.yml b/.github/workflows/update-docker-version.yml
index f50d85e46..7057dad58 100644
--- a/.github/workflows/update-docker-version.yml
+++ b/.github/workflows/update-docker-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-docker-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-docsy-version.yml b/.github/workflows/update-docsy-version.yml
index 05930d50a..cde964228 100644
--- a/.github/workflows/update-docsy-version.yml
+++ b/.github/workflows/update-docsy-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-docsy-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-flannel-version.yml b/.github/workflows/update-flannel-version.yml
index 6eaaa7d0d..be1743146 100644
--- a/.github/workflows/update-flannel-version.yml
+++ b/.github/workflows/update-flannel-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-flannel-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-gcp-auth-version.yml b/.github/workflows/update-gcp-auth-version.yml
index 235f8eae2..861523290 100644
--- a/.github/workflows/update-gcp-auth-version.yml
+++ b/.github/workflows/update-gcp-auth-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-gcp-auth-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-gh-version.yml b/.github/workflows/update-gh-version.yml
index a41282b36..2b7742cf3 100644
--- a/.github/workflows/update-gh-version.yml
+++ b/.github/workflows/update-gh-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-gh-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-go-github-version.yml b/.github/workflows/update-go-github-version.yml
index 5e33fe188..b9fbd8ff2 100644
--- a/.github/workflows/update-go-github-version.yml
+++ b/.github/workflows/update-go-github-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-go-github-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-golang-version.yml b/.github/workflows/update-golang-version.yml
index 4e657af78..060cf0b41 100644
--- a/.github/workflows/update-golang-version.yml
+++ b/.github/workflows/update-golang-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-golang-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-golint-version.yml b/.github/workflows/update-golint-version.yml
index 39ab65118..c35982751 100644
--- a/.github/workflows/update-golint-version.yml
+++ b/.github/workflows/update-golint-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-golint-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-gopogh-version.yml b/.github/workflows/update-gopogh-version.yml
index 50cb29501..d67d3a400 100644
--- a/.github/workflows/update-gopogh-version.yml
+++ b/.github/workflows/update-gopogh-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-gopogh-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-hugo-version.yml b/.github/workflows/update-hugo-version.yml
index af57ee36a..7d1db8ae2 100644
--- a/.github/workflows/update-hugo-version.yml
+++ b/.github/workflows/update-hugo-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-hugo-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-ingress-version.yml b/.github/workflows/update-ingress-version.yml
index 1818a8c31..f40ebe163 100644
--- a/.github/workflows/update-ingress-version.yml
+++ b/.github/workflows/update-ingress-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-ingress-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-inspektor-gadget-version.yml b/.github/workflows/update-inspektor-gadget-version.yml
index 29973de9d..0691deaca 100644
--- a/.github/workflows/update-inspektor-gadget-version.yml
+++ b/.github/workflows/update-inspektor-gadget-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-inspektor-gadget-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-iso-image-versions.yml b/.github/workflows/update-iso-image-versions.yml
index 6de0d4379..c3fc01b04 100644
--- a/.github/workflows/update-iso-image-versions.yml
+++ b/.github/workflows/update-iso-image-versions.yml
@@ -8,7 +8,7 @@ permissions:
   contents: read
 jobs:
   update-all:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-istio-operator.yml b/.github/workflows/update-istio-operator.yml
index 7ff41dabb..ff03e3d0d 100644
--- a/.github/workflows/update-istio-operator.yml
+++ b/.github/workflows/update-istio-operator.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-istio-operator-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-k8s-versions.yml b/.github/workflows/update-k8s-versions.yml
index cbdaea78d..c846678d5 100644
--- a/.github/workflows/update-k8s-versions.yml
+++ b/.github/workflows/update-k8s-versions.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-k8s-versions:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-kindnetd-version.yml b/.github/workflows/update-kindnetd-version.yml
index f47180ef6..b7b9b790d 100644
--- a/.github/workflows/update-kindnetd-version.yml
+++ b/.github/workflows/update-kindnetd-version.yml
@@ -11,7 +11,7 @@ permissions:
   contents: read
 jobs:
   bump-kindnetd-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-kong-ingress-controller-version.yml b/.github/workflows/update-kong-ingress-controller-version.yml
index cb83da163..fa06b345b 100644
--- a/.github/workflows/update-kong-ingress-controller-version.yml
+++ b/.github/workflows/update-kong-ingress-controller-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-kong-ingress-controller-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-kong-version.yml b/.github/workflows/update-kong-version.yml
index a4fd0543a..df6ec4c7c 100644
--- a/.github/workflows/update-kong-version.yml
+++ b/.github/workflows/update-kong-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-kong-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-kubeadm-constants.yml b/.github/workflows/update-kubeadm-constants.yml
index b1847c6cd..970339d73 100644
--- a/.github/workflows/update-kubeadm-constants.yml
+++ b/.github/workflows/update-kubeadm-constants.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-k8s-versions:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-kubectl-version.yml b/.github/workflows/update-kubectl-version.yml
index 975df04bc..da02b1e43 100644
--- a/.github/workflows/update-kubectl-version.yml
+++ b/.github/workflows/update-kubectl-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-kubectl-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-kubernetes-versions-list.yml b/.github/workflows/update-kubernetes-versions-list.yml
index 011abe585..731691f6a 100644
--- a/.github/workflows/update-kubernetes-versions-list.yml
+++ b/.github/workflows/update-kubernetes-versions-list.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   update-kubernetes-versions-list:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-metrics-server-version.yml b/.github/workflows/update-metrics-server-version.yml
index e9aa1dbcd..e6aa47477 100644
--- a/.github/workflows/update-metrics-server-version.yml
+++ b/.github/workflows/update-metrics-server-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-metrics-server-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-nerdctl-version.yml b/.github/workflows/update-nerdctl-version.yml
index 81682f7cf..1f6dae0f9 100644
--- a/.github/workflows/update-nerdctl-version.yml
+++ b/.github/workflows/update-nerdctl-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-nerdctl-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-nerdctld-version.yml b/.github/workflows/update-nerdctld-version.yml
index 2ad935549..567959953 100644
--- a/.github/workflows/update-nerdctld-version.yml
+++ b/.github/workflows/update-nerdctld-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-nerdctld-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-nvidia-device-plugin-version.yml b/.github/workflows/update-nvidia-device-plugin-version.yml
index d5523911e..21721fed3 100644
--- a/.github/workflows/update-nvidia-device-plugin-version.yml
+++ b/.github/workflows/update-nvidia-device-plugin-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-nvidia-device-plugin-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-registry-version.yml b/.github/workflows/update-registry-version.yml
index 422857676..9f738e521 100644
--- a/.github/workflows/update-registry-version.yml
+++ b/.github/workflows/update-registry-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-registry-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-runc-version.yml b/.github/workflows/update-runc-version.yml
index 366b76d42..e616af1c0 100644
--- a/.github/workflows/update-runc-version.yml
+++ b/.github/workflows/update-runc-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-runc-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-site-node-version.yml b/.github/workflows/update-site-node-version.yml
index 3f987d63d..5f700ce9c 100644
--- a/.github/workflows/update-site-node-version.yml
+++ b/.github/workflows/update-site-node-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-site-node-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-ubuntu-version.yml b/.github/workflows/update-ubuntu-version.yml
index b2782e8b9..3fd8bde3e 100644
--- a/.github/workflows/update-ubuntu-version.yml
+++ b/.github/workflows/update-ubuntu-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-ubuntu-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-volcano-version.yml b/.github/workflows/update-volcano-version.yml
index b00047e3b..774150c74 100644
--- a/.github/workflows/update-volcano-version.yml
+++ b/.github/workflows/update-volcano-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-volcano-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/update-yakd-version.yml b/.github/workflows/update-yakd-version.yml
index e4f37878e..5204e0cc7 100644
--- a/.github/workflows/update-yakd-version.yml
+++ b/.github/workflows/update-yakd-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-yakd-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/.github/workflows/vex.yml b/.github/workflows/vex.yml
index 18df66ea5..2071852d1 100644
--- a/.github/workflows/vex.yml
+++ b/.github/workflows/vex.yml
@@ -5,7 +5,7 @@ on:
       - 'v*.*.*'
 jobs:
   vexctl:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - name: Checkout code
         uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
diff --git a/.github/workflows/yearly-leaderboard.yml b/.github/workflows/yearly-leaderboard.yml
index ba2c5a0e7..3f8fcb7b9 100644
--- a/.github/workflows/yearly-leaderboard.yml
+++ b/.github/workflows/yearly-leaderboard.yml
@@ -13,7 +13,7 @@ permissions:
 jobs:
   update-yearly-leaderboard:
     if: github.repository == 'kubernetes/minikube'
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     env:
       AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
diff --git a/Makefile b/Makefile
index 28c9b1d13..93679040b 100644
--- a/Makefile
+++ b/Makefile
@@ -24,7 +24,7 @@ KIC_VERSION ?= $(shell grep -E "Version =" pkg/drivers/kic/types.go | cut -d \"
 HUGO_VERSION ?= $(shell grep -E "HUGO_VERSION = \"" netlify.toml | cut -d \" -f2)
 
 # Default to .0 for higher cache hit rates, as build increments typically don't require new ISO versions
-ISO_VERSION ?= v1.33.1-1720011972-19186
+ISO_VERSION ?= v1.33.1-1720433170-19199
 
 # Dashes are valid in semver, but not Linux packaging. Use ~ to delimit alpha/beta
 DEB_VERSION ?= $(subst -,~,$(RAW_VERSION))
diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go
index e43a154f9..ce3277e37 100644
--- a/cmd/minikube/cmd/start_flags.go
+++ b/cmd/minikube/cmd/start_flags.go
@@ -170,7 +170,7 @@ func initMinikubeFlags() {
 	startCmd.Flags().String(kicBaseImage, kic.BaseImage, "The base image to use for docker/podman drivers. Intended for local development.")
 	startCmd.Flags().Bool(keepContext, false, "This will keep the existing kubectl context and will create a minikube context.")
 	startCmd.Flags().Bool(embedCerts, false, "if true, will embed the certs in kubeconfig.")
-	startCmd.Flags().String(containerRuntime, constants.DefaultContainerRuntime, fmt.Sprintf("The container runtime to be used. Valid options: %s (default: auto)", strings.Join(cruntime.ValidRuntimes(), ", ")))
+	startCmd.Flags().StringP(containerRuntime, "c", constants.DefaultContainerRuntime, fmt.Sprintf("The container runtime to be used. Valid options: %s (default: auto)", strings.Join(cruntime.ValidRuntimes(), ", ")))
 	startCmd.Flags().Bool(createMount, false, "This will start the mount daemon and automatically mount files into minikube.")
 	startCmd.Flags().String(mountString, constants.DefaultMountDir+":/minikube-host", "The argument to pass the minikube mount command on start.")
 	startCmd.Flags().String(mount9PVersion, defaultMount9PVersion, mount9PVersionDescription)
diff --git a/deploy/addons/ingress-dns/example/example.yaml b/deploy/addons/ingress-dns/example/example.yaml
index dfdd9e35a..b8e321785 100644
--- a/deploy/addons/ingress-dns/example/example.yaml
+++ b/deploy/addons/ingress-dns/example/example.yaml
@@ -29,7 +29,7 @@ spec:
     spec:
       containers:
         - name: hello-world-app
-          image: gcr.io/google-samples/hello-app:1.0
+          image: docker.io/kicbase/echo-server:1.0
           ports:
             - containerPort: 8080
 ---
diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash
index bfe1cd9da..ca7c039e3 100644
--- a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash
+++ b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.hash
@@ -7,3 +7,4 @@ sha256 fc467606256ef13d89365df00a1c4b4b4226628c1a6fd68d2c3fda32bdf36291 9a87d6ae
 sha256 b01ec9f9953d0017e8728927ebcc46c7ee63e435027b7e67106eb93fc83c387f 23513f4cfe8f02bc02130b4edba2c9d2c8fd320b.tar.gz
 sha256 2d491257fb767a413069c7e4e85454c08a9f3456454a8fd840474d44135f5570 b58acf8f78f9d7bce1241d1cddb0932e7101f278.tar.gz
 sha256 d83e2c9c7b678e2a2ec7e902e9cf46928e42ef72686f003ae5c85d6dc32ed380 c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742.tar.gz
+sha256 4a56bba890eb6591a2ff2d28f93f3b4eb606b371b91ff0c8b5be3f9bb92b5c45 683f70f69901e66d49dfac802841ff843171f131.tar.gz
diff --git a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk
index 2243501b4..1a6e9e03e 100644
--- a/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk
+++ b/deploy/iso/minikube-iso/arch/aarch64/package/cri-dockerd-aarch64/cri-dockerd.mk
@@ -4,9 +4,9 @@
 #
 ################################################################################
 
-CRI_DOCKERD_AARCH64_VER = 0.3.12
-CRI_DOCKERD_AARCH64_REV = c2e3805
-CRI_DOCKERD_AARCH64_VERSION = c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742
+CRI_DOCKERD_AARCH64_VER = 0.3.14
+CRI_DOCKERD_AARCH64_REV = 683f70f
+CRI_DOCKERD_AARCH64_VERSION = 683f70f69901e66d49dfac802841ff843171f131
 CRI_DOCKERD_AARCH64_SITE = https://github.com/Mirantis/cri-dockerd/archive
 CRI_DOCKERD_AARCH64_SOURCE = $(CRI_DOCKERD_AARCH64_VERSION).tar.gz
 
diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash
index bfe1cd9da..ca7c039e3 100644
--- a/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash
+++ b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.hash
@@ -7,3 +7,4 @@ sha256 fc467606256ef13d89365df00a1c4b4b4226628c1a6fd68d2c3fda32bdf36291 9a87d6ae
 sha256 b01ec9f9953d0017e8728927ebcc46c7ee63e435027b7e67106eb93fc83c387f 23513f4cfe8f02bc02130b4edba2c9d2c8fd320b.tar.gz
 sha256 2d491257fb767a413069c7e4e85454c08a9f3456454a8fd840474d44135f5570 b58acf8f78f9d7bce1241d1cddb0932e7101f278.tar.gz
 sha256 d83e2c9c7b678e2a2ec7e902e9cf46928e42ef72686f003ae5c85d6dc32ed380 c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742.tar.gz
+sha256 4a56bba890eb6591a2ff2d28f93f3b4eb606b371b91ff0c8b5be3f9bb92b5c45 683f70f69901e66d49dfac802841ff843171f131.tar.gz
diff --git a/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk
index 84ef26569..63c1d8eb7 100644
--- a/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk
+++ b/deploy/iso/minikube-iso/arch/x86_64/package/cri-dockerd/cri-dockerd.mk
@@ -4,9 +4,9 @@
 #
 ################################################################################
 
-CRI_DOCKERD_VER = 0.3.12
-CRI_DOCKERD_REV = c2e3805
-CRI_DOCKERD_VERSION = c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742
+CRI_DOCKERD_VER = 0.3.14
+CRI_DOCKERD_REV = 683f70f
+CRI_DOCKERD_VERSION = 683f70f69901e66d49dfac802841ff843171f131
 CRI_DOCKERD_SITE = https://github.com/Mirantis/cri-dockerd/archive
 CRI_DOCKERD_SOURCE = $(CRI_DOCKERD_VERSION).tar.gz
 
diff --git a/deploy/kicbase/Dockerfile b/deploy/kicbase/Dockerfile
index f019a9d2b..c7fd9b113 100644
--- a/deploy/kicbase/Dockerfile
+++ b/deploy/kicbase/Dockerfile
@@ -43,8 +43,8 @@ FROM ${UBUNTU_JAMMY_IMAGE} as kicbase
 
 ARG BUILDKIT_VERSION="v0.14.1"
 ARG CRIO_VERSION="1.24"
-ARG CRI_DOCKERD_VERSION="v0.3.12"
-ARG CRI_DOCKERD_COMMIT="c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742"
+ARG CRI_DOCKERD_VERSION="v0.3.14"
+ARG CRI_DOCKERD_COMMIT="683f70f69901e66d49dfac802841ff843171f131"
 ARG CNI_PLUGINS_VERSION="v1.4.0"
 ARG TARGETARCH
 ARG NERDCTL_VERSION="1.7.6"
diff --git a/go.mod b/go.mod
index 0f11ca990..b1e102ffd 100644
--- a/go.mod
+++ b/go.mod
@@ -27,7 +27,7 @@ require (
 	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.6.0
-	github.com/google/go-containerregistry v0.19.2
+	github.com/google/go-containerregistry v0.20.0
 	github.com/google/go-github/v62 v62.0.0
 	github.com/google/slowjam v1.1.1
 	github.com/google/uuid v1.6.0
diff --git a/go.sum b/go.sum
index b938aa035..dbdf89646 100644
--- a/go.sum
+++ b/go.sum
@@ -854,8 +854,8 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN
 github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
 github.com/google/go-cmp v0.6.0/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.19.2 h1:TannFKE1QSajsP6hPWb5oJNgKe1IKjHukIKDUmvsV6w=
-github.com/google/go-containerregistry v0.19.2/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI=
+github.com/google/go-containerregistry v0.20.0 h1:wRqHpOeVh3DnenOrPy9xDOLdnLatiGuuNRVelR2gSbg=
+github.com/google/go-containerregistry v0.20.0/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI=
 github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ=
 github.com/google/go-github/v62 v62.0.0 h1:/6mGCaRywZz9MuHyw9gD1CwsbmBX8GWsbFkwMmHdhl4=
 github.com/google/go-github/v62 v62.0.0/go.mod h1:EMxeUqGJq2xRu9DYBMwel/mr7kZrzUOfQmmpYrZn2a4=
diff --git a/pkg/addons/config.go b/pkg/addons/config.go
index 7a7409a6b..a849538eb 100644
--- a/pkg/addons/config.go
+++ b/pkg/addons/config.go
@@ -71,7 +71,7 @@ var Addons = []*Addon{
 	{
 		name:        "gvisor",
 		set:         SetBool,
-		validations: []setFn{IsRuntimeContainerd},
+		validations: []setFn{isRuntimeContainerd},
 		callbacks:   []setFn{EnableOrDisableAddon, verifyAddonStatus},
 	},
 	{
@@ -125,14 +125,16 @@ var Addons = []*Addon{
 		callbacks: []setFn{EnableOrDisableAddon, verifyAddonStatus},
 	},
 	{
-		name:      "nvidia-driver-installer",
-		set:       SetBool,
-		callbacks: []setFn{EnableOrDisableAddon},
+		name:        "nvidia-driver-installer",
+		set:         SetBool,
+		validations: []setFn{isKVMDriverForNVIDIA},
+		callbacks:   []setFn{EnableOrDisableAddon},
 	},
 	{
-		name:      "nvidia-gpu-device-plugin",
-		set:       SetBool,
-		callbacks: []setFn{EnableOrDisableAddon},
+		name:        "nvidia-gpu-device-plugin",
+		set:         SetBool,
+		validations: []setFn{isKVMDriverForNVIDIA},
+		callbacks:   []setFn{EnableOrDisableAddon},
 	},
 	{
 		name:      "olm",
@@ -204,7 +206,7 @@ var Addons = []*Addon{
 	{
 		name:        "csi-hostpath-driver",
 		set:         SetBool,
-		validations: []setFn{IsVolumesnapshotsEnabled},
+		validations: []setFn{isVolumesnapshotsEnabled},
 		callbacks:   []setFn{EnableOrDisableAddon, verifyAddonStatus},
 	},
 	{
diff --git a/pkg/addons/validations.go b/pkg/addons/validations.go
index 9cefbe321..eb318ad0a 100644
--- a/pkg/addons/validations.go
+++ b/pkg/addons/validations.go
@@ -24,6 +24,7 @@ import (
 	"k8s.io/minikube/pkg/minikube/assets"
 	"k8s.io/minikube/pkg/minikube/config"
 	"k8s.io/minikube/pkg/minikube/cruntime"
+	"k8s.io/minikube/pkg/minikube/driver"
 	"k8s.io/minikube/pkg/minikube/out"
 )
 
@@ -45,8 +46,7 @@ const volumesnapshotsDisabledMsg = `[WARNING] For full functionality, the 'csi-h
 You can enable 'volumesnapshots' addon by running: 'minikube addons enable volumesnapshots'
 `
 
-// IsRuntimeContainerd is a validator which returns an error if the current runtime is not containerd
-func IsRuntimeContainerd(cc *config.ClusterConfig, _, _ string) error {
+func isRuntimeContainerd(cc *config.ClusterConfig, _, _ string) error {
 	r, err := cruntime.New(cruntime.Config{Type: cc.KubernetesConfig.ContainerRuntime})
 	if err != nil {
 		return err
@@ -58,9 +58,9 @@ func IsRuntimeContainerd(cc *config.ClusterConfig, _, _ string) error {
 	return nil
 }
 
-// IsVolumesnapshotsEnabled is a validator that prints out a warning if the volumesnapshots addon
+// isVolumesnapshotsEnabled is a validator that prints out a warning if the volumesnapshots addon
 // is disabled (does not return any errors!)
-func IsVolumesnapshotsEnabled(cc *config.ClusterConfig, _, value string) error {
+func isVolumesnapshotsEnabled(cc *config.ClusterConfig, _, value string) error {
 	isCsiDriverEnabled, _ := strconv.ParseBool(value)
 	// assets.Addons[].IsEnabled() returns the current status of the addon or default value.
 	// config.AddonList contains list of addons to be enabled.
@@ -74,6 +74,15 @@ func IsVolumesnapshotsEnabled(cc *config.ClusterConfig, _, value string) error {
 	return nil
 }
 
+func isKVMDriverForNVIDIA(cc *config.ClusterConfig, name, _ string) error {
+	if driver.IsKVM(cc.Driver) {
+		return nil
+	}
+	out.Ln("")
+	out.FailureT("The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/", out.V{"addon": name})
+	return fmt.Errorf("%s addon is only supported with the KVM driver", name)
+}
+
 // isAddonValid returns the addon, true if it is valid
 // otherwise returns nil, false
 func isAddonValid(name string) (*Addon, bool) {
diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go
index 328afe824..1a5034134 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.44-1720012048-19186"
+	Version = "v0.0.44-1720534588-19199"
 
 	// SHA of the kic base image
-	baseImageSHA = "0fc826bca29cbb5a8335aaf40b2c19a34f0a6b85133ca47842ce6e575d3bc2ef"
+	baseImageSHA = "b4b7a193d4d5ddc3a5becbbd3489eb6d587f98b5654dfee6a583e3346dfa913d"
 	// 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/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
index 9758c19a4..325ec0817 100644
--- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
+++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
@@ -64,6 +64,7 @@ import (
 	"k8s.io/minikube/pkg/minikube/style"
 	"k8s.io/minikube/pkg/minikube/sysinit"
 	"k8s.io/minikube/pkg/minikube/vmpath"
+	"k8s.io/minikube/pkg/network"
 	"k8s.io/minikube/pkg/util"
 	"k8s.io/minikube/pkg/util/retry"
 	"k8s.io/minikube/pkg/version"
@@ -440,9 +441,14 @@ func (k *Bootstrapper) StartCluster(cfg config.ClusterConfig) error {
 
 // tunnelToAPIServer creates ssh tunnel between apiserver:port inside control-plane node and host on port 8443.
 func (k *Bootstrapper) tunnelToAPIServer(cfg config.ClusterConfig) error {
-	if cfg.APIServerPort != 0 {
+	if cfg.APIServerPort == 0 {
 		return fmt.Errorf("apiserver port not set")
 	}
+	// An API server tunnel is only needed for QEMU w/ builtin network, for
+	// everything else return
+	if !driver.IsQEMU(cfg.Driver) || !network.IsBuiltinQEMU(cfg.Network) {
+		return nil
+	}
 
 	m, err := machine.NewAPIClient()
 	if err != nil {
diff --git a/pkg/minikube/download/iso.go b/pkg/minikube/download/iso.go
index 17f872c96..08bc591a3 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/19186"
+	isoBucket := "minikube-builds/iso/19199"
 
 	return []string{
 		fmt.Sprintf("https://storage.googleapis.com/%s/minikube-%s-%s.iso", isoBucket, v, runtime.GOARCH),
diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md
index ce5726123..dd137e92b 100644
--- a/site/content/en/docs/commands/start.md
+++ b/site/content/en/docs/commands/start.md
@@ -27,7 +27,7 @@ minikube start [flags]
       --apiserver-port int                The apiserver listening port (default 8443)
       --auto-pause-interval duration      Duration of inactivity before the minikube VM is paused (default 1m0s) (default 1m0s)
       --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.44-1720012048-19186@sha256:0fc826bca29cbb5a8335aaf40b2c19a34f0a6b85133ca47842ce6e575d3bc2ef")
+      --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.44-1720534588-19199@sha256:b4b7a193d4d5ddc3a5becbbd3489eb6d587f98b5654dfee6a583e3346dfa913d")
       --binary-mirror string              Location to fetch kubectl, kubelet, & kubeadm binaries from.
       --cache-images                      If true, cache docker images for the current bootstrapper and load them into the machine. Always false with --driver=none. (default true)
       --cert-expiration duration          Duration until minikube certificate expiration, defaults to three years (26280h). (default 26280h0m0s)
diff --git a/translations/de.json b/translations/de.json
index 91f37cd6f..590a0c0d5 100644
--- a/translations/de.json
+++ b/translations/de.json
@@ -806,6 +806,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "Die Gesamtzahl der zu startenden Nodes. Default: 1.",
 	"The value passed to --format is invalid": "Der mit --format angegebene Wert ist ungültig",
 	"The value passed to --format is invalid: {{.error}}": "Der mit --format angegebene Wert ist ungültig: {{.error}}",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"The {{.driver_name}} driver should not be used with root privileges.": "Der Treiber {{.driver_name}} sollte nicht mit Root-Rechten verwendet werden.",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "Es gibt mehrere Möglichkeiten das benötigte File-Sharing zu aktivieren:\n1. Aktiviere \"Use the WSL 2 based engine\" in Docker Desktop\noder\n2. Aktiviere File-Sharing in Docker Desktop für das %s%s Verzeichnis",
 	"There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "Es gibt eine neue Version für '{{.driver_executable}}'. Bitte erwägen Sie ein Upgrade. {{.documentation_url}}",
diff --git a/translations/es.json b/translations/es.json
index 21991bb7c..696836bde 100644
--- a/translations/es.json
+++ b/translations/es.json
@@ -784,6 +784,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "",
 	"The value passed to --format is invalid": "",
 	"The value passed to --format is invalid: {{.error}}": "",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"The {{.driver_name}} driver should not be used with root privileges.": "El controlador {{.driver_name}} no se debe utilizar con privilegios de raíz.",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "",
 	"There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "Hay una nueva versión de \"{{.driver_executable}}\". Te recomendamos que realices la actualización. {{.documentation_url}}",
diff --git a/translations/fr.json b/translations/fr.json
index fd46cb7e6..4081cdd63 100644
--- a/translations/fr.json
+++ b/translations/fr.json
@@ -792,6 +792,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "Le nombre total de nœuds à faire tourner. La valeur par défaut est 1.",
 	"The value passed to --format is invalid": "La valeur passée à --format n'est pas valide",
 	"The value passed to --format is invalid: {{.error}}": "La valeur passée à --format n'est pas valide : {{.error}}",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "Il existe plusieurs manières d'activer le partage de fichiers requis :\n1. Activez \"Utiliser le moteur basé sur WSL 2\" dans Docker Desktop\nou\n2. Activer le partage de fichiers dans Docker Desktop pour le répertoire %s%s",
 	"These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "Ces paramètres --extra-config ne sont pas valides : {{.invalid_extra_opts}}",
 	"These changes will take effect upon a minikube delete and then a minikube start": "Ces modifications prendront effet lors d'une suppression de minikube, puis d'un démarrage de minikube",
diff --git a/translations/ja.json b/translations/ja.json
index 7482523ea..e232c62a4 100644
--- a/translations/ja.json
+++ b/translations/ja.json
@@ -759,6 +759,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "",
 	"The value passed to --format is invalid": "--format の値が無効です",
 	"The value passed to --format is invalid: {{.error}}": "--format の値が無効です: {{.error}}",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "必要なファイル共有を有効にする方法が 2 つあります:\n1. Docker Desktop 中の「Use the WSL 2 based engine」を有効にする\nまたは\n2. %s%s ディレクトリー用の Docker Desktop でファイル共有を有効にする",
 	"These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "次の --extra-config パラメーターは無効です: {{.invalid_extra_opts}}",
 	"These changes will take effect upon a minikube delete and then a minikube start": "これらの変更は minikube delete の後に minikube start を実行すると反映されます",
diff --git a/translations/ko.json b/translations/ko.json
index c2e4da891..3f1fe961c 100644
--- a/translations/ko.json
+++ b/translations/ko.json
@@ -794,6 +794,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "",
 	"The value passed to --format is invalid": "",
 	"The value passed to --format is invalid: {{.error}}": "",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "",
 	"These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "",
 	"These changes will take effect upon a minikube delete and then a minikube start": "",
diff --git a/translations/pl.json b/translations/pl.json
index 65c4bba93..00c0743e6 100644
--- a/translations/pl.json
+++ b/translations/pl.json
@@ -796,6 +796,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "",
 	"The value passed to --format is invalid": "Wartość przekazana do --format jest nieprawidłowa",
 	"The value passed to --format is invalid: {{.error}}": "Wartość przekazana do --format jest nieprawidłowa: {{.error}}",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"The {{.driver_name}} driver should not be used with root privileges.": "{{.driver_name}} nie powinien być używany z przywilejami root'a.",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "",
 	"These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "",
diff --git a/translations/ru.json b/translations/ru.json
index 874d1fcaf..7f0e077dc 100644
--- a/translations/ru.json
+++ b/translations/ru.json
@@ -726,6 +726,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "",
 	"The value passed to --format is invalid": "",
 	"The value passed to --format is invalid: {{.error}}": "",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "",
 	"These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "",
 	"These changes will take effect upon a minikube delete and then a minikube start": "",
diff --git a/translations/strings.txt b/translations/strings.txt
index 6bb72fd16..44dbb681f 100644
--- a/translations/strings.txt
+++ b/translations/strings.txt
@@ -724,6 +724,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "",
 	"The value passed to --format is invalid": "",
 	"The value passed to --format is invalid: {{.error}}": "",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "",
 	"These --extra-config parameters are invalid: {{.invalid_extra_opts}}": "",
 	"These changes will take effect upon a minikube delete and then a minikube start": "",
diff --git a/translations/zh-CN.json b/translations/zh-CN.json
index 6b0d45f3d..e212c357d 100644
--- a/translations/zh-CN.json
+++ b/translations/zh-CN.json
@@ -905,6 +905,7 @@
 	"The total number of nodes to spin up. Defaults to 1.": "要启动的节点总数。默认值为 1。",
 	"The value passed to --format is invalid": "传递给 --format 的值无效。",
 	"The value passed to --format is invalid: {{.error}}": "传递给 --format 的值无效：{{.error}}。",
+	"The {{.addon}} addon is only supported with the KVM driver.\n\nFor GPU setup instructions see: https://minikube.sigs.k8s.io/docs/tutorials/nvidia/": "",
 	"The {{.driver_name}} driver should not be used with root privileges.": "不应以根权限使用 {{.driver_name}} 驱动程序。",
 	"There are a couple ways to enable the required file sharing:\n1. Enable \"Use the WSL 2 based engine\" in Docker Desktop\nor\n2. Enable file sharing in Docker Desktop for the %s%s directory": "",
 	"There's a new version for '{{.driver_executable}}'. Please consider upgrading. {{.documentation_url}}": "“{{.driver_executable}}”有一个新版本。请考虑升级。{{.documentation_url}}",


Test patch:
diff --git a/.github/workflows/update-gotestsum-version.yml b/.github/workflows/update-gotestsum-version.yml
index 6b295c3a1..2d302ba50 100644
--- a/.github/workflows/update-gotestsum-version.yml
+++ b/.github/workflows/update-gotestsum-version.yml
@@ -12,7 +12,7 @@ permissions:
 
 jobs:
   bump-gotestsum-version:
-    runs-on: ubuntu-20.04
+    runs-on: ubuntu-22.04
     steps:
       - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332
       - uses: actions/setup-go@cdcb36043654635271a94b9a6d1392de5bb323a7
diff --git a/hack/jenkins/linux_integration_tests_none.sh b/hack/jenkins/linux_integration_tests_none.sh
index 944fd29e3..90b92f414 100755
--- a/hack/jenkins/linux_integration_tests_none.sh
+++ b/hack/jenkins/linux_integration_tests_none.sh
@@ -70,12 +70,12 @@ if ! which socat &>/dev/null; then
 fi
 
 # cri-dockerd is required for Kubernetes v1.24+ with none driver
-CRI_DOCKERD_VERSION="0.3.12"
+CRI_DOCKERD_VERSION="0.3.14"
 if [[ $(cri-dockerd --version 2>&1) != *"$CRI_DOCKERD_VERSION"* ]]; then
   echo "WARNING: expected version of cri-dockerd is not installed. will try to install."
   sudo systemctl stop cri-docker.socket || true
   sudo systemctl stop cri-docker.service || true
-  CRI_DOCKERD_COMMIT="c2e3805c946c16ec7e3a6d35ec5d72d72dc0c742"
+  CRI_DOCKERD_COMMIT="683f70f69901e66d49dfac802841ff843171f131"
   CRI_DOCKERD_BASE_URL="https://storage.googleapis.com/kicbase-artifacts/cri-dockerd/${CRI_DOCKERD_COMMIT}"
   sudo curl -L "${CRI_DOCKERD_BASE_URL}/amd64/cri-dockerd" -o /usr/bin/cri-dockerd
   sudo curl -L "${CRI_DOCKERD_BASE_URL}/cri-docker.socket" -o /usr/lib/systemd/system/cri-docker.socket
diff --git a/hack/jenkins/test-flake-chart/report_flakes/main.go b/hack/jenkins/test-flake-chart/report_flakes/main.go
new file mode 100644
index 000000000..4e77d1bad
--- /dev/null
+++ b/hack/jenkins/test-flake-chart/report_flakes/main.go
@@ -0,0 +1,71 @@
+/*
+Copyright 2024 The Kubernetes Authors All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package main
+
+import (
+	"context"
+	"fmt"
+	"os"
+
+	"cloud.google.com/go/storage"
+)
+
+const (
+	maxItemEnv = 10
+)
+
+// This program requires three arguments
+// $1 is the Pr Number
+// $2 is the ROOT_JOB
+// $3 is the file containing a list of finished environments, one item per line
+func main() {
+	ctx := context.Background()
+	client, err := storage.NewClient(context.Background())
+	if err != nil {
+		fmt.Printf("failed to connect to gcp: %v\n", err)
+		os.Exit(1)
+	}
+	// parse the command line arguments
+	if len(os.Args) != 4 {
+		fmt.Println("Wrong number of arguments. Usage: go run . <PR number> <Root job id> <environment list file>")
+
+		os.Exit(1)
+	}
+	pr := os.Args[1]
+	rootJob := os.Args[2]
+	// read the environment names
+	envList, err := parseEnvironmentList(os.Args[3])
+	if err != nil {
+		fmt.Printf("failed to read %s, err: %v\n", os.Args[3], err)
+		os.Exit(1)
+	}
+	// fetch the test results
+	testSummaries, err := testSummariesFromGCP(ctx, pr, rootJob, envList, client)
+	if err != nil {
+		fmt.Printf("failed to load summaries: %v\n", err)
+		os.Exit(1)
+	}
+	// fetch the pre-calculated flake rates
+	flakeRates, err := flakeRate(ctx, client)
+	if err != nil {
+		fmt.Printf("failed to load flake rates: %v\n", err)
+		os.Exit(1)
+	}
+	// generate and send the message
+	msg := generateCommentMessage(testSummaries, flakeRates, pr, rootJob)
+	fmt.Println(msg)
+}
diff --git a/hack/jenkins/test-flake-chart/report_flakes/report_flake.go b/hack/jenkins/test-flake-chart/report_flakes/report_flake.go
new file mode 100644
index 000000000..5223dbacf
--- /dev/null
+++ b/hack/jenkins/test-flake-chart/report_flakes/report_flake.go
@@ -0,0 +1,261 @@
+/*
+Copyright 2024 The Kubernetes Authors All rights reserved.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package main
+
+import (
+	"context"
+	"encoding/csv"
+	"encoding/json"
+	"errors"
+	"fmt"
+	"io"
+	"os"
+	"sort"
+	"strconv"
+	"strings"
+
+	"cloud.google.com/go/storage"
+)
+
+const unknown float64 = -1.0
+
+type shortSummary struct {
+	NumberOfTests int                `json:"NumberOfTests"`
+	NumberOfFail  int                `json:"NumberOfFail"`
+	NumberOfPass  int                `json:"NumberOfPass"`
+	NumberOfSkip  int                `json:"NumberOfSkip"`
+	FailedTests   []string           `json:"FailedTests"`
+	PassedTests   []string           `json:"PassedTests"`
+	SkippedTests  []string           `json:"SkippedTests"`
+	Durations     map[string]float64 `json:"Durations"`
+	TotalDuration float64            `json:"TotalDuration"`
+	GopoghVersion string             `json:"GopoghVersion"`
+	GopoghBuild   string             `json:"GopoghBuild"`
+	Detail        struct {
+		Name     string `json:"Name"`
+		Details  string `json:"Details"`
+		PR       string `json:"PR"`
+		RepoName string `json:"RepoName"`
+	} `json:"Detail"`
+}
+
+// parseEnvironmentList reads the existing environments from the file
+func parseEnvironmentList(listFile string) ([]string, error) {
+	data, err := os.ReadFile(listFile)
+	if err != nil {
+		return nil, err
+	}
+	return strings.Split(strings.TrimSpace(string(data)), "\n"), nil
+}
+
+func testSummariesFromGCP(ctx context.Context, pr, rootJob string, envList []string, client *storage.Client) (map[string]*shortSummary, error) {
+	envToSummaries := map[string]*shortSummary{}
+	for _, env := range envList {
+		summary, err := testSummaryFromGCP(ctx, pr, rootJob, env, client)
+		if err != nil {
+			return nil, fmt.Errorf("failed to fetch %s test summary from gcp, err: %v", env, err)
+		}
+		if summary != nil {
+			// if the summary is nil(missing) we just skip it
+			envToSummaries[env] = summary
+		}
+	}
+	return envToSummaries, nil
+}
+
+// testSummaryFromGCP gets the summary of a test for the specified env.
+func testSummaryFromGCP(ctx context.Context, pr, rootJob, env string, client *storage.Client) (*shortSummary, error) {
+
+	btk := client.Bucket("minikube-builds")
+	obj := btk.Object(fmt.Sprintf("logs/%s/%s/%s_summary.json", pr, rootJob, env))
+
+	reader, err := obj.NewReader(ctx)
+	if errors.Is(err, storage.ErrObjectNotExist) {
+		// if this file does not exist, just skip it
+		return nil, nil
+	}
+	if err != nil {
+		return nil, err
+	}
+	// read the file
+	data, err := io.ReadAll(reader)
+	if err != nil {
+		return nil, err
+	}
+
+	var summary shortSummary
+	if err = json.Unmarshal(data, &summary); err != nil {
+		return nil, fmt.Errorf("failed to deserialize the file: %v", err)
+	}
+	return &summary, nil
+
+}
+
+// flakeRate downloads recent flake rates from GCS, and returns a map{env->map{testname->flake rate}}
+func flakeRate(ctx context.Context, client *storage.Client) (map[string]map[string]float64, error) {
+	btk := client.Bucket("minikube-flake-rate")
+	obj := btk.Object("flake_rates.csv")
+	reader, err := obj.NewReader(ctx)
+	if err != nil {
+		return nil, fmt.Errorf("failed to read the flake rate file: %v", err)
+	}
+	// parse the csv file to the map
+	records, err := csv.NewReader(reader).ReadAll()
+	if err != nil {
+		return nil, fmt.Errorf("failed to read and parse the flake rate file: %v", err)
+	}
+	result := map[string]map[string]float64{}
+	for i := 1; i < len(records); i++ {
+		// for each line in csv we extract env, test name and flake rate
+		if len(records[i]) < 3 {
+			// the csv must have at least 2 columns
+			continue
+		}
+		env := records[i][0]
+		test := records[i][1]
+		flakeRate, err := strconv.ParseFloat(records[i][2], 64)
+		if err != nil {
+			return nil, fmt.Errorf("failed to parse the flake rate file at line %d: %v", i+1, err)
+		}
+		if _, ok := result[env]; !ok {
+			result[env] = make(map[string]float64, 0)
+		}
+		result[env][test] = flakeRate
+	}
+	return result, nil
+}
+
+func generateCommentMessage(summaries map[string]*shortSummary, flakeRates map[string]map[string]float64, pr, rootJob string) string {
+	type failedTest struct {
+		flakeRate float64
+		env       string
+		testName  string
+	}
+	// for each environment, we sort failed tests according to the flake rate of that test on master branch
+	envFailedTestList := map[string][]failedTest{}
+	for env, summary := range summaries {
+		failedTestList := []failedTest{}
+		for _, test := range summary.FailedTests {
+			// if we cannot find the test, we assign the flake rate
+			// as -1, meaning N/A
+			flakerate := unknown
+			if v, ok := flakeRates[env][test]; ok {
+				flakerate = v
+			}
+			failedTestList = append(failedTestList,
+				failedTest{
+					flakeRate: flakerate,
+					env:       env,
+					testName:  test,
+				})
+		}
+
+		sort.Slice(failedTestList, func(i, j int) bool {
+			return failedTestList[i].flakeRate < failedTestList[j].flakeRate
+		})
+		envFailedTestList[env] = failedTestList
+	}
+	// we convert the result into a 2d string slice representing a markdown
+	// table, whose each line represents a line of the table
+	table := [][]string{
+		// title of the table
+		{"Environment", "Test Name", "Flake Rate"},
+	}
+	// if an env has too many failures we will just skip it and print a
+	// message in the end if the failed tests have high flake rates (over
+	// 50% for all), it will also be skipped in the table
+	foldedFailures := []string{}
+	for env, list := range envFailedTestList {
+		if len(list) > maxItemEnv {
+			foldedFailures = append(foldedFailures, env)
+			continue
+		}
+		for i, item := range list {
+			if item.flakeRate > 50 {
+				if i == 0 {
+					// if this is the first failed test that
+					// means each tests in this env has a
+					// flakerate>50% and all of them will
+					// not be shown in the table
+					foldedFailures = append(foldedFailures, env)
+				}
+				break
+			}
+			flakeRateString := fmt.Sprintf("%.2f%% %s", item.flakeRate, testFlakeChartMDLink(env, item.testName))
+			if item.flakeRate == unknown {
+				flakeRateString = "Unknown"
+			}
+			table = append(table, []string{
+				envChartMDLink(env, len(list)),
+				item.testName + gopoghMDLink(pr, rootJob, env, item.testName),
+				flakeRateString,
+			})
+		}
+	}
+
+	builder := strings.Builder{}
+	builder.WriteString(
+		fmt.Sprintf("Here are the number of top %d failed tests in each environments with lowest flake rate.\n\n", maxItemEnv))
+	builder.WriteString(generateMarkdownTable(table))
+	if len(foldedFailures) > 0 {
+
+		builder.WriteString("\n\n Besides the following environments also have failed tests:")
+		for _, env := range foldedFailures {
+			builder.WriteString(fmt.Sprintf("\n\n - %s: %d failed %s ", env, len(envFailedTestList[env]), gopoghMDLink(pr, rootJob, env, "")))
+		}
+	}
+	builder.WriteString("\n\nTo see the flake rates of all tests by environment, click [here](https://minikube.sigs.k8s.io/docs/contrib/test_flakes/).")
+	return builder.String()
+}
+func envChartMDLink(env string, failedTestNumber int) string {
+	return fmt.Sprintf("[%s (%d failed)](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=%s)", env, failedTestNumber, env)
+}
+
+func testFlakeChartMDLink(env string, testName string) string {
+	return fmt.Sprintf("[(chart)](https://gopogh-server-tts3vkcpgq-uc.a.run.app/?env=%s&test=%s)", env, testName)
+}
+
+func gopoghMDLink(pr, rootJob, env, testName string) string {
+	return fmt.Sprintf("[(gopogh)](https://storage.googleapis.com/minikube-builds/logs/%s/%s/%s.html#%s)", pr, rootJob, env, testName)
+}
+
+// generateMarkdownTable convert 2d string slice into markdown table. The first
+// string slice is the header of the table
+func generateMarkdownTable(table [][]string) string {
+	builder := strings.Builder{}
+	for i, group := range table {
+		builder.WriteString("|")
+		for j := 0; j < len(group); j++ {
+			builder.WriteString(group[j])
+			builder.WriteString("|")
+		}
+		builder.WriteString("\n")
+
+		if i != 0 {
+			continue
+		}
+		// generate the hyphens separator
+		builder.WriteString("|")
+		for j := 0; j < len(group); j++ {
+			builder.WriteString(" ---- |")
+		}
+		builder.WriteString("\n")
+	}
+	builder.WriteString("\n\n")
+	return builder.String()
+
+}
diff --git a/hack/jenkins/test-flake-chart/sync_tests.sh b/hack/jenkins/test-flake-chart/sync_tests.sh
index c09b51879..a2ba17945 100755
--- a/hack/jenkins/test-flake-chart/sync_tests.sh
+++ b/hack/jenkins/test-flake-chart/sync_tests.sh
@@ -85,7 +85,11 @@ if [[ "${MINIKUBE_LOCATION}" == "master" ]]; then
   done
   "${DIR}/process_last_90/process_last_90.sh"
 else
-  "${DIR}/report_flakes.sh" "${MINIKUBE_LOCATION}" "${ROOT_JOB_ID}" "${FINISHED_LIST}"
+  TMP_COMMENT=$(mktemp)
+  go run "${DIR}/report_flakes" "${MINIKUBE_LOCATION}" "${ROOT_JOB_ID}" "${FINISHED_LIST}"  > "$TMP_COMMENT"
+  # install gh if not present
+  "$DIR/../installers/check_install_gh.sh"
+  gh pr comment "https://github.com/kubernetes/minikube/pull/$MINIKUBE_LOCATION" --body "$(cat $TMP_COMMENT)"
 fi
 
 gsutil rm "${BUCKET_PATH}/finished_environments.txt"
diff --git a/pkg/addons/validations_test.go b/pkg/addons/validations_test.go
index aa4cb6403..85e97d7a5 100644
--- a/pkg/addons/validations_test.go
+++ b/pkg/addons/validations_test.go
@@ -16,7 +16,11 @@ limitations under the License.
 
 package addons
 
-import "testing"
+import (
+	"testing"
+
+	"k8s.io/minikube/pkg/minikube/config"
+)
 
 func TestIsAddonValid(t *testing.T) {
 	tests := []struct {
@@ -76,3 +80,25 @@ func TestContains(t *testing.T) {
 		})
 	}
 }
+
+func TestIsKVMDriverForNVIDIA(t *testing.T) {
+	tests := []struct {
+		cc        *config.ClusterConfig
+		wantError bool
+	}{
+		{
+			cc: &config.ClusterConfig{Driver: "kvm"},
+		},
+		{
+			cc:        &config.ClusterConfig{Driver: "docker"},
+			wantError: true,
+		},
+	}
+
+	for _, tc := range tests {
+		err := isKVMDriverForNVIDIA(tc.cc, "", "")
+		if gotError := (err != nil); gotError != tc.wantError {
+			t.Errorf("isKVMDriverForNVIDIA(%v) got error %t (%v), want error %t", tc.cc, gotError, err, tc.wantError)
+		}
+	}
+}
diff --git a/test/integration/testdata/ingress-dns-example-v1.yaml b/test/integration/testdata/ingress-dns-example-v1.yaml
index e67d8cec1..10b3d44d2 100644
--- a/test/integration/testdata/ingress-dns-example-v1.yaml
+++ b/test/integration/testdata/ingress-dns-example-v1.yaml
@@ -29,7 +29,7 @@ spec:
     spec:
       containers:
       - name: hello-world-app
-        image: gcr.io/google-samples/hello-app:1.0
+        image: docker.io/kicbase/echo-server:1.0
         ports:
         - containerPort: 8080
 ---
diff --git a/test/integration/testdata/ingress-dns-example-v1beta1.yaml b/test/integration/testdata/ingress-dns-example-v1beta1.yaml
index d2fa35d91..8409a8442 100644
--- a/test/integration/testdata/ingress-dns-example-v1beta1.yaml
+++ b/test/integration/testdata/ingress-dns-example-v1beta1.yaml
@@ -29,7 +29,7 @@ spec:
     spec:
       containers:
       - name: hello-world-app
-        image: gcr.io/google-samples/hello-app:1.0
+        image: docker.io/kicbase/echo-server:1.0
         ports:
         - containerPort: 8080
 ---