Repository: kubernetes/minikube
Pull request #13654 (2022-02-22 07:25:58)

[benchmark] add cpu utilization
<!-- 🎉 Thank you for contributing to minikube! 🎉 Here are some hints to get your PR merged faster:

1. Your PR title will be included in the release notes, choose it carefully
2. If the PR fixes an issue, add "fixes #<issue number>" to the description.
3. If the PR is a user interface change, please include a "before" and "after" example.
4. If the PR is a large design change, please include an enhancement proposal:
https://github.com/kubernetes/minikube/tree/master/enhancements
-->

Append cpu benchmark test result to the site page.

eg:
Before the change: 
https://minikube.sigs.k8s.io/docs/benchmarks/timetok8s/v1.25.1/

After the change:
append following markdown table and chart to the page:
![image](https://user-images.githubusercontent.com/11788053/157112602-e5cc62c1-4fa2-465c-aa7c-af3cb7a6f3f6.png)







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

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

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

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

<details>

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

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

This pull-request has been approved by: *<a href="https://github.com/kubernetes/minikube/pull/13654#" title="Author self-approved">chungjin</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **prezha** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @prezha` in a comment when ready.

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

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

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

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["prezha"]} -->
minikube-bot: Can one of the admins verify this patch?
chungjin: /assign @medyagh 
klaases: Hi @medyagh, are you the right person to verify this patch?
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/minikube/pull/13654#" title="Author self-approved">chungjin</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please ask for approval from **medyagh** after the PR has been reviewed.

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

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

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

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["medyagh"]} -->

Patch:
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 4ac5bc16b..61634d5a4 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -5,11 +5,3 @@ updates:
     directory: "/"
     schedule:
       interval: "weekly"
-    labels:
-      - "ok-to-test"
-  - package-ecosystem: "github-actions"
-    directory: "/"
-    schedule:
-        interval: "weekly"
-    labels:
-      - "ok-to-test"
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index a3fff9ac9..b2b4f3e57 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,15 +13,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   build_minikube:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -40,15 +37,15 @@ jobs:
           echo workspace $GITHUB_WORKSPACE
           echo "end of debug stuff"
           echo $(which jq)
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: minikube_binaries
           path: out
   lint:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -66,8 +63,8 @@ jobs:
   unit_test:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
index b50aeb107..7c20b89fe 100644
--- a/.github/workflows/docs.yml
+++ b/.github/workflows/docs.yml
@@ -7,15 +7,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   generate-docs:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -29,7 +26,7 @@ jobs:
           echo "::set-output name=changes::$c"
       - name: Create PR
         if: ${{ steps.gendocs.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+        uses: peter-evans/create-pull-request@v3
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: Update auto-generated docs and translations
diff --git a/.github/workflows/functional_verified.yml b/.github/workflows/functional_verified.yml
index e1b38c9aa..18c086fb4 100644
--- a/.github/workflows/functional_verified.yml
+++ b/.github/workflows/functional_verified.yml
@@ -23,9 +23,6 @@ env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
 
-permissions:
-  contents: read
-
 jobs:
   # Runs before all other jobs
   # builds the minikube binaries
@@ -33,8 +30,8 @@ jobs:
     if: contains(github.event.pull_request.labels.*.name, 'ok-to-test')
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -46,13 +43,11 @@ jobs:
           sudo apt-get install -y libvirt-dev
           MINIKUBE_BUILD_IN_DOCKER=y make cross e2e-cross debs
           cp -r test/integration/testdata ./out
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: minikube_binaries
           path: out
   functional_docker_ubuntu_arm64:
-    permissions:
-      contents: none
     needs: [ build_minikube ]
     runs-on: [ self-hosted, arm64 ]
     env:
@@ -115,13 +110,13 @@ jobs:
           hostname || true
           echo "--------------------------"
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
 
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
 
@@ -167,7 +162,7 @@ jobs:
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
 
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_docker_ubuntu_arm64
           path: minikube_binaries/report
@@ -195,8 +190,6 @@ jobs:
   # After all integration tests finished
   # collect all the reports and upload them
   upload_all_reports:
-    permissions:
-      contents: none
     needs:
       [
         functional_docker_ubuntu_arm64,
@@ -204,14 +197,14 @@ jobs:
     runs-on: ubuntu-20.04
     steps:
       - name: download all extra reports
-        uses: actions/download-artifact@9fde3de0b74bd6bc202952485c264b551a4f9405 # v2-preview
+        uses: actions/download-artifact@v2-preview
       - name: upload all extra reports
         shell: bash {0}
         continue-on-error: true
         run: |
           mkdir -p all_reports
           cp -r ./functional_docker_ubuntu_arm64 ./all_reports/
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: all_reports
           path: all_reports
diff --git a/.github/workflows/leaderboard.yml b/.github/workflows/leaderboard.yml
index 01da549d2..83649b69a 100644
--- a/.github/workflows/leaderboard.yml
+++ b/.github/workflows/leaderboard.yml
@@ -8,15 +8,12 @@ on:
     types: [published]
 env:
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   update-leaderboard:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -32,7 +29,7 @@ jobs:
           GITHUB_TOKEN: ${{ secrets.MINIKUBE_BOT_PAT }}
       - name: Create PR
         if: ${{ steps.leaderboard.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+        uses: peter-evans/create-pull-request@v3
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: Update leaderboard
diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml
index 46f90e14e..81c61a5ac 100644
--- a/.github/workflows/master.yml
+++ b/.github/workflows/master.yml
@@ -15,17 +15,14 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   # Runs before all other jobs
   # builds the minikube binaries
   build_minikube:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -44,15 +41,15 @@ jobs:
           echo workspace $GITHUB_WORKSPACE
           echo "end of debug stuff"
           echo $(which jq)
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: minikube_binaries
           path: out
   lint:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -70,8 +67,8 @@ jobs:
   unit_test:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -89,8 +86,6 @@ jobs:
   # Run the following integration tests after the build_minikube
   # They will run in parallel and use the binaries in previous step
   functional_docker_ubuntu:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -120,7 +115,7 @@ jobs:
           docker ps || true
           echo "--------------------------"
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -131,7 +126,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -169,7 +164,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_docker_ubuntu
           path: minikube_binaries/report
@@ -190,8 +185,6 @@ 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_containerd_ubuntu:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -221,7 +214,7 @@ jobs:
           docker ps || true
           echo "--------------------------"
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -232,7 +225,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -270,7 +263,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_docker_containerd_ubuntu
           path: minikube_binaries/report
@@ -292,8 +285,6 @@ jobs:
           if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
 
   functional_podman_ubuntu:
-    permissions:
-      contents: none
     needs: [ build_minikube ]
     env:
       TIME_ELAPSED: time
@@ -326,7 +317,7 @@ jobs:
         podman ps || true
         echo "--------------------------"
     # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-    - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+    - uses: actions/setup-go@v2
       with:
         go-version: ${{env.GO_VERSION}}
         stable: true
@@ -336,7 +327,7 @@ jobs:
         curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
         sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
     - name: Download Binaries
-      uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+      uses: actions/download-artifact@v1
       with:
         name: minikube_binaries
     - name: Run Integration Test
@@ -374,7 +365,7 @@ jobs:
         echo 'STAT<<EOF' >> $GITHUB_ENV
         echo "${STAT}" >> $GITHUB_ENV
         echo 'EOF' >> $GITHUB_ENV
-    - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+    - uses: actions/upload-artifact@v2
       with:
         name: functional_podman_ubuntu
         path: minikube_binaries/report
@@ -396,8 +387,6 @@ jobs:
         if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
 
   functional_virtualbox_macos:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -413,7 +402,7 @@ jobs:
           sudo install kubectl /usr/local/bin/kubectl
           kubectl version --client=true
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -439,7 +428,7 @@ jobs:
           sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
           sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -475,7 +464,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_virtualbox_macos
           path: minikube_binaries/report
@@ -496,8 +485,6 @@ jobs:
           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_ubuntu18_04:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -524,7 +511,7 @@ jobs:
           curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
           sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -535,7 +522,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -571,7 +558,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: none_ubuntu18_04
           path: minikube_binaries/report
@@ -594,8 +581,6 @@ jobs:
   # After all integration tests finished
   # collect all the reports and upload them
   upload_all_reports:
-    permissions:
-      contents: none
     if: always()
     needs:
       [
@@ -608,7 +593,7 @@ jobs:
     runs-on: ubuntu-20.04
     steps:
       - name: download all reports
-        uses: actions/download-artifact@9fde3de0b74bd6bc202952485c264b551a4f9405 # v2-preview
+        uses: actions/download-artifact@v2-preview
       - name: upload all reports
         shell: bash {0}
         continue-on-error: true
@@ -621,7 +606,7 @@ jobs:
           cp -r ./functional_virtualbox_macos ./all_reports/
           cp -r ./functional_baremetal_ubuntu18_04 ./all_reports/
 
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: all_reports
           path: all_reports
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index 2354cc1fc..007197722 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -13,17 +13,14 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   # Runs before all other jobs
   # builds the minikube binaries
   build_minikube:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -42,15 +39,15 @@ jobs:
           echo workspace $GITHUB_WORKSPACE
           echo "end of debug stuff"
           echo $(which jq)
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: minikube_binaries
           path: out
   lint:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -68,8 +65,8 @@ jobs:
   unit_test:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -87,8 +84,6 @@ jobs:
   # Run the following integration tests after the build_minikube
   # They will run in parallel and use the binaries in previous step
   functional_docker_ubuntu:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -118,7 +113,7 @@ jobs:
           docker ps || true
           echo "--------------------------"
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -128,7 +123,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -167,7 +162,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_docker_ubuntu
           path: minikube_binaries/report
@@ -188,8 +183,6 @@ 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_containerd_ubuntu:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -219,7 +212,7 @@ jobs:
           docker ps || true
           echo "--------------------------"
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -230,7 +223,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -269,7 +262,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_docker_containerd_ubuntu
           path: minikube_binaries/report
@@ -291,8 +284,6 @@ jobs:
           if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
 
   functional_podman_ubuntu:
-    permissions:
-      contents: none
     needs: [ build_minikube ]
     env:
       TIME_ELAPSED: time
@@ -325,7 +316,7 @@ jobs:
           podman ps || true
           echo "--------------------------"
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -335,7 +326,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -374,7 +365,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_podman_ubuntu
           path: minikube_binaries/report
@@ -396,8 +387,6 @@ jobs:
           if [ "$numPass" -eq 0 ];then echo "*** Passed! ***";exit 0;fi
 
   functional_virtualbox_macos:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -413,7 +402,7 @@ jobs:
           sudo install kubectl /usr/local/bin/kubectl
           kubectl version --client=true
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -439,7 +428,7 @@ jobs:
           sudo /usr/libexec/ApplicationFirewall/socketfilterfw --setglobalstate off
           sudo /usr/libexec/ApplicationFirewall/socketfilterfw -k
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -476,7 +465,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: functional_virtualbox_macos
           path: minikube_binaries/report
@@ -497,8 +486,6 @@ jobs:
           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_ubuntu18_04:
-    permissions:
-      contents: none
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -525,7 +512,7 @@ jobs:
           curl -L https://github.com/kubernetes-sigs/cri-tools/releases/download/$VERSION/crictl-${VERSION}-linux-amd64.tar.gz --output crictl-${VERSION}-linux-amd64.tar.gz
           sudo tar zxvf crictl-$VERSION-linux-amd64.tar.gz -C /usr/local/bin
       # go 1.14.6+ is needed because of this bug https://github.com/golang/go/issues/39308
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -536,7 +523,7 @@ jobs:
           curl -LO https://github.com/medyagh/gopogh/releases/download/v0.9.0/gopogh-linux-amd64
           sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
       - name: Download Binaries
-        uses: actions/download-artifact@fdafc3f9f2e2a522dc1d230e6a03de57a1e71c95 # v1
+        uses: actions/download-artifact@v1
         with:
           name: minikube_binaries
       - name: Run Integration Test
@@ -573,7 +560,7 @@ jobs:
           echo 'STAT<<EOF' >> $GITHUB_ENV
           echo "${STAT}" >> $GITHUB_ENV
           echo 'EOF' >> $GITHUB_ENV
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: none_ubuntu18_04
           path: minikube_binaries/report
@@ -596,8 +583,6 @@ jobs:
   # After all integration tests finished
   # collect all the reports and upload them
   upload_all_reports:
-    permissions:
-      contents: none
     if: always()
     needs:
       [
@@ -610,7 +595,7 @@ jobs:
     runs-on: ubuntu-20.04
     steps:
       - name: download all reports
-        uses: actions/download-artifact@9fde3de0b74bd6bc202952485c264b551a4f9405 # v2-preview
+        uses: actions/download-artifact@v2-preview
       - name: upload all reports
         shell: bash {0}
         continue-on-error: true
@@ -623,7 +608,7 @@ jobs:
           cp -r ./functional_virtualbox_macos ./all_reports/
           cp -r ./functional_baremetal_ubuntu18_04 ./all_reports/
 
-      - uses: actions/upload-artifact@6673cd052c4cd6fcf4b4e6e60ea986c889389535 # v2
+      - uses: actions/upload-artifact@v2
         with:
           name: all_reports
           path: all_reports
diff --git a/.github/workflows/sync-minikube.yml b/.github/workflows/sync-minikube.yml
index cd5ccd6da..edfc87df8 100644
--- a/.github/workflows/sync-minikube.yml
+++ b/.github/workflows/sync-minikube.yml
@@ -6,9 +6,6 @@ on:
     # every day at 7am & 7pm pacific
     - cron: "0 2,14 * * *"
 
-permissions:
-  contents: read
-
 jobs:
   sync-images:
     runs-on: ubuntu-latest
@@ -16,13 +13,13 @@ jobs:
       run:
         working-directory: ./image-syncer
     steps:
-    - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
+    - uses: actions/checkout@v2
       with:
         repository: denverdino/image-syncer
         path: ./image-syncer
 
     - name: Set up Go
-      uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      uses: actions/setup-go@v2
       with:
         go-version: 1.17
 
diff --git a/.github/workflows/time-to-k8s-public-chart.yml b/.github/workflows/time-to-k8s-public-chart.yml
index 52f431f20..60ce9cd5b 100644
--- a/.github/workflows/time-to-k8s-public-chart.yml
+++ b/.github/workflows/time-to-k8s-public-chart.yml
@@ -7,9 +7,6 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   time-to-k8s-public-chart-docker:
     if: github.repository == 'kubernetes/minikube'
@@ -19,8 +16,8 @@ jobs:
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
       AWS_DEFAULT_REGION: 'us-west-1'
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -38,14 +35,14 @@ jobs:
       AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
       AWS_DEFAULT_REGION: 'us-west-1'
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
+      - uses: actions/checkout@v2
       - name: Install kubectl
         shell: bash
         run: |
           curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl
           sudo install kubectl /usr/local/bin/kubectl
           kubectl version --client=true
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
diff --git a/.github/workflows/time-to-k8s.yml b/.github/workflows/time-to-k8s.yml
index 0fef28218..7e44463ce 100644
--- a/.github/workflows/time-to-k8s.yml
+++ b/.github/workflows/time-to-k8s.yml
@@ -6,17 +6,14 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   benchmark:
     runs-on: ubuntu-20.04
     steps:
-    - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
+    - uses: actions/checkout@v2
     - name: Checkout submodules
       run: git submodule update --init
-    - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+    - uses: actions/setup-go@v2
       with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -26,7 +23,7 @@ jobs:
           ./hack/benchmark/time-to-k8s/time-to-k8s.sh
           echo "::set-output name=version::$(minikube version --short)"
     - name: Create PR
-      uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+      uses: peter-evans/create-pull-request@v3
       with:
         token: ${{ secrets.MINIKUBE_BOT_PAT }}
         commit-message: add time-to-k8s benchmark for ${{ steps.timeToK8sBenchmark.outputs.version }}
diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml
index b3121fe67..f1d684457 100644
--- a/.github/workflows/translations.yml
+++ b/.github/workflows/translations.yml
@@ -7,15 +7,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   unit_test:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
diff --git a/.github/workflows/twitter-bot.yml b/.github/workflows/twitter-bot.yml
index 9aa25dcdb..6130796ac 100644
--- a/.github/workflows/twitter-bot.yml
+++ b/.github/workflows/twitter-bot.yml
@@ -10,7 +10,7 @@ jobs:
   twitter-release:
     runs-on: ubuntu-20.04
     steps:
-      - uses: ethomson/send-tweet-action@288f9339e0412e3038dce350e0da5ecdf12133a6 # v1
+      - uses: ethomson/send-tweet-action@v1
         with:
           status: "minikube ${GITHUB_REF_NAME} was just released! Check it out: https://github.com/kubernetes/minikube/blob/master/CHANGELOG.md"
           consumer-key: ${{ secrets.TWITTER_API_KEY }}
diff --git a/.github/workflows/update-golang-version.yml b/.github/workflows/update-golang-version.yml
index 3672cbfde..e2f179456 100644
--- a/.github/workflows/update-golang-version.yml
+++ b/.github/workflows/update-golang-version.yml
@@ -7,15 +7,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   bump-golang-version:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -26,7 +23,7 @@ jobs:
           echo "::set-output name=changes::$(git status --porcelain)"
       - name: Create PR
         if: ${{ steps.bumpGolang.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+        uses: peter-evans/create-pull-request@v3
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: bump golang versions
diff --git a/.github/workflows/update-golint-version.yml b/.github/workflows/update-golint-version.yml
index ee6b5618a..6a319cf2d 100644
--- a/.github/workflows/update-golint-version.yml
+++ b/.github/workflows/update-golint-version.yml
@@ -7,15 +7,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   bump-golint-version:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -26,7 +23,7 @@ jobs:
           echo "::set-output name=changes::$(git status --porcelain)"
       - name: Create PR
         if: ${{ steps.bumpGolint.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+        uses: peter-evans/create-pull-request@v3
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: bump golint versions
diff --git a/.github/workflows/update-k8s-versions.yml b/.github/workflows/update-k8s-versions.yml
index b83bb0409..6aa16f41a 100644
--- a/.github/workflows/update-k8s-versions.yml
+++ b/.github/workflows/update-k8s-versions.yml
@@ -7,15 +7,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   bump-k8s-versions:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -31,7 +28,7 @@ jobs:
           echo "::set-output name=changes::$c"
       - name: Create PR
         if: ${{ steps.bumpk8s.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+        uses: peter-evans/create-pull-request@v3
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: bump default/newest kubernetes versions
diff --git a/.github/workflows/update-kubadm-constants.yml b/.github/workflows/update-kubadm-constants.yml
index 60316e6b1..85b6a40da 100644
--- a/.github/workflows/update-kubadm-constants.yml
+++ b/.github/workflows/update-kubadm-constants.yml
@@ -7,15 +7,12 @@ on:
 env:
   GOPROXY: https://proxy.golang.org
   GO_VERSION: '1.17.7'
-permissions:
-  contents: read
-
 jobs:
   bump-k8s-versions:
     runs-on: ubuntu-20.04
     steps:
-      - uses: actions/checkout@629c2de402a417ea7690ca6ce3f33229e27606a5 # v2
-      - uses: actions/setup-go@f6164bd8c8acb4a71fb2791a8b6c4024ff038dab # v2
+      - uses: actions/checkout@v2
+      - uses: actions/setup-go@v2
         with:
           go-version: ${{env.GO_VERSION}}
           stable: true
@@ -29,7 +26,7 @@ jobs:
           echo "::set-output name=changes::$c"
       - name: Create PR
         if: ${{ steps.bumpKubAdmConsts.outputs.changes != '' }}
-        uses: peter-evans/create-pull-request@d6d5519d05f5814158ef015b8448f2f74648c421 # v3
+        uses: peter-evans/create-pull-request@v3
         with:
           token: ${{ secrets.MINIKUBE_BOT_PAT }}
           commit-message: update image constants for kubeadm images
diff --git a/Makefile b/Makefile
index c3a190bd5..c4c44e1be 100644
--- a/Makefile
+++ b/Makefile
@@ -76,7 +76,7 @@ MINIKUBE_RELEASES_URL=https://github.com/kubernetes/minikube/releases/download
 KERNEL_VERSION ?= 4.19.202
 # latest from https://github.com/golangci/golangci-lint/releases 
 # update this only by running `make update-golint-version`
-GOLINT_VERSION ?= v1.45.0
+GOLINT_VERSION ?= v1.44.2
 # Limit number of default jobs, to avoid the CI builds running out of memory
 GOLINT_JOBS ?= 4
 # see https://github.com/golangci/golangci-lint#memory-usage-of-golangci-lint
diff --git a/cmd/minikube/cmd/service.go b/cmd/minikube/cmd/service.go
index 2f15ca38a..cb0f5599b 100644
--- a/cmd/minikube/cmd/service.go
+++ b/cmd/minikube/cmd/service.go
@@ -17,7 +17,6 @@ limitations under the License.
 package cmd
 
 import (
-	"bytes"
 	"errors"
 	"fmt"
 	"net/url"
@@ -103,14 +102,10 @@ var serviceCmd = &cobra.Command{
 			services = newServices
 		}
 
-		if services == nil || len(services) == 0 {
-			exit.Message(reason.SvcNotFound, `Service '{{.service}}' was not found in '{{.namespace}}' namespace.
-You may select another namespace by using 'minikube service {{.service}} -n <namespace>'. Or list out all the services using 'minikube service list'`, out.V{"service": args[0], "namespace": namespace})
-		}
-
 		var data [][]string
+		var openUrls []string
 		for _, svc := range services {
-			openUrls, err := service.WaitForService(co.API, co.Config.Name, namespace, svc.Name, serviceURLTemplate, serviceURLMode, https, wait, interval)
+			openUrls, err := service.WaitForService(co.API, co.Config.Name, namespace, svc.Name, serviceURLTemplate, true, https, wait, interval)
 
 			if err != nil {
 				var s *service.SVCNotFoundError
@@ -133,21 +128,35 @@ You may select another namespace by using 'minikube service {{.service}} -n <nam
 				}
 
 				data = append(data, []string{svc.Namespace, svc.Name, servicePortNames, serviceURLs})
+			}
+		}
 
-				if serviceURLMode && !driver.NeedsPortForward(co.Config.Driver) {
-					out.String(fmt.Sprintf("%s\n", serviceURLs))
-				}
+		if (!serviceURLMode && serviceURLFormat != defaultServiceFormatTemplate && !all) || all {
+			service.PrintServiceList(os.Stdout, data)
+		} else if serviceURLMode && !all {
+			for _, u := range data {
+				out.String(fmt.Sprintf("%s\n", u[3]))
 			}
 		}
 
-		if driver.NeedsPortForward(co.Config.Driver) && services != nil {
-			startKicServiceTunnel(services, cname, co.Config.Driver)
-		} else if !serviceURLMode {
-			openURLs(data)
+		if driver.NeedsPortForward(co.Config.Driver) {
+			startKicServiceTunnel(args, services, cname, co.Config.Driver)
+			return
+		}
+
+		if !serviceURLMode && !all && len(args) == 1 {
+			openURLs(args[0], openUrls)
 		}
 	},
 }
 
+func shouldOpen(args []string) bool {
+	if !serviceURLMode && !all && len(args) == 1 {
+		return true
+	}
+	return false
+}
+
 func init() {
 	serviceCmd.Flags().StringVarP(&namespace, "namespace", "n", "default", "The service namespace")
 	serviceCmd.Flags().BoolVar(&serviceURLMode, "url", false, "Display the Kubernetes service URL in the CLI instead of opening it in the default browser")
@@ -159,7 +168,7 @@ func init() {
 	serviceCmd.PersistentFlags().StringVar(&serviceURLFormat, "format", defaultServiceFormatTemplate, "Format to output service URL in. This format will be applied to each url individually and they will be printed one at a time.")
 }
 
-func startKicServiceTunnel(services service.URLs, configName, driverName string) {
+func startKicServiceTunnel(args []string, services service.URLs, configName, driverName string) {
 	ctrlC := make(chan os.Signal, 1)
 	signal.Notify(ctrlC, os.Interrupt)
 
@@ -177,36 +186,23 @@ func startKicServiceTunnel(services service.URLs, configName, driverName string)
 		sshPort := strconv.Itoa(port)
 		sshKey := filepath.Join(localpath.MiniPath(), "machines", configName, "id_rsa")
 
-		serviceTunnel := kic.NewServiceTunnel(sshPort, sshKey, clientset.CoreV1(), serviceURLMode)
+		serviceTunnel := kic.NewServiceTunnel(sshPort, sshKey, clientset.CoreV1())
 		urls, err := serviceTunnel.Start(svc.Name, namespace)
-
 		if err != nil {
 			exit.Error(reason.SvcTunnelStart, "error starting tunnel", err)
 		}
-		// mutate response urls to HTTPS if needed
-		urls, err = mutateURLs(svc.Name, urls)
-
-		if err != nil {
-			exit.Error(reason.SvcTunnelStart, "error creatings urls", err)
-		}
-
 		defer serviceTunnel.Stop()
-		svc.URLs = urls
 		data = append(data, []string{namespace, svc.Name, "", strings.Join(urls, "\n")})
 	}
 
 	time.Sleep(1 * time.Second)
 
-	if !serviceURLMode {
+	if !serviceURLMode && serviceURLFormat != defaultServiceFormatTemplate && !all {
 		service.PrintServiceList(os.Stdout, data)
-	} else {
-		for _, row := range data {
-			out.String(fmt.Sprintf("%s\n", row[3]))
-		}
 	}
 
-	if !serviceURLMode {
-		openURLs(data)
+	if shouldOpen(args) {
+		openURLs(services[0].Name, services[0].URLs)
 	}
 
 	out.WarningT("Because you are using a Docker driver on {{.operating_system}}, the terminal needs to be open to run it.", out.V{"operating_system": runtime.GOOS})
@@ -214,44 +210,11 @@ func startKicServiceTunnel(services service.URLs, configName, driverName string)
 	<-ctrlC
 }
 
-func mutateURLs(serviceName string, urls []string) ([]string, error) {
-	formattedUrls := make([]string, 0)
-	for _, rawURL := range urls {
-		var doc bytes.Buffer
-		parsedURL, err := url.Parse(rawURL)
-		if err != nil {
-			exit.Error(reason.SvcTunnelStart, "No valid URL found for tunnel.", err)
-		}
-		port, err := strconv.Atoi(parsedURL.Port())
-		if err != nil {
-			exit.Error(reason.SvcTunnelStart, "No valid port found for tunnel.", err)
-		}
-		err = serviceURLTemplate.Execute(&doc, struct {
-			IP   string
-			Port int32
-			Name string
-		}{
-			parsedURL.Hostname(),
-			int32(port),
-			serviceName,
-		})
-
-		if err != nil {
-			return nil, err
-		}
-
-		httpsURL, _ := service.OptionallyHTTPSFormattedURLString(doc.String(), https)
-		formattedUrls = append(formattedUrls, httpsURL)
-	}
-
-	return formattedUrls, nil
-}
-
-func openURLs(urls [][]string) {
+func openURLs(svc string, urls []string) {
 	for _, u := range urls {
-		_, err := url.Parse(u[3])
+		_, err := url.Parse(u)
 		if err != nil {
-			klog.Warningf("failed to parse url %q: %v (will not open)", u[3], err)
+			klog.Warningf("failed to parse url %q: %v (will not open)", u, err)
 			out.String(fmt.Sprintf("%s\n", u))
 			continue
 		}
@@ -261,8 +224,8 @@ func openURLs(urls [][]string) {
 			continue
 		}
 
-		out.Styled(style.Celebrate, "Opening service {{.namespace_name}}/{{.service_name}} in default browser...", out.V{"namespace_name": namespace, "service_name": u[1]})
-		if err := browser.OpenURL(u[3]); err != nil {
+		out.Styled(style.Celebrate, "Opening service {{.namespace_name}}/{{.service_name}} in default browser...", out.V{"namespace_name": namespace, "service_name": svc})
+		if err := browser.OpenURL(u); err != nil {
 			exit.Error(reason.HostBrowser, fmt.Sprintf("open url failed: %s", u), err)
 		}
 	}
diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go
index 228d6d449..ee8483447 100644
--- a/cmd/minikube/cmd/start.go
+++ b/cmd/minikube/cmd/start.go
@@ -43,8 +43,6 @@ import (
 	gopshost "github.com/shirou/gopsutil/v3/host"
 	"github.com/spf13/cobra"
 	"github.com/spf13/viper"
-	"golang.org/x/text/cases"
-	"golang.org/x/text/language"
 
 	"k8s.io/klog/v2"
 	cmdcfg "k8s.io/minikube/cmd/minikube/cmd/config"
@@ -110,7 +108,7 @@ func platform() string {
 	// Show the distro version if possible
 	hi, err := gopshost.Info()
 	if err == nil {
-		s.WriteString(fmt.Sprintf("%s %s", cases.Title(language.Und).String(hi.Platform), hi.PlatformVersion))
+		s.WriteString(fmt.Sprintf("%s %s", strings.Title(hi.Platform), hi.PlatformVersion))
 		klog.Infof("hostinfo: %+v", hi)
 	} else {
 		klog.Warningf("gopshost.Info returned error: %v", err)
diff --git a/cmd/minikube/cmd/start_flags.go b/cmd/minikube/cmd/start_flags.go
index fa25e9cd5..3d8a69ce6 100644
--- a/cmd/minikube/cmd/start_flags.go
+++ b/cmd/minikube/cmd/start_flags.go
@@ -134,7 +134,6 @@ const (
 	certExpiration          = "cert-expiration"
 	binaryMirror            = "binary-mirror"
 	disableOptimizations    = "disable-optimizations"
-	disableMetrics          = "disable-metrics"
 )
 
 var (
@@ -193,8 +192,7 @@ func initMinikubeFlags() {
 	startCmd.Flags().Int(extraDisks, 0, "Number of extra disks created and attached to the minikube VM (currently only implemented for hyperkit and kvm2 drivers)")
 	startCmd.Flags().Duration(certExpiration, constants.DefaultCertExpiration, "Duration until minikube certificate expiration, defaults to three years (26280h).")
 	startCmd.Flags().String(binaryMirror, "", "Location to fetch kubectl, kubelet, & kubeadm binaries from.")
-	startCmd.Flags().Bool(disableOptimizations, false, "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.")
-	startCmd.Flags().Bool(disableMetrics, false, "If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.")
+	startCmd.Flags().Bool(disableOptimizations, false, "If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.")
 }
 
 // initKubernetesFlags inits the commandline flags for Kubernetes related options
@@ -388,7 +386,7 @@ func getExtraOptions() config.ExtraOptionSlice {
 	if detect.IsCloudShell() {
 		options = append(options, "kubelet.cgroups-per-qos=false", "kubelet.enforce-node-allocatable=\"\"")
 	}
-	if viper.GetBool(disableMetrics) {
+	if !viper.GetBool(disableOptimizations) {
 		options = append(options, "kubelet.housekeeping-interval=5m")
 	}
 	for _, eo := range options {
@@ -519,7 +517,6 @@ func generateNewConfigFromFlags(cmd *cobra.Command, k8sVersion string, rtime str
 		MountUID:                viper.GetString(mountUID),
 		BinaryMirror:            viper.GetString(binaryMirror),
 		DisableOptimizations:    viper.GetBool(disableOptimizations),
-		DisableMetrics:          viper.GetBool(disableMetrics),
 		KubernetesConfig: config.KubernetesConfig{
 			KubernetesVersion:      k8sVersion,
 			ClusterName:            ClusterFlagValue(),
diff --git a/deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl b/deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl
index 31b5b8fea..324294329 100644
--- a/deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl
+++ b/deploy/addons/metrics-server/metrics-apiservice.yaml.tmpl
@@ -5,13 +5,12 @@ metadata:
   labels:
     kubernetes.io/minikube-addons: metrics-server
     addonmanager.kubernetes.io/mode: Reconcile
-    k8s-app: metrics-server
 spec:
-  group: metrics.k8s.io
-  groupPriorityMinimum: 100
-  insecureSkipTLSVerify: true
   service:
     name: metrics-server
     namespace: kube-system
+  group: metrics.k8s.io
   version: v1beta1
+  insecureSkipTLSVerify: true
+  groupPriorityMinimum: 100
   versionPriority: 100
diff --git a/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl b/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl
index e8ed7029e..f7b7cd3f0 100644
--- a/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl
+++ b/deploy/addons/metrics-server/metrics-server-deployment.yaml.tmpl
@@ -40,7 +40,7 @@ spec:
         resources:
           requests:
             cpu: 100m
-            memory: 200Mi
+            memory: 300Mi
         ports:
         - name: https
           containerPort: 4443
diff --git a/deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl b/deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl
index 896684920..eb8ad7669 100644
--- a/deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl
+++ b/deploy/addons/metrics-server/metrics-server-rbac.yaml.tmpl
@@ -1,102 +1,87 @@
-apiVersion: v1
-kind: ServiceAccount
-metadata:
-  labels:
-    k8s-app: metrics-server
-    addonmanager.kubernetes.io/mode: Reconcile
-  name: metrics-server
-  namespace: kube-system
----
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   name: system:aggregated-metrics-reader
   labels:
-    k8s-app: metrics-server
-    rbac.authorization.k8s.io/aggregate-to-admin: "true"
-    rbac.authorization.k8s.io/aggregate-to-edit: "true"
     rbac.authorization.k8s.io/aggregate-to-view: "true"
+    rbac.authorization.k8s.io/aggregate-to-edit: "true"
+    rbac.authorization.k8s.io/aggregate-to-admin: "true"
     addonmanager.kubernetes.io/mode: Reconcile
 rules:
-- apiGroups:
-  - metrics.k8s.io
-  resources:
-  - pods
-  - nodes
-  verbs:
-  - get
-  - list
-  - watch
+- apiGroups: ["metrics.k8s.io"]
+  resources: ["pods", "nodes"]
+  verbs: ["get", "list", "watch"]
 ---
-apiVersion: rbac.authorization.k8s.io/v1
-kind: RoleBinding
+apiVersion: v1
+kind: ServiceAccount
 metadata:
+  name: metrics-server
+  namespace: kube-system
   labels:
-    k8s-app: metrics-server
     addonmanager.kubernetes.io/mode: Reconcile
+---
+apiVersion: rbac.authorization.k8s.io/v1
+kind: RoleBinding
+metadata:
   name: metrics-server-auth-reader
   namespace: kube-system
+  labels:
+    addonmanager.kubernetes.io/mode: Reconcile
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: Role
   name: extension-apiserver-authentication-reader
 subjects:
-- kind: ServiceAccount
-  name: metrics-server
-  namespace: kube-system
+  - kind: ServiceAccount
+    name: metrics-server
+    namespace: kube-system
 ---
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
   name: metrics-server:system:auth-delegator
   labels:
-    k8s-app: metrics-server
     addonmanager.kubernetes.io/mode: Reconcile
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: system:auth-delegator
 subjects:
-- kind: ServiceAccount
-  name: metrics-server
-  namespace: kube-system
+  - kind: ServiceAccount
+    name: metrics-server
+    namespace: kube-system
 ---
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRole
 metadata:
   name: system:metrics-server
   labels:
-    k8s-app: metrics-server
     addonmanager.kubernetes.io/mode: Reconcile
 rules:
-- apiGroups:
-  - ""
-  resources:
-  - nodes/metrics
-  verbs:
-  - get
-- apiGroups:
-  - ""
-  resources:
-  - pods
-  - nodes
-  verbs:
-  - get
-  - list
-  - watch
+  - apiGroups:
+      - ""
+    resources:
+      - pods
+      - nodes
+      - nodes/stats
+      - namespaces
+      - configmaps
+    verbs:
+      - get
+      - list
+      - watch
 ---
 apiVersion: rbac.authorization.k8s.io/v1
 kind: ClusterRoleBinding
 metadata:
+  name: system:metrics-server
   labels:
-    k8s-app: metrics-server
     addonmanager.kubernetes.io/mode: Reconcile
-  name: system:metrics-server
 roleRef:
   apiGroup: rbac.authorization.k8s.io
   kind: ClusterRole
   name: system:metrics-server
 subjects:
-- kind: ServiceAccount
-  name: metrics-server
-  namespace: kube-system
+  - kind: ServiceAccount
+    name: metrics-server
+    namespace: kube-system
diff --git a/deploy/addons/metrics-server/metrics-server-service.yaml.tmpl b/deploy/addons/metrics-server/metrics-server-service.yaml.tmpl
index 6de750a8c..84c4a570d 100644
--- a/deploy/addons/metrics-server/metrics-server-service.yaml.tmpl
+++ b/deploy/addons/metrics-server/metrics-server-service.yaml.tmpl
@@ -4,7 +4,6 @@ metadata:
   name: metrics-server
   namespace: kube-system
   labels:
-    k8s-app: metrics-server
     kubernetes.io/name: "Metrics-server"
     kubernetes.io/minikube-addons: metrics-server
     kubernetes.io/minikube-addons-endpoint: metrics-server
diff --git a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash b/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash
index e38792017..b13fd3cd6 100644
--- a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash
+++ b/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.hash
@@ -12,4 +12,3 @@ sha256 ac62c64664bf62fd44df0891c896eecdb6d93def3438271d7892dca75bc069d1 v1.4.4.t
 sha256 285a3f4c00a87538bd7d0a82a0a8a758458c02b925349f44f3189f480c326038 v1.4.6.tar.gz
 sha256 3bb9f54be022067847f5930d21ebbfe4e7a67f589d78930aa0ac713492c28bcc v1.4.9.tar.gz
 sha256 85a531725f15e2d136131119d42af4507a5389e0947015152075c4c93816fb5c v1.4.12.tar.gz
-sha256 7507913ba169c103ab67bc51bec31cd977d4348d7bc842da32b7eab5f930a14b v1.5.10.tar.gz
diff --git a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk b/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk
index d62620300..ab743d7df 100644
--- a/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk
+++ b/deploy/iso/minikube-iso/package/containerd-bin/containerd-bin.mk
@@ -3,8 +3,8 @@
 # containerd
 #
 ################################################################################
-CONTAINERD_BIN_VERSION = v1.5.10
-CONTAINERD_BIN_COMMIT = 2a1d4dbdb2a1030dc5b01e96fb110a9d9f150ecc
+CONTAINERD_BIN_VERSION = v1.4.12
+CONTAINERD_BIN_COMMIT = 7b11cfaabd73bb80907dd23182b9347b4245eb5d
 CONTAINERD_BIN_SITE = https://github.com/containerd/containerd/archive
 CONTAINERD_BIN_SOURCE = $(CONTAINERD_BIN_VERSION).tar.gz
 CONTAINERD_BIN_DEPENDENCIES = host-go libgpgme
diff --git a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash b/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash
index d8f2288ab..62e60271d 100644
--- a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash
+++ b/deploy/iso/minikube-iso/package/docker-bin/docker-bin.hash
@@ -33,4 +33,3 @@ sha256 e3b6c3b11518281a51fb0eee73138482b83041e908f01adf8abd3a24b34ea21e  docker-
 sha256 34ad50146fce29b28e5115a1e8510dd5232459c9a4a9f28f65909f92cca314d9  docker-20.10.7.tgz
 sha256 7ea11ecb100fdc085dbfd9ab1ff380e7f99733c890ed815510a5952e5d6dd7e0  docker-20.10.8.tgz
 sha256 ee9b5be14e54bf92f48c82c2e6a83fbdd1c5329e8f247525a9ed2fe90d9f89a5  docker-20.10.12.tgz
-sha256 39edf7c8d773939ff5e4d318ae565691a9c7e754ed768e172757e58898fb7079  docker-20.10.13.tgz
diff --git a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk b/deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk
index 31ec3c118..dae096c14 100644
--- a/deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk
+++ b/deploy/iso/minikube-iso/package/docker-bin/docker-bin.mk
@@ -4,7 +4,7 @@
 #
 ################################################################################
 
-DOCKER_BIN_VERSION = 20.10.13
+DOCKER_BIN_VERSION = 20.10.12
 DOCKER_BIN_SITE = https://download.docker.com/linux/static/stable/x86_64
 DOCKER_BIN_SOURCE = docker-$(DOCKER_BIN_VERSION).tgz
 
diff --git a/deploy/iso/minikube-iso/package/podman/podman.hash b/deploy/iso/minikube-iso/package/podman/podman.hash
index 27cdae3df..4f5158b97 100644
--- a/deploy/iso/minikube-iso/package/podman/podman.hash
+++ b/deploy/iso/minikube-iso/package/podman/podman.hash
@@ -2,5 +2,3 @@ sha256 a16846fe076aaf2c9ea2e854c3baba9fb838d916be7fb4b5be332e6c92d907d4 v1.9.3.t
 sha256 5ebaa6e0dbd7fd1863f70d2bc71dc8a94e195c3339c17e3cac4560c9ec5747f8 v2.1.1.tar.gz
 sha256 ec5473e51fa28f29af323473fc484f742dc7df23d06d8ba9f217f13382893a71 v2.2.0.tar.gz
 sha256 3212bad60d945c1169b27da03959f36d92d1d8964645c701a5a82a89118e96d1 v2.2.1.tar.gz
-sha256 5a0d42e03d15e32c5c54a147da5ef1b8928ec00982ac9e3f1edc82c5e614b6d2 v3.1.2.tar.gz
-sha256 b0c4f9a11eb500b1d440d5e51a6c0c632aa4ac458e2dc0362f50f999eb7fbf31 v3.4.2.tar.gz
diff --git a/deploy/iso/minikube-iso/package/podman/podman.mk b/deploy/iso/minikube-iso/package/podman/podman.mk
index 536106657..a2170ba39 100644
--- a/deploy/iso/minikube-iso/package/podman/podman.mk
+++ b/deploy/iso/minikube-iso/package/podman/podman.mk
@@ -1,5 +1,5 @@
-PODMAN_VERSION = v3.4.2
-PODMAN_COMMIT = 2ad1fd3555de12de34e20898cc2ef901f08fe5ed
+PODMAN_VERSION = v2.2.1
+PODMAN_COMMIT = a0d478edea7f775b7ce32f8eb1a01e75374486cb
 PODMAN_SITE = https://github.com/containers/podman/archive
 PODMAN_SOURCE = $(PODMAN_VERSION).tar.gz
 PODMAN_LICENSE = Apache-2.0
diff --git a/deploy/iso/minikube-iso/package/runc-master/runc-master.hash b/deploy/iso/minikube-iso/package/runc-master/runc-master.hash
index 4d904c378..c04a16b99 100644
--- a/deploy/iso/minikube-iso/package/runc-master/runc-master.hash
+++ b/deploy/iso/minikube-iso/package/runc-master/runc-master.hash
@@ -12,4 +12,3 @@ sha256 144973344b73627b5f69aa88b9e6655d692447ec317a0d5fa9777496a8ac186e 12644e61
 sha256 821ff8629329b4b7e4ccf24b5bf369c9739887736be30ba06a0d8053eb0e0b23 b9ee9c6314599f1b4a7f497e1f1f856fe433d3b7.tar.gz
 sha256 50cc479cabf6e7edb9070a7c28b3460b0acc2a01650fc5934f5037cb96b9e2cf 4144b63817ebcc5b358fc2c8ef95f7cddd709aa7.tar.gz
 sha256 1f47e3ff66cdcca1f890b15e74e884c4ff81d16d1044cc9900a1eb10cfb3d8e7 52b36a2dd837e8462de8e01458bf02cf9eea47dd.tar.gz
-sha256 91525356b71fbf8e05deddc955d3f40e0d4aedcb15d26bdd2850a9986852ae5b f46b6ba2c9314cfc8caae24a32ec5fe9ef1059fe.tar.gz
diff --git a/deploy/iso/minikube-iso/package/runc-master/runc-master.mk b/deploy/iso/minikube-iso/package/runc-master/runc-master.mk
index 9f52e8c8e..278c8b0d6 100644
--- a/deploy/iso/minikube-iso/package/runc-master/runc-master.mk
+++ b/deploy/iso/minikube-iso/package/runc-master/runc-master.mk
@@ -4,8 +4,8 @@
 #
 ################################################################################
 
-# As of 2021-12-03, v1.0.3
-RUNC_MASTER_VERSION = f46b6ba2c9314cfc8caae24a32ec5fe9ef1059fe
+# As of 2021-08-20, v1.0.2
+RUNC_MASTER_VERSION = 52b36a2dd837e8462de8e01458bf02cf9eea47dd
 RUNC_MASTER_SITE = https://github.com/opencontainers/runc/archive
 RUNC_MASTER_SOURCE = $(RUNC_MASTER_VERSION).tar.gz
 RUNC_MASTER_LICENSE = Apache-2.0
diff --git a/deploy/kicbase/Dockerfile b/deploy/kicbase/Dockerfile
index c240d6ca0..4de80bc80 100644
--- a/deploy/kicbase/Dockerfile
+++ b/deploy/kicbase/Dockerfile
@@ -19,7 +19,7 @@
 
 
 # multi-tage docker build so we can build auto-pause for arm64
-FROM golang:1.17
+FROM golang:1.16
 WORKDIR /src
 # becaue auto-pause binary depends on minikube's code we need to pass the whole source code as the context
 ADD . .
@@ -33,7 +33,7 @@ RUN git clone -n https://github.com/Mirantis/cri-dockerd && \
 
 # start from ubuntu 20.04, this image is reasonably small as a starting point
 # for a kubernetes node image, it doesn't contain much we don't need
-FROM ubuntu:focal-20220316
+FROM ubuntu:focal-20210401
 
 ARG BUILDKIT_VERSION="v0.9.3"
 ARG FUSE_OVERLAYFS_VERSION="v1.7.1"
diff --git a/go.mod b/go.mod
index c9ca41f30..06b3759d9 100644
--- a/go.mod
+++ b/go.mod
@@ -3,11 +3,11 @@ module k8s.io/minikube
 go 1.17
 
 require (
-	cloud.google.com/go/storage v1.21.0
+	cloud.google.com/go/storage v1.20.0
 	contrib.go.opencensus.io/exporter/stackdriver v0.13.10
 	github.com/Delta456/box-cli-maker/v2 v2.2.2
 	github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2
-	github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.3.0
+	github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.0.0
 	github.com/Microsoft/hcsshim v0.8.17 // indirect
 	github.com/Parallels/docker-machine-parallels/v2 v2.0.1
 	github.com/VividCortex/godaemon v1.0.0
@@ -19,7 +19,7 @@ require (
 	github.com/cloudevents/sdk-go/v2 v2.8.0
 	github.com/cloudfoundry-attic/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21
 	github.com/cloudfoundry/jibber_jabber v0.0.0-20151120183258-bcc4c8345a21 // indirect
-	github.com/docker/docker v20.10.13+incompatible
+	github.com/docker/docker v20.10.12+incompatible
 	github.com/docker/go-units v0.4.0
 	github.com/docker/machine v0.16.2
 	github.com/elazarl/goproxy v0.0.0-20210110162100-a92cc753f88e
@@ -64,37 +64,37 @@ require (
 	github.com/pmezard/go-difflib v1.0.0
 	github.com/russross/blackfriday v1.5.3-0.20200218234912-41c5fccfd6f6 // indirect
 	github.com/samalba/dockerclient v0.0.0-20160414174713-91d7393ff859 // indirect
-	github.com/shirou/gopsutil/v3 v3.22.2
-	github.com/spf13/cobra v1.4.0
+	github.com/shirou/gopsutil/v3 v3.22.1
+	github.com/spf13/cobra v1.3.0
 	github.com/spf13/pflag v1.0.5
 	github.com/spf13/viper v1.10.1
 	github.com/zchee/go-vmnet v0.0.0-20161021174912-97ebf9174097
 	go.opencensus.io v0.23.0
-	go.opentelemetry.io/otel v1.5.0
-	go.opentelemetry.io/otel/sdk v1.5.0
-	go.opentelemetry.io/otel/trace v1.5.0
+	go.opentelemetry.io/otel v1.4.1
+	go.opentelemetry.io/otel/sdk v1.4.0
+	go.opentelemetry.io/otel/trace v1.4.1
 	golang.org/x/build v0.0.0-20190927031335-2835ba2e683f
 	golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
 	golang.org/x/exp v0.0.0-20210220032938-85be41e4509f
 	golang.org/x/mod v0.5.1
-	golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a
+	golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8
 	golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
-	golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5
-	golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
+	golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a
+	golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b
 	golang.org/x/text v0.3.7
-	gonum.org/v1/plot v0.11.0
-	google.golang.org/api v0.73.0
+	gonum.org/v1/plot v0.10.0
+	google.golang.org/api v0.68.0
 	gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 // indirect
 	gopkg.in/yaml.v2 v2.4.0
-	k8s.io/api v0.23.5
-	k8s.io/apimachinery v0.23.5
-	k8s.io/client-go v0.23.5
+	k8s.io/api v0.23.4
+	k8s.io/apimachinery v0.23.4
+	k8s.io/client-go v0.23.4
 	k8s.io/cluster-bootstrap v0.0.0
-	k8s.io/component-base v0.23.5
-	k8s.io/klog/v2 v2.60.1
-	k8s.io/kubectl v0.23.5
+	k8s.io/component-base v0.23.4
+	k8s.io/klog/v2 v2.40.1
+	k8s.io/kubectl v0.22.2
 	k8s.io/utils v0.0.0-20211116205334-6203023598ed
-	libvirt.org/go/libvirt v1.8001.0
+	libvirt.org/go/libvirt v1.7010.0
 	sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0
 )
 
@@ -102,16 +102,15 @@ require github.com/santhosh-tekuri/jsonschema/v5 v5.0.0
 
 require (
 	cloud.google.com/go v0.100.2 // indirect
-	cloud.google.com/go/compute v1.5.0 // indirect
+	cloud.google.com/go/compute v1.2.0 // indirect
 	cloud.google.com/go/iam v0.1.1 // indirect
 	cloud.google.com/go/monitoring v1.1.0 // indirect
 	cloud.google.com/go/trace v1.0.0 // indirect
-	git.sr.ht/~sbinet/gg v0.3.1 // indirect
 	github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
 	github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd // indirect
 	github.com/Microsoft/go-winio v0.5.0 // indirect
 	github.com/VividCortex/ewma v1.1.1 // indirect
-	github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b // indirect
+	github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527 // indirect
 	github.com/aws/aws-sdk-go v1.38.49 // indirect
 	github.com/beorn7/perks v1.0.1 // indirect
 	github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect
@@ -128,13 +127,14 @@ require (
 	github.com/docker/go-connections v0.4.0 // indirect
 	github.com/evanphx/json-patch v4.12.0+incompatible // indirect
 	github.com/fatih/color v1.13.0 // indirect
+	github.com/fogleman/gg v1.3.0 // indirect
 	github.com/fsnotify/fsnotify v1.5.1 // indirect
 	github.com/go-fonts/liberation v0.2.0 // indirect
 	github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81 // indirect
 	github.com/go-logr/logr v1.2.2 // indirect
 	github.com/go-logr/stdr v1.2.2 // indirect
 	github.com/go-ole/go-ole v1.2.6 // indirect
-	github.com/go-pdf/fpdf v0.6.0 // indirect
+	github.com/go-pdf/fpdf v0.5.0 // indirect
 	github.com/gogo/protobuf v1.3.2 // indirect
 	github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0 // indirect
 	github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -192,13 +192,13 @@ require (
 	go.uber.org/atomic v1.7.0 // indirect
 	go.uber.org/multierr v1.6.0 // indirect
 	go.uber.org/zap v1.19.0 // indirect
-	golang.org/x/image v0.0.0-20220302094943-723b81ca9867 // indirect
-	golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
+	golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d // indirect
+	golang.org/x/net v0.0.0-20211209124913-491a49abca63 // indirect
 	golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac // indirect
 	golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
 	google.golang.org/appengine v1.6.7 // indirect
-	google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 // indirect
-	google.golang.org/grpc v1.45.0 // indirect
+	google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e // indirect
+	google.golang.org/grpc v1.43.0 // indirect
 	google.golang.org/protobuf v1.27.1 // indirect
 	gopkg.in/inf.v0 v0.9.1 // indirect
 	gopkg.in/ini.v1 v1.66.2 // indirect
diff --git a/go.sum b/go.sum
index 6b162f1cc..f0c64e82e 100644
--- a/go.sum
+++ b/go.sum
@@ -23,10 +23,12 @@ cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E
 cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY=
 cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM=
 cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY=
+cloud.google.com/go v0.88.0/go.mod h1:dnKwfYbP9hQhefiUvpbcAyoGSHUrOxR20JVElLiUvEY=
 cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ=
 cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI=
 cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
 cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
+cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM=
 cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA=
 cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U=
 cloud.google.com/go v0.100.2 h1:t9Iw5QH5v4XtlEQaCtUY7x6sCABps8sW0acw7e2WQ6Y=
@@ -38,10 +40,8 @@ cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUM
 cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
 cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
 cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow=
+cloud.google.com/go/compute v1.2.0 h1:EKki8sSdvDU0OO9mAXGwPXOTOgPz2l08R0/IutDH11I=
 cloud.google.com/go/compute v1.2.0/go.mod h1:xlogom/6gr8RJGBe7nT2eGsQYAFUbbv8dbC29qE3Xmw=
-cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM=
-cloud.google.com/go/compute v1.5.0 h1:b1zWmYuuHz7gO9kDcM/EpHGr06UgsYNRpNJzI2kFiLM=
-cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M=
 cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
 cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
 cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk=
@@ -59,8 +59,8 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo
 cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
 cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
 cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
-cloud.google.com/go/storage v1.21.0 h1:HwnT2u2D309SFDHQII6m18HlrCi3jAXhUMTLOWXYH14=
-cloud.google.com/go/storage v1.21.0/go.mod h1:XmRlxkgPjlBONznT2dDUU/5XlpU2OjMnKuqnZI01LAA=
+cloud.google.com/go/storage v1.20.0 h1:kv3rQ3clEQdxqokkCCgQo+bxPqcuXiROjxvnKb8Oqdk=
+cloud.google.com/go/storage v1.20.0/go.mod h1:TiC1o6FxNCG8y5gB7rqCsFZCIYPMPZCO81ppOoEPLGI=
 cloud.google.com/go/trace v1.0.0 h1:laKx2y7IWMjguCe5zZx6n7qLtREk4kyE69SXVC0VSN8=
 cloud.google.com/go/trace v1.0.0/go.mod h1:4iErSByzxkyHWzzlAj63/Gmjz0NH1ASqhJguHpGcr6A=
 contrib.go.opencensus.io/exporter/stackdriver v0.13.10 h1:a9+GZPUe+ONKUwULjlEOucMMG0qfSCCenlji0Nhqbys=
@@ -68,8 +68,6 @@ contrib.go.opencensus.io/exporter/stackdriver v0.13.10/go.mod h1:I5htMbyta491eUx
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
 gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8=
-git.sr.ht/~sbinet/gg v0.3.1 h1:LNhjNn8DerC8f9DHLz6lS0YYul/b602DUxDgGkd/Aik=
-git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc=
 github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
 github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
 github.com/Azure/go-ansiterm v0.0.0-20210608223527-2377c96fe795/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
@@ -106,8 +104,8 @@ github.com/Delta456/box-cli-maker/v2 v2.2.2 h1:CpSLcPgi5pY4+arzpyuWN2+nU8gHqto2Y
 github.com/Delta456/box-cli-maker/v2 v2.2.2/go.mod h1:idItIMZeyx3bg73XwSgsLeZd+gdpD2IvGbR3FC8a9TU=
 github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2 h1:rMamBsR6iCT9Y5m2Il6vFGJvY7FAgck4AoA/LobheKU=
 github.com/GoogleCloudPlatform/docker-credential-gcr v0.0.0-20210713212222-faed5e8b8ca2/go.mod h1:BB1eHdMLYEFuFdBlRMb0N7YGVdM5s6Pt0njxgvfbGGs=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.3.0 h1:JLLDOHEcoREA54hzOnjr8KQcZCvX0E8KhosjE0F1jaQ=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.3.0/go.mod h1:Pe8G2QFgCaohbU/zHRBjn0YaFh9z8/HtuEDh/Lyo04E=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.0.0 h1:38fNtfhHY6bs22b/D6+hDzO6JR0rDzpGPD36dY2uPL4=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace v1.0.0/go.mod h1:jE23wM1jvwSKgdGcoOkj5j9n1VWtncW36pL2bK1JU+0=
 github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
 github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
 github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
@@ -144,11 +142,9 @@ github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdc
 github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
 github.com/VividCortex/godaemon v1.0.0 h1:aHYrScWvgaSOdAoYCdObWXLm+e1rldP9Pwb1ZvuZkQw=
 github.com/VividCortex/godaemon v1.0.0/go.mod h1:hBWe/72KbGt/lb95E+Sh9ersdYbB57Dt6CG66S1YPno=
-github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY=
-github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk=
 github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
-github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b h1:slYM766cy2nI3BwyRiyQj/Ud48djTMtMebDqepE95rw=
-github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM=
+github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527 h1:NImof/JkF93OVWZY+PINgl6fPtQyF6f+hNUtZ0QZA1c=
+github.com/ajstarks/svgo v0.0.0-20210923152817-c3b6e2f0c527/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
 github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
 github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
@@ -184,6 +180,7 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ
 github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
 github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
 github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA=
+github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
 github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
 github.com/blang/semver v3.1.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
 github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
@@ -335,6 +332,7 @@ github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgU
 github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
 github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
 github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
 github.com/coreos/go-iptables v0.4.5/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
 github.com/coreos/go-iptables v0.5.0/go.mod h1:/mVI274lEDI2ns62jHCDnCyBF9Iwsmekav8Dbxlm1MU=
 github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
@@ -380,8 +378,8 @@ github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4Kfc
 github.com/docker/docker v17.12.0-ce-rc1.0.20181225093023-5ddb1d410a8b+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker v17.12.0-ce-rc1.0.20190115220918-5ec31380a5d3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker v20.10.13+incompatible h1:5s7uxnKZG+b8hYWlPYUi6x1Sjpq2MSt96d15eLZeHyw=
-github.com/docker/docker v20.10.13+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker v20.10.12+incompatible h1:CEeNmFM0QZIsJCZKMkZx0ZcahTiewkrgiwfYD+dfl1U=
+github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
 github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ=
 github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
 github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
@@ -431,6 +429,7 @@ github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW
 github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
 github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
 github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
+github.com/fogleman/gg v1.3.0 h1:/7zJX8F6AaYQc57WQCyN9cAIz+4bCJGO9B+dyW29am8=
 github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
 github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
 github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
@@ -472,10 +471,8 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7
 github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU=
 github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/logr v1.2.1/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs=
 github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
-github.com/go-logr/stdr v1.2.0/go.mod h1:YkVgnZu1ZjjL7xTxrfm/LLZBfkhTqSR1ydtm6jTKKwI=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
 github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro=
@@ -495,9 +492,8 @@ github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dp
 github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
 github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
+github.com/go-pdf/fpdf v0.5.0 h1:GHpcYsiDV2hdo77VTOuTF9k1sN8F8IY7NjnCo9x+NPY=
 github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
-github.com/go-pdf/fpdf v0.6.0 h1:MlgtGIfsdMEEQJr2le6b/HNr1ZlQwxyWr77r2aj2U/8=
-github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/godbus/dbus v0.0.0-20151105175453-c7fdd8b5cd55/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
 github.com/godbus/dbus v0.0.0-20180201030542-885f9cc04c9c/go.mod h1:/YcGZj5zSblfDWMMoOzV4fas9FZnQYTkDnsGvmh2Grw=
@@ -603,6 +599,7 @@ github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLe
 github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
+github.com/google/pprof v0.0.0-20210715191844-86eeefc3e471/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
@@ -644,6 +641,7 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t
 github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
 github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
+github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M=
 github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0=
 github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
 github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms=
@@ -687,10 +685,13 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
 github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
+github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
 github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc=
 github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
+github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
 github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
 github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
+github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
 github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4=
 github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95 h1:S4qyfL2sEm5Budr4KVMyEniCy+PbS55651I/a+Kn/NQ=
 github.com/hectane/go-acl v0.0.0-20190604041725-da78bae5fc95/go.mod h1:QiyDdbZLaJ/mZP4Zwc9g2QsfaEA4o7XvvgZegSci5/E=
@@ -796,6 +797,7 @@ github.com/machine-drivers/docker-machine-driver-vmware v0.1.5/go.mod h1:dTnTzUH
 github.com/machine-drivers/machine v0.7.1-0.20211105063445-78a84df85426 h1:gVDPCmqwvHQ4ox/9svvnkomYJAAiV59smbPdTK4DIm4=
 github.com/machine-drivers/machine v0.7.1-0.20211105063445-78a84df85426/go.mod h1:79Uwa2hGd5S39LDJt58s8JZcIhGEK6pkq9bsuTbFWbk=
 github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
 github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
 github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
 github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
@@ -1039,6 +1041,7 @@ github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfF
 github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk=
 github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
 github.com/safchain/ethtool v0.0.0-20190326074333-42ed695e3de8/go.mod h1:Z0q5wiBQGYcxhMZ6gUqHn6pYNLypFAvaL3UvgZLR0U4=
+github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig=
 github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM=
 github.com/santhosh-tekuri/jsonschema/v5 v5.0.0 h1:TToq11gyfNlrMFZiYujSekIsPd9AmsA2Bj/iv+s4JHE=
 github.com/santhosh-tekuri/jsonschema/v5 v5.0.0/go.mod h1:FKdcjfQW6rpZSnxxUvEA5H/cDPdvJ/SZJQLWWXWGrZ0=
@@ -1048,8 +1051,8 @@ github.com/sayboras/dockerclient v1.0.0/go.mod h1:mUmEoqt0b+uQg57s006FsvL4mybi+N
 github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
 github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo=
 github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
-github.com/shirou/gopsutil/v3 v3.22.2 h1:wCrArWFkHYIdDxx/FSfF5RB4dpJYW6t7rcp3+zL8uks=
-github.com/shirou/gopsutil/v3 v3.22.2/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
+github.com/shirou/gopsutil/v3 v3.22.1 h1:33y31Q8J32+KstqPfscvFwBlNJ6xLaBy4xqBXzlYV5w=
+github.com/shirou/gopsutil/v3 v3.22.1/go.mod h1:WapW1AOOPlHyXr+yOyw3uYx36enocrtSoSBy0L5vUHY=
 github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
 github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
 github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
@@ -1078,9 +1081,10 @@ github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
 github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
 github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
+github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
 github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
-github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
-github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
+github.com/spf13/cobra v1.3.0 h1:R7cSvGu+Vv+qX0gW5R/85dx2kmmJT5z5NM8ifdYjdn0=
+github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4=
 github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
 github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
 github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
@@ -1091,7 +1095,9 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn
 github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
 github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
+github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM=
 github.com/spf13/viper v1.10.1 h1:nuJZuYpG7gTj/XqiUwg8bA0cp1+M2mC3J4g5luUYBKk=
 github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU=
 github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980/go.mod h1:AO3tvPzVZ/ayst6UlUKUv6rcPQInYe3IknH3jYhAKu8=
@@ -1154,7 +1160,6 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
-github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
 github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
 github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
 github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
@@ -1184,33 +1189,35 @@ go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
 go.opentelemetry.io/contrib v0.20.0 h1:ubFQUn0VCZ0gPwIoJfBJVpeBlyRMxu8Mm/huKWYd9p0=
 go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.20.0/go.mod h1:2AboqHi0CiIZU0qwhtUfCYD1GeUzvvIXWNkhDt7ZMG4=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.26.0 h1:sdwza9BScvbOFaZLhvKDQc54vQ8CWM8jD9BO2t+rP4E=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.26.0/go.mod h1:4vatbW3QwS11DK0H0SB7FR31/VbthXcYorswdkVXdyg=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.24.0 h1:qW6j1kJU24yo2xIu16Py4m4AXn1dd+s2uKllGnTFAm0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.24.0/go.mod h1:7W3JSDYTtH3qKKHrS1fMiwLtK7iZFLPq1+7htfspX/E=
 go.opentelemetry.io/otel v0.20.0/go.mod h1:Y3ugLH2oa81t5QO+Lty+zXf8zC9L26ax4Nzoxm/dooo=
+go.opentelemetry.io/otel v1.0.0-RC3/go.mod h1:Ka5j3ua8tZs4Rkq4Ex3hwgBgOchyPVq5S6P2lz//nKQ=
+go.opentelemetry.io/otel v1.0.0/go.mod h1:AjRVh9A5/5DE7S+mZtTR6t8vpKKryam+0lREnfmS4cg=
 go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU=
-go.opentelemetry.io/otel v1.1.0/go.mod h1:7cww0OW51jQ8IaZChIEdqLwgh+44+7uiTdWsAL0wQpA=
-go.opentelemetry.io/otel v1.3.0/go.mod h1:PWIKzi6JCp7sM0k9yZ43VX+T345uNbAkDKwHVjb2PTs=
-go.opentelemetry.io/otel v1.5.0 h1:DhCU8oR2sJH9rfnwPdoV/+BJ7UIN5kXHL8DuSGrPU8E=
-go.opentelemetry.io/otel v1.5.0/go.mod h1:Jm/m+rNp/z0eqJc74H7LPwQ3G87qkU/AnnAydAjSAHk=
+go.opentelemetry.io/otel v1.4.0/go.mod h1:jeAqMFKy2uLIxCtKxoFj0FAL5zAPKQagc3+GtBWakzk=
+go.opentelemetry.io/otel v1.4.1 h1:QbINgGDDcoQUoMJa2mMaWno49lja9sHwp6aoa2n3a4g=
+go.opentelemetry.io/otel v1.4.1/go.mod h1:StM6F/0fSwpd8dKWDCdRr7uRvEPYdW0hBSlbdTiUde4=
 go.opentelemetry.io/otel/exporters/otlp v0.20.0/go.mod h1:YIieizyaN77rtLJra0buKiNBOm9XQfkPEKBeuhoMwAM=
-go.opentelemetry.io/otel/internal/metric v0.24.0 h1:O5lFy6kAl0LMWBjzy3k//M8VjEaTDWL9DPJuqZmWIAA=
-go.opentelemetry.io/otel/internal/metric v0.24.0/go.mod h1:PSkQG+KuApZjBpC6ea6082ZrWUUy/w132tJ/LOU3TXk=
+go.opentelemetry.io/otel/internal/metric v0.23.0 h1:mPfzm9Iqhw7G2nDBmUAjFTfPqLZPbOW2k7QI57ITbaI=
+go.opentelemetry.io/otel/internal/metric v0.23.0/go.mod h1:z+RPiDJe30YnCrOhFGivwBS+DU1JU/PiLKkk4re2DNY=
 go.opentelemetry.io/otel/metric v0.20.0/go.mod h1:598I5tYlH1vzBjn+BTuhzTCSb/9debfNp6R3s7Pr1eU=
-go.opentelemetry.io/otel/metric v0.24.0 h1:Rg4UYHS6JKR1Sw1TxnI13z7q/0p/XAbgIqUTagvLJuU=
-go.opentelemetry.io/otel/metric v0.24.0/go.mod h1:tpMFnCD9t+BEGiWY2bWF5+AwjuAdM0lSowQ4SBA3/K4=
+go.opentelemetry.io/otel/metric v0.23.0 h1:mYCcDxi60P4T27/0jchIDFa1WHEfQeU3zH9UEMpnj2c=
+go.opentelemetry.io/otel/metric v0.23.0/go.mod h1:G/Nn9InyNnIv7J6YVkQfpc0JCfKBNJaERBGw08nqmVQ=
 go.opentelemetry.io/otel/oteltest v0.20.0/go.mod h1:L7bgKf9ZB7qCwT9Up7i9/pn0PWIa9FqQ2IQ8LoxiGnw=
 go.opentelemetry.io/otel/sdk v0.20.0/go.mod h1:g/IcepuwNsoiX5Byy2nNV0ySUF1em498m7hBWC279Yc=
-go.opentelemetry.io/otel/sdk v1.3.0/go.mod h1:rIo4suHNhQwBIPg9axF8V9CA72Wz2mKF1teNrup8yzs=
-go.opentelemetry.io/otel/sdk v1.5.0 h1:QKhWBbcOC9fDCZKCfPFjWTWpfIlJR+i9xiUDYrLVmZs=
-go.opentelemetry.io/otel/sdk v1.5.0/go.mod h1:CU4J1v+7iEljnm1G14QjdFWOXUyYLHVh0Lh+/BTYyFg=
+go.opentelemetry.io/otel/sdk v1.0.1/go.mod h1:HrdXne+BiwsOHYYkBE5ysIcv2bvdZstxzmCQhxTcZkI=
+go.opentelemetry.io/otel/sdk v1.4.0 h1:LJE4SW3jd4lQTESnlpQZcBhQ3oci0U2MLR5uhicfTHQ=
+go.opentelemetry.io/otel/sdk v1.4.0/go.mod h1:71GJPNJh4Qju6zJuYl1CrYtXbrgfau/M9UAggqiy1UE=
 go.opentelemetry.io/otel/sdk/export/metric v0.20.0/go.mod h1:h7RBNMsDJ5pmI1zExLi+bJK+Dr8NQCh0qGhm1KDnNlE=
 go.opentelemetry.io/otel/sdk/metric v0.20.0/go.mod h1:knxiS8Xd4E/N+ZqKmUPf3gTTZ4/0TjTXukfxjzSTpHE=
 go.opentelemetry.io/otel/trace v0.20.0/go.mod h1:6GjCW8zgDjwGHGa6GkyeB8+/5vjT16gUEi0Nf1iBdgw=
+go.opentelemetry.io/otel/trace v1.0.0-RC3/go.mod h1:VUt2TUYd8S2/ZRX09ZDFZQwn2RqfMB5MzO17jBojGxo=
+go.opentelemetry.io/otel/trace v1.0.0/go.mod h1:PXTWqayeFUlJV1YDNhsJYB184+IvAH814St6o6ajzIs=
 go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk=
-go.opentelemetry.io/otel/trace v1.1.0/go.mod h1:i47XtdcBQiktu5IsrPqOHe8w+sBmnLwwHt8wiUsWGTI=
-go.opentelemetry.io/otel/trace v1.3.0/go.mod h1:c/VDhno8888bvQYmbYLqe41/Ldmr/KKunbvWM4/fEjk=
-go.opentelemetry.io/otel/trace v1.5.0 h1:AKQZ9zJsBRFAp7zLdyGNkqG2rToCDIt3i5tcLzQlbmU=
-go.opentelemetry.io/otel/trace v1.5.0/go.mod h1:sq55kfhjXYr1zVSyexg0w1mpa03AYXR5eyTkB9NPPdE=
+go.opentelemetry.io/otel/trace v1.4.0/go.mod h1:uc3eRsqDfWs9R7b92xbQbU42/eTNz4N+gLP8qJCi4aE=
+go.opentelemetry.io/otel/trace v1.4.1 h1:O+16qcdTrT7zxv2J6GejTPFinSwA++cYerC5iSiF8EQ=
+go.opentelemetry.io/otel/trace v1.4.1/go.mod h1:iYEVbroFCNut9QkwEczV9vMRPHNKSSwYZjulEtsmhFc=
 go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
 go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o=
 go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
@@ -1279,10 +1286,8 @@ golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+o
 golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
 golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
+golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d h1:RNPAfi2nHY7C2srAV8A49jpsYr0ADedCk1wq6fTMTvs=
 golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
-golang.org/x/image v0.0.0-20220302094943-723b81ca9867 h1:TcHcE0vrmgzNH1v3ppjcMGbhG5+9fMuvOmUYwNEF4q4=
-golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
 golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
 golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
 golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
@@ -1369,13 +1374,11 @@ golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy
 golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20210716203947-853a461950ff/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
+golang.org/x/net v0.0.0-20211209124913-491a49abca63 h1:iocB37TsdFuN6IBRZ+ry36wrkoV51/tl5vOWqkcPGvY=
 golang.org/x/net v0.0.0-20211209124913-491a49abca63/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
-golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
-golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190402181905-9f3314589c9a/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -1394,9 +1397,8 @@ golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ
 golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
 golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
+golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8 h1:RerP+noqYHUQ8CMRcPlC2nvTa4dcBIjegkuWdcUDuqg=
 golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
-golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a h1:qfl7ob3DIEs3Ml9oLuPwY2N04gymzAW04WsUQHIClgM=
-golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc=
 golang.org/x/perf v0.0.0-20180704124530-6e6d33e29852/go.mod h1:JLpeXjPJfIyPr5TlbXLkXWLhP8nz10XfvxElABhCtcw=
 golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -1521,23 +1523,19 @@ golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBc
 golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220111092808-5a964db01320/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a h1:ppl5mZgokTT8uPkmYOyEUmPTr3ypaKkg5eFOGrAmxxE=
 golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220207234003-57398862261d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 h1:y/woIyUBFbpQGKS0u1aHF/40WUDnek3fPOyD08H5Vng=
-golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
+golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE=
 golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
-golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
@@ -1626,8 +1624,6 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff h1:VX/uD7MK0AHXGiScH3fsieUQUcpmRERPDYtqZdJnA+Q=
 golang.org/x/tools v0.1.6-0.20210820212750-d4cc65f0b2ff/go.mod h1:YD9qOF0M9xpSpdWTBbzEl5e/RnCefISl8E5Noe10jFM=
-golang.org/x/tools v0.1.9 h1:j9KsMiaP1c3B0OTQGth0/k+miLGTgLsAFUCrF2vLcF8=
-golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -1635,15 +1631,13 @@ golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1N
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
 gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0=
+gonum.org/v1/gonum v0.9.3 h1:DnoIG+QAMaF5NvxnGe/oKsgKcAc6PcUyl8q0VetfQ8s=
 gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0=
-gonum.org/v1/gonum v0.11.0 h1:f1IJhK4Km5tBJmaiJXtk/PkL4cdVX6J+tGiM187uT5E=
-gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA=
 gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
 gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
 gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY=
-gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo=
-gonum.org/v1/plot v0.11.0 h1:z2ZkgNqW34d0oYUzd80RRlc0L9kWtenqK4kflZG1lGc=
-gonum.org/v1/plot v0.11.0/go.mod h1:fH9YnKnDKax0u5EzHVXvhN5HJwtMFWIOLNuhgUahbCQ=
+gonum.org/v1/plot v0.10.0 h1:ymLukg4XJlQnYUJCp+coQq5M7BsUJFk6XQE4HPflwdw=
+gonum.org/v1/plot v0.10.0/go.mod h1:JWIHJ7U20drSQb/aDpTetJzfC1KlAPldJLpkSy88dvQ=
 google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
@@ -1678,15 +1672,12 @@ google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdr
 google.golang.org/api v0.58.0/go.mod h1:cAbP2FsxoGVNwtgNAmmn3y5G1TWAiVYRmg4yku3lv+E=
 google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU=
 google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I=
+google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw=
 google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo=
 google.golang.org/api v0.64.0/go.mod h1:931CdxA8Rm4t6zqTFGSsgwbAEZ2+GMYurbndwSimebM=
 google.golang.org/api v0.66.0/go.mod h1:I1dmXYpX7HGwz/ejRxwQp2qj5bFAz93HiCU1C1oYd9M=
-google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g=
+google.golang.org/api v0.68.0 h1:9eJiHhwJKIYX6sX2fUZxQLi7pDRA/MYu8c12q6WbJik=
 google.golang.org/api v0.68.0/go.mod h1:sOM8pTpwgflXRhz+oC8H2Dr+UcbMqkPPWNJo88Q7TH8=
-google.golang.org/api v0.69.0/go.mod h1:boanBiw+h5c3s+tBPgEzLDRHfFLWV0qXxRHz3ws7C80=
-google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA=
-google.golang.org/api v0.73.0 h1:O9bThUh35K1rvUrQwTUQ1eqLC/IYyzUpWavYIO2EXvo=
-google.golang.org/api v0.73.0/go.mod h1:lbd/q6BRFJbdpV6OUCXstVeiI5mL/d3/WifG7iNKnjI=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
@@ -1748,6 +1739,8 @@ google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxH
 google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24=
 google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=
 google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k=
+google.golang.org/genproto v0.0.0-20210721163202-f1cecdd8b78a/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
+google.golang.org/genproto v0.0.0-20210722135532-667f2b7c528f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
 google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
 google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48=
 google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w=
@@ -1763,23 +1756,17 @@ google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ6
 google.golang.org/genproto v0.0.0-20211018162055-cf77aa76bad2/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20211223182754-3ac035c7e7cb/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220111164026-67b88f271998/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220114231437-d2e6a121cae0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
 google.golang.org/genproto v0.0.0-20220201184016-50beb8ab5c44/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
+google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e h1:hXl9hnyOkeznztYpYxVPAVZfPzcbO6Q0C+nLXodza8k=
 google.golang.org/genproto v0.0.0-20220204002441-d6cc3cc0770e/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220207185906-7721543eae58/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
-google.golang.org/genproto v0.0.0-20220211171837-173942840c17/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220216160803-4663080d8bc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
-google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6 h1:FglFEfyj61zP3c6LgjmVHxYxZWXYul9oiS1EZqD5gLc=
-google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI=
 google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
 google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
@@ -1810,10 +1797,9 @@ google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnD
 google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE=
 google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
 google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34=
+google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
+google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM=
 google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
-google.golang.org/grpc v1.45.0 h1:NEpgUqV3Z+ZjkqMsxMg11IaDrXY4RY6CQukSGK0uI1M=
-google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ=
 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
 google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
@@ -1845,6 +1831,7 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy
 gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
+gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
 gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
 gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
@@ -1884,45 +1871,49 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
 honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
 honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
-honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las=
 k8s.io/api v0.19.1/go.mod h1:+u/k4/K/7vp4vsfdT7dyl8Oxk1F26Md4g5F26Tu85PU=
 k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
 k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
 k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
+k8s.io/api v0.22.2/go.mod h1:y3ydYpLJAaDI+BbSe2xmGcqxiWHmWjkEeIbiwHvnPR8=
 k8s.io/api v0.22.4/go.mod h1:Rgs+9gIGYC5laXQSZZ9JqT5NevNgoGiOdVWi1BAB3qk=
-k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA=
-k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8=
+k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E=
+k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI=
 k8s.io/apimachinery v0.19.1/go.mod h1:DnPGDnARWFvYa3pMHgSxtbZb7gpzzAZ1pTfaUNDVlmA=
 k8s.io/apimachinery v0.20.1/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
 k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU=
 k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
+k8s.io/apimachinery v0.22.2/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
 k8s.io/apimachinery v0.22.4/go.mod h1:yU6oA6Gnax9RrxGzVvPFFJ+mpnW6PBSqp0sx0I0HHW0=
-k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0=
-k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
+k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM=
+k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
 k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU=
 k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM=
 k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q=
-k8s.io/cli-runtime v0.23.5/go.mod h1:oY6QDF2qo9xndSq32tqcmRp2UyXssdGrLfjAVymgbx4=
+k8s.io/cli-runtime v0.22.2/go.mod h1:tkm2YeORFpbgQHEK/igqttvPTRIHFRz5kATlw53zlMI=
 k8s.io/client-go v0.19.1/go.mod h1:AZOIVSI9UUtQPeJD3zJFp15CEhSjRgAuQP5PWRJrCIQ=
 k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
 k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
 k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
-k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8=
-k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4=
+k8s.io/client-go v0.22.2/go.mod h1:sAlhrkVDf50ZHx6z4K0S40wISNTarf1r800F+RlCF6U=
+k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU=
+k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0=
 k8s.io/cluster-bootstrap v0.22.4 h1:2ZhV/1K4GiCrnmDHHbBnN3bERWn+Nxrtxmxp6uYYThI=
 k8s.io/cluster-bootstrap v0.22.4/go.mod h1:fTQZ6u9G6fg2LHhB8nEgZLnXIhCDSRYuLUUS5pgW8RY=
-k8s.io/code-generator v0.23.5/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk=
+k8s.io/code-generator v0.22.2/go.mod h1:eV77Y09IopzeXOJzndrDyCI88UBok2h6WxAlBwpxa+o=
 k8s.io/component-base v0.20.1/go.mod h1:guxkoJnNoh8LNrbtiQOlyp2Y2XFCZQmrcg2n/DeYNLk=
 k8s.io/component-base v0.20.4/go.mod h1:t4p9EdiagbVCJKrQ1RsA5/V4rFQNDfRlevJajlGwgjI=
 k8s.io/component-base v0.20.6/go.mod h1:6f1MPBAeI+mvuts3sIdtpjljHWBQ2cIy38oBIWMYnrM=
-k8s.io/component-base v0.23.5 h1:8qgP5R6jG1BBSXmRYW+dsmitIrpk8F/fPEvgDenMCCE=
-k8s.io/component-base v0.23.5/go.mod h1:c5Nq44KZyt1aLl0IpHX82fhsn84Sb0jjzwjpcA42bY0=
-k8s.io/component-helpers v0.23.5/go.mod h1:5riXJgjTIs+ZB8xnf5M2anZ8iQuq37a0B/0BgoPQuSM=
+k8s.io/component-base v0.22.2/go.mod h1:5Br2QhI9OTe79p+TzPe9JKNQYvEKbq9rTJDWllunGug=
+k8s.io/component-base v0.23.4 h1:SziYh48+QKxK+ykJ3Ejqd98XdZIseVBG7sBaNLPqy6M=
+k8s.io/component-base v0.23.4/go.mod h1:8o3Gg8i2vnUXGPOwciiYlkSaZT+p+7gA9Scoz8y4W4E=
+k8s.io/component-helpers v0.22.2/go.mod h1:+N61JAR9aKYSWbnLA88YcFr9K/6ISYvRNybX7QW7Rs8=
 k8s.io/cri-api v0.17.3/go.mod h1:X1sbHmuXhwaHs9xxYffLqJogVsnI+f6cPRcgPel7ywM=
 k8s.io/cri-api v0.20.1/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
 k8s.io/cri-api v0.20.4/go.mod h1:2JRbKt+BFLTjtrILYVqQK5jqhI+XNdF6UiGMgczeBCI=
 k8s.io/cri-api v0.20.6/go.mod h1:ew44AjNXwyn1s0U4xCKGodU7J1HzBeZ1MpGrpa5r8Yc=
 k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
+k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
 k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
 k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
@@ -1930,25 +1921,26 @@ k8s.io/klog/v2 v2.3.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
 k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
 k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
-k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc=
-k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
+k8s.io/klog/v2 v2.40.1 h1:P4RRucWk/lFOlDdkAr3mc7iWFkgKrZY9qZMAgek06S4=
+k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
 k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
 k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
 k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
 k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
 k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65 h1:E3J9oCLlaobFUqsjG9DfKbP2BmgwBL2p7pn0A3dG9W4=
 k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
-k8s.io/kubectl v0.23.5 h1:DmDULqCaF4qstj0Im143XmncvqWtJxHzK8IrW2BzlU0=
-k8s.io/kubectl v0.23.5/go.mod h1:lLgw7cVY8xbd7o637vOXPca/w6HC205KsPCRDYRCxwE=
+k8s.io/kubectl v0.22.2 h1:KMyYNZoBshaL3XKx04X07DtpoD4vMrdkfiN/G2Qx/PU=
+k8s.io/kubectl v0.22.2/go.mod h1:BApg2j0edxLArCOfO0ievI27EeTQqBDMNU9VQH734iQ=
 k8s.io/kubernetes v1.13.0/go.mod h1:ocZa8+6APFNC2tX1DZASIbocyYT5jHzqFVsY5aoB7Jk=
-k8s.io/metrics v0.23.5/go.mod h1:WNAtV2a5BYbmDS8+7jSqYYV6E3efuGTpIwJ8PTD1wgs=
+k8s.io/metrics v0.22.2/go.mod h1:GUcsBtpsqQD1tKFS/2wCKu4ZBowwRncLOJH1rgWs3uw=
 k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
+k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 k8s.io/utils v0.0.0-20211116205334-6203023598ed h1:ck1fRPWPJWsMd8ZRFsWc6mh/zHp5fZ/shhbrgPUxDAE=
 k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
-libvirt.org/go/libvirt v1.8001.0 h1:JpmhiPLs+DA5shqjsqjGr4YIkVaLiDghI8qk9e34JXg=
-libvirt.org/go/libvirt v1.8001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
+libvirt.org/go/libvirt v1.7010.0 h1:DlllozmFIhjuF5DL9Z19UOcKfgFp3T0RjWtxdiBjPpM=
+libvirt.org/go/libvirt v1.7010.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 rsc.io/pdf v0.1.1 h1:k1MczvYDUvJBe93bYd7wrZLLUEcLZAuF824/I4e5Xr4=
 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
@@ -1958,10 +1950,10 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.14/go.mod h1:LEScyz
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg=
 sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6 h1:fD1pz4yfdADVNfFmcP2aBEtudwUQ1AlLnRBALr33v3s=
 sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
-sigs.k8s.io/kustomize/api v0.10.1/go.mod h1:2FigT1QN6xKdcnGS2Ppp1uIWrtWN28Ms8A3OZUZhwr8=
-sigs.k8s.io/kustomize/cmd/config v0.10.2/go.mod h1:K2aW7nXJ0AaT+VA/eO0/dzFLxmpFcTzudmAgDwPY1HQ=
-sigs.k8s.io/kustomize/kustomize/v4 v4.4.1/go.mod h1:qOKJMMz2mBP+vcS7vK+mNz4HBLjaQSWRY22EF6Tb7Io=
-sigs.k8s.io/kustomize/kyaml v0.13.0/go.mod h1:FTJxEZ86ScK184NpGSAQcfEqee0nul8oLCK30D47m4E=
+sigs.k8s.io/kustomize/api v0.8.11/go.mod h1:a77Ls36JdfCWojpUqR6m60pdGY1AYFix4AH83nJtY1g=
+sigs.k8s.io/kustomize/cmd/config v0.9.13/go.mod h1:7547FLF8W/lTaDf0BDqFTbZxM9zqwEJqCKN9sSR0xSs=
+sigs.k8s.io/kustomize/kustomize/v4 v4.2.0/go.mod h1:MOkR6fmhwG7hEDRXBYELTi5GSFcLwfqwzTRHW3kv5go=
+sigs.k8s.io/kustomize/kyaml v0.11.0/go.mod h1:GNMwjim4Ypgp/MueD3zXHLRJEjz7RvtPae0AwlvEMFM=
 sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0 h1:IKsKAnscMyIOqyl8s8V7guTcx0QBEa6OT57EPgAgpmM=
 sigs.k8s.io/sig-storage-lib-external-provisioner/v6 v6.3.0/go.mod h1:DhZ52sQMJHW21+JXyA2LRUPRIxKnrNrwh+QFV+2tVA4=
 sigs.k8s.io/structured-merge-diff/v4 v4.0.1/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw=
diff --git a/gui/window.cpp b/gui/window.cpp
index 1898b77e6..6f9ea709e 100644
--- a/gui/window.cpp
+++ b/gui/window.cpp
@@ -89,8 +89,6 @@
 //! [0]
 Window::Window()
 {
-    trayIconIcon = new QIcon(":/images/minikube.png");
-    checkForMinikube();
     createClusterGroupBox();
 
     createActions();
@@ -187,6 +185,8 @@ void Window::createTrayIcon()
     trayIconMenu->addSeparator();
     trayIconMenu->addAction(quitAction);
 
+    trayIconIcon = new QIcon(":/images/minikube.png");
+
     trayIcon = new QSystemTrayIcon(this);
     trayIcon->setContextMenu(trayIconMenu);
     trayIcon->setIcon(*trayIconIcon);
@@ -443,7 +443,6 @@ void Window::askName()
 {
     QDialog dialog;
     dialog.setWindowTitle(tr("Create minikube Cluster"));
-    dialog.setWindowIcon(*trayIconIcon);
     dialog.setModal(true);
 
     QFormLayout form(&dialog);
@@ -470,7 +469,6 @@ void Window::askCustom()
 {
     QDialog dialog;
     dialog.setWindowTitle(tr("Set Cluster Values"));
-    dialog.setWindowIcon(*trayIconIcon);
     dialog.setModal(true);
 
     QFormLayout form(&dialog);
@@ -595,34 +593,4 @@ void Window::dashboardClose()
     }
 }
 
-void Window::checkForMinikube()
-{
-    QString program = minikubePath();
-    if (!program.isEmpty()) {
-        return;
-    }
-
-    QDialog dialog;
-    dialog.setWindowTitle(tr("minikube"));
-    dialog.setWindowIcon(*trayIconIcon);
-    dialog.setModal(true);
-    QFormLayout form(&dialog);
-    QLabel *message = new QLabel(this);
-    message->setText("minikube was not found on the path.\nPlease follow the install instructions "
-                     "below to install minikube first.\n");
-    form.addWidget(message);
-    QLabel *link = new QLabel(this);
-    link->setOpenExternalLinks(true);
-    link->setText("<a "
-                  "href='https://minikube.sigs.k8s.io/docs/start/'>https://minikube.sigs.k8s.io/"
-                  "docs/start/</a>");
-    form.addWidget(link);
-    QDialogButtonBox buttonBox(Qt::Horizontal, &dialog);
-    buttonBox.addButton(QString(tr("OK")), QDialogButtonBox::AcceptRole);
-    connect(&buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
-    form.addRow(&buttonBox);
-    dialog.exec();
-    exit(EXIT_FAILURE);
-}
-
 #endif
diff --git a/gui/window.h b/gui/window.h
index bed64c0da..5b2bb28d4 100644
--- a/gui/window.h
+++ b/gui/window.h
@@ -121,7 +121,6 @@ private:
     void initMachine();
     void sshConsole();
     void dashboardBrowser();
-    void checkForMinikube();
     QPushButton *sshButton;
     QPushButton *dashboardButton;
     QProcess *dashboardProcess;
diff --git a/hack/benchmark/time-to-k8s/chart.go b/hack/benchmark/time-to-k8s/chart.go
index ba03ecadf..e0ebcbcc1 100644
--- a/hack/benchmark/time-to-k8s/chart.go
+++ b/hack/benchmark/time-to-k8s/chart.go
@@ -19,10 +19,8 @@ package main
 import (
 	"bytes"
 	"encoding/csv"
-	"flag"
 	"fmt"
 	"io"
-	"log"
 	"os"
 	"strconv"
 
@@ -45,27 +43,12 @@ type run struct {
 type runs struct {
 	version string
 	runs    []run
+	cpus    []cpu
 }
 
-func main() {
-	csvPath := flag.String("csv", "", "path to the CSV file")
-	chartPath := flag.String("output", "", "path to output the chart to")
-	flag.Parse()
-
-	// map of the apps (minikube, kind, k3d) and their runs
-	apps := make(map[string]runs)
-
-	if err := readInCSV(*csvPath, apps); err != nil {
-		log.Fatal(err)
-	}
-
-	values, totals, names := values(apps)
-
-	outputMarkdownTable(values, totals, names)
-
-	if err := createChart(*chartPath, values, totals, names); err != nil {
-		log.Fatal(err)
-	}
+type cpu struct {
+	cpuPct  float64 // percentage
+	cpuTime float64 // second
 }
 
 func readInCSV(csvPath string, apps map[string]runs) error {
@@ -91,8 +74,8 @@ func readInCSV(csvPath string, apps map[string]runs) error {
 
 		values := []float64{}
 
-		// 8-13 contain the run results
-		for i := 8; i <= 13; i++ {
+		// 8-16 contain the run results
+		for i := 8; i <= 16; i++ {
 			v, err := strconv.ParseFloat(d[i], 64)
 			if err != nil {
 				return err
@@ -100,6 +83,7 @@ func readInCSV(csvPath string, apps map[string]runs) error {
 			values = append(values, v)
 		}
 		newRun := run{values[0], values[1], values[2], values[3], values[4], values[5]}
+		newCPU := cpu{values[6], values[8]}
 
 		// get the app from the map and add the new run to it
 		name := d[0]
@@ -108,14 +92,18 @@ func readInCSV(csvPath string, apps map[string]runs) error {
 			k = runs{version: d[5]}
 		}
 		k.runs = append(k.runs, newRun)
+		k.cpus = append(k.cpus, newCPU)
 		apps[name] = k
 	}
 
 	return nil
 }
 
-func values(apps map[string]runs) ([]plotter.Values, []float64, []string) {
+func values(apps map[string]runs) ([]plotter.Values, []plotter.Values, []plotter.Values, []float64, []string) {
 	var cmdValues, apiValues, k8sValues, dnsSvcValues, appValues, dnsAnsValues plotter.Values
+	var cpuPctValues, cpuTimeValues plotter.Values
+	var cpuMinikube, cpuKind, cpuK3d plotter.Values
+
 	names := []string{}
 	totals := []float64{}
 
@@ -123,6 +111,8 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) {
 	for _, name := range []string{"minikube", "kind", "k3d"} {
 		app := apps[name]
 		var cmd, api, k8s, dnsSvc, appRun, dnsAns float64
+		var cpuPct, cpuTime float64
+
 		names = append(names, app.version)
 
 		for _, l := range app.runs {
@@ -134,6 +124,11 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) {
 			dnsAns += l.dnsAns
 		}
 
+		for _, l := range app.cpus {
+			cpuPct += l.cpuPct
+			cpuTime += l.cpuTime
+		}
+
 		c := float64(len(app.runs))
 
 		cmdAvg := cmd / c
@@ -143,6 +138,9 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) {
 		appAvg := appRun / c
 		dnsAnsAvg := dnsAns / c
 
+		cpuPctAvg := cpuPct / c
+		cpuTimeAvg := cpuTime / c
+
 		cmdValues = append(cmdValues, cmdAvg)
 		apiValues = append(apiValues, apiAvg)
 		k8sValues = append(k8sValues, k8sAvg)
@@ -152,11 +150,32 @@ func values(apps map[string]runs) ([]plotter.Values, []float64, []string) {
 
 		total := cmdAvg + apiAvg + k8sAvg + dnsSvcAvg + appAvg + dnsAnsAvg
 		totals = append(totals, total)
+
+		cpuPctValues = append(cpuPctValues, cpuPctAvg)
+		cpuTimeValues = append(cpuTimeValues, cpuTimeAvg)
+
+		cpuSummary := []float64{cpuPctAvg, cpuTimeAvg}
+
+		switch name {
+		case "minikube":
+			cpuMinikube = cpuSummary
+		case "kind":
+			cpuKind = cpuSummary
+		case "k3d":
+			cpuK3d = cpuSummary
+		}
+
 	}
 
-	values := []plotter.Values{cmdValues, apiValues, k8sValues, dnsSvcValues, appValues, dnsAnsValues}
+	runningTime := []plotter.Values{cmdValues, apiValues, k8sValues, dnsSvcValues, appValues, dnsAnsValues}
+
+	// for markdown table, row is either cpu utilization or cpu time, col is process name
+	cpu := []plotter.Values{cpuPctValues, cpuTimeValues}
 
-	return values, totals, names
+	// row is process name, col is either cpu utilization, or cpu time
+	cpureverse := []plotter.Values{cpuMinikube, cpuKind, cpuK3d}
+
+	return runningTime, cpu, cpureverse, totals, names
 }
 
 func outputMarkdownTable(categories []plotter.Values, totals []float64, names []string) {
@@ -184,7 +203,7 @@ func outputMarkdownTable(categories []plotter.Values, totals []float64, names []
 	t.SetCenterSeparator("|")
 	t.AppendBulk(c)
 	t.Render()
-	fmt.Println(b.String())
+	data.TimeMarkdown = b.String()
 }
 
 func createChart(chartPath string, values []plotter.Values, totals []float64, names []string) error {
@@ -252,7 +271,13 @@ func createChart(chartPath string, values []plotter.Values, totals []float64, na
 
 	p.Add(l)
 
-	return p.Save(12*vg.Inch, 8*vg.Inch, chartPath)
+	if err := p.Save(12*vg.Inch, 8*vg.Inch, chartPath); err != nil {
+		return err
+	}
+
+	data.TimeChart = chartPath
+
+	return nil
 }
 
 func createBars(values plotter.Values, index int) (*plotter.BarChart, error) {
diff --git a/hack/benchmark/time-to-k8s/cpu.go b/hack/benchmark/time-to-k8s/cpu.go
new file mode 100644
index 000000000..a69d10672
--- /dev/null
+++ b/hack/benchmark/time-to-k8s/cpu.go
@@ -0,0 +1,116 @@
+/*
+Copyright 2021 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 (
+	"bytes"
+	"fmt"
+
+	"github.com/olekukonko/tablewriter"
+	"gonum.org/v1/plot"
+	"gonum.org/v1/plot/plotter"
+	"gonum.org/v1/plot/plotutil"
+	"gonum.org/v1/plot/vg"
+)
+
+var fields = []string{"CPU Utilization(%)", "CPU Time(seconds)"}
+
+func cpuMarkdownTable(categories []plotter.Values, names []string) {
+
+	// categories row is the either cpu pct or time, col is process name
+	headers := append([]string{""}, names...)
+	c := [][]string{}
+	for i, values := range categories {
+		row := []string{fields[i]}
+		for _, value := range values {
+			row = append(row, fmt.Sprintf("%.3f", value))
+		}
+		c = append(c, row)
+	}
+	b := new(bytes.Buffer)
+	t := tablewriter.NewWriter(b)
+	t.SetAutoWrapText(false)
+	t.SetHeader(headers)
+	t.SetAutoFormatHeaders(false)
+	t.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false})
+	t.SetCenterSeparator("|")
+	t.AppendBulk(c)
+	t.Render()
+	data.CPUMarkdown = b.String()
+}
+
+func createCPUChart(chartPath string, values []plotter.Values, names []string) error {
+	p := plot.New()
+	p.Title.Text = "CPU utilization to go from 0 to successful Kubernetes deployment"
+	p.Y.Label.Text = "CPU utilization"
+	setYMax(p, values)
+
+	w := vg.Points(20)
+
+	barsA, err := plotter.NewBarChart(values[0], w)
+	if err != nil {
+		return err
+	}
+	barsA.LineStyle.Width = vg.Length(0)
+	barsA.Color = plotutil.Color(0)
+	barsA.Offset = -w
+
+	barsB, err := plotter.NewBarChart(values[1], w)
+	if err != nil {
+		return err
+	}
+	barsB.LineStyle.Width = vg.Length(0)
+	barsB.Color = plotutil.Color(1)
+	barsB.Offset = 0
+
+	barsC, err := plotter.NewBarChart(values[2], w)
+	if err != nil {
+		return err
+	}
+	barsC.LineStyle.Width = vg.Length(0)
+	barsC.Color = plotutil.Color(2)
+	barsC.Offset = w
+
+	p.Add(barsA, barsB, barsC)
+	p.Legend.Add(names[0], barsA)
+	p.Legend.Add(names[1], barsB)
+	p.Legend.Add(names[2], barsC)
+
+	p.Legend.Top = true
+	p.NominalX(fields...)
+
+	if err := p.Save(8*vg.Inch, 8*vg.Inch, chartPath); err != nil {
+		return err
+	}
+
+	data.CPUChart = chartPath
+
+	return nil
+}
+
+func setYMax(p *plot.Plot, values []plotter.Values) {
+	ymax := 0.0
+	for _, value := range values {
+		for _, v := range value {
+			if v > ymax {
+				ymax = v
+			}
+		}
+	}
+
+	p.Y.Max = ymax + 5
+}
diff --git a/hack/benchmark/time-to-k8s/page.go b/hack/benchmark/time-to-k8s/page.go
new file mode 100644
index 000000000..36cfb6f5b
--- /dev/null
+++ b/hack/benchmark/time-to-k8s/page.go
@@ -0,0 +1,108 @@
+/*
+Copyright 2021 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 (
+	"flag"
+	"fmt"
+	"log"
+	"os"
+	"text/template"
+	"time"
+)
+
+var page = `---
+title: "{{.Version}} Benchmark"
+linkTitle: "{{.Version}} Benchmark"
+weight: -{{.Weight}}
+---
+
+![time-to-k8s]({{.TimeChart}})
+
+{{.TimeMarkdown}}
+
+
+![cpu-to-k8s]({{.CPUChart}})
+
+{{.CPUMarkdown}}
+`
+
+type Data struct {
+	Version      string
+	Weight       string
+	TimeChart    string
+	TimeMarkdown string
+	CPUChart     string
+	CPUMarkdown  string
+}
+
+var data Data
+
+func main() {
+	csvPath := flag.String("csv", "", "path to the CSV file")
+	imagePath := flag.String("image", "", "path to output the chart to")
+	pagePath := flag.String("page", "", "path to output the page to")
+
+	flag.Parse()
+
+	t := time.Now()
+	data.Weight = fmt.Sprintf("%d%d%d", t.Year(), t.Month(), t.Day())
+
+	// map of the apps (minikube, kind, k3d) and their runs
+	apps := make(map[string]runs)
+
+	if err := readInCSV(*csvPath, apps); err != nil {
+		log.Fatalf("fail to readin cvs file with err %s", err)
+	}
+
+	runningTime, cpuMdPlot, cpuChartPlot, totals, names := values(apps)
+
+	// markdown table for running time
+	outputMarkdownTable(runningTime, totals, names)
+
+	// chart for running time
+	if err := createChart(*imagePath+"-time.png", runningTime, totals, names); err != nil {
+		log.Fatalf("fail to create running time chart with err %s", err)
+	}
+
+	// markdown table for cpu utilization
+	cpuMarkdownTable(cpuMdPlot, names)
+
+	// chart for cpu utilization
+	if err := createCPUChart(*imagePath+"-cpu.png", cpuChartPlot, names); err != nil {
+		log.Fatalf("fail to create CPU chart with err %s", err)
+	}
+
+	// generate page and save
+	tmpl, err := template.New("msg").Parse(page)
+
+	if err != nil {
+		log.Fatal(err)
+	}
+
+	f, err := os.Create(*pagePath)
+	if err != nil {
+		log.Fatalf("fail to create file under path %s, with err %s", *pagePath, err)
+	}
+
+	if err = tmpl.Execute(f, data); err != nil {
+		log.Fatalf("fail to populate the page with err %s", err)
+	}
+
+	f.Close()
+
+}
diff --git a/hack/benchmark/time-to-k8s/time-to-k8s.sh b/hack/benchmark/time-to-k8s/time-to-k8s.sh
index 213f538ae..348cd86a9 100755
--- a/hack/benchmark/time-to-k8s/time-to-k8s.sh
+++ b/hack/benchmark/time-to-k8s/time-to-k8s.sh
@@ -37,12 +37,10 @@ run_benchmark() {
 		go run . --config local-kubernetes.yaml --iterations 10 --output output.csv )
 }
 
-generate_chart() {
-	go run ./hack/benchmark/time-to-k8s/chart.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --output ./site/static/images/benchmarks/timeToK8s/"$1".png >> ./site/content/en/docs/benchmarks/timeToK8s/"$1".md
-}
 
+# create page and generate chart inside the code
 create_page() {
-	printf -- "---\ntitle: \"%s Benchmark\"\nlinkTitle: \"%s Benchmark\"\nweight: -$(date +'%Y%m%d')\n---\n\n![time-to-k8s](/images/benchmarks/timeToK8s/%s.png)\n" "$1" "$1" "$1" > ./site/content/en/docs/benchmarks/timeToK8s/"$1".md
+	go run ./hack/benchmark/time-to-k8s/*.go --csv ./hack/benchmark/time-to-k8s/time-to-k8s-repo/output.csv --image ./site/static/images/benchmarks/timeToK8s/"$1" --page ./site/content/en/docs/benchmarks/timeToK8s/"$1".md
 }
 
 cleanup() {
@@ -56,5 +54,4 @@ install_minikube
 VERSION=$(minikube version --short)
 run_benchmark
 create_page "$VERSION"
-generate_chart "$VERSION"
 cleanup
diff --git a/pkg/drivers/kic/kic.go b/pkg/drivers/kic/kic.go
index 8065153b8..c0f94908b 100644
--- a/pkg/drivers/kic/kic.go
+++ b/pkg/drivers/kic/kic.go
@@ -260,7 +260,7 @@ func (d *Driver) prepareSSH() error {
 			icaclsCmdOut, icaclsCmdErr := icaclsCmd.CombinedOutput()
 
 			if icaclsCmdErr != nil {
-				return errors.Wrap(icaclsCmdErr, fmt.Sprintf("unable to execute icacls to set permissions: %s", icaclsCmdOut))
+				return errors.Wrap(icaclsCmdErr, "unable to execute icacls to set permissions")
 			}
 
 			if !strings.Contains(string(icaclsCmdOut), "Successfully processed 1 files; Failed processing 0 files") {
diff --git a/pkg/drivers/kic/types.go b/pkg/drivers/kic/types.go
index 548d4d821..cabd78432 100644
--- a/pkg/drivers/kic/types.go
+++ b/pkg/drivers/kic/types.go
@@ -24,13 +24,13 @@ import (
 
 const (
 	// Version is the current version of kic
-	Version = "v0.0.30-1647797120-13815"
+	Version = "v0.0.30"
 	// SHA of the kic base image
-	baseImageSHA = "90e8f7ee4065da728c0b80d303827e05ce4421985fe9bd7bdca30a55218347b5"
+	baseImageSHA = "02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2"
 	// The name of the GCR kicbase repository
-	gcrRepo = "gcr.io/k8s-minikube/kicbase-builds"
+	gcrRepo = "gcr.io/k8s-minikube/kicbase"
 	// The name of the Dockerhub kicbase repository
-	dockerhubRepo = "docker.io/kicbase/build"
+	dockerhubRepo = "docker.io/kicbase/stable"
 )
 
 var (
diff --git a/pkg/minikube/assets/addons.go b/pkg/minikube/assets/addons.go
index f84060372..172be0426 100755
--- a/pkg/minikube/assets/addons.go
+++ b/pkg/minikube/assets/addons.go
@@ -304,7 +304,7 @@ var Addons = map[string]*Addon{
 			"metrics-server-service.yaml",
 			"0640"),
 	}, false, "metrics-server", "kubernetes", map[string]string{
-		"MetricsServer": "metrics-server/metrics-server:v0.6.1@sha256:5ddc6458eb95f5c70bd13fdab90cbd7d6ad1066e5b528ad1dcb28b76c5fb2f00",
+		"MetricsServer": "metrics-server/metrics-server:v0.4.2@sha256:dbc33d7d35d2a9cc5ab402005aa7a0d13be6192f3550c7d42cba8d2d5e3a5d62",
 	}, map[string]string{
 		"MetricsServer": "k8s.gcr.io",
 	}),
diff --git a/pkg/minikube/config/types.go b/pkg/minikube/config/types.go
index 6af5c6407..513a61ded 100644
--- a/pkg/minikube/config/types.go
+++ b/pkg/minikube/config/types.go
@@ -97,7 +97,6 @@ type ClusterConfig struct {
 	MountUID                string
 	BinaryMirror            string // Mirror location for kube binaries (kubectl, kubelet, & kubeadm)
 	DisableOptimizations    bool
-	DisableMetrics          bool
 }
 
 // KubernetesConfig contains the parameters used to configure the VM Kubernetes.
diff --git a/pkg/minikube/constants/constants.go b/pkg/minikube/constants/constants.go
index b0a041339..ba39d8fb2 100644
--- a/pkg/minikube/constants/constants.go
+++ b/pkg/minikube/constants/constants.go
@@ -95,10 +95,8 @@ const (
 	MinikubeActivePodmanEnv = "MINIKUBE_ACTIVE_PODMAN"
 	// MinikubeForceSystemdEnv is used to force systemd as cgroup manager for the container runtime
 	MinikubeForceSystemdEnv = "MINIKUBE_FORCE_SYSTEMD"
-	// TestDiskUsedEnv is used in integration tests for insufficient storage with 'minikube status' (in %)
+	// TestDiskUsedEnv is used in integration tests for insufficient storage with 'minikube status'
 	TestDiskUsedEnv = "MINIKUBE_TEST_STORAGE_CAPACITY"
-	// TestDiskAvailableEnv is used in integration tests for insufficient storage with 'minikube status' (in GiB)
-	TestDiskAvailableEnv = "MINIKUBE_TEST_AVAILABLE_STORAGE"
 
 	// scheduled stop constants
 
diff --git a/pkg/minikube/cruntime/cri.go b/pkg/minikube/cruntime/cri.go
index 7267f5ec3..ae9be0824 100644
--- a/pkg/minikube/cruntime/cri.go
+++ b/pkg/minikube/cruntime/cri.go
@@ -140,14 +140,13 @@ func listCRIContainers(cr CommandRunner, root string, o ListContainersOptions) (
 
 // pauseContainers pauses a list of containers
 func pauseCRIContainers(cr CommandRunner, root string, ids []string) error {
-	baseArgs := []string{"runc"}
+	args := []string{"runc"}
 	if root != "" {
-		baseArgs = append(baseArgs, "--root", root)
+		args = append(args, "--root", root)
 	}
-	baseArgs = append(baseArgs, "pause")
+	args = append(args, "pause")
 	for _, id := range ids {
-		args := baseArgs
-		args = append(args, id)
+		args := append(args, id)
 		if _, err := cr.RunCmd(exec.Command("sudo", args...)); err != nil {
 			return errors.Wrap(err, "runc")
 		}
diff --git a/pkg/minikube/driver/driver.go b/pkg/minikube/driver/driver.go
index 0b2e317c9..34e277009 100644
--- a/pkg/minikube/driver/driver.go
+++ b/pkg/minikube/driver/driver.go
@@ -24,8 +24,6 @@ import (
 	"strconv"
 	"strings"
 
-	"golang.org/x/text/cases"
-	"golang.org/x/text/language"
 	"k8s.io/klog/v2"
 	"k8s.io/minikube/pkg/drivers/kic/oci"
 	"k8s.io/minikube/pkg/minikube/constants"
@@ -223,7 +221,7 @@ func FullName(name string) string {
 		}
 		return "Docker"
 	default:
-		return cases.Title(language.Und).String(name)
+		return strings.Title(name)
 	}
 }
 
diff --git a/pkg/minikube/machine/start.go b/pkg/minikube/machine/start.go
index 44cd1fbe1..e9d9ef883 100644
--- a/pkg/minikube/machine/start.go
+++ b/pkg/minikube/machine/start.go
@@ -34,7 +34,6 @@ import (
 	"github.com/docker/machine/libmachine/host"
 	"github.com/juju/mutex"
 	"github.com/pkg/errors"
-	"github.com/spf13/viper"
 	"k8s.io/klog/v2"
 	"k8s.io/minikube/pkg/drivers/kic/oci"
 	"k8s.io/minikube/pkg/minikube/command"
@@ -234,36 +233,17 @@ func postStartValidations(h *host.Host, drvName string) {
 		return
 	}
 
-	if viper.GetBool("force") {
-		return
-	}
-
 	// make sure /var isn't full,  as pod deployments will fail if it is
 	percentageFull, err := DiskUsed(r, "/var")
 	if err != nil {
 		klog.Warningf("error getting percentage of /var that is free: %v", err)
 	}
-
-	availableGiB, err := DiskAvailable(r, "/var")
-	if err != nil {
-		klog.Warningf("error getting GiB of /var that is available: %v", err)
-	}
-	const thresholdGiB = 20
-
-	if percentageFull >= 99 && availableGiB < thresholdGiB {
-		exit.Message(
-			kind,
-			`{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.`,
-			out.V{"n": name, "p": percentageFull},
-		)
+	if percentageFull >= 99 {
+		exit.Message(kind, `{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)`, out.V{"n": name, "p": percentageFull})
 	}
 
-	if percentageFull >= 85 && availableGiB < thresholdGiB {
-		out.WarnReason(
-			kind,
-			`{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.`,
-			out.V{"n": name, "p": percentageFull},
-		)
+	if percentageFull >= 85 {
+		out.WarnReason(kind, `{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)`, out.V{"n": name, "p": percentageFull})
 	}
 }
 
@@ -282,22 +262,7 @@ func DiskUsed(cr command.Runner, dir string) (int, error) {
 	return strconv.Atoi(percentage)
 }
 
-// DiskAvailable returns the available capacity of dir in the VM/container in GiB
-func DiskAvailable(cr command.Runner, dir string) (int, error) {
-	if s := os.Getenv(constants.TestDiskAvailableEnv); s != "" {
-		return strconv.Atoi(s)
-	}
-	output, err := cr.RunCmd(exec.Command("sh", "-c", fmt.Sprintf("df -BG %s | awk 'NR==2{print $4}'", dir)))
-	if err != nil {
-		klog.Warningf("error running df -BG /var: %v\n%v", err, output.Output())
-		return 0, err
-	}
-	gib := strings.TrimSpace(output.Stdout.String())
-	gib = strings.Trim(gib, "G")
-	return strconv.Atoi(gib)
-}
-
-// postStartSetup are functions shared between startHost and fixHost
+// postStart are functions shared between startHost and fixHost
 func postStartSetup(h *host.Host, mc config.ClusterConfig) error {
 	klog.Infof("post-start starting for %q (driver=%q)", h.Name, h.DriverName)
 	start := time.Now()
diff --git a/pkg/minikube/registry/drvs/docker/docker.go b/pkg/minikube/registry/drvs/docker/docker.go
index 8dbc83cb4..cc6bb558b 100644
--- a/pkg/minikube/registry/drvs/docker/docker.go
+++ b/pkg/minikube/registry/drvs/docker/docker.go
@@ -22,13 +22,12 @@ import (
 	"os"
 	"os/exec"
 	"runtime"
+	"strconv"
 	"strings"
 	"time"
 
-	"github.com/blang/semver/v4"
 	"github.com/docker/machine/libmachine/drivers"
 	"github.com/pkg/errors"
-	"github.com/spf13/viper"
 	"k8s.io/klog/v2"
 	"k8s.io/minikube/pkg/drivers/kic"
 	"k8s.io/minikube/pkg/drivers/kic/oci"
@@ -38,11 +37,8 @@ import (
 	"k8s.io/minikube/pkg/minikube/registry"
 )
 
-const (
-	docURL                   = "https://minikube.sigs.k8s.io/docs/drivers/docker/"
-	minDockerVersion         = "18.09.0"
-	recommendedDockerVersion = "20.10.0"
-)
+var docURL = "https://minikube.sigs.k8s.io/docs/drivers/docker/"
+var minDockerVersion = []int{18, 9, 0}
 
 func init() {
 	if err := registry.Register(registry.DriverDef{
@@ -134,13 +130,11 @@ func status() (retState registry.State) {
 	}()
 
 	klog.Infof("docker version: %s", o)
-	if !viper.GetBool("force") {
-		s := checkDockerVersion(strings.TrimSpace(string(o))) // remove '\n' from o at the end
-		if s.Error != nil {
-			return s
-		}
-		recordImprovement(s)
+	s := checkDockerVersion(strings.TrimSpace(string(o))) // remove '\n' from o at the end
+	if s.Error != nil {
+		return s
 	}
+	recordImprovement(s)
 
 	si, err := oci.CachedDaemonInfo("docker")
 	if err != nil {
@@ -180,9 +174,8 @@ func checkDockerVersion(o string) registry.State {
 		}
 	}
 
-	versionMsg := fmt.Sprintf("(Minimum recommended version is %s, minimum supported version is %s, current version is %s)", recommendedDockerVersion, minDockerVersion, parts[1])
-	hintInstallOfficial := fmt.Sprintf("Install the official release of %s %s", driver.FullName(driver.Docker), versionMsg)
-	hintUpdate := fmt.Sprintf("Upgrade %s to a newer version %s", driver.FullName(driver.Docker), versionMsg)
+	hintInstallOfficial := fmt.Sprintf("Install the official release of %s (Minimum recommended version is %2d.%02d.%d, current version is %s)",
+		driver.FullName(driver.Docker), minDockerVersion[0], minDockerVersion[1], minDockerVersion[2], parts[1])
 
 	p := strings.SplitN(parts[1], ".", 3)
 	switch l := len(p); l {
@@ -202,40 +195,31 @@ func checkDockerVersion(o string) registry.State {
 		}
 	}
 
-	currSemver, err := semver.ParseTolerant(strings.Join(p, "."))
-	if err != nil {
-		return registry.State{
-			Installed:        true,
-			Healthy:          true,
-			NeedsImprovement: true,
-			Fix:              hintInstallOfficial,
-			Doc:              docURL,
+	for i, s := range p {
+		k, err := strconv.Atoi(s)
+		if err != nil {
+			return registry.State{
+				Installed:        true,
+				Healthy:          true,
+				NeedsImprovement: true,
+				Fix:              hintInstallOfficial,
+				Doc:              docURL,
+			}
 		}
-	}
-	// these values are consts and their conversions are covered in unit tests
-	minSemver, _ := semver.ParseTolerant(minDockerVersion)
-	recSemver, _ := semver.ParseTolerant(recommendedDockerVersion)
 
-	if currSemver.GTE(recSemver) {
-		return registry.State{Installed: true, Healthy: true, Error: nil}
-	}
-	if currSemver.GTE(minSemver) {
-		return registry.State{
-			Installed:        true,
-			Healthy:          true,
-			NeedsImprovement: true,
-			Fix:              hintUpdate,
-			Doc:              docURL + "#requirements"}
+		if k > minDockerVersion[i] {
+			return registry.State{Installed: true, Healthy: true, Error: nil}
+		} else if k < minDockerVersion[i] {
+			return registry.State{
+				Installed:        true,
+				Healthy:          true,
+				NeedsImprovement: true,
+				Fix:              fmt.Sprintf("Upgrade %s to a newer version (Minimum recommended version is %2d.%02d.%d)", driver.FullName(driver.Docker), minDockerVersion[0], minDockerVersion[1], minDockerVersion[2]),
+				Doc:              docURL + "#requirements"}
+		}
 	}
 
-	return registry.State{
-		Reason:           "PROVIDER_DOCKER_VERSION_LOW",
-		Error:            oci.ErrMinDockerVersion,
-		Installed:        true,
-		Healthy:          false,
-		NeedsImprovement: true,
-		Fix:              hintUpdate,
-		Doc:              docURL + "#requirements"}
+	return registry.State{Installed: true, Healthy: true, Error: nil}
 }
 
 // checkNeedsImprovement if overlay mod is installed on a system
diff --git a/pkg/minikube/tunnel/kic/service_tunnel.go b/pkg/minikube/tunnel/kic/service_tunnel.go
index 8b924c73f..65eb8d194 100644
--- a/pkg/minikube/tunnel/kic/service_tunnel.go
+++ b/pkg/minikube/tunnel/kic/service_tunnel.go
@@ -30,20 +30,18 @@ import (
 
 // ServiceTunnel ...
 type ServiceTunnel struct {
-	sshPort        string
-	sshKey         string
-	v1Core         typed_core.CoreV1Interface
-	sshConn        *sshConn
-	suppressStdOut bool
+	sshPort string
+	sshKey  string
+	v1Core  typed_core.CoreV1Interface
+	sshConn *sshConn
 }
 
 // NewServiceTunnel ...
-func NewServiceTunnel(sshPort, sshKey string, v1Core typed_core.CoreV1Interface, suppressStdOut bool) *ServiceTunnel {
+func NewServiceTunnel(sshPort, sshKey string, v1Core typed_core.CoreV1Interface) *ServiceTunnel {
 	return &ServiceTunnel{
-		sshPort:        sshPort,
-		sshKey:         sshKey,
-		v1Core:         v1Core,
-		suppressStdOut: suppressStdOut,
+		sshPort: sshPort,
+		sshKey:  sshKey,
+		v1Core:  v1Core,
 	}
 }
 
@@ -60,7 +58,6 @@ func (t *ServiceTunnel) Start(svcName, namespace string) ([]string, error) {
 	}
 
 	go func() {
-		t.sshConn.suppressStdOut = t.suppressStdOut
 		err = t.sshConn.startAndWait()
 		if err != nil {
 			klog.Errorf("error starting ssh tunnel: %v", err)
diff --git a/pkg/minikube/tunnel/kic/ssh_conn.go b/pkg/minikube/tunnel/kic/ssh_conn.go
index f7468aefd..60e6dcd4d 100644
--- a/pkg/minikube/tunnel/kic/ssh_conn.go
+++ b/pkg/minikube/tunnel/kic/ssh_conn.go
@@ -30,12 +30,11 @@ import (
 )
 
 type sshConn struct {
-	name           string
-	service        string
-	cmd            *exec.Cmd
-	ports          []int
-	activeConn     bool
-	suppressStdOut bool
+	name       string
+	service    string
+	cmd        *exec.Cmd
+	ports      []int
+	activeConn bool
 }
 
 func createSSHConn(name, sshPort, sshKey string, resourcePorts []int32, resourceIP string, resourceName string) *sshConn {
@@ -140,9 +139,7 @@ func createSSHConnWithRandomPorts(name, sshPort, sshKey string, svc *v1.Service)
 }
 
 func (c *sshConn) startAndWait() error {
-	if !c.suppressStdOut {
-		out.Step(style.Running, "Starting tunnel for service {{.service}}.", out.V{"service": c.service})
-	}
+	out.Step(style.Running, "Starting tunnel for service {{.service}}.", out.V{"service": c.service})
 
 	err := c.cmd.Start()
 	if err != nil {
@@ -162,9 +159,7 @@ func (c *sshConn) startAndWait() error {
 func (c *sshConn) stop() error {
 	if c.activeConn {
 		c.activeConn = false
-		if !c.suppressStdOut {
-			out.Step(style.Stopping, "Stopping tunnel for service {{.service}}.", out.V{"service": c.service})
-		}
+		out.Step(style.Stopping, "Stopping tunnel for service {{.service}}.", out.V{"service": c.service})
 		err := c.cmd.Process.Kill()
 		if err == os.ErrProcessDone {
 			// No need to return an error here
@@ -172,8 +167,6 @@ func (c *sshConn) stop() error {
 		}
 		return err
 	}
-	if !c.suppressStdOut {
-		out.Step(style.Stopping, "Stopped tunnel for service {{.service}}.", out.V{"service": c.service})
-	}
+	out.Step(style.Stopping, "Stopped tunnel for service {{.service}}.", out.V{"service": c.service})
 	return nil
 }
diff --git a/site/content/en/docs/commands/start.md b/site/content/en/docs/commands/start.md
index 94c46620e..a07ba894f 100644
--- a/site/content/en/docs/commands/start.md
+++ b/site/content/en/docs/commands/start.md
@@ -26,7 +26,7 @@ minikube start [flags]
       --apiserver-names strings           A set of apiserver names which are used in the generated certificate for kubernetes.  This can be used if you want to make the apiserver available from outside the machine
       --apiserver-port int                The apiserver listening port (default 8443)
       --auto-update-drivers               If set, automatically updates drivers to the latest version. Defaults to true. (default true)
-      --base-image string                 The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase-builds:v0.0.30-1647797120-13815@sha256:90e8f7ee4065da728c0b80d303827e05ce4421985fe9bd7bdca30a55218347b5")
+      --base-image string                 The base image to use for docker/podman drivers. Intended for local development. (default "gcr.io/k8s-minikube/kicbase:v0.0.30@sha256:02c921df998f95e849058af14de7045efc3954d90320967418a0d1f182bbc0b2")
       --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)
@@ -36,8 +36,7 @@ minikube start [flags]
       --cri-socket string                 The cri socket path to be used.
       --delete-on-failure                 If set, delete the current cluster if start fails and try again. Defaults to false.
       --disable-driver-mounts             Disables the filesystem mounts provided by the hypervisors
-      --disable-metrics                   If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.
-      --disable-optimizations             If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.
+      --disable-optimizations             If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.
       --disk-size string                  Disk size allocated to the minikube VM (format: <number>[<unit>], where unit = b, k, m or g). (default "20000mb")
       --dns-domain string                 The cluster dns domain name used in the Kubernetes cluster (default "cluster.local")
       --dns-proxy                         Enable proxy for NAT DNS requests (virtualbox driver only)
diff --git a/site/content/en/docs/drivers/docker.md b/site/content/en/docs/drivers/docker.md
index 25121e945..9b4bfd63f 100644
--- a/site/content/en/docs/drivers/docker.md
+++ b/site/content/en/docs/drivers/docker.md
@@ -13,7 +13,7 @@ The Docker driver allows you to install Kubernetes into an existing Docker insta
 {{% tab "Standard Docker" %}}
 ## Requirements
 
-- [Install Docker](https://hub.docker.com/search?q=&type=edition&offering=community&sort=updated_at&order=desc) 18.09 or higher (20.10 or higher is recommended)
+- [Install Docker](https://hub.docker.com/search?q=&type=edition&offering=community&sort=updated_at&order=desc) 18.09 or higher
 - amd64 or arm64 system.
 - If using WSL complete [these steps]({{<ref "/docs/tutorials/wsl_docker_driver">}}) first
 
diff --git a/site/content/en/docs/tutorials/docker_desktop_replacement.md b/site/content/en/docs/tutorials/docker_desktop_replacement.md
index d6d9c3094..1ef5eea6f 100644
--- a/site/content/en/docs/tutorials/docker_desktop_replacement.md
+++ b/site/content/en/docs/tutorials/docker_desktop_replacement.md
@@ -19,14 +19,7 @@ date: 2022-02-02
 ## Steps
 <h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">1</strong></span>Install the Docker CLI</h2>
 {{% tabs %}}
-{{% mactab %}}
-{{% tabs %}}
-{{% tab brew %}}
-```shell
-brew install docker
-```
-{{% /tab %}}
-{{% tab Manual %}}
+{{% tab macOS %}}
 1. Download the static binary archive. Go to https://download.docker.com/mac/static/stable/ and select `x86_64` (for Mac on Intel chip) or `aarch64` (for Mac on Apple silicon), and then download the `.tgz` file relating to the version of Docker Engine you want to install.
 
 2. Extract the archive using the `tar` utility. The `docker` binary is extracted.
@@ -44,24 +37,7 @@ sudo xattr -rc docker
 sudo cp docker/docker /usr/local/bin/
 ```
 {{% /tab %}}
-{{% /tabs %}}
-{{% /mactab %}}
-{{% windowstab %}}
-{{% tabs %}}
-{{% tab Chocolatey %}}
-**Please Note**: The docker engine requires the Windows Features: Containers and Microsoft-Hyper-V to be installed in order to function correctly. You can install these with the chocolatey command:
-```shell
-choco install Containers Microsoft-Hyper-V --source windowsfeatures
-```
-
-1. Install docker-engine
-```shell
-choco install docker-engine
-```
-
-2. This package creates the group `docker-users` and adds the installing user to it. In order to communicate with docker you will need to log out and back in.
-{{% /tab %}}
-{{% tab Manual %}}
+{{% tab Windows %}}
 1. Download the static binary archive. Go to https://download.docker.com/win/static/stable/x86_64 and select the latest version from the list.
 
 2. Run the following PowerShell commands to install and extract the archive to your program files:
@@ -74,8 +50,6 @@ Expand-Archive /path/to/<FILE>.zip -DestinationPath $Env:ProgramFiles
 4. Restart Windows for the `PATH` change to take effect.
 {{% /tab %}}
 {{% /tabs %}}
-{{% /windowstab %}}
-{{% /tabs %}}
 
 <h2 class="step"><span class="fa-stack fa-1x"><i class="fa fa-circle fa-stack-2x"></i><strong class="fa-stack-1x text-primary">2</strong></span>Start minikube</h2>
 Start minikube with a VM driver and `docker` container runtime if not already running.
diff --git a/site/content/en/docs/tutorials/setup_minikube_gui.md b/site/content/en/docs/tutorials/setup_minikube_gui.md
index 13eaa64d2..c50738878 100644
--- a/site/content/en/docs/tutorials/setup_minikube_gui.md
+++ b/site/content/en/docs/tutorials/setup_minikube_gui.md
@@ -19,21 +19,11 @@ date: 2022-02-25
 ## Steps
 
 {{% tabs %}}
-{{% mactab %}}
-{{% tabs %}}
-{{% tab Stable %}}
+{{% tab macOS %}}
 1. Download the zipped folder
 ```shell
 curl -LO https://storage.googleapis.com/minikube-gui/v0.0.1/minikube-gui-mac.zip
 ```
-{{% /tab %}}
-{{% tab Nightly %}}
-1. Download the zipped folder
-```shell
-curl -LO https://storage.googleapis.com/minikube-gui/nightly/minikube-gui-mac.zip
-```
-{{% /tab %}}
-{{% /tabs %}}
 
 2. Unzip
 ```shell
@@ -50,22 +40,12 @@ open dist/systray.app
 ![Mac unverified developer](/images/gui/mac.png)
 
 5. Open System Preferences and go to Security & Privacy -> General and click "Open Anyway".
-{{% /mactab %}}
-{{% windowstab %}}
-{{% tabs %}}
-{{% tab Stable %}}
+{{% /tab %}}
+{{% tab Windows %}}
 1. Download the zipped folder via PowerShell (below) or via your [browser](https://storage.googleapis.com/minikube-gui/v0.0.1/minikube-gui-windows.zip) (faster)
 ```shell
 Invoke-WebRequest -Uri 'https://storage.googleapis.com/minikube-gui/v0.0.1/minikube-gui-windows.zip' -UseBasicParsing
 ```
-{{% /tab %}}
-{{% tab Nightly %}}
-1. Download the zipped folder via PowerShell (below) or via your [browser](https://storage.googleapis.com/minikube-gui/nightly/minikube-gui-windows.zip) (faster)
-```shell
-Invoke-WebRequest -Uri 'https://storage.googleapis.com/minikube-gui/nightly/minikube-gui-windows.zip' -UseBasicParsing
-```
-{{% /tab %}}
-{{% /tabs %}}
 
 2. Unzip
 ```shell
@@ -80,22 +60,12 @@ Expand-Archive minikube-gui-windows.zip
 4. If you see the following, click `More info` and then `Run anyway`
 
 ![Windows unreconized app](/images/gui/windows.png)
-{{% /windowstab %}}
-{{% linuxtab %}}
-{{% tabs %}}
-{{% tab Stable %}}
-1. Download the zipped folder
-```shell
-curl -LO https://storage.googleapis.com/minikube-gui/v0.0.1/minikube-gui-linux.zip
-```
 {{% /tab %}}
-{{% tab Nightly %}}
+{{% tab Linux %}}
 1. Download the zipped folder
 ```shell
-curl -LO https://storage.googleapis.com/minikube-gui/nightly/minikube-gui-linux.zip
+curl -LO https://storage.googleapis.com/minikube-gui/v0.0.1/minikube-gui-linux.zip
 ```
-{{% /tab %}}
-{{% /tabs %}}
 
 2. Unzip
 ```shell
@@ -106,6 +76,6 @@ unzip minikube-gui-linux.zip
 ```shell
 dist/systray
 ```
-{{% /linuxtab %}}
+{{% /tab %}}
 {{% /tabs %}}
 
diff --git a/site/static/js/tabs.js b/site/static/js/tabs.js
index ec09a010b..b7e4bd76b 100644
--- a/site/static/js/tabs.js
+++ b/site/static/js/tabs.js
@@ -1,8 +1,8 @@
 /* Tabs JS implementation. Borrowed from Skaffold */
 function initTabs() {
   try{
-    $('.tab-content').children('.tab-pane').each(function(idx, item) {
-      var navTabs = $(this).closest('.code-tabs').children('.nav-tabs'),
+    $('.tab-content').find('.tab-pane').each(function(idx, item) {
+      var navTabs = $(this).closest('.code-tabs').find('.nav-tabs'),
           title = escape($(this).attr('title')).replace(/%20/g, ' '),
           os = escape($(this).attr('os') || '');
       navTabs.append('<li class="nav-tab '+os+'"><a href="#" class="nav-tab">'+title+'</a></li>');
@@ -23,9 +23,8 @@ function initTabs() {
       var tab = $(this).parent(),
           tabIndex = tab.index(),
           tabPanel = $(this).closest('.code-tabs'),
-          tabPane = tabPanel.find('.tab-content:first').children('.tab-pane').eq(tabIndex);
-      tab.siblings().removeClass('active');
-      tabPane.siblings().removeClass('active');
+          tabPane = tabPanel.find('.tab-pane').eq(tabIndex);
+      tabPanel.find('.active').removeClass('active');
       tab.addClass('active');
       tabPane.addClass('active');
     });
diff --git a/translations/de.json b/translations/de.json
index 71b66a8d4..380de0873 100644
--- a/translations/de.json
+++ b/translations/de.json
@@ -326,8 +326,7 @@
 	"If present, writes to the provided file instead of stdout.": "Falls gesetzt, wird in die angegebene Datei geschrieben anstatt auf stdout.",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "Falls gesetzt, werden alle Treiber automatisch auf die aktuellste Version geupdated. Default: true",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "Falls gesetzt, lösche den Cluster wenn der Start fehlschlägt und versuche erneut zu starten. Default: false",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Falls gesetzt, lade einen tarball von vorbereiteten Images herunter, falls vorhanden, um die Startzeit zu verbessern. Default: true",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "Fall gesetzt, zwinge die Container Runtime systemd als cgroup Manager zu verwenden. Default: false",
 	"If set, install addons. Defaults to true.": "Falls gesetzt, werden Addons installiert. Default: true",
@@ -418,8 +417,6 @@
 	"No minikube profile was found. ": "Kein Minikube Profil gefunden. ",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Kein möglicher Treiber gefunden. Versuchen Sie mit --driver anzugeben oder schauen Sie unter https://minikube.sigs.k8s.io/docs/start/",
 	"No such addon {{.name}}": "Addon {{.name}} existiert nicht",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "Node {{.name}} konnte nicht gestartet werden. Lösche den Node und versuche es erneut.",
 	"Node {{.name}} was successfully deleted.": "Node {{.name}} erfolgreich gelöscht.",
 	"Node {{.nodeName}} does not exist.": "Node {{.nodeName}} existiert nicht.",
@@ -893,7 +890,6 @@
 	"dry-run validation complete!": "dry-run Validierung komplett!",
 	"enable failed": "aktivieren fehlgeschlagen",
 	"error creating clientset": "Fehler beim Anlegen des Clientsets",
-	"error creatings urls": "",
 	"error getting primary control plane": "Fehler beim Ermitteln der primären Kontroll-Ebene",
 	"error getting ssh port": "Fehler beim Ermitteln des ssh Ports",
 	"error initializing tracing: {{.Error}}": "Fehler beim Initialisieren des Tracings: {{.Error}}",
@@ -988,7 +984,7 @@
 	"zsh completion.": "",
 	"{{ .name }}: Suggestion: {{ .suggestion}}": "{{ .name }}: Vorschlag: {{ .suggestion}}",
 	"{{.Driver}} is currently using the {{.StorageDriver}} storage driver, consider switching to overlay2 for better performance": "{{.Driver}} verwendet derzeit den {{.StorageDriver}} Storage Treiber, erwäge zu overlay2 zu wechseln für bessere Performance",
-	"{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} Node{{if gt .count 1}}s{{end}} angehalten.",
+	"{{.count}} node{{if gt .count 1}}s{{end}} stopped.": "{{.count}} Node{{if get .count 1}}s{{end}} angehalten.",
 	"{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} is missing, will recreate.": "{{.driver_name}} \"{{.cluster}}\" {{.machine_type}} fehlt, wird neu erstellt.",
 	"{{.driver_name}} couldn't proceed because {{.driver_name}} service is not healthy.": "{{.driver_name}} konnte nicht weiterlaufen, da {{.driver_name}} Service nicht funktional ist.",
 	"{{.driver_name}} has less than 2 CPUs available, but Kubernetes requires at least 2 to be available": "{{.driver_name}} verfügt über weniger als 2 CPUs, aber Kubernetes benötigt mindestens 2 verfügbare CPUs",
@@ -1001,9 +997,7 @@
 	"{{.name}} was successfully configured": "{{.name}} wurde erfolgreich konfiguriert",
 	"{{.name}}\" profile does not exist": "Profil \"{{.name}}\" existiert nicht",
 	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} hat fast keinen Plattenplatz mehr. Dies kann dazu führen, dass Deployments fehlschlagen! ({{.p}}% der Kapazität)",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} hat keinen Plattenplatz mehr! (/var ist bei {{.p}}% seiner Kapazität)",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} benötigt unnötig lange zum Antworten, erwäge {{.ocibin}} neuzustarten",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} ist Version {{.client_version}}, welche inkompatibel ist mit Kubernetes {{.cluster_version}}",
diff --git a/translations/es.json b/translations/es.json
index 12d0e9d3e..1ee0df840 100644
--- a/translations/es.json
+++ b/translations/es.json
@@ -335,8 +335,7 @@
 	"If present, writes to the provided file instead of stdout.": "",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "",
 	"If set, install addons. Defaults to true.": "",
@@ -427,8 +426,6 @@
 	"No minikube profile was found. ": "",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "",
 	"No such addon {{.name}}": "",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "",
 	"Node {{.name}} was successfully deleted.": "",
 	"Node {{.nodeName}} does not exist.": "",
@@ -896,7 +893,6 @@
 	"dry-run validation complete!": "",
 	"enable failed": "",
 	"error creating clientset": "",
-	"error creatings urls": "",
 	"error getting primary control plane": "",
 	"error getting ssh port": "",
 	"error initializing tracing: {{.Error}}": "",
@@ -1001,8 +997,8 @@
 	"{{.name}} has no available configuration options": "",
 	"{{.name}} is already running": "",
 	"{{.name}} was successfully configured": "",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
+	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "",
+	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "",
diff --git a/translations/fr.json b/translations/fr.json
index 5abdf8a4c..b2fbef9c0 100644
--- a/translations/fr.json
+++ b/translations/fr.json
@@ -318,9 +318,7 @@
 	"If present, writes to the provided file instead of stdout.": "S'il est présent, écrit dans le fichier fourni au lieu de la sortie standard.",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "Si défini, met automatiquement à jour les pilotes vers la dernière version. La valeur par défaut est true.",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "Si défini, supprime le cluster actuel si le démarrage échoue et réessaye. La valeur par défaut est false.",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
 	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "S'il est défini, désactive les optimisations définies pour Kubernetes local. Y compris la diminution des répliques CoreDNS de 2 à 1 et l'augmentation de l'intervalle de maintenance kubeadm de 10 s à 5 m. La valeur par défaut est false.",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "Si défini, télécharge l'archive tar des images préchargées si disponibles pour améliorer le temps de démarrage. La valeur par défaut est true.",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "S'il est défini, force l'environnement d'exécution du conteneur à utiliser systemd comme gestionnaire de groupe de contrôle. La valeur par défaut est false.",
 	"If set, install addons. Defaults to true.": "Si défini, installe les modules. La valeur par défaut est true.",
@@ -407,8 +405,6 @@
 	"No minikube profile was found. ": "Aucun profil minikube n'a été trouvé.",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Aucun pilote possible n'a été détecté. Essayez de spécifier --driver, ou consultez https://minikube.sigs.k8s.io/docs/start/",
 	"No such addon {{.name}}": "Aucun module de ce type {{.name}}",
-	"No valid URL found for tunnel.": "Aucune URL valide n'a été trouvée pour le tunnel.",
-	"No valid port found for tunnel.": "Aucun port valide trouvé pour le tunnel.",
 	"Node {{.name}} failed to start, deleting and trying again.": "Le nœud {{.name}} n'a pas pu démarrer, suppression et réessai.",
 	"Node {{.name}} was successfully deleted.": "Le nœud {{.name}} a été supprimé avec succès.",
 	"Node {{.nodeName}} does not exist.": "Le nœud {{.nodeName}} n'existe pas.",
@@ -858,7 +854,6 @@
 	"dry-run validation complete!": "validation de la simulation terminée !",
 	"enable failed": "échec de l'activation",
 	"error creating clientset": "erreur lors de la création de l'ensemble de clients",
-	"error creatings urls": "erreur lors de la création d'urls",
 	"error getting primary control plane": "erreur lors de l'obtention du plan de contrôle principal",
 	"error getting ssh port": "erreur lors de l'obtention du port ssh",
 	"error initializing tracing: {{.Error}}": "erreur d'initialisation du traçage : {{.Error}}",
@@ -968,9 +963,7 @@
 	"{{.name}} is already running": "{{.name}} est déjà en cours d'exécution",
 	"{{.name}} was successfully configured": "{{.name}} a été configuré avec succès",
 	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} manque presque d'espace disque, ce qui peut entraîner l'échec des déploiements ! ({{.p}} % de la capacité)",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} n'a plus d'espace disque ! (/var est à {{.p}} % de capacité)",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.ociBin}} rmi {{.images}}": "{{.ociBin}} rmi {{.images}}",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} prend un temps anormalement long pour répondre, pensez à redémarrer {{.ocibin}}",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} est la version {{.client_version}}, qui peut comporter des incompatibilités avec Kubernetes {{.cluster_version}}.",
diff --git a/translations/ja.json b/translations/ja.json
index 1c41d05c9..067013ed3 100644
--- a/translations/ja.json
+++ b/translations/ja.json
@@ -325,9 +325,7 @@
 	"If present, writes to the provided file instead of stdout.": "指定すると、標準出力の代わりに指定されたファイルに出力します。",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "設定すると、自動的にドライバーを最新バージョンに更新します。デフォルトは true です。",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "設定すると、現在のクラスターの起動に失敗した場合はクラスターを削除して再度試行します。デフォルトは false です。",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
 	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "設定すると、ローカルの Kubernetes 用に設定された最適化を無効化します。CoreDNS レプリカ数を 2 から 1 に減らし、kubeadm の housekeeping-interval を 10 秒から 5 分に増加させることを含みます。デフォルトは false です。",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "設定すると、開始時間を改善するため、利用可能であれば、プレロードイメージの tar ボールをダウンロードします。デフォルトは false です。",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "設定すると、cgroup マネージャーとして systemd を使うようコンテナーランタイムに強制します。デフォルトは false です。",
 	"If set, install addons. Defaults to true.": "設定すると、アドオンをインストールします。デフォルトは true です。",
@@ -417,8 +415,6 @@
 	"No minikube profile was found. ": "minikube プロファイルが見つかりませんでした。",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "利用可能なドライバーが検出されませんでした。--driver 指定を試すか、https://minikube.sigs.k8s.io/docs/start/ を参照してください",
 	"No such addon {{.name}}": "{{.name}} というアドオンはありません",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "{{.name}} ノードは起動に失敗しました (削除、再試行します)。",
 	"Node {{.name}} was successfully deleted.": "{{.name}} ノードは正常に削除されました。",
 	"Node {{.nodeName}} does not exist.": "{{.nodeName}} ノードは存在しません。",
@@ -904,7 +900,6 @@
 	"dry-run validation complete!": "dry-run の検証が終了しました！",
 	"enable failed": "有効化に失敗しました",
 	"error creating clientset": "clientset 作成中にエラー",
-	"error creatings urls": "",
 	"error getting primary control plane": "最初のコントロールプレーン取得中にエラー",
 	"error getting ssh port": "SSH ポートを取得中にエラー",
 	"error initializing tracing: {{.Error}}": "トレーシング初期化中にエラー: {{.Error}}",
@@ -1026,9 +1021,7 @@
 	"{{.name}} is already running": "{{.name}} はすでに実行中です",
 	"{{.name}} was successfully configured": "{{.name}} は正常に設定されました",
 	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} はほとんどディスクがいっぱいで、デプロイが失敗する原因になりかねません！(容量の {{.p}}%)",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} はディスクがいっぱいです！(/var は容量の {{.p}}% です)",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "{{.ocibin}} の反応が異常なほど長時間かかっています。{{.ocibin}} の再起動を検討してください",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} のバージョンは {{.client_version}} で、Kubernetes {{.cluster_version}} と互換性がないかもしれません。",
diff --git a/translations/ko.json b/translations/ko.json
index 3b16f8902..3da229db1 100644
--- a/translations/ko.json
+++ b/translations/ko.json
@@ -353,8 +353,7 @@
 	"If present, writes to the provided file instead of stdout.": "",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "",
 	"If set, install addons. Defaults to true.": "",
@@ -444,8 +443,6 @@
 	"No minikube profile was found. ": "",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "",
 	"No such addon {{.name}}": "",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "",
 	"Node {{.name}} was successfully deleted.": "",
 	"Node {{.nodeName}} does not exist.": "",
@@ -901,7 +898,6 @@
 	"enable failed": "활성화가 실패하였습니다",
 	"error creating clientset": "clientset 생성 오류",
 	"error creating machine client": "머신 client 생성 오류",
-	"error creatings urls": "",
 	"error getting primary control plane": "",
 	"error getting ssh port": "ssh 포트 조회 오류",
 	"error initializing tracing: {{.Error}}": "",
@@ -1014,8 +1010,8 @@
 	"{{.name}} has no available configuration options": "{{.name}} 이 사용 가능한 환경 정보 옵션이 없습니다",
 	"{{.name}} is already running": "{{.name}} 이 이미 실행 중입니다",
 	"{{.name}} was successfully configured": "{{.name}} 이 성공적으로 설정되었습니다",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
+	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "",
+	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "",
diff --git a/translations/pl.json b/translations/pl.json
index a7223b57b..08476dc7f 100644
--- a/translations/pl.json
+++ b/translations/pl.json
@@ -339,8 +339,7 @@
 	"If present, writes to the provided file instead of stdout.": "",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "",
 	"If set, install addons. Defaults to true.": "",
@@ -433,8 +432,6 @@
 	"No minikube profile was found. ": "Nie znaleziono żadnego profilu minikube",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "Nie znaleziono żadnego możliwego sterownika. Spróbuj przekazać sterownik za pomocą flagi --driver lub odwiedź https://minikube.sigs.k8s.io/docs/start/",
 	"No such addon {{.name}}": "Nie istnieje addon {{.name}}",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "Węzeł {{.name}} nie uruchomił się pomyślnie. Usuwam i próbuję uruchomić węzeł ponownie",
 	"Node {{.name}} was successfully deleted.": "Węzeł {{.name}} został pomyślnie usunięty",
 	"Node {{.nodeName}} does not exist.": "Węzeł {{.nodeName}} nie istnieje",
@@ -907,7 +904,6 @@
 	"dry-run validation complete!": "",
 	"enable failed": "",
 	"error creating clientset": "",
-	"error creatings urls": "",
 	"error getting primary control plane": "",
 	"error getting ssh port": "",
 	"error initializing tracing: {{.Error}}": "",
@@ -1016,9 +1012,7 @@
 	"{{.name}} is already running": "{{.name}} został już wcześniej uruchomiony",
 	"{{.name}} was successfully configured": "{{.name}} skonfigurowano pomyślnie",
 	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "{{.n}} prawie nie ma wolnej przestrzeni dyskowej, co może powodować, że wdrożenia nie powiodą się ({{.p}}% zużycia przestrzeni dyskowej)",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "{{.n}} nie ma wolnej przestrzeni dyskowej! (/var jest w {{.p}}% pełny)",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "Czas odpowiedzi od {{.ocibin}} jest niespotykanie długi, rozważ ponowne uruchomienie {{.ocibin}}",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "{{.path}} jest w wersji {{.client_version}}, co może być niekompatybilne z Kubernetesem w wersji {{.cluster_version}}.",
diff --git a/translations/ru.json b/translations/ru.json
index 5cbbc79e2..ebe79fa44 100644
--- a/translations/ru.json
+++ b/translations/ru.json
@@ -307,8 +307,7 @@
 	"If present, writes to the provided file instead of stdout.": "",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "",
 	"If set, install addons. Defaults to true.": "",
@@ -395,8 +394,6 @@
 	"No minikube profile was found. ": "",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "",
 	"No such addon {{.name}}": "",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "",
 	"Node {{.name}} was successfully deleted.": "",
 	"Node {{.nodeName}} does not exist.": "",
@@ -831,7 +828,6 @@
 	"dry-run validation complete!": "",
 	"enable failed": "",
 	"error creating clientset": "",
-	"error creatings urls": "",
 	"error getting primary control plane": "",
 	"error getting ssh port": "",
 	"error initializing tracing: {{.Error}}": "",
@@ -936,9 +932,7 @@
 	"{{.name}} is already running": "",
 	"{{.name}} was successfully configured": "",
 	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "В {{.n}} заканчивается место на диске, что может привести к проблемам в работе! ({{.p}}% занято)",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "В {{.n}} закончилось место! (в /var занято {{.p}}%)",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "",
diff --git a/translations/strings.txt b/translations/strings.txt
index a634bd3f1..d616786a7 100644
--- a/translations/strings.txt
+++ b/translations/strings.txt
@@ -307,8 +307,7 @@
 	"If present, writes to the provided file instead of stdout.": "",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "",
 	"If set, install addons. Defaults to true.": "",
@@ -395,8 +394,6 @@
 	"No minikube profile was found. ": "",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "",
 	"No such addon {{.name}}": "",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "",
 	"Node {{.name}} was successfully deleted.": "",
 	"Node {{.nodeName}} does not exist.": "",
@@ -831,7 +828,6 @@
 	"dry-run validation complete!": "",
 	"enable failed": "",
 	"error creating clientset": "",
-	"error creatings urls": "",
 	"error getting primary control plane": "",
 	"error getting ssh port": "",
 	"error initializing tracing: {{.Error}}": "",
@@ -935,8 +931,8 @@
 	"{{.name}} has no available configuration options": "",
 	"{{.name}} is already running": "",
 	"{{.name}} was successfully configured": "",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
+	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "",
+	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "",
 	"{{.path}} is version {{.client_version}}, which may have incompatibilites with Kubernetes {{.cluster_version}}.": "",
diff --git a/translations/zh-CN.json b/translations/zh-CN.json
index dc20948fa..e8024bec1 100644
--- a/translations/zh-CN.json
+++ b/translations/zh-CN.json
@@ -411,8 +411,7 @@
 	"If present, writes to the provided file instead of stdout.": "",
 	"If set, automatically updates drivers to the latest version. Defaults to true.": "如果设置了，将自动更新驱动到最新版本。默认为 true。",
 	"If set, delete the current cluster if start fails and try again. Defaults to false.": "",
-	"If set, disables metrics reporting (CPU and memory usage), this can improve CPU usage. Defaults to false.": "",
-	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1. Defaults to false.": "",
+	"If set, disables optimizations that are set for local Kubernetes. Including decreasing CoreDNS replicas from 2 to 1 and increasing kubeadm housekeeping-interval from 10s to 5m. Defaults to false.": "",
 	"If set, download tarball of preloaded images if available to improve start time. Defaults to true.": "",
 	"If set, force the container runtime to use systemd as cgroup manager. Defaults to false.": "",
 	"If set, install addons. Defaults to true.": "",
@@ -508,8 +507,6 @@
 	"No minikube profile was found. ": "",
 	"No possible driver was detected. Try specifying --driver, or see https://minikube.sigs.k8s.io/docs/start/": "",
 	"No such addon {{.name}}": "",
-	"No valid URL found for tunnel.": "",
-	"No valid port found for tunnel.": "",
 	"Node {{.name}} failed to start, deleting and trying again.": "",
 	"Node {{.name}} was successfully deleted.": "",
 	"Node {{.nodeName}} does not exist.": "",
@@ -1016,7 +1013,6 @@
 	"dry-run validation complete!": "",
 	"enable failed": "开启失败",
 	"error creating clientset": "",
-	"error creatings urls": "",
 	"error getting primary control plane": "",
 	"error getting ssh port": "",
 	"error initializing tracing: {{.Error}}": "",
@@ -1127,8 +1123,8 @@
 	"{{.name}} has no available configuration options": "",
 	"{{.name}} is already running": "",
 	"{{.name}} was successfully configured": "",
-	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity). You can pass '--force' to skip this check.": "",
-	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity). You can pass '--force' to skip this check.": "",
+	"{{.n}} is nearly out of disk space, which may cause deployments to fail! ({{.p}}% of capacity)": "",
+	"{{.n}} is out of disk space! (/var is at {{.p}}% of capacity)": "",
 	"{{.ociBin}} rmi {{.images}}": "",
 	"{{.ocibin}} is taking an unsually long time to respond, consider restarting {{.ocibin}}": "",
 	"{{.path}} is version {{.client_version}}, and is incompatible with Kubernetes {{.cluster_version}}. You will need to update {{.path}} or use 'minikube kubectl' to connect with this cluster": "{{.path}} 的版本是 {{.client_version}}，且与 Kubernetes {{.cluster_version}} 不兼容。您需要更新 {{.path}} 或者使用 'minikube kubectl' 连接到这个集群",


Test patch:
diff --git a/cmd/minikube/cmd/service_test.go b/cmd/minikube/cmd/service_test.go
new file mode 100644
index 000000000..e91a4c27d
--- /dev/null
+++ b/cmd/minikube/cmd/service_test.go
@@ -0,0 +1,71 @@
+/*
+Copyright 2016 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 cmd
+
+import (
+	"testing"
+)
+
+func TestServiceForwardOpen(t *testing.T) {
+	var tests = []struct {
+		name           string
+		serviceURLMode bool
+		all            bool
+		args           []string
+		want           bool
+	}{
+		{
+			name:           "multiple_urls",
+			serviceURLMode: false,
+			all:            false,
+			args:           []string{"test-service-1", "test-service-2"},
+			want:           false,
+		},
+		{
+			name:           "service_url_mode",
+			serviceURLMode: true,
+			all:            false,
+			args:           []string{"test-service-1"},
+			want:           false,
+		},
+		{
+			name:           "all",
+			serviceURLMode: false,
+			all:            true,
+			args:           []string{"test-service-1", "test-service-2"},
+			want:           false,
+		},
+		{
+			name:           "single_url",
+			serviceURLMode: false,
+			all:            false,
+			args:           []string{"test-service-1"},
+			want:           true,
+		},
+	}
+
+	for _, tc := range tests {
+		serviceURLMode = tc.serviceURLMode
+		all = tc.all
+		t.Run(tc.name, func(t *testing.T) {
+			got := shouldOpen(tc.args)
+			if got != tc.want {
+				t.Errorf("bool(%+v) = %t, want: %t", "shouldOpen", got, tc.want)
+			}
+		})
+	}
+}
diff --git a/hack/jenkins/cloud_shell_functional_tests_docker.sh b/hack/jenkins/cloud_shell_functional_tests_docker.sh
index 512e3108b..c6b8968b1 100755
--- a/hack/jenkins/cloud_shell_functional_tests_docker.sh
+++ b/hack/jenkins/cloud_shell_functional_tests_docker.sh
@@ -22,7 +22,7 @@
 # EXTRA_BUILD_ARGS (optional): Extra args to be passed into the minikube integrations tests
 # access_token: The Github API access token. Injected by the Jenkins credential provider.
 
-set -x
+set -ex
 
 gcloud cloud-shell ssh --authorize-session << EOF
  OS="linux"
@@ -48,14 +48,3 @@ gcloud cloud-shell ssh --authorize-session << EOF
  chmod +x ./common.sh
  source ./common.sh
 EOF
-
-code=$?
-if [ $code -gt 0 ]; then
-    curl -L -u minikube-bot:${access_token} \
-      "https://api.github.com/repos/kubernetes/minikube/statuses/${COMMIT}" \
-      -H "Content-Type: application/json" \
-      -X POST \
-      -d "{\"state\": \"failure\", \"description\": \"Jenkins: Cloud Shell failed to start\", \"target_url\": \"https://storage.googleapis.com/minikube-builds/logs/${MINIKUBE_LOCATION}/${ROOT_JOB_ID}/Docker_Cloud_Shell.html\", \"context\": \"Docker_Cloud_Shell\"}"
-fi
-
-exit $code
diff --git a/pkg/minikube/machine/start_test.go b/pkg/minikube/machine/start_test.go
index 8b82ca8ed..7798ed01a 100644
--- a/pkg/minikube/machine/start_test.go
+++ b/pkg/minikube/machine/start_test.go
@@ -21,8 +21,6 @@ import (
 	"net"
 	"os"
 	"testing"
-
-	"k8s.io/minikube/pkg/minikube/command"
 )
 
 const initialEtcHostsContent string = `127.0.0.1	localhost
@@ -98,100 +96,3 @@ func writeContentToTempFile(content string) (string, error) {
 
 	return path, nil
 }
-
-func TestDiskUsed(t *testing.T) {
-	ex := command.NewFakeCommandRunner()
-	ex.SetCommandToOutput(map[string]string{
-		"sh -c \"df -h /var | awk 'NR==2{print $5}'\"": "20%",
-	})
-	nonex := command.NewFakeCommandRunner()
-	nonex.SetCommandToOutput(map[string]string{
-		"sh -c \"df -h /nonexistent | awk 'NR==2{print $5}'\"": "df: /nonexistent: No such file or directory",
-	})
-
-	type args struct {
-		cr  command.Runner
-		dir string
-	}
-	tests := []struct {
-		name    string
-		args    args
-		want    int
-		wantErr bool
-	}{
-		{
-			name:    "existent",
-			args:    args{ex, "/var"},
-			want:    20,
-			wantErr: false,
-		},
-		{
-			name:    "existent",
-			args:    args{nonex, "/nonexistent"},
-			want:    0,
-			wantErr: true,
-		},
-	}
-	for _, tt := range tests {
-		t.Logf("starting %v", tt.name)
-		t.Run(tt.name, func(t *testing.T) {
-			got, err := DiskUsed(tt.args.cr, tt.args.dir)
-			t.Logf("err: %v\n", err)
-			t.Logf("got: %v\n", got)
-			if (err != nil) != tt.wantErr {
-				t.Fatalf("DiskUsed() error = %v, wantErr %v", err, tt.wantErr)
-			}
-			if got != tt.want {
-				t.Errorf("DiskUsed() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
-
-func TestDiskAvailable(t *testing.T) {
-	ex := command.NewFakeCommandRunner()
-	ex.SetCommandToOutput(map[string]string{
-		"sh -c \"df -BG /var | awk 'NR==2{print $4}'\"": "20",
-	})
-	nonex := command.NewFakeCommandRunner()
-	nonex.SetCommandToOutput(map[string]string{
-		"sh -c \"df -BG /nonexistent | awk 'NR==2{print $4}'\"": "df: /nonexistent: No such file or directory",
-	})
-
-	type args struct {
-		cr  command.Runner
-		dir string
-	}
-	tests := []struct {
-		name    string
-		args    args
-		want    int
-		wantErr bool
-	}{
-		{
-			name:    "existent",
-			args:    args{ex, "/var"},
-			want:    20,
-			wantErr: false,
-		},
-		{
-			name:    "existent",
-			args:    args{nonex, "/nonexistent"},
-			want:    0,
-			wantErr: true,
-		},
-	}
-	for _, tt := range tests {
-		t.Logf("starting %v", tt.name)
-		t.Run(tt.name, func(t *testing.T) {
-			got, err := DiskAvailable(tt.args.cr, tt.args.dir)
-			t.Logf("err: %v\n", err)
-			if (err != nil) != tt.wantErr {
-				t.Fatalf("DiskAvailable() error = %v, wantErr %v", err, tt.wantErr)
-			}
-			if got != tt.want {
-				t.Errorf("DiskAvailable() = %v, want %v", got, tt.want)
-			}
-		})
-	}
-}
diff --git a/pkg/minikube/registry/drvs/docker/docker_test.go b/pkg/minikube/registry/drvs/docker/docker_test.go
index 3d03231f3..0d3e6ac89 100644
--- a/pkg/minikube/registry/drvs/docker/docker_test.go
+++ b/pkg/minikube/registry/drvs/docker/docker_test.go
@@ -21,7 +21,6 @@ import (
 	"strings"
 	"testing"
 
-	"github.com/blang/semver/v4"
 	"k8s.io/minikube/pkg/minikube/driver"
 )
 
@@ -56,41 +55,30 @@ func appendVersionVariations(tc []testCase, v []int, reason string) []testCase {
 	return appendedTc
 }
 
-func stringToIntSlice(t *testing.T, s string) []int {
-	sem, err := semver.ParseTolerant(s)
-	if err != nil {
-		t.Fatalf("failed to parse %s to semver: %v", s, err)
-	}
-	return []int{int(sem.Major), int(sem.Minor), int(sem.Patch)}
-}
-
 func TestCheckDockerVersion(t *testing.T) {
-	recParts := stringToIntSlice(t, recommendedDockerVersion)
-	minParts := stringToIntSlice(t, minDockerVersion)
-
 	tc := []testCase{
 		{
 			version: "windows-20.0.1",
 			expect:  "PROVIDER_DOCKER_WINDOWS_CONTAINERS",
 		},
 		{
-			version: fmt.Sprintf("linux-%02d.%02d", recParts[0], recParts[1]),
+			version: fmt.Sprintf("linux-%02d.%02d", minDockerVersion[0], minDockerVersion[1]),
 			expect:  "",
 		},
 		{
-			version: fmt.Sprintf("linux-%s", recommendedDockerVersion),
+			version: fmt.Sprintf("linux-%02d.%02d.%02d", minDockerVersion[0], minDockerVersion[1], minDockerVersion[2]),
 			expect:  "",
 		},
 	}
 
 	for i := 0; i < 3; i++ {
 		v := make([]int, 3)
-		copy(v, minParts)
+		copy(v, minDockerVersion)
 
-		v[i] = minParts[i] + 1
+		v[i] = minDockerVersion[i] + 1
 		tc = appendVersionVariations(tc, v, "")
 
-		v[i] = minParts[i] - 1
+		v[i] = minDockerVersion[i] - 1
 		if v[2] < 0 {
 			// skip test if patch version is negative number.
 			continue
@@ -98,39 +86,27 @@ func TestCheckDockerVersion(t *testing.T) {
 		tc = appendVersionVariations(tc, v, "PROVIDER_DOCKER_VERSION_LOW")
 	}
 
-	recommendedSupported := fmt.Sprintf("Minimum recommended version is %s, minimum supported version is %s", recommendedDockerVersion, minDockerVersion)
-	install := fmt.Sprintf("Install the official release of %s (%s, current version is %%s)", driver.FullName(driver.Docker), recommendedSupported)
-	update := fmt.Sprintf("Upgrade %s to a newer version (%s, current version is %%s)", driver.FullName(driver.Docker), recommendedSupported)
 	tc = append(tc, []testCase{
 		{
 			// "dev" is set when Docker (Moby) was installed with `make binary && make install`
-			version:           "linux-dev",
-			expect:            "",
-			expectFixContains: fmt.Sprintf(install, "dev"),
+			version: "linux-dev",
+			expect:  "",
+			expectFixContains: fmt.Sprintf("Install the official release of %s (Minimum recommended version is %02d.%02d.%d, current version is dev)",
+				driver.FullName(driver.Docker), minDockerVersion[0], minDockerVersion[1], minDockerVersion[2]),
 		},
 		{
 			// "library-import" is set when Docker (Moby) was installed with `go build github.com/docker/docker/cmd/dockerd` (unrecommended, but valid)
-			version:           "linux-library-import",
-			expect:            "",
-			expectFixContains: fmt.Sprintf(install, "library-import"),
+			version: "linux-library-import",
+			expect:  "",
+			expectFixContains: fmt.Sprintf("Install the official release of %s (Minimum recommended version is %02d.%02d.%d, current version is library-import)",
+				driver.FullName(driver.Docker), minDockerVersion[0], minDockerVersion[1], minDockerVersion[2]),
 		},
 		{
 			// "foo.bar.baz" is a triplet that cannot be parsed as "%02d.%02d.%d"
-			version:           "linux-foo.bar.baz",
-			expect:            "",
-			expectFixContains: fmt.Sprintf(install, "foo.bar.baz"),
-		},
-		{
-			// "linux-18.09.9" is older than minimum recommended version
-			version:           "linux-18.09.9",
-			expect:            "",
-			expectFixContains: fmt.Sprintf(update, "18.09.9"),
-		},
-		{
-			// "linux-18.06.2" is older than minimum required version
-			version:           "linux-18.06.2",
-			expect:            "PROVIDER_DOCKER_VERSION_LOW",
-			expectFixContains: fmt.Sprintf(update, "18.06.2"),
+			version: "linux-foo.bar.baz",
+			expect:  "",
+			expectFixContains: fmt.Sprintf("Install the official release of %s (Minimum recommended version is %02d.%02d.%d, current version is foo.bar.baz)",
+				driver.FullName(driver.Docker), minDockerVersion[0], minDockerVersion[1], minDockerVersion[2]),
 		},
 	}...)
 
diff --git a/site/content/en/docs/contrib/tests.en.md b/site/content/en/docs/contrib/tests.en.md
index 03d3d2e54..c4022ce4b 100644
--- a/site/content/en/docs/contrib/tests.en.md
+++ b/site/content/en/docs/contrib/tests.en.md
@@ -291,12 +291,6 @@ Steps:
 - Run `minikube service` with `--https --url` to make sure the HTTPS endpoint URL of the service is printed
 - Run `minikube service` with `--url --format={{.IP}}` to make sure the IP address of the service is printed
 - Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed
-
-#### validateServiceCmdConnect
-
-Steps:
-- Create a new `k8s.gcr.io/echoserver` deployment
-- Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed
 - Make sure we can hit the endpoint URL with an HTTP GET request
 
 #### validateAddonsCmd
diff --git a/test/integration/functional_test.go b/test/integration/functional_test.go
index 9928b580b..1babda745 100644
--- a/test/integration/functional_test.go
+++ b/test/integration/functional_test.go
@@ -143,7 +143,6 @@ func TestFunctional(t *testing.T) {
 			{"MountCmd", validateMountCmd},
 			{"ProfileCmd", validateProfileCmd},
 			{"ServiceCmd", validateServiceCmd},
-			{"ServiceCmdConnect", validateServiceCmdConnect},
 			{"AddonsCmd", validateAddonsCmd},
 			{"PersistentVolumeClaim", validatePersistentVolumeClaim},
 			{"TunnelCmd", validateTunnelCmd},
@@ -768,6 +767,11 @@ func validateExtraConfig(ctx context.Context, t *testing.T, profile string) {
 	if !strings.Contains(afterCfg.Config.KubernetesConfig.ExtraOptions.String(), expectedExtraOptions) {
 		t.Errorf("expected ExtraOptions to contain %s but got %s", expectedExtraOptions, afterCfg.Config.KubernetesConfig.ExtraOptions.String())
 	}
+
+	expectedExtraOptions = "kubelet.housekeeping-interval=5m"
+	if !strings.Contains(afterCfg.Config.KubernetesConfig.ExtraOptions.String(), expectedExtraOptions) {
+		t.Errorf("expected ExtraOptions to contain %s but got %s", expectedExtraOptions, afterCfg.Config.KubernetesConfig.ExtraOptions.String())
+	}
 }
 
 // imageID returns a docker image id for image `image` and current architecture
@@ -1395,14 +1399,6 @@ func validateProfileCmd(ctx context.Context, t *testing.T, profile string) {
 	})
 }
 
-func killContext(cmdContext *exec.Cmd, killDelay time.Duration, t *testing.T) {
-	time.Sleep(killDelay)
-	err := cmdContext.Process.Signal(os.Interrupt)
-	if err != nil {
-		t.Error("Failed to sent interrupt to proc", err)
-	}
-}
-
 // validateServiceCmd asserts basic "service" command functionality
 func validateServiceCmd(ctx context.Context, t *testing.T, profile string) {
 	defer PostMortemLogs(t, profile)
@@ -1464,16 +1460,18 @@ func validateServiceCmd(ctx context.Context, t *testing.T, profile string) {
 		t.Errorf("expected 'service list' to contain *hello-node* but got -%q-", rr.Stdout.String())
 	}
 
-	// docs: Run `minikube service` with `--https --url` to make sure the HTTPS endpoint URL of the service is printed
-	cmdContext := exec.CommandContext(ctx, Target(), "-p", profile, "service", "--namespace=default", "--https", "--url", "hello-node")
 	if NeedsPortForward() {
-		go killContext(cmdContext, 2*time.Second, t)
+		t.Skipf("test is broken for port-forwarded drivers: https://github.com/kubernetes/minikube/issues/7383")
 	}
 
-	rr, err = Run(t, cmdContext)
-	if err != nil && !strings.Contains(err.Error(), "interrupt") {
+	// docs: Run `minikube service` with `--https --url` to make sure the HTTPS endpoint URL of the service is printed
+	rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "--namespace=default", "--https", "--url", "hello-node"))
+	if err != nil {
 		t.Fatalf("failed to get service url. args %q : %v", rr.Command(), err)
 	}
+	if rr.Stderr.String() != "" {
+		t.Errorf("expected stderr to be empty but got *%q* . args %q", rr.Stderr, rr.Command())
+	}
 
 	splits := strings.Split(rr.Stdout.String(), "|")
 	var endpoint string
@@ -1493,26 +1491,17 @@ func validateServiceCmd(ctx context.Context, t *testing.T, profile string) {
 		t.Errorf("expected scheme for %s to be 'https' but got %q", endpoint, u.Scheme)
 	}
 
-	cmdContext = exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node", "--url", "--format={{.IP}}")
-	if NeedsPortForward() {
-		go killContext(cmdContext, 2*time.Second, t)
-	}
 	// docs: Run `minikube service` with `--url --format={{.IP}}` to make sure the IP address of the service is printed
-	rr, err = Run(t, cmdContext)
-	if err != nil && !strings.Contains(err.Error(), "interrupt") {
+	rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node", "--url", "--format={{.IP}}"))
+	if err != nil {
 		t.Errorf("failed to get service url with custom format. args %q: %v", rr.Command(), err)
 	}
-
 	if strings.TrimSpace(rr.Stdout.String()) != u.Hostname() {
 		t.Errorf("expected 'service --format={{.IP}}' output to be -%q- but got *%q* . args %q.", u.Hostname(), rr.Stdout.String(), rr.Command())
 	}
 
-	cmdContext = exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node", "--url")
-	if NeedsPortForward() {
-		go killContext(cmdContext, 2*time.Second, t)
-	}
 	// docs: Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed
-	rr, err = Run(t, cmdContext)
+	rr, err = Run(t, exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node", "--url"))
 	if err != nil {
 		t.Errorf("failed to get service url. args: %q: %v", rr.Command(), err)
 	}
@@ -1528,71 +1517,8 @@ func validateServiceCmd(ctx context.Context, t *testing.T, profile string) {
 	if u.Scheme != "http" {
 		t.Fatalf("expected scheme to be -%q- got scheme: *%q*", "http", u.Scheme)
 	}
-}
-
-func validateServiceCmdConnect(ctx context.Context, t *testing.T, profile string) {
-	defer PostMortemLogs(t, profile)
-
-	defer func() {
-		if t.Failed() {
-			t.Logf("service test failed - dumping debug information")
-			t.Logf("-----------------------service failure post-mortem--------------------------------")
-			ctx, cancel := context.WithTimeout(context.Background(), Minutes(2))
-			defer cancel()
-			rr, err := Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "describe", "po", "hello-node-connect"))
-			if err != nil {
-				t.Logf("%q failed: %v", rr.Command(), err)
-			}
-			t.Logf("hello-node pod describe:\n%s", rr.Stdout)
-
-			rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "logs", "-l", "app=hello-node-connect"))
-			if err != nil {
-				t.Logf("%q failed: %v", rr.Command(), err)
-			}
-			t.Logf("hello-node logs:\n%s", rr.Stdout)
-
-			rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "describe", "svc", "hello-node-connect"))
-			if err != nil {
-				t.Logf("%q failed: %v", rr.Command(), err)
-			}
-			t.Logf("hello-node svc describe:\n%s", rr.Stdout)
-		}
-	}()
-
-	var rr *RunResult
-	var err error
-	// docs: Create a new `k8s.gcr.io/echoserver` deployment
-	// k8s.gcr.io/echoserver is not multi-arch
-	if arm64Platform() {
-		rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "deployment", "hello-node-connect", "--image=k8s.gcr.io/echoserver-arm:1.8"))
-	} else {
-		rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "create", "deployment", "hello-node-connect", "--image=k8s.gcr.io/echoserver:1.8"))
-	}
-
-	if err != nil {
-		t.Fatalf("failed to create hello-node deployment with this command %q: %v.", rr.Command(), err)
-	}
-	rr, err = Run(t, exec.CommandContext(ctx, "kubectl", "--context", profile, "expose", "deployment", "hello-node-connect", "--type=NodePort", "--port=8080"))
-	if err != nil {
-		t.Fatalf("failed to expose hello-node deployment: %q : %v", rr.Command(), err)
-	}
-
-	if _, err := PodWait(ctx, t, profile, "default", "app=hello-node-connect", Minutes(10)); err != nil {
-		t.Fatalf("failed waiting for hello-node pod: %v", err)
-	}
-
-	cmdContext := exec.CommandContext(ctx, Target(), "-p", profile, "service", "hello-node-connect", "--url")
-	if NeedsPortForward() {
-		t.Skipf("test is broken for port-forwarded drivers: https://github.com/kubernetes/minikube/issues/7383")
-	}
-	// docs: Run `minikube service` with a regular `--url` to make sure the HTTP endpoint URL of the service is printed
-	rr, err = Run(t, cmdContext)
-	if err != nil {
-		t.Errorf("failed to get service url. args: %q: %v", rr.Command(), err)
-	}
 
-	endpoint := strings.TrimSpace(rr.Stdout.String())
-	t.Logf("found endpoint for hello-node-connect: %s", endpoint)
+	t.Logf("Attempting to fetch %s ...", endpoint)
 
 	// docs: Make sure we can hit the endpoint URL with an HTTP GET request
 	fetch := func() error {
diff --git a/test/integration/guest_env_test.go b/test/integration/guest_env_test.go
index 130dfc02f..49f9fdcc6 100644
--- a/test/integration/guest_env_test.go
+++ b/test/integration/guest_env_test.go
@@ -37,14 +37,14 @@ func TestGuestEnvironment(t *testing.T) {
 	defer CleanupWithLogs(t, profile, cancel)
 
 	t.Run("Setup", func(t *testing.T) {
-		args := append([]string{"start", "-p", profile, "--install-addons=false", "--memory=2048", "--wait=false", "--disable-metrics=true"}, StartArgs()...)
+		args := append([]string{"start", "-p", profile, "--install-addons=false", "--memory=2048", "--wait=false", "--disable-optimizations=true"}, StartArgs()...)
 		rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
 		if err != nil {
 			t.Errorf("failed to start minikube: args %q: %v", rr.Command(), err)
 		}
 
 		if strings.Contains(rr.Stderr.String(), "kubelet.housekeeping-interval=5m") {
-			t.Error("--disable-metrics=true is not working, housekeeping interval not increased")
+			t.Error("--disable-optimizations=true is not working, optimizations found")
 		}
 	})
 
diff --git a/test/integration/status_test.go b/test/integration/status_test.go
index 0f29555ca..924d69e54 100644
--- a/test/integration/status_test.go
+++ b/test/integration/status_test.go
@@ -46,7 +46,7 @@ func TestInsufficientStorage(t *testing.T) {
 	startArgs = append(startArgs, StartArgs()...)
 	c := exec.CommandContext(ctx, Target(), startArgs...)
 	// artificially set /var to 100% capacity
-	c.Env = append(os.Environ(), fmt.Sprintf("%s=100", constants.TestDiskUsedEnv), fmt.Sprintf("%s=19", constants.TestDiskAvailableEnv))
+	c.Env = append(os.Environ(), fmt.Sprintf("%s=100", constants.TestDiskUsedEnv))
 
 	rr, err := Run(t, c)
 	if err == nil {