Repository: kubernetes/minikube
Pull request #7713 (2020-04-16 14:02:48)

Add Docker for Windows to pending job list
Enables the Docker for Windows job on Jenkins.


Patch:
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index ccf491e73..68a9561d7 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -6,6 +6,10 @@ jobs:
   # Runs before all other jobs
   # builds the minikube binaries
   build_minikube:
+    env:
+      TIME_ELAPSED: time
+      JOB_NAME: "Docker_Ubuntu_16_04"
+      GOPOGH_RESULT: ""
     runs-on: ubuntu-18.04
     steps:
     - uses: actions/checkout@v2
@@ -31,6 +35,10 @@ jobs:
         name: minikube_binaries
         path: out
   lint:
+    env:
+      TIME_ELAPSED: time
+      JOB_NAME: "lint"
+      GOPOGH_RESULT: ""
     runs-on: ubuntu-18.04
     steps:
     - uses: actions/checkout@v2
@@ -46,6 +54,10 @@ jobs:
       run : make test
       continue-on-error: false
   unit_test:
+    env:
+      TIME_ELAPSED: time
+      JOB_NAME: "unit_test"
+      GOPOGH_RESULT: ""
     runs-on: ubuntu-18.04
     steps:
     - uses: actions/checkout@v2
@@ -63,7 +75,7 @@ jobs:
       continue-on-error: false
   # Run the following integration tests after the build_minikube
   # They will run in parallel and use the binaries in previous step
-  functional_test_docker_ubuntu_16_04:
+  docker_ubuntu_16_04:
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -117,7 +129,7 @@ jobs:
         chmod a+x e2e-*
         chmod a+x minikube-*
         START_TIME=$(date -u +%s)
-        KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--vm-driver=docker  -test.run TestFunctional -test.timeout=30m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
+        KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--vm-driver=docker -test.timeout=80m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
         END_TIME=$(date -u +%s)
         TIME_ELAPSED=$(($END_TIME-$START_TIME))
         min=$((${TIME_ELAPSED}/60))
@@ -152,7 +164,7 @@ jobs:
         numPass=$(echo $STAT | jq '.NumberOfPass')
         echo "*** $numPass Passed ***"
         if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
-  pause_test_docker_ubuntu_18_04:
+  docker_ubuntu_18_04:
     runs-on: ubuntu-18.04
     env:
       TIME_ELAPSED: time
@@ -206,7 +218,7 @@ jobs:
         chmod a+x e2e-*
         chmod a+x minikube-*
         START_TIME=$(date -u +%s)
-        KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker  -test.run TestPause -test.timeout=30m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
+        KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome ./e2e-linux-amd64 -minikube-start-args=--driver=docker -test.timeout=80m -test.v -timeout-multiplier=1.5 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
         END_TIME=$(date -u +%s)
         TIME_ELAPSED=$(($END_TIME-$START_TIME))
         min=$((${TIME_ELAPSED}/60))
@@ -241,7 +253,71 @@ jobs:
         numPass=$(echo $STAT | jq '.NumberOfPass')
         echo "*** $numPass Passed ***"
         if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
-  baremetal_ubuntu16_04:
+  docker_on_windows:
+    needs: [build_minikube]
+    env:
+      TIME_ELAPSED: time
+      JOB_NAME: "Docker_on_windows"
+      COMMIT_STATUS: ""
+    runs-on: windows-latest
+    steps:
+    - uses: actions/checkout@v2
+    - name: Docker Info
+      shell: bash
+      run: |
+        docker info || true
+        docker version || true
+        docker ps || true
+    - name: Download gopogh
+      run: |
+        curl -LO https://github.com/medyagh/gopogh/releases/download/v0.1.16/gopogh.exe
+      shell: bash
+    - name: Download binaries
+      uses: actions/download-artifact@v1
+      with:
+        name: minikube_binaries
+    - name: run integration test
+      continue-on-error: true
+      run: |
+        set +euo pipefail
+        mkdir -p report
+        mkdir -p testhome
+        START_TIME=$(date -u +%s)
+        KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome minikube_binaries/e2e-windows-amd64.exe -minikube-start-args=--vm-driver=docker -binary=minikube_binaries/minikube-windows-amd64.exe -test.v -test.timeout=65m 2>&1 | tee ./report/testout.txt
+        END_TIME=$(date -u +%s)
+        TIME_ELAPSED=$(($END_TIME-$START_TIME)) 
+        min=$((${TIME_ELAPSED}/60))
+        sec=$((${TIME_ELAPSED}%60))
+        TIME_ELAPSED="${min} min $sec seconds"
+        echo ::set-env name=TIME_ELAPSED::${TIME_ELAPSED}
+      shell: bash
+    - name: Generate html report
+      run: |
+        go tool test2json -t < ./report/testout.txt > ./report/testout.json || true
+        STAT=$(${GITHUB_WORKSPACE}/gopogh.exe -in ./report/testout.json -out ./report/testout.html -name " $GITHUB_REF" -repo "${JOB_NAME} ${GITHUB_REF} ${GITHUB_REPOSITORY}"  -details "${GITHUB_SHA}")  || true
+        echo status: ${STAT}
+        FailNum=$(echo $STAT | jq '.NumberOfFail')
+        TestsNum=$(echo $STAT | jq '.NumberOfTests')       
+        GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}"
+        echo ::set-env name=GOPOGH_RESULT::${GOPOGH_RESULT}
+        echo ::set-env name=STAT::${STAT}
+      shell: bash
+    - uses: actions/upload-artifact@v1
+      with:
+        name: docker_on_windows
+        path: report
+    - name: The End Result
+      run: |
+        echo ${GOPOGH_RESULT}
+        numFail=$(echo $STAT | jq '.NumberOfFail')
+        echo "----------------${numFail} Failures----------------------------"
+        echo $STAT | jq '.FailedTests' || true
+        echo "--------------------------------------------"
+        numPass=$(echo $STAT | jq '.NumberOfPass')
+        echo "*** $numPass Passed ***"
+        if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
+      shell: bash
+  none_ubuntu16_04:
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -322,7 +398,7 @@ jobs:
         numPass=$(echo $STAT | jq '.NumberOfPass')
         echo "*** $numPass Passed ***"
         if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
-  baremetal_ubuntu18_04:
+  none_ubuntu18_04:
     needs: [build_minikube]
     env:
       TIME_ELAPSED: time
@@ -403,11 +479,92 @@ jobs:
         numPass=$(echo $STAT | jq '.NumberOfPass')
         echo "*** $numPass Passed ***"
         if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
+  podman_ubuntu_18_04_experimental:
+      needs: [build_minikube]
+      env:
+        TIME_ELAPSED: time
+        JOB_NAME: "Podman_Ubuntu_18_04"
+        GOPOGH_RESULT: ""
+        SHELL: "/bin/bash" # To prevent https://github.com/kubernetes/minikube/issues/6643
+      runs-on: ubuntu-18.04
+      steps:
+      - name: Install kubectl
+        shell: bash
+        run: |
+          curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl
+          sudo install kubectl /usr/local/bin/kubectl
+          kubectl version --client=true
+      - name: Install podman
+        shell: bash
+        run: |
+          . /etc/os-release
+          sudo sh -c "echo 'deb http://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list"
+          wget -q https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key -O- | sudo apt-key add -
+          sudo apt-key add - < Release.key || true
+          sudo apt-get update -qq
+          sudo apt-get -qq -y install podman
+          sudo podman version || true
+          sudo podman info || true
+      - name: Install gopogh
+        shell: bash
+        run: |
+          curl -LO https://github.com/medyagh/gopogh/releases/download/v0.1.18/gopogh-linux-amd64
+          sudo install gopogh-linux-amd64 /usr/local/bin/gopogh
+      - name: Download binaries
+        uses: actions/download-artifact@v1
+        with:
+          name: minikube_binaries
+      - name: Run Integration Test
+        continue-on-error: true
+        # bash {0} to allow test to continue to next step. in case of
+        shell: bash {0}
+        run: |
+          cd minikube_binaries
+          mkdir -p report
+          mkdir -p testhome
+          chmod a+x e2e-*
+          chmod a+x minikube-*
+          START_TIME=$(date -u +%s)
+          KUBECONFIG=$(pwd)/testhome/kubeconfig MINIKUBE_HOME=$(pwd)/testhome sudo -E ./e2e-linux-amd64 -minikube-start-args=--driver=podman -test.timeout=30m -test.v -timeout-multiplier=1 -binary=./minikube-linux-amd64 2>&1 | tee ./report/testout.txt
+          END_TIME=$(date -u +%s)
+          TIME_ELAPSED=$(($END_TIME-$START_TIME))
+          min=$((${TIME_ELAPSED}/60))
+          sec=$((${TIME_ELAPSED}%60))
+          TIME_ELAPSED="${min} min $sec seconds "
+          echo ::set-env name=TIME_ELAPSED::${TIME_ELAPSED}
+      - name: Generate HTML Report
+        shell: bash
+        run: |
+          cd minikube_binaries
+          export PATH=${PATH}:`go env GOPATH`/bin
+          go tool test2json -t < ./report/testout.txt > ./report/testout.json || true
+          STAT=$(gopogh -in ./report/testout.json -out ./report/testout.html -name "${JOB_NAME} ${GITHUB_REF}" -repo "${GITHUB_REPOSITORY}"  -details "${GITHUB_SHA}")  || true
+          echo status: ${STAT}
+          FailNum=$(echo $STAT | jq '.NumberOfFail')
+          TestsNum=$(echo $STAT | jq '.NumberOfTests')
+          GOPOGH_RESULT="${JOB_NAME} : completed with ${FailNum} / ${TestsNum} failures in ${TIME_ELAPSED}"
+          echo ::set-env name=GOPOGH_RESULT::${GOPOGH_RESULT}
+          echo ::set-env name=STAT::${STAT}
+      - uses: actions/upload-artifact@v1
+        with:
+          name: podman_ubuntu_18_04
+          path: minikube_binaries/report
+      - name: The End Result - Podman On Ubuntu 18:04
+        shell: bash
+        run: |
+          echo ${GOPOGH_RESULT}
+          numFail=$(echo $STAT | jq '.NumberOfFail')
+          echo "----------------${numFail} Failures----------------------------"
+          echo $STAT | jq '.FailedTests' || true
+          echo "-------------------------------------------------------"
+          numPass=$(echo $STAT | jq '.NumberOfPass')
+          echo "*** $numPass Passed ***"
+          if [ "$numFail" -gt 0 ];then echo "*** $numFail Failed ***";exit 2;fi
   # After all 4 integration tests finished
   # collect all the reports and upload
   upload_all_reports:
     if: always()
-    needs: [functional_test_docker_ubuntu_16_04, pause_test_docker_ubuntu_18_04,baremetal_ubuntu16_04, baremetal_ubuntu18_04]
+    needs: [docker_ubuntu_16_04,docker_ubuntu_18_04,none_ubuntu16_04,none_ubuntu18_04,podman_ubuntu_18_04_experimental]
     runs-on: ubuntu-18.04
     steps:
     - name: Download Results docker_ubuntu_16_04
@@ -430,6 +587,15 @@ jobs:
       run: |
         mkdir -p all_reports
         cp -r docker_ubuntu_18_04 ./all_reports/
+    - name: download results docker_on_windows
+      uses: actions/download-artifact@v1
+      with:
+        name: docker_on_windows
+    - name: cp to all_report
+      shell: bash
+      run: |
+        mkdir -p all_reports
+        cp -r docker_on_windows ./all_reports/
     - name: Download Results none_ubuntu16_04
       uses: actions/download-artifact@v1
       with:
@@ -450,6 +616,16 @@ jobs:
       run: |
         mkdir -p all_reports
         cp -r none_ubuntu18_04 ./all_reports/
+    - name: Download Results podman_ubuntu_18_04
+      uses: actions/download-artifact@v1
+      with:
+        name: podman_ubuntu_18_04
+    - name: Copy podman_ubuntu_18_04 to all_report
+      continue-on-error: true
+      shell: bash {0}
+      run: |
+        mkdir -p all_reports
+        cp -r podman_ubuntu_18_04 ./all_reports/
     - uses: actions/upload-artifact@v1
       with:
         name: all_reports
diff --git a/Makefile b/Makefile
index 698959345..e0fe592f0 100755
--- a/Makefile
+++ b/Makefile
@@ -274,10 +274,6 @@ test: pkg/minikube/assets/assets.go pkg/minikube/translate/translations.go ## Tr
 generate-docs: out/minikube ## Automatically generate commands documentation.
 	out/minikube generate-docs --path ./site/content/en/docs/commands/
 
-.PHONY: gotest
-gotest: $(SOURCE_GENERATED) ## Trigger minikube test
-	go test -tags "$(MINIKUBE_BUILD_TAGS)" $(MINIKUBE_TEST_FILES)
-
 .PHONY: extract
 extract: ## Compile extract tool
 	go run cmd/extract/extract.go
diff --git a/README.md b/README.md
index 79b007159..02308a05e 100644
--- a/README.md
+++ b/README.md
@@ -61,10 +61,8 @@ minikube is a Kubernetes [#sig-cluster-lifecycle](https://github.com/kubernetes/
 * [**#minikube on Kubernetes Slack**](https://kubernetes.slack.com) - Live chat with minikube developers!
 * [minikube-users mailing list](https://groups.google.com/forum/#!forum/minikube-users)
 * [minikube-dev mailing list](https://groups.google.com/forum/#!forum/minikube-dev)
+* [Bi-weekly office hours, Mondays @ 11am PST](https://tinyurl.com/minikube-oh)
 
 * [Contributing](https://minikube.sigs.k8s.io/docs/contrib/)
 * [Development Roadmap](https://minikube.sigs.k8s.io/docs/contrib/roadmap/)
 
-Join our meetings:
-* [Bi-weekly office hours, Mondays @ 11am PST](https://tinyurl.com/minikube-oh)
-* [Triage Party](https://minikube.sigs.k8s.io/docs/contrib/triage/)
\ No newline at end of file
diff --git a/cmd/minikube/cmd/config/profile.go b/cmd/minikube/cmd/config/profile.go
index 182b48060..46afa5237 100644
--- a/cmd/minikube/cmd/config/profile.go
+++ b/cmd/minikube/cmd/config/profile.go
@@ -44,11 +44,6 @@ var ProfileCmd = &cobra.Command{
 		}
 
 		profile := args[0]
-		// Check whether the profile name is container friendly
-		if !config.ProfileNameValid(profile) {
-			out.WarningT("Profile name '{{.profilename}}' is not valid", out.V{"profilename": profile})
-			exit.UsageT("Only alphanumeric, dots, underscores and dashes '-' are permitted. Minimum 2 characters, starting by alphanumeric.")
-		}
 		/**
 		we need to add code over here to check whether the profile
 		name is in the list of reserved keywords
diff --git a/cmd/minikube/cmd/start.go b/cmd/minikube/cmd/start.go
index edd592b1e..7855e9108 100644
--- a/cmd/minikube/cmd/start.go
+++ b/cmd/minikube/cmd/start.go
@@ -144,10 +144,6 @@ func runStart(cmd *cobra.Command, args []string) {
 		registryMirror = viper.GetStringSlice("registry_mirror")
 	}
 
-	if !config.ProfileNameValid(ClusterFlagValue()) {
-		out.WarningT("Profile name '{{.name}}' is not valid", out.V{"name": ClusterFlagValue()})
-		exit.UsageT("Only alphanumeric, dots, underscores and dashes '-' are permitted. Minimum 2 characters, starting by alphanumeric.")
-	}
 	existing, err := config.Load(ClusterFlagValue())
 	if err != nil && !config.IsNotExist(err) {
 		exit.WithCodeT(exit.Data, "Unable to load config: {{.error}}", out.V{"error": err})
diff --git a/cmd/minikube/cmd/status.go b/cmd/minikube/cmd/status.go
index 5f4ca7776..a95c7978c 100644
--- a/cmd/minikube/cmd/status.go
+++ b/cmd/minikube/cmd/status.go
@@ -73,7 +73,6 @@ const (
 	clusterNotRunningStatusFlag  = 1 << 1
 	k8sNotRunningStatusFlag      = 1 << 2
 	defaultStatusFormat          = `{{.Name}}
-type: Control Plane
 host: {{.Host}}
 kubelet: {{.Kubelet}}
 apiserver: {{.APIServer}}
@@ -81,7 +80,6 @@ kubeconfig: {{.Kubeconfig}}
 
 `
 	workerStatusFormat = `{{.Name}}
-type: Worker
 host: {{.Host}}
 kubelet: {{.Kubelet}}
 
diff --git a/default.profraw b/default.profraw
deleted file mode 100644
index e69de29bb..000000000
diff --git a/deploy/iso/minikube-iso/README.md b/deploy/iso/minikube-iso/README.md
index 617512003..cbcf617e2 100644
--- a/deploy/iso/minikube-iso/README.md
+++ b/deploy/iso/minikube-iso/README.md
@@ -1,1 +1,1 @@
-The documentation for building and hacking on the minikube ISO can be found [here](https://minikube.sigs.k8s.io/docs/contrib/building/iso/).
+The documentation for building and hacking on the minikube ISO can be found at [/docs/contributors/minikube_iso.md](/docs/contributors/minikube_iso.md).
diff --git a/hack/jenkins/minikube_set_pending.sh b/hack/jenkins/minikube_set_pending.sh
index 1d91deaa3..8ce6a0135 100755
--- a/hack/jenkins/minikube_set_pending.sh
+++ b/hack/jenkins/minikube_set_pending.sh
@@ -42,6 +42,7 @@ jobs=(
      'none_Linux'
      'Docker_Linux'
      'Docker_macOS'
+     'Docker_Windows'
      'Podman_Linux'
 )
 
diff --git a/pkg/drivers/kic/kic.go b/pkg/drivers/kic/kic.go
index 78f9733d8..0378c7862 100644
--- a/pkg/drivers/kic/kic.go
+++ b/pkg/drivers/kic/kic.go
@@ -26,6 +26,7 @@ import (
 	"time"
 
 	"github.com/docker/machine/libmachine/drivers"
+	"github.com/docker/machine/libmachine/log"
 	"github.com/docker/machine/libmachine/ssh"
 	"github.com/docker/machine/libmachine/state"
 	"github.com/golang/glog"
@@ -268,22 +269,16 @@ func (d *Driver) Kill() error {
 // Remove will delete the Kic Node Container
 func (d *Driver) Remove() error {
 	if _, err := oci.ContainerID(d.OCIBinary, d.MachineName); err != nil {
-		glog.Infof("could not find the container %s to remove it. will try anyways", d.MachineName)
+		log.Warnf("could not find the container %s to remove it.", d.MachineName)
 	}
-
-	if err := oci.DeleteContainer(d.NodeConfig.OCIBinary, d.MachineName); err != nil {
-		if strings.Contains(err.Error(), "is already in progress") {
-			return errors.Wrap(err, "stuck delete")
-		}
-		if strings.Contains(err.Error(), "No such container:") {
-			return nil // nothing was found to delete.
+	cmd := exec.Command(d.NodeConfig.OCIBinary, "rm", "-f", "-v", d.MachineName)
+	o, err := cmd.CombinedOutput()
+	out := strings.TrimSpace(string(o))
+	if err != nil {
+		if strings.Contains(out, "is already in progress") {
+			log.Warnf("Docker engine is stuck. please restart docker daemon on your computer.", d.MachineName)
 		}
-
-	}
-
-	// check there be no container left after delete
-	if id, err := oci.ContainerID(d.OCIBinary, d.MachineName); err == nil && id != "" {
-		return fmt.Errorf("expected no container ID be found for %q after delete. but got %q", d.MachineName, id)
+		return errors.Wrapf(err, "removing container %s, output %s", d.MachineName, out)
 	}
 	return nil
 }
diff --git a/pkg/drivers/kic/oci/oci.go b/pkg/drivers/kic/oci/oci.go
index ea739fff9..f1e53843e 100644
--- a/pkg/drivers/kic/oci/oci.go
+++ b/pkg/drivers/kic/oci/oci.go
@@ -60,9 +60,6 @@ func DeleteContainersByLabel(ociBin string, label string) []error {
 			glog.Errorf("%s daemon seems to be stuck. Please try restarting your %s. :%v", ociBin, ociBin, err)
 			continue
 		}
-		if err := ShutDown(ociBin, c); err != nil {
-			glog.Infof("couldn't shut down %s (might be okay): %v ", c, err)
-		}
 		cmd := exec.Command(ociBin, "rm", "-f", "-v", c)
 		if out, err := cmd.CombinedOutput(); err != nil {
 			deleteErrs = append(deleteErrs, errors.Wrapf(err, "delete container %s: output %s", c, out))
@@ -80,9 +77,6 @@ func DeleteContainer(ociBin string, name string) error {
 		glog.Errorf("%s daemon seems to be stuck. Please try restarting your %s. Will try to delete anyways: %v", ociBin, ociBin, err)
 	}
 	// try to delete anyways
-	if err := ShutDown(ociBin, name); err != nil {
-		glog.Infof("couldn't shut down %s (might be okay): %v ", name, err)
-	}
 	cmd := exec.Command(ociBin, "rm", "-f", "-v", name)
 	if out, err := cmd.CombinedOutput(); err != nil {
 		return errors.Wrapf(err, "delete container %s: output %s", name, out)
@@ -114,9 +108,7 @@ func CreateContainerNode(p CreateParams) error {
 		// including some ones docker would otherwise do by default.
 		// for now this is what we want. in the future we may revisit this.
 		"--privileged",
-		"--security-opt", "seccomp=unconfined", //  ignore seccomp
-		// ignore apparmore github actions docker: https://github.com/kubernetes/minikube/issues/7624
-		"--security-opt", "apparmor=unconfined",
+		"--security-opt", "seccomp=unconfined", // also ignore seccomp
 		"--tmpfs", "/tmp", // various things depend on working /tmp
 		"--tmpfs", "/run", // systemd wants a writable /run
 		// logs,pods be stroed on  filesystem vs inside container,
@@ -492,33 +484,3 @@ func ContainerStatus(ociBin string, name string) (string, error) {
 	out, err := WarnIfSlow(ociBin, "inspect", name, "--format={{.State.Status}}")
 	return strings.TrimSpace(string(out)), err
 }
-
-// Shutdown will run command to shut down the container
-// to ensure the containers process and networking bindings are all closed
-// to avoid containers getting stuck before delete https://github.com/kubernetes/minikube/issues/7657
-func ShutDown(ociBin string, name string) error {
-	cmd := exec.Command(ociBin, "exec", "--privileged", "-t", name, "/bin/bash", "-c", "sudo init 0")
-	if out, err := cmd.CombinedOutput(); err != nil {
-		glog.Infof("error shutdown %s output %q : %v", name, out, err)
-	}
-	// helps with allowing docker realize the container is exited and report its status correctly.
-	time.Sleep(time.Second * 1)
-	// wait till it is stoped
-	stopped := func() error {
-		st, err := ContainerStatus(ociBin, name)
-		if st == "exited" {
-			glog.Infof("container %s status is %s", name, st)
-			return nil
-		}
-		if err != nil {
-			glog.Infof("temporary error verifying shutdown: %v", err)
-		}
-		glog.Infof("temporary error: container %s status is %s but expect it to be exited", name, st)
-		return errors.Wrap(err, "couldn't verify cointainer is exited. %v")
-	}
-	if err := retry.Expo(stopped, time.Millisecond*500, time.Second*20); err != nil {
-		return errors.Wrap(err, "verify shutdown")
-	}
-	glog.Infof("Successfully shutdown container %s", name)
-	return nil
-}
diff --git a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
index 8f8b74ac4..3be149ae2 100644
--- a/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
+++ b/pkg/minikube/bootstrapper/kubeadm/kubeadm.go
@@ -316,7 +316,7 @@ func (k *Bootstrapper) client(ip string, port int) (*kubernetes.Clientset, error
 
 	endpoint := fmt.Sprintf("https://%s", net.JoinHostPort(ip, strconv.Itoa(port)))
 	if cc.Host != endpoint {
-		glog.Warningf("Overriding stale ClientConfig host %s with %s", cc.Host, endpoint)
+		glog.Errorf("Overriding stale ClientConfig host %s with %s", cc.Host, endpoint)
 		cc.Host = endpoint
 	}
 	c, err := kubernetes.NewForConfig(cc)
diff --git a/pkg/minikube/config/profile.go b/pkg/minikube/config/profile.go
index 8345341c5..bfb6298c7 100644
--- a/pkg/minikube/config/profile.go
+++ b/pkg/minikube/config/profile.go
@@ -21,7 +21,6 @@ import (
 	"io/ioutil"
 	"os"
 	"path/filepath"
-	"regexp"
 	"strings"
 
 	"github.com/golang/glog"
@@ -84,16 +83,6 @@ func PrimaryControlPlane(cc *ClusterConfig) (Node, error) {
 	return cp, nil
 }
 
-// ProfileNameValid checks if the profile name is container name friendly
-func ProfileNameValid(name string) bool {
-
-	// RestrictedNameChars collects the characters allowed to represent a name
-	const RestrictedNameChars = `[a-zA-Z0-9][a-zA-Z0-9_.-]`
-
-	var validName = regexp.MustCompile(`^` + RestrictedNameChars + `+$`)
-	return validName.MatchString(name)
-}
-
 // ProfileNameInReservedKeywords checks if the profile is an internal keywords
 func ProfileNameInReservedKeywords(name string) bool {
 	for _, v := range keywords {
diff --git a/pkg/minikube/driver/driver.go b/pkg/minikube/driver/driver.go
index a55f7de44..77b44e15e 100644
--- a/pkg/minikube/driver/driver.go
+++ b/pkg/minikube/driver/driver.go
@@ -140,16 +140,6 @@ func HasResourceLimits(name string) bool {
 	return !(name == None || name == Podman)
 }
 
-// NeedsShutdown returns true if driver needs manual shutdown command before stopping.
-// Hyper-V requires special care to avoid ACPI and file locking issues
-// KIC also needs shutdown to avoid container getting stuck, https://github.com/kubernetes/minikube/issues/7657
-func NeedsShutdown(name string) bool {
-	if name == HyperV || IsKIC(name) {
-		return true
-	}
-	return false
-}
-
 // FlagHints are hints for what default options should be used for this driver
 type FlagHints struct {
 	ExtraOptions     []string
diff --git a/pkg/minikube/extract/extract.go b/pkg/minikube/extract/extract.go
index d878fe2c9..584acd827 100644
--- a/pkg/minikube/extract/extract.go
+++ b/pkg/minikube/extract/extract.go
@@ -454,7 +454,7 @@ func writeStringsToFiles(e *state, output string) error {
 		if !strings.HasSuffix(path, ".json") {
 			return nil
 		}
-		fmt.Printf("Writing to %s", filepath.Base(path))
+		fmt.Printf("Writing to %s\n", filepath.Base(path))
 		currentTranslations := make(map[string]interface{})
 		f, err := ioutil.ReadFile(path)
 		if err != nil {
@@ -482,16 +482,6 @@ func writeStringsToFiles(e *state, output string) error {
 			}
 		}
 
-		t := 0 // translated
-		u := 0 // untranslated
-		for k := range e.translations {
-			if currentTranslations[k] != "" {
-				t++
-			} else {
-				u++
-			}
-		}
-
 		c, err := json.MarshalIndent(currentTranslations, "", "\t")
 		if err != nil {
 			return errors.Wrap(err, "marshalling translations")
@@ -500,8 +490,6 @@ func writeStringsToFiles(e *state, output string) error {
 		if err != nil {
 			return errors.Wrap(err, "writing translation file")
 		}
-
-		fmt.Printf(" (%d translated, %d untranslated)\n", t, u)
 		return nil
 	})
 
diff --git a/pkg/minikube/image/image.go b/pkg/minikube/image/image.go
index 05904d9e9..0c77c20c8 100644
--- a/pkg/minikube/image/image.go
+++ b/pkg/minikube/image/image.go
@@ -79,28 +79,23 @@ func DigestByGoLib(imgName string) string {
 	return cf.Hex
 }
 
-// ExistsImageInDaemon if img exist in local docker daemon
-func ExistsImageInDaemon(img string) bool {
+// WriteImageToDaemon write img to the local docker daemon
+func WriteImageToDaemon(img string) error {
+	glog.Infof("Writing %s to local daemon", img)
+
 	// Check if image exists locally
 	cmd := exec.Command("docker", "images", "--format", "{{.Repository}}:{{.Tag}}@{{.Digest}}")
 	if output, err := cmd.Output(); err == nil {
 		if strings.Contains(string(output), img) {
 			glog.Infof("Found %s in local docker daemon, skipping pull", img)
-			return true
+			return nil
 		}
 	}
 	// Else, pull it
-	return false
-}
-
-// WriteImageToDaemon write img to the local docker daemon
-func WriteImageToDaemon(img string) error {
-	glog.Infof("Writing %s to local daemon", img)
 	ref, err := name.ParseReference(img)
 	if err != nil {
 		return errors.Wrap(err, "parsing reference")
 	}
-	glog.V(3).Infof("Getting image %v", ref)
 	i, err := remote.Image(ref)
 	if err != nil {
 		return errors.Wrap(err, "getting remote image")
@@ -109,26 +104,8 @@ func WriteImageToDaemon(img string) error {
 	if err != nil {
 		return errors.Wrap(err, "getting tag")
 	}
-	glog.V(3).Infof("Writing image %v", tag)
 	_, err = daemon.Write(tag, i)
-	if err != nil {
-		return errors.Wrap(err, "writing image")
-	}
-
-	//TODO: Make pkg/v1/daemon accept Ref too
-	//      Only added it to pkg/v1/tarball
-	//
-	// https://github.com/google/go-containerregistry/pull/702
-
-	glog.V(3).Infof("Pulling image %v", ref)
-
-	// Pull digest
-	cmd := exec.Command("docker", "pull", "--quiet", img)
-	if _, err := cmd.Output(); err != nil {
-		return errors.Wrap(err, "pulling remote image")
-	}
-
-	return nil
+	return err
 }
 
 func retrieveImage(ref name.Reference) (v1.Image, error) {
diff --git a/pkg/minikube/machine/delete.go b/pkg/minikube/machine/delete.go
index 8fc568e43..2132d1673 100644
--- a/pkg/minikube/machine/delete.go
+++ b/pkg/minikube/machine/delete.go
@@ -49,9 +49,6 @@ func deleteOrphanedKIC(ociBin string, name string) {
 	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
 	defer cancel()
 
-	if err := oci.ShutDown(ociBin, name); err != nil {
-		glog.Infof("couldn't shut down %s (might be okay): %v ", name, err)
-	}
 	cmd := exec.CommandContext(ctx, ociBin, "rm", "-f", "-v", name)
 	err = cmd.Run()
 	if err == nil {
@@ -80,8 +77,8 @@ func DeleteHost(api libmachine.API, machineName string) error {
 		return mcnerror.ErrHostDoesNotExist{Name: machineName}
 	}
 
-	// some drivers need manual shut down before delete to avoid getting stuck.
-	if driver.NeedsShutdown(host.Driver.DriverName()) {
+	// Hyper-V requires special care to avoid ACPI and file locking issues
+	if host.Driver.DriverName() == driver.HyperV {
 		if err := StopHost(api, machineName); err != nil {
 			glog.Warningf("stop host: %v", err)
 		}
diff --git a/pkg/minikube/machine/fix.go b/pkg/minikube/machine/fix.go
index 0fbf3183d..8aa74723e 100644
--- a/pkg/minikube/machine/fix.go
+++ b/pkg/minikube/machine/fix.go
@@ -106,9 +106,8 @@ func recreateIfNeeded(api libmachine.API, cc config.ClusterConfig, n config.Node
 	if serr != nil || s == state.Stopped || s == state.None {
 		// If virtual machine does not exist due to user interrupt cancel(i.e. Ctrl + C), recreate virtual machine
 		me, err := machineExists(h.Driver.DriverName(), s, serr)
-		if err != nil {
-			glog.Infof("machineExists: %t. err=%v", me, err)
-		}
+		glog.Infof("exists: %v err=%v", me, err)
+		glog.Infof("%q vs %q", err, constants.ErrMachineMissing)
 
 		if !me || err == constants.ErrMachineMissing {
 			out.T(out.Shrug, `{{.driver_name}} "{{.cluster}}" {{.machine_type}} is missing, will recreate.`, out.V{"driver_name": cc.Driver, "cluster": cc.Name, "machine_type": machineType})
diff --git a/pkg/minikube/machine/start.go b/pkg/minikube/machine/start.go
index ab924d47d..6db7fb25c 100644
--- a/pkg/minikube/machine/start.go
+++ b/pkg/minikube/machine/start.go
@@ -102,7 +102,7 @@ func createHost(api libmachine.API, cfg config.ClusterConfig, n config.Node) (*h
 	glog.Infof("createHost starting for %q (driver=%q)", n.Name, cfg.Driver)
 	start := time.Now()
 	defer func() {
-		glog.Infof("duration metric: createHost completed in %s", time.Since(start))
+		glog.Infof("createHost completed in %s", time.Since(start))
 	}()
 
 	if cfg.Driver == driver.VMwareFusion && viper.GetBool(config.ShowDriverDeprecationNotification) {
@@ -140,7 +140,7 @@ func createHost(api libmachine.API, cfg config.ClusterConfig, n config.Node) (*h
 	if err := timedCreateHost(h, api, 2*time.Minute); err != nil {
 		return nil, errors.Wrap(err, "creating host")
 	}
-	glog.Infof("duration metric: libmachine.API.Create for %q took %s", cfg.Name, time.Since(cstart))
+	glog.Infof("libmachine.API.Create for %q took %s", cfg.Name, time.Since(cstart))
 
 	if err := postStartSetup(h, cfg); err != nil {
 		return h, errors.Wrap(err, "post-start")
@@ -206,7 +206,7 @@ func postStartSetup(h *host.Host, mc config.ClusterConfig) error {
 	if driver.BareMetal(mc.Driver) {
 		showLocalOsRelease()
 	}
-	if driver.IsVM(mc.Driver) || driver.IsKIC(mc.Driver) {
+	if driver.IsVM(mc.Driver) {
 		logRemoteOsRelease(r)
 	}
 	return syncLocalAssets(r)
diff --git a/pkg/minikube/machine/stop.go b/pkg/minikube/machine/stop.go
index d5cac2b2d..fafe09e44 100644
--- a/pkg/minikube/machine/stop.go
+++ b/pkg/minikube/machine/stop.go
@@ -25,7 +25,6 @@ import (
 	"github.com/docker/machine/libmachine/state"
 	"github.com/golang/glog"
 	"github.com/pkg/errors"
-	"k8s.io/minikube/pkg/drivers/kic/oci"
 	"k8s.io/minikube/pkg/minikube/driver"
 	"k8s.io/minikube/pkg/minikube/out"
 	"k8s.io/minikube/pkg/util/retry"
@@ -46,7 +45,8 @@ func StopHost(api libmachine.API, machineName string) error {
 // stop forcibly stops a host without needing to load
 func stop(h *host.Host) error {
 	start := time.Now()
-	if driver.NeedsShutdown(h.DriverName) {
+	if h.DriverName == driver.HyperV {
+		glog.Infof("As there are issues with stopping Hyper-V VMs using API, trying to shut down using SSH")
 		if err := trySSHPowerOff(h); err != nil {
 			return errors.Wrap(err, "ssh power off")
 		}
@@ -61,7 +61,7 @@ func stop(h *host.Host) error {
 		}
 		return &retry.RetriableError{Err: errors.Wrap(err, "stop")}
 	}
-	glog.Infof("duration metric: stop complete within %s", time.Since(start))
+	glog.Infof("stop complete within %s", time.Since(start))
 	return nil
 }
 
@@ -78,14 +78,8 @@ func trySSHPowerOff(h *host.Host) error {
 	}
 
 	out.T(out.Shutdown, `Powering off "{{.profile_name}}" via SSH ...`, out.V{"profile_name": h.Name})
-	// differnet for kic because RunSSHCommand is not implemented by kic
-	if driver.IsKIC(h.DriverName) {
-		err := oci.ShutDown(h.DriverName, h.Name)
-		glog.Infof("shutdown container: err=%v", err)
-	} else {
-		out, err := h.RunSSHCommand("sudo poweroff")
-		// poweroff always results in an error, since the host disconnects.
-		glog.Infof("poweroff result: out=%s, err=%v", out, err)
-	}
+	out, err := h.RunSSHCommand("sudo poweroff")
+	// poweroff always results in an error, since the host disconnects.
+	glog.Infof("poweroff result: out=%s, err=%v", out, err)
 	return nil
 }
diff --git a/pkg/minikube/node/cache.go b/pkg/minikube/node/cache.go
index dd01433ca..ffbde22e8 100644
--- a/pkg/minikube/node/cache.go
+++ b/pkg/minikube/node/cache.go
@@ -47,7 +47,7 @@ func beginCacheKubernetesImages(g *errgroup.Group, imageRepository string, k8sVe
 		glog.Info("Caching tarball of preloaded images")
 		err := download.Preload(k8sVersion, cRuntime)
 		if err == nil {
-			glog.Infof("Finished verifying existence of preloaded tar for  %s on %s", k8sVersion, cRuntime)
+			glog.Infof("Finished downloading the preloaded tar for %s on %s", k8sVersion, cRuntime)
 			return // don't cache individual images if preload is successful.
 		}
 		glog.Warningf("Error downloading preloaded artifacts will continue without preload: %v", err)
@@ -100,14 +100,12 @@ func doCacheBinaries(k8sVersion string) error {
 
 // BeginDownloadKicArtifacts downloads the kic image + preload tarball, returns true if preload is available
 func beginDownloadKicArtifacts(g *errgroup.Group) {
+	out.T(out.Pulling, "Pulling base image ...")
 	glog.Info("Beginning downloading kic artifacts")
-	if !image.ExistsImageInDaemon(kic.BaseImage) {
-		out.T(out.Pulling, "Pulling base image ...")
-		g.Go(func() error {
-			glog.Infof("Downloading %s to local daemon", kic.BaseImage)
-			return image.WriteImageToDaemon(kic.BaseImage)
-		})
-	}
+	g.Go(func() error {
+		glog.Infof("Downloading %s to local daemon", kic.BaseImage)
+		return image.WriteImageToDaemon(kic.BaseImage)
+	})
 }
 
 // WaitDownloadKicArtifacts blocks until the required artifacts for KIC are downloaded.
diff --git a/pkg/minikube/node/start.go b/pkg/minikube/node/start.go
index 689adef27..8949f3a60 100644
--- a/pkg/minikube/node/start.go
+++ b/pkg/minikube/node/start.go
@@ -398,7 +398,7 @@ func validateNetwork(h *host.Host, r command.Runner, imageRepository string) (st
 			ipExcluded := proxy.IsIPExcluded(ip) // Skip warning if minikube ip is already in NO_PROXY
 			k = strings.ToUpper(k)               // for http_proxy & https_proxy
 			if (k == "HTTP_PROXY" || k == "HTTPS_PROXY") && !ipExcluded && !warnedOnce {
-				out.WarningT("You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details", out.V{"ip_address": ip, "documentation_url": "https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/"})
+				out.WarningT("You appear to be using a proxy, but your NO_PROXY environment does not include the minikube IP ({{.ip_address}}). Please see {{.documentation_url}} for more details", out.V{"ip_address": ip, "documentation_url": "https://minikube.sigs.k8s.io/docs/reference/networking/proxy/"})
 				warnedOnce = true
 			}
 		}
diff --git a/pkg/minikube/problem/err_map.go b/pkg/minikube/problem/err_map.go
index 02ba0dd04..da6f8fee9 100644
--- a/pkg/minikube/problem/err_map.go
+++ b/pkg/minikube/problem/err_map.go
@@ -367,8 +367,8 @@ var vmProblems = map[string]match{
 }
 
 // proxyDoc is the URL to proxy documentation
-const proxyDoc = "https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/"
-const vpnDoc = "https://minikube.sigs.k8s.io/docs/handbook/vpn_and_proxy/"
+const proxyDoc = "https://minikube.sigs.k8s.io/docs/reference/networking/proxy/"
+const vpnDoc = "https://minikube.sigs.k8s.io/docs/reference/networking/vpn/"
 
 // netProblems are network related problems.
 var netProblems = map[string]match{
diff --git a/pkg/minikube/proxy/proxy.go b/pkg/minikube/proxy/proxy.go
index c6a539a8a..a65d29098 100644
--- a/pkg/minikube/proxy/proxy.go
+++ b/pkg/minikube/proxy/proxy.go
@@ -40,28 +40,19 @@ func isInBlock(ip string, block string) (bool, error) {
 		return false, fmt.Errorf("CIDR is nil")
 	}
 
-	if ip == block {
-		return true, nil
-	}
-
 	i := net.ParseIP(ip)
 	if i == nil {
 		return false, fmt.Errorf("parsed IP is nil")
 	}
-
-	// check the block if it's CIDR
-	if strings.Contains(block, "/") {
-		_, b, err := net.ParseCIDR(block)
-		if err != nil {
-			return false, errors.Wrapf(err, "Error Parsing block %s", b)
-		}
-
-		if b.Contains(i) {
-			return true, nil
-		}
+	_, b, err := net.ParseCIDR(block)
+	if err != nil {
+		return false, errors.Wrapf(err, "Error Parsing block %s", b)
 	}
 
-	return false, errors.New("Error ip not in block")
+	if b.Contains(i) {
+		return true, nil
+	}
+	return false, errors.Wrapf(err, "Error ip not in block")
 }
 
 // ExcludeIP takes ip or CIDR as string and excludes it from the http(s)_proxy
@@ -110,11 +101,7 @@ func checkEnv(ip string, env string) bool {
 	// Checks if included in IP ranges, i.e., 192.168.39.13/24
 	noProxyBlocks := strings.Split(v, ",")
 	for _, b := range noProxyBlocks {
-		yes, err := isInBlock(ip, b)
-		if err != nil {
-			glog.Warningf("fail to check proxy env: %v", err)
-		}
-		if yes {
+		if yes, _ := isInBlock(ip, b); yes {
 			return true
 		}
 	}
diff --git a/pkg/minikube/registry/drvs/docker/docker.go b/pkg/minikube/registry/drvs/docker/docker.go
index 88a190897..db82619eb 100644
--- a/pkg/minikube/registry/drvs/docker/docker.go
+++ b/pkg/minikube/registry/drvs/docker/docker.go
@@ -97,10 +97,6 @@ func status() registry.State {
 		stderr := strings.TrimSpace(string(exitErr.Stderr))
 		newErr := fmt.Errorf(`%q %v: %s`, strings.Join(cmd.Args, " "), exitErr, stderr)
 
-		if strings.Contains(stderr, "permission denied") && runtime.GOOS == "linux" {
-			return registry.State{Error: newErr, Installed: true, Healthy: false, Fix: "Add your user to the 'docker' group: 'sudo usermod -aG docker $USER && newgrp docker'", Doc: "https://docs.docker.com/engine/install/linux-postinstall/"}
-		}
-
 		if strings.Contains(stderr, "Cannot connect") || strings.Contains(stderr, "refused") || strings.Contains(stderr, "Is the docker daemon running") {
 			return registry.State{Error: newErr, Installed: true, Healthy: false, Fix: "Start the Docker service", Doc: docURL}
 		}
diff --git a/pkg/minikube/registry/global.go b/pkg/minikube/registry/global.go
index 3e92a73ba..3f608ef47 100644
--- a/pkg/minikube/registry/global.go
+++ b/pkg/minikube/registry/global.go
@@ -22,7 +22,6 @@ import (
 	"sort"
 
 	"github.com/golang/glog"
-	"k8s.io/minikube/pkg/minikube/translate"
 )
 
 const (
@@ -75,8 +74,7 @@ type DriverState struct {
 
 func (d DriverState) String() string {
 	if d.Priority == Experimental {
-		experimental := translate.T("experimental")
-		return fmt.Sprintf("%s (%s)", d.Name, experimental)
+		return fmt.Sprintf("%s (experimental)", d.Name)
 	}
 	return d.Name
 }
diff --git a/pkg/provision/provision.go b/pkg/provision/provision.go
index 1a388f24d..c3c2287e6 100644
--- a/pkg/provision/provision.go
+++ b/pkg/provision/provision.go
@@ -82,7 +82,7 @@ func configureAuth(p miniProvisioner) error {
 	glog.Infof("configureAuth start")
 	start := time.Now()
 	defer func() {
-		glog.Infof("duration metric: configureAuth took %s", time.Since(start))
+		glog.Infof("configureAuth took %s", time.Since(start))
 	}()
 
 	driver := p.GetDriver()
diff --git a/site/assets/scss/_variables_project.scss b/site/assets/scss/_variables_project.scss
index 7bc0efdb2..768b6b866 100644
--- a/site/assets/scss/_variables_project.scss
+++ b/site/assets/scss/_variables_project.scss
@@ -40,7 +40,7 @@ body, p {
 }
 
 
-h1,h2,h3,h4,h5,.navbar-brand {
+h1,h2,h3,h4,h5 {
     font-family: 'Open Sans', sans-serif !important;
 }
 
diff --git a/site/content/en/_index.html b/site/content/en/_index.html
index dfcbf8933..fb120425c 100644
--- a/site/content/en/_index.html
+++ b/site/content/en/_index.html
@@ -3,15 +3,9 @@ title: "minikube"
 ---
 
 
----
-
-# [minikube site](https://minikube.sigs.k8s.io/docs/)
-
 <!-- Sales pitch -->
 {{< blocks/lead >}}
-<h1><a href="https://minikube.sigs.k8s.io/docs/"> minikube docs website </a> </h1>
-
-minikube website has moved to <a href="/docs">/docs</a>
+This page has moved to <a href="/docs">/docs</a>
 <script language="javascript">
   window.location.replace("/docs");
 </script>
diff --git a/site/content/en/community/_index.md b/site/content/en/community/_index.md
index 122ad325e..cdade1630 100644
--- a/site/content/en/community/_index.md
+++ b/site/content/en/community/_index.md
@@ -5,15 +5,4 @@ menu:
     weight: 40
 ---
 
-minikube is a Kubernetes [#sig-cluster-lifecycle](https://github.com/kubernetes/community/tree/master/sig-cluster-lifecycle)  project.
-
-* [**#minikube on Kubernetes Slack**](https://kubernetes.slack.com) - Live chat with minikube developers!
-* [minikube-users mailing list](https://groups.google.com/forum/#!forum/minikube-users)
-* [minikube-dev mailing list](https://groups.google.com/forum/#!forum/minikube-dev)
-
-* [Contributing](https://minikube.sigs.k8s.io/docs/contrib/)
-* [Development Roadmap](https://minikube.sigs.k8s.io/docs/contrib/roadmap/)
-
-Join our meetings:
-* [Bi-weekly office hours, Mondays @ 11am PST](https://tinyurl.com/minikube-oh)
-* [Triage Party](https://minikube.sigs.k8s.io/docs/contrib/triage/)
+<!--add blocks of content here to add more sections to the community page -->
diff --git a/site/content/en/docs/commands/status.md b/site/content/en/docs/commands/status.md
index 8dcd94cea..fd1462f33 100644
--- a/site/content/en/docs/commands/status.md
+++ b/site/content/en/docs/commands/status.md
@@ -24,7 +24,7 @@ minikube status [flags]
 
 ```
   -f, --format string   Go template format string for the status output.  The format for Go templates can be found here: https://golang.org/pkg/text/template/
-                        For the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status (default "{{.Name}}\ntype: Control Plane\nhost: {{.Host}}\nkubelet: {{.Kubelet}}\napiserver: {{.APIServer}}\nkubeconfig: {{.Kubeconfig}}\n\n")
+                        For the list accessible variables for the template, see the struct values here: https://godoc.org/k8s.io/minikube/cmd/minikube/cmd#Status (default "{{.Name}}\nhost: {{.Host}}\nkubelet: {{.Kubelet}}\napiserver: {{.APIServer}}\nkubeconfig: {{.Kubeconfig}}\n\n")
   -h, --help            help for status
   -o, --output string   minikube status --output OUTPUT. json, text (default "text")
 ```
diff --git a/site/content/en/docs/contrib/building/iso.md b/site/content/en/docs/contrib/building/iso.md
index 8fd818bd3..3d5eabe70 100644
--- a/site/content/en/docs/contrib/building/iso.md
+++ b/site/content/en/docs/contrib/building/iso.md
@@ -83,9 +83,9 @@ iso directory after they've been selected.
 
 To add your own package to the minikube ISO, create a package directory under `iso/minikube-iso/package`.  This directory will require at least 3 files:
 
-`<package name>.mk` - A Makefile describing how to download the source code and build the program  
-`<package name>.hash` - Checksums to verify the downloaded source code  
-`Config.in` - buildroot configuration
+`<package name>.mk` - A Makefile describing how to download the source code and build the program
+`<package name>.hash` - Checksums to verify the downloaded source code
+`Config.in` - buildroot configuration.
 
 For a relatively simple example to start with, you may want to reference the `podman` package.
 
diff --git a/site/content/en/docs/contrib/triage.md b/site/content/en/docs/contrib/triage.md
index b3975e95c..93b3c403e 100644
--- a/site/content/en/docs/contrib/triage.md
+++ b/site/content/en/docs/contrib/triage.md
@@ -7,11 +7,6 @@ description: >
   How to triage issues in the minikube repo
 ---
 
-Community triage takes place **every Wednesday** from **11AM-12PM PST**.
-Zoom link: https://zoom.us/j/5042173647
-
-All community members are welcome and encouraged to join and help us triage minikube!
-
 Triage is an important part of maintaining the health of the minikube repo.
 A well organized repo allows maintainers to prioritize feature requests, fix bugs, and respond to users facing difficulty with the tool as quickly as possible.
 
diff --git a/site/content/en/docs/drivers/includes/none_usage.inc b/site/content/en/docs/drivers/includes/none_usage.inc
index fd5c7d55b..f3f915a07 100644
--- a/site/content/en/docs/drivers/includes/none_usage.inc
+++ b/site/content/en/docs/drivers/includes/none_usage.inc
@@ -2,8 +2,6 @@
 
 VM running a systemd-based Linux distribution ([see #2704](https://github.com/kubernetes/minikube/issues/2704))
 
-kubeadm requirements listed here - https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/
-
 ## Usage
 
 The none driver requires minikube to be run as root, until [#3760](https://github.com/kubernetes/minikube/issues/3760) can be addressed.
diff --git a/site/content/en/docs/drivers/vmware.md b/site/content/en/docs/drivers/vmware.md
index 7351904e4..89403bd4b 100644
--- a/site/content/en/docs/drivers/vmware.md
+++ b/site/content/en/docs/drivers/vmware.md
@@ -23,7 +23,7 @@ No documentation is available yet.
 
 ## Issues
 
-* [Full list of open 'vmware-driver' issues](https://github.com/kubernetes/minikube/labels/co%2Fvmware-driver)
+* [Full list of open 'vmware' driver issues](https://github.com/kubernetes/minikube/labels/co%2Fvmware)
 
 ## Troubleshooting
 
diff --git a/site/content/en/docs/handbook/vpn_and_proxy.md b/site/content/en/docs/handbook/vpn_and_proxy.md
index 089dce5c2..08c8e1c5f 100644
--- a/site/content/en/docs/handbook/vpn_and_proxy.md
+++ b/site/content/en/docs/handbook/vpn_and_proxy.md
@@ -3,9 +3,6 @@ title: "Proxies & VPN's"
 weight: 6
 description: >
   How to use minikube with a VPN or HTTP/HTTPS Proxy
-aliases:
-  - docs/reference/networking/vpn
-  - docs/reference/networking/proxy
 ---
 
 minikube requires access to the internet via HTTP, HTTPS, and DNS protocols.
diff --git a/site/content/en/docs/tutorials/multi_node.md b/site/content/en/docs/tutorials/multi_node.md
index 5a4a5c05c..88ec4bfd5 100644
--- a/site/content/en/docs/tutorials/multi_node.md
+++ b/site/content/en/docs/tutorials/multi_node.md
@@ -21,13 +21,12 @@ date: 2019-11-24
 minikube start --nodes 2 -p multinode-demo --network-plugin=cni --extra-config=kubeadm.pod-network-cidr=10.244.0.0/16
 😄  [multinode-demo] minikube v1.9.2 on Darwin 10.14.6
 ✨  Automatically selected the hyperkit driver
-👍  Starting control plane node multinode-demo in cluster multinode-demo
+👍  Starting control plane node m01 in cluster multinode-demo
 🔥  Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
 🐳  Preparing Kubernetes v1.18.0 on Docker 19.03.8 ...
-    ▪ kubeadm.pod-network-cidr=10.244.0.0/16
 🌟  Enabling addons: default-storageclass, storage-provisioner
 
-👍  Starting node multinode-demo-m02 in cluster multinode-demo
+👍  Starting node m02 in cluster multinode-demo
 🔥  Creating hyperkit VM (CPUs=2, Memory=4000MB, Disk=20000MB) ...
 🌐  Found network options:
     ▪ NO_PROXY=192.168.64.213
@@ -43,22 +42,6 @@ multinode-demo       Ready    master   9m58s   v1.18.0
 multinode-demo-m02   Ready    <none>   9m5s    v1.18.0
 ```
 
-NOTE: You can also check the status of your nodes:
-```
-$ minikube status
-multinode-demo
-type: Control Plane
-host: Running
-kubelet: Running
-apiserver: Running
-kubeconfig: Configured
-
-multinode-demo-m02
-type: Worker
-host: Running
-kubelet: Running
-```
-
 - Install a CNI (e.g. flannel):
 NOTE: This currently needs to be done manually after the apiserver is running, the multi-node feature is still experimental as of 1.9.2.
 ```


Test patch:
diff --git a/cmd/minikube/cmd/delete_test.go b/cmd/minikube/cmd/delete_test.go
index 90e0fadc8..de16ed910 100644
--- a/cmd/minikube/cmd/delete_test.go
+++ b/cmd/minikube/cmd/delete_test.go
@@ -65,14 +65,6 @@ func TestDeleteProfile(t *testing.T) {
 	if err != nil {
 		t.Fatalf("tempdir: %v", err)
 	}
-
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(td)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", td)
-		}
-	}()
-
 	err = copy.Copy("../../../pkg/minikube/config/testdata/delete-single", td)
 	if err != nil {
 		t.Fatalf("copy: %v", err)
@@ -159,13 +151,6 @@ func TestDeleteAllProfiles(t *testing.T) {
 	if err != nil {
 		t.Fatalf("tempdir: %v", err)
 	}
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(td)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", td)
-		}
-	}()
-
 	err = copy.Copy("../../../pkg/minikube/config/testdata/delete-all", td)
 	if err != nil {
 		t.Fatalf("copy: %v", err)
diff --git a/cmd/minikube/cmd/status_test.go b/cmd/minikube/cmd/status_test.go
index e74d1080b..b11e549a6 100644
--- a/cmd/minikube/cmd/status_test.go
+++ b/cmd/minikube/cmd/status_test.go
@@ -52,17 +52,17 @@ func TestStatusText(t *testing.T) {
 		{
 			name:  "ok",
 			state: &Status{Name: "minikube", Host: "Running", Kubelet: "Running", APIServer: "Running", Kubeconfig: Configured},
-			want:  "minikube\ntype: Control Plane\nhost: Running\nkubelet: Running\napiserver: Running\nkubeconfig: Configured\n\n",
+			want:  "minikube\nhost: Running\nkubelet: Running\napiserver: Running\nkubeconfig: Configured\n\n",
 		},
 		{
 			name:  "paused",
 			state: &Status{Name: "minikube", Host: "Running", Kubelet: "Stopped", APIServer: "Paused", Kubeconfig: Configured},
-			want:  "minikube\ntype: Control Plane\nhost: Running\nkubelet: Stopped\napiserver: Paused\nkubeconfig: Configured\n\n",
+			want:  "minikube\nhost: Running\nkubelet: Stopped\napiserver: Paused\nkubeconfig: Configured\n\n",
 		},
 		{
 			name:  "down",
 			state: &Status{Name: "minikube", Host: "Stopped", Kubelet: "Stopped", APIServer: "Stopped", Kubeconfig: Misconfigured},
-			want:  "minikube\ntype: Control Plane\nhost: Stopped\nkubelet: Stopped\napiserver: Stopped\nkubeconfig: Misconfigured\n\n\nWARNING: Your kubectl is pointing to stale minikube-vm.\nTo fix the kubectl context, run `minikube update-context`\n",
+			want:  "minikube\nhost: Stopped\nkubelet: Stopped\napiserver: Stopped\nkubeconfig: Misconfigured\n\n\nWARNING: Your kubectl is pointing to stale minikube-vm.\nTo fix the kubectl context, run `minikube update-context`\n",
 		},
 	}
 	for _, tc := range tests {
diff --git a/hack/jenkins/osx_integration_tests_docker.sh b/hack/jenkins/osx_integration_tests_docker.sh
index acfd2e79c..c2865d83f 100755
--- a/hack/jenkins/osx_integration_tests_docker.sh
+++ b/hack/jenkins/osx_integration_tests_docker.sh
@@ -33,13 +33,8 @@ EXTRA_START_ARGS=""
 EXPECTED_DEFAULT_DRIVER="hyperkit"
 
 
-# fix mac os as a service on mac os
-# https://github.com/docker/for-mac/issues/882#issuecomment-506372814
-osascript -e 'quit app "Docker"';
-sudo /Applications/Docker.app/Contents/MacOS/Docker --quit-after-install --unattended || true
-# repeating without sudo because  https://github.com/docker/for-mac/issues/882#issuecomment-516946766
-/Applications/Docker.app/Contents/MacOS/Docker --quit-after-install --unattended || true
-osascript -e 'quit app "Docker"'; /Applications/Docker.app/Contents/MacOS/Docker --unattended &; while [ -z "$(docker info 2> /dev/null )" ]; do printf "."; sleep 1; done; echo "" || true
+# restart docker on mac for a fresh test
+osascript -e 'quit app "Docker"'; open -a Docker ; while [ -z "$(docker info 2> /dev/null )" ]; do printf "."; sleep 1; done; echo "" || true
 
 mkdir -p cron && gsutil -qm rsync "gs://minikube-builds/${MINIKUBE_LOCATION}/cron" cron || echo "FAILED TO GET CRON FILES"
 install cron/cleanup_and_reboot_Darwin.sh $HOME/cleanup_and_reboot.sh || echo "FAILED TO INSTALL CLEANUP"
diff --git a/hack/jenkins/windows_integration_test_docker.ps1 b/hack/jenkins/windows_integration_test_docker.ps1
deleted file mode 100644
index b30125c27..000000000
--- a/hack/jenkins/windows_integration_test_docker.ps1
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright 2019 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.
-
-mkdir -p out
-gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/minikube-windows-amd64.exe out/
-gsutil.cmd -m cp gs://minikube-builds/$env:MINIKUBE_LOCATION/e2e-windows-amd64.exe out/
-gsutil.cmd -m cp -r gs://minikube-builds/$env:MINIKUBE_LOCATION/testdata .
-
-./out/minikube-windows-amd64.exe delete --all
-
-out/e2e-windows-amd64.exe -minikube-start-args="--driver=docker" -binary=out/minikube-windows-amd64.exe -test.v -test.timeout=65m
-$env:result=$lastexitcode
-# If the last exit code was 0->success, x>0->error
-If($env:result -eq 0){$env:status="success"}
-Else {$env:status="failure"}
-
-# $env:SHORT_COMMIT=$env:COMMIT.substring(0, 7)
-# to be used later to implement https://github.com/kubernetes/minikube/issues/6593
-$env:target_url="https://storage.googleapis.com/minikube-builds/logs/$env:MINIKUBE_LOCATION/Docker_Windows.txt"
-$json = "{`"state`": `"$env:status`", `"description`": `"Jenkins`", `"target_url`": `"$env:target_url`", `"context`": `"Docker_Windows`"}"
-Invoke-WebRequest -Uri "https://api.github.com/repos/kubernetes/minikube/statuses/$env:COMMIT`?access_token=$env:access_token" -Body $json -ContentType "application/json" -Method Post -usebasicparsing
-
-Exit $env:result
\ No newline at end of file
diff --git a/pkg/drivers/hyperkit/iso_test.go b/pkg/drivers/hyperkit/iso_test.go
index d3999add8..8dda1e4a6 100644
--- a/pkg/drivers/hyperkit/iso_test.go
+++ b/pkg/drivers/hyperkit/iso_test.go
@@ -27,12 +27,7 @@ func TestExtractFile(t *testing.T) {
 	if nil != err {
 		return
 	}
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(testDir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", testDir)
-		}
-	}()
+	defer os.Remove(testDir)
 
 	tests := []struct {
 		name          string
diff --git a/pkg/minikube/config/profile_test.go b/pkg/minikube/config/profile_test.go
index 92e580f9f..805123ed1 100644
--- a/pkg/minikube/config/profile_test.go
+++ b/pkg/minikube/config/profile_test.go
@@ -72,27 +72,6 @@ func TestListProfiles(t *testing.T) {
 	}
 }
 
-func TestProfileNameValid(t *testing.T) {
-	var testCases = []struct {
-		name     string
-		expected bool
-	}{
-		{"meaningful_name", true},
-		{"meaningful_name@", false},
-		{"n_a_m_e_2", true},
-		{"n", false},
-		{"_name", false},
-		{"N__a.M--E12567", true},
-	}
-	for _, tt := range testCases {
-		got := ProfileNameValid(tt.name)
-		if got != tt.expected {
-			t.Errorf("expected ProfileNameValid(%s)=%t but got %t ", tt.name, tt.expected, got)
-		}
-	}
-
-}
-
 func TestProfileNameInReservedKeywords(t *testing.T) {
 	var testCases = []struct {
 		name     string
diff --git a/pkg/minikube/download/binary_test.go b/pkg/minikube/download/binary_test.go
index 5a481405e..79c23131c 100644
--- a/pkg/minikube/download/binary_test.go
+++ b/pkg/minikube/download/binary_test.go
@@ -31,24 +31,12 @@ func TestCacheBinary(t *testing.T) {
 	if err != nil {
 		t.Fatalf("error during creating tmp dir: %v", err)
 	}
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(minikubeHome)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", minikubeHome)
-		}
-	}()
-
 	defer os.RemoveAll(minikubeHome)
 	noWritePermDir, err := ioutil.TempDir("/tmp", "")
 	if err != nil {
 		t.Fatalf("error during creating tmp dir: %v", err)
 	}
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(noWritePermDir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", noWritePermDir)
-		}
-	}()
+	defer os.RemoveAll(noWritePermDir)
 	err = os.Chmod(noWritePermDir, 0000)
 	if err != nil {
 		t.Fatalf("error (%v) during changing permissions of dir %v", err, noWritePermDir)
diff --git a/pkg/minikube/extract/extract_test.go b/pkg/minikube/extract/extract_test.go
index 352151dc2..c0ac9914f 100644
--- a/pkg/minikube/extract/extract_test.go
+++ b/pkg/minikube/extract/extract_test.go
@@ -36,12 +36,7 @@ func TestExtract(t *testing.T) {
 	if err != nil {
 		t.Fatalf("Creating temp dir: %v", err)
 	}
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(tempdir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", tempdir)
-		}
-	}()
+	defer os.RemoveAll(tempdir)
 
 	src, err := ioutil.ReadFile("testdata/test.json")
 	if err != nil {
diff --git a/pkg/minikube/kubeconfig/kubeconfig_test.go b/pkg/minikube/kubeconfig/kubeconfig_test.go
index 8a0df1712..c41f167f0 100644
--- a/pkg/minikube/kubeconfig/kubeconfig_test.go
+++ b/pkg/minikube/kubeconfig/kubeconfig_test.go
@@ -167,13 +167,6 @@ func TestUpdate(t *testing.T) {
 			if err != nil {
 				t.Fatalf("Error making temp directory %v", err)
 			}
-			defer func() { //clean up tempdir
-				err := os.RemoveAll(tmpDir)
-				if err != nil {
-					t.Errorf("failed to clean up temp folder  %q", tmpDir)
-				}
-			}()
-
 			test.cfg.SetPath(filepath.Join(tmpDir, "kubeconfig"))
 			if len(test.existingCfg) != 0 {
 				if err := ioutil.WriteFile(test.cfg.filePath(), test.existingCfg, 0600); err != nil {
diff --git a/pkg/minikube/localpath/localpath_test.go b/pkg/minikube/localpath/localpath_test.go
index 00f52d09d..d8e6915a4 100644
--- a/pkg/minikube/localpath/localpath_test.go
+++ b/pkg/minikube/localpath/localpath_test.go
@@ -33,12 +33,7 @@ func TestReplaceWinDriveLetterToVolumeName(t *testing.T) {
 	if err != nil {
 		t.Fatalf("Error make tmp directory: %v", err)
 	}
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(path)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", path)
-		}
-	}()
+	defer os.RemoveAll(path)
 
 	if runtime.GOOS != "windows" {
 		// Replace to fake func.
diff --git a/pkg/minikube/machine/cache_binaries_test.go b/pkg/minikube/machine/cache_binaries_test.go
index f83fbfc83..500c0ea74 100644
--- a/pkg/minikube/machine/cache_binaries_test.go
+++ b/pkg/minikube/machine/cache_binaries_test.go
@@ -89,13 +89,7 @@ func TestCacheBinariesForBootstrapper(t *testing.T) {
 	if err != nil {
 		t.Fatalf("error during creating tmp dir: %v", err)
 	}
-
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(minikubeHome)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", minikubeHome)
-		}
-	}()
+	defer os.RemoveAll(minikubeHome)
 
 	var tc = []struct {
 		version, clusterBootstrapper string
diff --git a/pkg/minikube/machine/client_test.go b/pkg/minikube/machine/client_test.go
index b2cafc942..36465c5b0 100644
--- a/pkg/minikube/machine/client_test.go
+++ b/pkg/minikube/machine/client_test.go
@@ -125,12 +125,7 @@ func makeTempDir() string {
 
 func TestRunNotDriver(t *testing.T) {
 	tempDir := makeTempDir()
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(tempDir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", tempDir)
-		}
-	}()
+	defer os.RemoveAll(tempDir)
 	StartDriver()
 	if !localbinary.CurrentBinaryIsDockerMachine {
 		t.Fatal("CurrentBinaryIsDockerMachine not set. This will break driver initialization.")
diff --git a/pkg/minikube/machine/filesync_test.go b/pkg/minikube/machine/filesync_test.go
index a69be410f..143c3e9ab 100644
--- a/pkg/minikube/machine/filesync_test.go
+++ b/pkg/minikube/machine/filesync_test.go
@@ -108,12 +108,6 @@ func TestAssetsFromDir(t *testing.T) {
 	for _, test := range tests {
 		t.Run(test.description, func(t *testing.T) {
 			testDir, err := setupTestDir()
-			defer func() { //clean up tempdir
-				err := os.RemoveAll(testDir)
-				if err != nil {
-					t.Errorf("failed to clean up temp folder  %q", testDir)
-				}
-			}()
 			if err != nil {
 				t.Errorf("got unexpected error creating test dir: %v", err)
 				return
diff --git a/pkg/minikube/proxy/proxy_test.go b/pkg/minikube/proxy/proxy_test.go
index 8c8712432..4475905c5 100644
--- a/pkg/minikube/proxy/proxy_test.go
+++ b/pkg/minikube/proxy/proxy_test.go
@@ -53,10 +53,8 @@ func TestIsInBlock(t *testing.T) {
 		wanntAErr bool
 	}{
 		{"", "192.168.0.1/32", false, true},
-		{"192.168.0.1", "", false, true},
-		{"192.168.0.1", "192.168.0.1", true, false},
 		{"192.168.0.1", "192.168.0.1/32", true, false},
-		{"192.168.0.2", "192.168.0.1/32", false, true},
+		{"192.168.0.2", "192.168.0.1/32", false, false},
 		{"192.168.0.1", "192.168.0.1/18", true, false},
 		{"abcd", "192.168.0.1/18", false, true},
 		{"192.168.0.1", "foo", false, true},
@@ -124,7 +122,6 @@ func TestCheckEnv(t *testing.T) {
 		{"192.168.0.13", "NO_PROXY", false, ""},
 		{"192.168.0.13", "NO_PROXY", false, ","},
 		{"192.168.0.13", "NO_PROXY", true, "192.168.0.13"},
-		{"192.168.0.13", "NO_PROXY", false, "192.168.0.14"},
 		{"192.168.0.13", "NO_PROXY", true, ",192.168.0.13"},
 		{"192.168.0.13", "NO_PROXY", true, "10.10.0.13,192.168.0.13"},
 		{"192.168.0.13", "NO_PROXY", true, "192.168.0.13/22"},
diff --git a/pkg/util/crypto_test.go b/pkg/util/crypto_test.go
index aa1985259..bbce6bcb6 100644
--- a/pkg/util/crypto_test.go
+++ b/pkg/util/crypto_test.go
@@ -30,15 +30,10 @@ import (
 
 func TestGenerateCACert(t *testing.T) {
 	tmpDir, err := ioutil.TempDir("", "")
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(tmpDir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", tmpDir)
-		}
-	}()
 	if err != nil {
 		t.Fatalf("Error generating tmpdir: %v", err)
 	}
+	defer os.RemoveAll(tmpDir)
 
 	certPath := filepath.Join(tmpDir, "cert")
 	keyPath := filepath.Join(tmpDir, "key")
@@ -63,26 +58,16 @@ func TestGenerateCACert(t *testing.T) {
 
 func TestGenerateSignedCert(t *testing.T) {
 	tmpDir, err := ioutil.TempDir("", "")
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(tmpDir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", tmpDir)
-		}
-	}()
 	if err != nil {
 		t.Fatalf("Error generating tmpdir: %v", err)
 	}
+	defer os.RemoveAll(tmpDir)
 
 	signerTmpDir, err := ioutil.TempDir("", "")
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(signerTmpDir)
-		if err != nil {
-			t.Errorf("failed to clean up temp folder  %q", signerTmpDir)
-		}
-	}()
 	if err != nil {
 		t.Fatalf("Error generating signer tmpdir: %v", err)
 	}
+	defer os.RemoveAll(signerTmpDir)
 
 	validSignerCertPath := filepath.Join(signerTmpDir, "cert")
 	validSignerKeyPath := filepath.Join(signerTmpDir, "key")
diff --git a/test/integration/fn_mount_cmd.go b/test/integration/fn_mount_cmd.go
index f6e218d8a..915262a83 100644
--- a/test/integration/fn_mount_cmd.go
+++ b/test/integration/fn_mount_cmd.go
@@ -52,12 +52,6 @@ func validateMountCmd(ctx context.Context, t *testing.T, profile string) {
 	}
 
 	tempDir, err := ioutil.TempDir("", "mounttest")
-	defer func() { //clean up tempdir
-		err := os.RemoveAll(tempDir)
-		if err != nil {
-			t.Errorf("failed to clean up %q temp folder.", tempDir)
-		}
-	}()
 	if err != nil {
 		t.Fatalf("Unexpected error while creating tempDir: %v", err)
 	}
diff --git a/test/integration/pause_test.go b/test/integration/pause_test.go
deleted file mode 100644
index 2c4fc690b..000000000
--- a/test/integration/pause_test.go
+++ /dev/null
@@ -1,87 +0,0 @@
-// +build integration
-
-/*
-Copyright 2020 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 integration
-
-import (
-	"context"
-	"os/exec"
-	"testing"
-)
-
-func TestPause(t *testing.T) {
-	MaybeParallel(t)
-
-	type validateFunc func(context.Context, *testing.T, string)
-	profile := UniqueProfileName("pause")
-	ctx, cancel := context.WithTimeout(context.Background(), Minutes(30))
-	defer CleanupWithLogs(t, profile, cancel)
-
-	// Serial tests
-	t.Run("serial", func(t *testing.T) {
-		tests := []struct {
-			name      string
-			validator validateFunc
-		}{
-			{"Start", validateFreshStart},
-			{"Pause", validatePause},
-			{"Unpause", validateUnpause},
-			{"PauseAgain", validatePause},
-			{"DeletePaused", validateDelete},
-		}
-		for _, tc := range tests {
-			tc := tc
-			t.Run(tc.name, func(t *testing.T) {
-				tc.validator(ctx, t, profile)
-			})
-		}
-	})
-}
-
-func validateFreshStart(ctx context.Context, t *testing.T, profile string) {
-	args := append([]string{"start", "-p", profile, "--memory=1800", "--install-addons=false", "--wait=false"}, StartArgs()...)
-	rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
-	if err != nil {
-		t.Fatalf("failed to start minikube with args: %q : %v", rr.Command(), err)
-	}
-}
-
-func validatePause(ctx context.Context, t *testing.T, profile string) {
-	args := []string{"pause", "-p", profile, "--alsologtostderr", "-v=5"}
-	rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
-	if err != nil {
-		t.Errorf("failed to pause minikube with args: %q : %v", rr.Command(), err)
-	}
-}
-
-func validateUnpause(ctx context.Context, t *testing.T, profile string) {
-	args := []string{"unpause", "-p", profile, "--alsologtostderr", "-v=5"}
-	rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
-	if err != nil {
-		t.Errorf("failed to unpause minikube with args: %q : %v", rr.Command(), err)
-	}
-}
-
-func validateDelete(ctx context.Context, t *testing.T, profile string) {
-	// vervose logging because this might go wrong, if container get stuck
-	args := []string{"delete", "-p", profile, "--alsologtostderr", "-v=5"}
-	rr, err := Run(t, exec.CommandContext(ctx, Target(), args...))
-	if err != nil {
-		t.Errorf("failed to delete minikube with args: %q : %v", rr.Command(), err)
-	}
-}
diff --git a/test/integration/util.go b/test/integration/util.go
index 5b1ee0930..f3d7c1916 100644
--- a/test/integration/util.go
+++ b/test/integration/util.go
@@ -56,6 +56,5 @@ func UniqueProfileName(prefix string) string {
 	if NoneDriver() {
 		return "minikube"
 	}
-	// example: prefix-20200413T162239-3215
-	return fmt.Sprintf("%s-%s-%d", prefix, time.Now().Format("20060102T150405"), os.Getpid())
+	return fmt.Sprintf("%s-%s-%d", prefix, time.Now().Format("20060102T150405.999999999"), os.Getpid())
 }