Repository: kubernetes-sigs/cluster-api
Pull request #3754 (2020-10-07 14:56:19)

📖 Update the roadmap for v1alpha4
<!-- please add a icon to the title of this PR (see https://sigs.k8s.io/cluster-api/VERSIONING.md), and delete this line and similar ones -->
<!-- the icon will be either ⚠️ (:warning:, major or breaking changes), ✨ (:sparkles:, feature additions), 🐛 (:bug:, patch and bugfixes), 📖 (:book:, documentation or proposals), or 🌱 (:seedling:, minor or other) -->

**What this PR does / why we need it**:
Good morning / evening / afternoon 😄, as promised this PR starts documenting the items the community is planning on working on for v1alpha4. Work has already started on the main branch and we're focusing on getting the busy work out of the way to focus more on designs and proposals soon.

This list isn't complete, feel free to add comments or call out any items that I might have missed.

/milestone v0.4.0


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

This pull-request has been approved by:
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **vincepri** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @vincepri` 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-sigs%2Fcluster-api).

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

- **[OWNERS](https://github.com/kubernetes-sigs/cluster-api/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":["vincepri"]} -->
k8s-ci-robot: @vincepri: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-cluster-api-test-main | 03c933634f16436ad7b676240b9acdb549aafa93 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/3754/pull-cluster-api-test-main/1313855687905775616) | `/test pull-cluster-api-test-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=3754). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Avincepri). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<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. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
vincepri: /test pull-cluster-api-test-main
vincepri: /hold
richardcase: @vincepri - would it be possible to include #3661 which would introduce multiple kubeconfigs (i.e. a user and capi system)?
fabriziopandini: /lgtm
I see all the main topics on top of my mind. 
Nevertheless, it will be worth making another pass on this doc after the CAEP wave.
k8s-ci-robot: New changes are detected. LGTM label has been removed.
k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by:
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **fabriziopandini** after the PR has been reviewed.
You can assign the PR to them by writing `/assign @fabriziopandini` 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-sigs%2Fcluster-api).

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

- **[OWNERS](https://github.com/kubernetes-sigs/cluster-api/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":["fabriziopandini"]} -->
k8s-ci-robot: @vincepri: PR needs rebase.

<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>
hanlins: Hi @vincepri, I know it's a late request, would it be possible to include https://github.com/kubernetes-sigs/cluster-api/issues/3751 in **v1alpha4**?
vincepri: @hanlins I can definitely add that to the roadmap, would you or someone else be able to work on the proposal and implementation?
hanlins: > @hanlins I can definitely add that to the roadmap, would you or someone else be able to work on the proposal and implementation?

Sure, my team will work on the proposal.
k8s-ci-robot: @vincepri: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-cluster-api-test-main | 0d02dfa58614571a0dfb96b2673103436f3de75c | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/3754/pull-cluster-api-test-main/1314289212207403008) | `/test pull-cluster-api-test-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=3754). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Avincepri). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<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. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
detiber: +1 from me on the proposed updates
k8s-ci-robot: @vincepri: The following test **failed**, say `/retest` to rerun all failed tests:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-cluster-api-test-main | cd38b01df1ab0009683afdba6a163d444d5cedd7 | [link](https://prow.k8s.io/view/gs/kubernetes-jenkins/pr-logs/pull/kubernetes-sigs_cluster-api/3754/pull-cluster-api-test-main/1316024733313011712) | `/test pull-cluster-api-test-main`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes-sigs&repo=cluster-api&pr=3754). [Your PR dashboard](https://prow.k8s.io/pr?query=is%3Apr%20state%3Aopen%20author%3Avincepri). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes-sigs/cluster-api/issues?q=is:issue+is:open) when you hit one in your PR.

<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. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
vincepri: /test pull-cluster-api-test-main
vincepri: /hold cancel
fabriziopandini: If people find it useful, I would like to add https://github.com/kubernetes-sigs/cluster-api/issues/3802

Patch:
diff --git a/bootstrap/kubeadm/internal/cloudinit/cloudinit.go b/bootstrap/kubeadm/internal/cloudinit/cloudinit.go
index 1d31b2f05..3092c051a 100644
--- a/bootstrap/kubeadm/internal/cloudinit/cloudinit.go
+++ b/bootstrap/kubeadm/internal/cloudinit/cloudinit.go
@@ -26,7 +26,7 @@ import (
 )
 
 const (
-	standardJoinCommand            = "kubeadm join --config /run/kubeadm/kubeadm-join-config.yaml %s"
+	standardJoinCommand            = "kubeadm join --config /tmp/kubeadm-join-config.yaml %s"
 	retriableJoinScriptName        = "/usr/local/bin/kubeadm-bootstrap-script"
 	retriableJoinScriptOwner       = "root"
 	retriableJoinScriptPermissions = "0755"
diff --git a/bootstrap/kubeadm/internal/cloudinit/controlplane_init.go b/bootstrap/kubeadm/internal/cloudinit/controlplane_init.go
index 35d4d4a30..ce894b726 100644
--- a/bootstrap/kubeadm/internal/cloudinit/controlplane_init.go
+++ b/bootstrap/kubeadm/internal/cloudinit/controlplane_init.go
@@ -23,7 +23,7 @@ import (
 const (
 	controlPlaneCloudInit = `{{.Header}}
 {{template "files" .WriteFiles}}
--   path: /run/kubeadm/kubeadm.yaml
+-   path: /tmp/kubeadm.yaml
     owner: root:root
     permissions: '0640'
     content: |
@@ -33,7 +33,7 @@ const (
 {{.InitConfiguration | Indent 6}}
 runcmd:
 {{- template "commands" .PreKubeadmCommands }}
-  - 'kubeadm init --config /run/kubeadm/kubeadm.yaml {{.KubeadmVerbosity}}'
+  - 'kubeadm init --config /tmp/kubeadm.yaml {{.KubeadmVerbosity}}'
 {{- template "commands" .PostKubeadmCommands }}
 {{- template "ntp" .NTP }}
 {{- template "users" .Users }}
diff --git a/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go b/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go
index 103ba0d90..9300c05b9 100644
--- a/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go
+++ b/bootstrap/kubeadm/internal/cloudinit/controlplane_join.go
@@ -24,7 +24,7 @@ import (
 const (
 	controlPlaneJoinCloudInit = `{{.Header}}
 {{template "files" .WriteFiles}}
--   path: /run/kubeadm/kubeadm-join-config.yaml
+-   path: /tmp/kubeadm-join-config.yaml
     owner: root:root
     permissions: '0640'
     content: |
diff --git a/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh b/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh
index 45cfe7919..22032fb6c 100644
--- a/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh
+++ b/bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh
@@ -88,7 +88,7 @@ function retry-command() {
   until [ $n -ge 5 ]; do
     log::info "running '$*'"
     # shellcheck disable=SC1083
-    "$@" --config=/run/kubeadm/kubeadm-join-config.yaml {{.KubeadmVerbosity}}
+    "$@" --config=/tmp/kubeadm-join-config.yaml {{.KubeadmVerbosity}}
     kubeadm_return=$?
     check_kubeadm_command "'$*'" "${kubeadm_return}"
     if [ ${kubeadm_return} -eq 0 ]; then
@@ -111,7 +111,7 @@ function try-or-die-command() {
   local kubeadm_return
   log::info "running '$*'"
   # shellcheck disable=SC1083
-  "$@" --config=/run/kubeadm/kubeadm-join-config.yaml {{.KubeadmVerbosity}}
+  "$@" --config=/tmp/kubeadm-join-config.yaml {{.KubeadmVerbosity}}
   kubeadm_return=$?
   check_kubeadm_command "'$*'" "${kubeadm_return}"
   if [ ${kubeadm_return} -ne 0 ]; then
diff --git a/bootstrap/kubeadm/internal/cloudinit/node.go b/bootstrap/kubeadm/internal/cloudinit/node.go
index 5da4cc8fa..afe8771b0 100644
--- a/bootstrap/kubeadm/internal/cloudinit/node.go
+++ b/bootstrap/kubeadm/internal/cloudinit/node.go
@@ -19,7 +19,7 @@ package cloudinit
 const (
 	nodeCloudInit = `{{.Header}}
 {{template "files" .WriteFiles}}
--   path: /run/kubeadm/kubeadm-join-config.yaml
+-   path: /tmp/kubeadm-join-config.yaml
     owner: root:root
     permissions: '0640'
     content: |
diff --git a/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go b/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go
index f6acb6e5e..604bf21c4 100644
--- a/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go
+++ b/bootstrap/kubeadm/internal/cloudinit/zz_generated.bindata.go
@@ -93,7 +93,7 @@ func (fi bindataFileInfo) Sys() interface{} {
 	return nil
 }
 
-var _bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x61\x6f\xdb\xb0\x11\xfd\xae\x5f\xf1\x62\x1b\x6b\xd2\x44\xb6\xe3\xa2\x43\x91\xc0\xdb\xbc\xb4\xc5\x8c\x76\x49\x11\xa7\x2d\x8a\xa2\x08\x68\xe9\x24\x71\xa6\x48\x95\xa4\xe2\x18\x6e\xfe\xfb\x40\x4a\x76\xec\xd8\x4e\xda\x6c\xf9\x12\x81\xbc\x7b\x77\xf7\xee\xf1\x48\x37\xf7\x3a\x63\x2e\x3b\x63\x66\xb2\xa0\x89\x33\x55\xcc\x34\x4f\x33\x8b\x5e\xb7\xd7\xc5\x55\x46\xf8\x50\x8e\x49\x4b\xb2\x64\x30\x28\x6d\xa6\xb4\x69\x07\xcd\xa0\x89\x8f\x3c\x22\x69\x28\x46\x29\x63\xd2\xb0\x19\x61\x50\xb0\x28\xa3\xc5\xce\x11\xbe\x90\x36\x5c\x49\xf4\xda\x5d\xec\x3b\x83\x46\xbd\xd5\x38\x38\x0d\x9a\x98\xa9\x12\x39\x9b\x41\x2a\x8b\xd2\x10\x6c\xc6\x0d\x12\x2e\x08\x74\x1b\x51\x61\xc1\x25\x22\x95\x17\x82\x33\x19\x11\xa6\xdc\x66\x3e\x4c\x0d\xd2\x0e\x9a\xf8\x56\x43\xa8\xb1\x65\x5c\x82\x21\x52\xc5\x0c\x2a\x59\xb5\x03\xb3\x3e\x61\xf7\x97\x59\x5b\x9c\x74\x3a\xd3\xe9\xb4\xcd\x7c\xb2\x6d\xa5\xd3\x8e\xa8\x0c\x4d\xe7\xe3\xf0\xec\xdd\xf9\xe8\x5d\xd8\x6b\x77\xbd\xcb\x67\x29\xc8\x18\x68\xfa\x59\x72\x4d\x31\xc6\x33\xb0\xa2\x10\x3c\x62\x63\x41\x10\x6c\x0a\xa5\xc1\x52\x4d\x14\xc3\x2a\x97\xef\x54\x73\xcb\x65\x7a\x04\xa3\x12\x3b\x65\x9a\x82\x26\x62\x6e\xac\xe6\xe3\xd2\xae\x91\xb5\xc8\x8e\x9b\x35\x03\x25\xc1\x24\x1a\x83\x11\x86\xa3\x06\xfe\x39\x18\x0d\x47\x47\x41\x13\x5f\x87\x57\xff\xba\xf8\x7c\x85\xaf\x83\xcb\xcb\xc1\xf9\xd5\xf0\xdd\x08\x17\x97\x38\xbb\x38\x7f\x3b\xbc\x1a\x5e\x9c\x8f\x70\xf1\x1e\x83\xf3\x6f\xf8\x30\x3c\x7f\x7b\x04\xe2\x36\x23\x0d\xba\x2d\xb4\xcb\x5f\x69\x70\x47\x23\xc5\x8e\xb3\x11\xd1\x5a\x02\x89\xaa\x12\x32\x05\x45\x3c\xe1\x11\x04\x93\x69\xc9\x52\x42\xaa\x6e\x48\x4b\x2e\x53\x14\xa4\x73\x6e\x5c\x33\x0d\x98\x8c\x83\x26\x04\xcf\xb9\x65\xd6\xaf\x6c\x14\xd5\x0e\x9c\x40\x54\xea\x4a\x21\xad\x1d\x49\x32\x06\xdd\x72\xeb\x12\x18\xe8\xd4\x9c\xf8\x86\xb4\x8e\xf1\x6f\x32\xc6\xc5\xb2\x0a\x42\xa5\xf7\x4d\xf6\x6e\x95\x51\xcf\xeb\xb0\xc2\x89\x54\xec\x6d\x35\xd9\x52\xcb\x40\xa8\xf4\xe4\xc4\xef\x5c\x3b\xf4\xfd\x03\xcc\x03\x40\xa8\x88\x09\xe4\x15\x72\xbf\xd1\x9a\x1f\xdf\x35\x96\xcb\x0e\xc1\xad\xf5\xee\x1a\x81\x5f\x5c\x20\xa0\xd1\x9a\xd7\x3e\xde\xbc\x89\xf9\x1c\x3c\x41\xfb\x4c\x49\xab\x95\xf8\x24\x98\x24\xdc\xdd\x2d\x9c\xb8\x4c\x14\x1a\x97\x94\xab\x1b\x47\x51\x4e\xf9\x98\x34\x12\xad\x72\x44\xa2\x34\x96\x34\x8c\x65\xb6\x34\x0e\x6c\x52\x8e\x89\xc5\x39\x34\x19\xb2\x08\x13\x94\x45\xcc\x2c\x85\xb5\x65\x58\x59\xe2\xd7\x2f\x58\x5d\xd2\x8e\x10\x64\xa3\xb8\x8e\xb3\x15\x53\x3b\x43\x0a\x9d\x59\x58\xa7\x73\x0f\xe8\xcb\x21\x19\x6f\xa9\xc0\x90\x75\xa2\x5d\x00\x6e\xc5\x7e\x90\x59\xcd\x58\x9d\x7e\xfb\x36\x9c\xbc\x31\x6d\xae\x96\x7e\x63\xa5\xac\xb1\x9a\x15\x30\x91\xe6\x85\x45\xab\xeb\xfb\xef\xc2\xf8\x1e\xd7\x05\xb7\xe6\xae\x1f\x9e\x6f\xb7\xed\x7a\x50\x2f\xdc\x05\x55\x77\x4d\x19\x45\x64\xcc\x7a\x7f\x97\xc9\xff\x51\x02\x09\x97\xdc\x64\x14\x2f\xa3\x75\x5d\x94\x07\x4a\x1d\x97\x16\x13\xa2\x02\xa9\xe2\x32\x6d\xaf\x48\xec\x71\x75\x59\x9e\x93\xb1\x2c\x2f\xfa\xad\x7d\xd7\x5a\x84\x21\x37\x2a\x7c\xf3\xd7\xee\x71\xdf\x50\xa4\x64\x6c\x0e\x5c\xdc\x28\x53\x68\xec\xed\xed\xe1\x7b\x6b\xbe\xf4\xb9\xfb\x01\x8f\x83\xbf\xfd\xa5\x17\x00\x26\xe3\x89\x0d\xe0\x8f\x66\x1d\xe8\x14\xb1\x0a\xdc\x08\xab\x00\xdc\xd7\x8a\x5c\x6b\xbf\x58\x49\xaa\x4a\xfa\xa4\xb9\xb4\x60\x0b\x9a\x05\x97\xd4\x06\xde\x2b\x9d\x33\x6b\xab\x69\x65\x32\x35\x45\x59\xc0\xcf\x4d\x63\x35\xb1\xdc\x4d\x4e\x55\xda\xa2\xb4\x75\xdd\x8e\xe4\xba\xec\x3f\xaa\xef\xf0\xf0\x70\x6b\x7d\xcf\xa9\x6d\xa5\xae\x28\xa3\x68\x72\x5d\xb7\xf8\x3a\x52\x79\xce\x64\xbc\xd6\x96\x7a\xed\xb1\x43\x0f\x44\xcc\xd0\x42\x79\xe0\x32\x00\x1a\xdd\xc6\x81\xcf\x60\x45\x5a\xf7\x47\xa0\x50\xda\x71\x56\x2b\x31\x29\x05\xe8\x96\xa2\xd2\x0d\x3f\x5f\x86\x83\xf2\x61\x3d\x3a\x70\x7a\xea\x20\x8f\x57\x21\xeb\xf3\xb2\x81\x99\x30\x2e\x28\x06\x8b\x1c\xd8\xbe\x39\x78\x04\xaf\xf7\x3b\x78\x85\xa6\x44\xf8\x0b\xdc\x73\x55\x6b\x3a\x2e\xb5\x3b\x78\xdb\x71\x5f\x6d\xe0\x5e\x57\x47\x71\x03\xfc\x86\x09\x1e\xfb\x99\x5f\xe3\xee\x4c\xf6\xe5\x6f\xa4\x5a\xca\x89\x54\xd3\x05\xd4\xa2\x1d\x3b\x21\xc9\xb0\xc8\x69\x20\x29\xa5\x27\xcb\x5d\x01\x7a\x16\xae\x8b\x40\xf6\xbb\xcb\x9e\x2f\x64\x52\x5f\x15\x40\x29\x2d\x17\xf8\x8e\x96\x44\x98\x12\x5e\xe3\xc7\x52\x78\x2b\x6d\xd7\xa5\xf4\x57\xde\x8b\xd6\xcb\x17\x55\xf8\x26\x4c\x46\x42\x54\x84\xc6\xdc\xb8\xcb\xbf\x3f\x3a\x3b\xee\xbe\x79\xe5\xf7\x1b\xad\x7f\x34\x10\x86\x91\x92\x09\x4f\xfb\x1d\x5d\xca\x4e\x1d\x7b\xf1\x3f\xfc\x8f\xe2\xb2\x36\x68\xcf\x58\x2e\x30\x9f\xb7\x3f\x54\x7b\x5f\x48\x8f\x95\xe1\x76\xe6\xe7\x32\x1e\xa4\xdd\x6f\xfd\xdd\xaf\x6e\x55\x3e\x1a\x3e\x49\x37\x34\xd7\xbd\x6a\xde\x78\xe2\xaa\x7d\xb8\x87\x90\x7e\xa2\xeb\x8a\xb7\x19\x49\x6f\x08\x8c\x35\xb1\x89\xff\x4e\x78\x5d\xf4\x57\x02\x13\x42\x4d\x57\x34\xe5\x5b\x65\xdc\xf0\x28\x98\x31\x4f\xc5\xe8\x3d\x15\x43\xf6\x5b\xfb\xfb\x12\x87\x38\x3e\xa8\xf4\x62\x84\x1b\xbc\xc7\xaf\x17\x47\x7e\x37\xbc\xa4\x07\x25\x6c\xa8\xd7\x2a\x85\x9c\xc9\x59\x9d\xf4\xd1\xe2\xfa\x71\xd4\x24\xbc\x9a\x92\x3b\x2e\xf8\xa5\xc4\x9c\xc0\x94\x0e\x63\x4e\xe1\xb6\x61\xb3\xa1\xb0\x47\x64\xf4\xb8\x88\xfe\x9f\x12\xda\x26\xa0\x67\xc8\xe7\xf9\xcc\x27\xcc\x32\x51\xd1\xbe\xc9\xfa\xea\x33\x24\x58\x3b\xc2\xcb\xab\xdb\x55\x8a\x22\x73\x43\xfa\x5e\x7a\x61\xc8\x53\xa9\x34\x85\xcb\xa5\xb0\x6a\x6c\xff\x2d\xd7\x83\x1b\xc6\x85\x63\x34\x74\x8f\x9f\x70\xb2\xfc\xc9\x12\xe6\x4c\xf2\x84\x8c\x35\xbb\xbb\xfd\x64\x12\x51\xe5\x10\x16\xce\xc3\xc5\x2f\x98\x26\xc4\x6a\x2a\x85\x62\x71\x18\x91\xb6\xe6\xb9\x28\xff\x93\xb3\x33\xac\x14\xf1\xec\xf0\xab\xab\x6b\xbd\x79\x12\xd0\x2d\x09\xb2\xee\xe5\xaa\xed\x6e\x76\x37\x8f\xd0\xd3\xd9\xf9\x0d\xf7\x8a\xfd\xd3\xb2\xfc\x46\xfd\xb2\xae\x5e\x3e\xcf\x42\xc8\x99\x9e\x84\xbb\xa9\xd9\x7c\x97\x06\xff\x0d\x00\x00\xff\xff\x86\x85\x6b\x16\x46\x0f\x00\x00")
+var _bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptSh = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xac\x57\x61\x6f\x1a\x31\x12\xfd\xbe\xbf\xe2\x05\xd0\x35\x69\xb2\x40\xa8\x7a\xaa\x12\x71\x77\x5c\xda\xea\x50\x7b\x49\x15\xd2\x56\x55\x55\x45\x66\x77\x76\xd7\x87\xd7\xde\xda\xde\x10\x44\xf3\xdf\x4f\xf6\x2e\x04\x02\x24\x6d\xee\xf8\xb4\xb2\x67\xde\xcc\xbc\x79\x1e\x9b\xe6\x5e\x67\xcc\x65\x67\xcc\x4c\x16\x34\x71\xa6\x8a\x99\xe6\x69\x66\xd1\xeb\xf6\xba\xb8\xca\x08\x1f\xca\x31\x69\x49\x96\x0c\x06\xa5\xcd\x94\x36\xed\xa0\x19\x34\xf1\x91\x47\x24\x0d\xc5\x28\x65\x4c\x1a\x36\x23\x0c\x0a\x16\x65\xb4\xd8\x39\xc2\x17\xd2\x86\x2b\x89\x5e\xbb\x8b\x7d\x67\xd0\xa8\xb7\x1a\x07\xa7\x41\x13\x33\x55\x22\x67\x33\x48\x65\x51\x1a\x82\xcd\xb8\x41\xc2\x05\x81\x6e\x23\x2a\x2c\xb8\x44\xa4\xf2\x42\x70\x26\x23\xc2\x94\xdb\xcc\x87\xa9\x41\xda\x41\x13\xdf\x6a\x08\x35\xb6\x8c\x4b\x30\x44\xaa\x98\x41\x25\xab\x76\x60\xd6\x27\xec\x7e\x99\xb5\xc5\x49\xa7\x33\x9d\x4e\xdb\xcc\x27\xdb\x56\x3a\xed\x88\xca\xd0\x74\x3e\x0e\xcf\xde\x9d\x8f\xde\x85\xbd\x76\xd7\xbb\x7c\x96\x82\x8c\x81\xa6\x9f\x25\xd7\x14\x63\x3c\x03\x2b\x0a\xc1\x23\x36\x16\x04\xc1\xa6\x50\x1a\x2c\xd5\x44\x31\xac\x72\xf9\x4e\x35\xb7\x5c\xa6\x47\x30\x2a\xb1\x53\xa6\x29\x68\x22\xe6\xc6\x6a\x3e\x2e\xed\x1a\x59\x8b\xec\xb8\x59\x33\x50\x12\x4c\xa2\x31\x18\x61\x38\x6a\xe0\x9f\x83\xd1\x70\x74\x14\x34\xf1\x75\x78\xf5\xaf\x8b\xcf\x57\xf8\x3a\xb8\xbc\x1c\x9c\x5f\x0d\xdf\x8d\x70\x71\x89\xb3\x8b\xf3\xb7\xc3\xab\xe1\xc5\xf9\x08\x17\xef\x31\x38\xff\x86\x0f\xc3\xf3\xb7\x47\x20\x6e\x33\xd2\xa0\xdb\x42\xbb\xfc\x95\x06\x77\x34\x52\xec\x38\x1b\x11\xad\x25\x90\xa8\x2a\x21\x53\x50\xc4\x13\x1e\x41\x30\x99\x96\x2c\x25\xa4\xea\x86\xb4\xe4\x32\x45\x41\x3a\xe7\xc6\x35\xd3\x80\xc9\x38\x68\x42\xf0\x9c\x5b\x66\xfd\xca\x46\x51\xed\xc0\x09\x44\xa5\xae\x14\xd2\xda\x91\x24\x63\xd0\x2d\xb7\x2e\x81\x81\x4e\xcd\x89\x6f\x48\xeb\x18\xff\x26\x63\x5c\x2c\xab\x20\x54\x7a\xdf\x64\xef\x56\x19\xf5\xbc\x0e\x2b\x9c\x48\xc5\xde\x56\x93\x2d\xb5\x0c\x84\x4a\x4f\x4e\xfc\xce\xb5\x43\xdf\x3f\xc0\x3c\x00\x84\x8a\x98\x40\x5e\x21\xf7\x1b\xad\xf9\xf1\x5d\x63\xb9\xec\x10\xdc\x5a\xef\xae\x11\xf8\xc5\x05\x02\x1a\xad\x79\xed\xe3\xcd\x9b\x98\xcf\xc1\x13\xb4\xcf\x94\xb4\x5a\x89\x4f\x82\x49\xc2\xdd\xdd\xc2\x89\xcb\x44\xa1\x71\x49\xb9\xba\x71\x14\xe5\x94\x8f\x49\x23\xd1\x2a\x47\x24\x4a\x63\x49\xc3\x58\x66\x4b\xe3\xc0\x26\xe5\x98\x58\x9c\x43\x93\x21\x8b\x30\x41\x59\xc4\xcc\x52\x58\x5b\x86\x95\x25\x7e\xfd\x82\xd5\x25\xed\x08\x41\x36\x8a\xeb\x38\x5b\x31\xb5\x33\xa4\xd0\x99\x85\x75\x3a\xf7\x80\xbe\x1c\x92\xf1\x96\x0a\x0c\x59\x27\xda\x05\xe0\x56\xec\x07\x99\xd5\x8c\xd5\xe9\xb7\x6f\xc3\xc9\x1b\xd3\xe6\x6a\xe9\x37\x56\xca\x1a\xab\x59\x01\x13\x69\x5e\x58\xb4\xba\xbe\xff\x2e\x8c\xef\x71\x5d\x70\x6b\xee\xfa\xe1\xf9\x76\xdb\xae\x07\xf5\xc2\x5d\x50\x75\xd7\x94\x51\x44\xc6\xac\xf7\x77\x99\xfc\x1f\x25\x90\x70\xc9\x4d\x46\xf1\x32\x5a\xd7\x45\x79\xa0\xd4\x71\x69\x31\x21\x2a\x90\x2a\x2e\xd3\xf6\x8a\xc4\x1e\x57\x97\xe5\x39\x19\xcb\xf2\xa2\xdf\xda\x77\xad\x45\x18\x72\xa3\xc2\x37\x7f\xed\x1e\xf7\x0d\x45\x4a\xc6\xe6\xc0\xc5\x8d\x32\x85\xc6\xde\xde\x1e\xbe\xb7\xe6\x4b\x9f\xbb\x1f\xf0\x38\xf8\xdb\x5f\x7a\x01\x60\x32\x9e\xd8\x00\xfe\x68\xd6\x81\x4e\x11\xab\xc0\x8d\xb0\x0a\xc0\x7d\xad\xc8\xb5\xf6\x8b\x95\xa4\xaa\xa4\x4f\x9a\x4b\x0b\xb6\xa0\x59\x70\x49\x6d\xe0\xbd\xd2\x39\xb3\xb6\x9a\x56\x26\x53\x53\x94\x05\xfc\xdc\x34\x56\x13\xcb\xdd\xe4\x54\xa5\x2d\x4a\x5b\xd7\xed\x48\xae\xcb\xfe\xa3\xfa\x0e\x0f\x0f\xb7\xd6\xf7\x9c\xda\x56\xea\x8a\x32\x8a\x26\xd7\x75\x8b\xaf\x23\x95\xe7\x4c\xc6\x6b\x6d\xa9\xd7\x1e\x3b\xf4\x40\xc4\x0c\x2d\x94\x07\x2e\x03\xa0\xd1\x6d\x1c\xf8\x0c\x56\xa4\x75\x7f\x04\x0a\xa5\x1d\x67\xb5\x12\x93\x52\x80\x6e\x29\x2a\xdd\xf0\xf3\x65\x38\x28\x1f\xd6\xa3\x03\xa7\xa7\x0e\xf2\x78\x15\xb2\x3e\x2f\x1b\x98\x09\xe3\x82\x62\xb0\xc8\x81\xed\x9b\x83\x47\xf0\x7a\xbf\x83\x57\x68\x4a\x84\xbf\xc0\x3d\x57\xb5\xa6\xe3\x52\xbb\x83\xb7\x1d\xf7\xd5\x06\xee\x75\x75\x14\x37\xc0\x6f\x98\xe0\xb1\x9f\xf9\x35\xee\xce\x64\x5f\xfe\x46\xaa\xa5\x9c\x48\x35\x5d\x40\x2d\xda\xb1\x13\x92\x0c\x8b\x9c\x06\x92\x52\x7a\xb2\xdc\x15\xa0\x67\xe1\xba\x08\x64\xbf\xbb\xec\xf9\x42\x26\xf5\x55\x01\x94\xd2\x72\x81\xef\x68\x49\x84\x29\xe1\x35\x7e\x2c\x85\xb7\xd2\x76\x5d\x4a\x7f\xe5\xbd\x68\xbd\x7c\x51\x85\x6f\xc2\x64\x24\x44\x45\x68\xcc\x8d\xbb\xfc\xfb\xa3\xb3\xe3\xee\x9b\x57\x7e\xbf\xd1\xfa\x47\x03\x61\x18\x29\x99\xf0\xb4\xdf\xb1\x79\xd1\xa9\x63\x87\xff\x51\x5c\xd6\x1b\xed\x19\xcb\x05\xe6\xf3\xf6\x87\x6a\xef\x0b\xe9\xb1\x32\xdc\xce\xfc\x3c\xc6\x83\x74\xfb\xad\xbf\xfb\xd5\xad\x8a\x47\xc3\x27\xe7\x86\xe5\xba\x57\xcd\x17\x4f\x5c\x95\x0f\xf7\x10\xd2\x4f\x74\x5d\xd1\x36\x23\xe9\x0d\x81\xb1\x26\x36\xf1\xdf\x09\xaf\x8b\xfd\x4a\x60\x42\xa8\xe9\x8a\x96\x7c\x8b\x8c\x1b\x1a\x05\x33\xe6\xa9\x18\xbd\xa7\x62\xc8\x7e\x6b\x7f\x5f\xe2\x10\xc7\x07\x95\x4e\x8c\x70\x03\xf7\xf8\xf5\xe2\xa8\xef\x86\x97\xf4\xa0\x84\x0d\xd5\x5a\xa5\x90\x33\x39\xab\x93\x3e\x5a\x5c\x3b\x8e\x9a\x84\x57\xd3\x71\xc7\xc5\xbe\x94\x96\x13\x96\xd2\x61\xcc\x29\xdc\x36\x64\x36\x94\xf5\x88\x7c\x1e\x17\xcf\xff\x43\x3a\xdb\x84\xf3\x0c\xd9\x3c\x9f\xf1\x84\x59\x26\x2a\xba\x37\xd9\x5e\x7d\x76\x04\x6b\x47\x76\x79\x55\xbb\x4a\x51\x64\x6e\x28\xdf\x4b\x2e\x0c\x79\x2a\x95\xa6\x70\xb9\x14\x56\x0d\xed\xbf\xe5\x7a\x70\xc3\xb8\x70\x4c\x86\xee\xb1\x13\x4e\x96\x7f\x51\xc2\x9c\x49\x9e\x90\xb1\x66\x77\x97\x9f\x4c\x22\xaa\x1c\xc2\xc2\x79\xb8\xf8\x05\xd3\x84\x58\x4d\xa5\x50\x2c\x0e\x23\xd2\xd6\x3c\x17\xe5\x7f\x72\x76\x86\x95\x22\x9e\x1d\x7e\x75\x75\xad\x37\x4f\x02\xba\x25\x41\xd6\xbd\x54\xb5\xdd\xcd\xee\xe6\xd1\x79\x3a\x3b\xbf\xe1\x5e\xad\x7f\x5a\x96\xdf\xa8\x5f\xd2\xd5\x4b\xe7\x59\x08\x39\xd3\x93\x70\x37\x35\x9b\xef\xd0\xe0\xbf\x01\x00\x00\xff\xff\x20\x29\xc4\xf7\x36\x0f\x00\x00")
 
 func bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptShBytes() ([]byte, error) {
 	return bindataRead(
@@ -108,7 +108,7 @@ func bootstrapKubeadmInternalCloudinitKubeadmBootstrapScriptSh() (*asset, error)
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh", size: 3910, mode: os.FileMode(420), modTime: time.Unix(1, 0)}
+	info := bindataFileInfo{name: "bootstrap/kubeadm/internal/cloudinit/kubeadm-bootstrap-script.sh", size: 3894, mode: os.FileMode(420), modTime: time.Unix(1, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/cmd/clusterctl/cmd/init.go b/cmd/clusterctl/cmd/init.go
index 3cf521422..09daf47f5 100644
--- a/cmd/clusterctl/cmd/init.go
+++ b/cmd/clusterctl/cmd/init.go
@@ -49,7 +49,7 @@ var initCmd = &cobra.Command{
 		The management cluster must be an existing Kubernetes cluster, make sure
 		to have enough privileges to install the desired components.
 
-		Use 'clusterctl config repositories' to get a list of available providers; if necessary, edit
+		Use 'clusterctl config providers' to get a list of available providers; if necessary, edit
 		$HOME/.cluster-api/clusterctl.yaml file to add new provider or to customize existing ones.
 
 		Some providers require environment variables to be set before running clusterctl init.
diff --git a/docs/book/src/roadmap.md b/docs/book/src/roadmap.md
index 2e8b54bbf..a2fde0894 100644
--- a/docs/book/src/roadmap.md
+++ b/docs/book/src/roadmap.md
@@ -3,32 +3,38 @@
 This roadmap is a constant work in progress, subject to frequent revision. Dates are approximations.
 
 
-## v0.3.7 (v1alpha3+) ~ June/July 2020
+## v0.4 (v1alpha4) ~ Q1 2021
 
 |Area|Description|Issue/Proposal|
 |--|--|--|
-|Testing|E2E Test plan|[Spreadsheet](https://docs.google.com/spreadsheets/d/1uB3DyacOLctRjbI6ov7mVoRb6PnM4ktTABxBygt5sKI/edit#gid=0)
-|Testing|Enable webhooks in integration tests|[#2788](https://github.com/kubernetes-sigs/cluster-api/issues/2788)|
-|Control Plane|KubeadmControlPlane robustness|[#2753](https://github.com/kubernetes-sigs/cluster-api/issues/2753)|
-|Control Plane|KubeadmControlPlane adoption|[#2214](https://github.com/kubernetes-sigs/cluster-api/issues/2214)|
-|Extensibility|Clusterctl library should support extensible templating|[#2339](https://github.com/kubernetes-sigs/cluster-api/issues/2339)|
-|Cluster Lifecycle|ClusterResourceSet experiment|[#2395](https://github.com/kubernetes-sigs/cluster-api/issues/2395)|
-|Core Improvements|Library to watch remote workload clusters|[#2414](https://github.com/kubernetes-sigs/cluster-api/issues/2414)|
-|API, UX|Support and define conditions on cluster api objects|[#1658](https://github.com/kubernetes-sigs/cluster-api/issues/1658)|
-|Extensibility, Infrastructure|Support spot instances|[#1876](https://github.com/kubernetes-sigs/cluster-api/issues/1876)|
-|Extensibility|Machine pre-deletion hooks|[#1514](https://github.com/kubernetes-sigs/cluster-api/issues/1514)|
-
-## v0.4 (v1alpha4) ~ Q4 2020
-
-|Area|Description|Issue/Proposal|
-|--|--|--|
-|UX, Bootstrap|Machine bootstrap failure detection|[#2554](https://github.com/kubernetes-sigs/cluster-api/issues/2554)|
+|Operator, Providers|Move to a single manager watching all namespaces for each provider|[#3042](https://github.com/kubernetes-sigs/cluster-api/issues/3042)
+|Clusterctl|Redefine the scope of clusterctl move|[#3354](https://github.com/kubernetes-sigs/cluster-api/issues/3354)
 |Extensibility|Support pluggable machine load balancers|[#1250](https://github.com/kubernetes-sigs/cluster-api/issues/1250)|
-|Tooling Improvements| Define clusterctl inventory specification & have providers implement it|TBA|
 |Core Improvements|Move away from corev1.ObjectReference|[#2318](https://github.com/kubernetes-sigs/cluster-api/issues/2318)|
 |Dependency|Kubeadm v1beta2 types and support|[#2769](https://github.com/kubernetes-sigs/cluster-api/issues/2769)|
+|UX, Bootstrap|Machine bootstrap failure detection with sentinel files|[#3716](https://github.com/kubernetes-sigs/cluster-api/issues/3716)|
+|Operator|Management cluster operator|[#3427](https://github.com/kubernetes-sigs/cluster-api/issues/3427)|
+|Features, KubeadmControlPlane|Support for MachineHealthCheck based remediation|[#2976](https://github.com/kubernetes-sigs/cluster-api/issues/2976)|
+|Features, KubeadmControlPlane|KubeadmControlPlane Spec should be fully mutable|[#2083](https://github.com/kubernetes-sigs/cluster-api/issues/2083)|
+|Testing, Clusterctl|Implement a new E2E test for verifying clusterctl upgrades|[#3690](https://github.com/kubernetes-sigs/cluster-api/issues/3690)|
+|UX, Kubeadm|Insulate users from kubeadm API version changes|[#2769](https://github.com/kubernetes-sigs/cluster-api/issues/2769)|
+|Cleanup|Generate v1alpha4 types, remove support for v1alpha2|[#3428](https://github.com/kubernetes-sigs/cluster-api/issues/3428)|
+|Cleanup|Remove Status.Phase and other boolean fields in favor of conditions in all types|[#3153](https://github.com/kubernetes-sigs/cluster-api/issues/3153)|
+|Cleanup|Deprecate Status.{FailureMessage, FailureReason} in favor of conditions in types and contracts|[#3692](https://github.com/kubernetes-sigs/cluster-api/issues/3692)|
+|UX, Clusterctl|Support plugins in clusterctl to make provider-specific setup easier|[#3255](https://github.com/kubernetes-sigs/cluster-api/issues/3255)|
+|Tooling, Visibility|Distributed Tracing|[#3760](https://github.com/kubernetes-sigs/cluster-api/issues/3760)|
+|Bootstrap Improvements|Support composition of bootstrapping of kubeadm, cloud-init/ignition/talos/etc... and secrets transport|[#3761](https://github.com/kubernetes-sigs/cluster-api/issues/3761)|
+|Bootstrap Improvements|Add ignition support experiment as a bootstrap provider|[#3430](https://github.com/kubernetes-sigs/cluster-api/issues/3430)|
 |Integration|Autoscaler scale to and from zero|[#2530](https://github.com/kubernetes-sigs/cluster-api/issues/2530)|
+|API, Contracts|Support multiple kubeconfigs for a provider|[#3661](https://github.com/kubernetes-sigs/cluster-api/issues/3661)|
+|API, Networking|Http proxy support for egress traffic|[#3751](https://github.com/kubernetes-sigs/cluster-api/issues/3751)|
+|Features, Integration|Windows support for worker nodes|[#3616](https://github.com/kubernetes-sigs/cluster-api/pull/3616)|
+|Clusterctl, UX|Provide "at glance" view of cluster conditions|[#3802](https://github.com/kubernetes-sigs/cluster-api/issues/3802)|
 
+## v0.5 (v1alpha5) ~ Q3 2021
+
+|Area|Description|Issue/Proposal|
+|--|--|--|
 
 ## v1beta1/v1 ~ TBA
 
@@ -45,8 +51,8 @@ This roadmap is a constant work in progress, subject to frequent revision. Dates
 
 |Area|Description|Issue/Proposal|
 |--|--|--|
+|Security|Machine attestation for secure kubelet registration|[#3762](https://github.com/kubernetes-sigs/cluster-api/issues/3762)|
 |Conformance| Define Cluster API provider conformance|TBA|
 |Core Improvements|Pluggable MachineDeployment upgrade strategies|[#1754](https://github.com/kubernetes-sigs/cluster-api/issues/1754)|
 |UX|Simplified cluster creation experience|[#1227](https://github.com/kubernetes-sigs/cluster-api/issues/1227)|
 |Bootstrap, Infrastructure|Document approaches for infrastructure providers to consider for securing sensitive bootstrap data|[#1739](https://github.com/kubernetes-sigs/cluster-api/issues/1739)|
-|Dependency|Clusterctl manages cert-manager lifecycle|[#2635](https://github.com/kubernetes-sigs/cluster-api/issues/2635)|
diff --git a/go.mod b/go.mod
index fea750ceb..40f914e4d 100644
--- a/go.mod
+++ b/go.mod
@@ -38,7 +38,7 @@ require (
 	k8s.io/component-base v0.19.2
 	k8s.io/klog v1.0.0
 	k8s.io/utils v0.0.0-20200912215256-4140de9c8800
-	sigs.k8s.io/controller-runtime v0.7.0-alpha.3
+	sigs.k8s.io/controller-runtime v0.7.0-alpha.2
 	sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802
 	sigs.k8s.io/yaml v1.2.0
 )
diff --git a/go.sum b/go.sum
index cd0372e98..4c88f8b40 100644
--- a/go.sum
+++ b/go.sum
@@ -811,8 +811,8 @@ k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQW
 k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0=
-sigs.k8s.io/controller-runtime v0.7.0-alpha.3 h1:2M5hPRhlAlvqywBouX/jAdY49aVMEZ4xL/gDYpdtuUs=
-sigs.k8s.io/controller-runtime v0.7.0-alpha.3/go.mod h1:yNpmlc7C6HaRnHubtIcOqnlVF/iTrNRISKKQhZ3mkHk=
+sigs.k8s.io/controller-runtime v0.7.0-alpha.2 h1:g3ZMgi9eOd+xx5bbWO6dCyW3Sf7/kfHoilC6zBeLq0U=
+sigs.k8s.io/controller-runtime v0.7.0-alpha.2/go.mod h1:yNpmlc7C6HaRnHubtIcOqnlVF/iTrNRISKKQhZ3mkHk=
 sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802 h1:L6/8hETA7jvdx3xBcbDifrIN2xaYHE7tA58n+Kdp2Zw=
 sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802/go.mod h1:HIZ3PWUezpklcjkqpFbnYOqaqsAE1JeCTEwkgvPLXjk=
 sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=


Test patch:
diff --git a/test/infrastructure/docker/cloudinit/kindadapter_test.go b/test/infrastructure/docker/cloudinit/kindadapter_test.go
index fa204e76a..054d6cd0d 100644
--- a/test/infrastructure/docker/cloudinit/kindadapter_test.go
+++ b/test/infrastructure/docker/cloudinit/kindadapter_test.go
@@ -100,7 +100,7 @@ write_files:
         \ 0\nnodeRegistration:\n  criSocket: /var/run/containerd/containerd.sock\n\
         \  kubeletExtraArgs:\n    cloud-provider: aws\n  name: 'ip-10-0-0-223.us-west-2.compute.internal'\n"
     owner: root:root
-    path: /run/kubeadm/kubeadm.yaml
+    path: /tmp/kubeadm.yaml
     permissions: '0640'
 `)
 
@@ -133,10 +133,10 @@ write_files:
 		{Cmd: "mkdir", Args: []string{"-p", "/etc/kubernetes/pki"}},
 		{Cmd: "/bin/sh", Args: []string{"-c", "cat > /etc/kubernetes/pki/sa.key /dev/stdin"}},
 		{Cmd: "chmod", Args: []string{"0600", "/etc/kubernetes/pki/sa.key"}},
-		// /run/kubeadm/kubeadm.yaml
-		{Cmd: "mkdir", Args: []string{"-p", "/run/kubeadm"}},
-		{Cmd: "/bin/sh", Args: []string{"-c", "cat > /run/kubeadm/kubeadm.yaml /dev/stdin"}},
-		{Cmd: "chmod", Args: []string{"0640", "/run/kubeadm/kubeadm.yaml"}},
+		// /tmp/kubeadm.yaml
+		{Cmd: "mkdir", Args: []string{"-p", "/tmp"}},
+		{Cmd: "/bin/sh", Args: []string{"-c", "cat > /tmp/kubeadm.yaml /dev/stdin"}},
+		{Cmd: "chmod", Args: []string{"0640", "/tmp/kubeadm.yaml"}},
 	}
 
 	commands, err := Commands(cloudData)
diff --git a/test/infrastructure/docker/cloudinit/runcmd_test.go b/test/infrastructure/docker/cloudinit/runcmd_test.go
index 7d5b4b1de..c043ae74d 100644
--- a/test/infrastructure/docker/cloudinit/runcmd_test.go
+++ b/test/infrastructure/docker/cloudinit/runcmd_test.go
@@ -64,11 +64,11 @@ func TestRunCmdRun(t *testing.T) {
 			name: "hack kubeadm ingore errors",
 			r: runCmd{
 				Cmds: []Cmd{
-					{Cmd: "/bin/sh", Args: []string{"-c", "kubeadm init --config /run/kubeadm/kubeadm.yaml"}},
+					{Cmd: "/bin/sh", Args: []string{"-c", "kubeadm init --config /tmp/kubeadm.yaml"}},
 				},
 			},
 			expectedCmds: []Cmd{
-				{Cmd: "/bin/sh", Args: []string{"-c", "kubeadm init --config /run/kubeadm/kubeadm.yaml --ignore-preflight-errors=all"}},
+				{Cmd: "/bin/sh", Args: []string{"-c", "kubeadm init --config /tmp/kubeadm.yaml --ignore-preflight-errors=all"}},
 			},
 		},
 	}
@@ -89,8 +89,8 @@ func TestHackKubeadmIgnoreErrors(t *testing.T) {
 
 	cloudData := `
 runcmd:
-- kubeadm init --config=/run/kubeadm/kubeadm.yaml
-- [ kubeadm, join, --config=/run/kubeadm/kubeadm-controlplane-join-config.yaml ]`
+- kubeadm init --config=/tmp/kubeadm.yaml
+- [ kubeadm, join, --config=/tmp/kubeadm-controlplane-join-config.yaml ]`
 	r := runCmd{}
 	err := r.Unmarshal([]byte(cloudData))
 	g.Expect(err).NotTo(HaveOccurred())
@@ -98,11 +98,11 @@ runcmd:
 
 	r.Cmds[0] = hackKubeadmIgnoreErrors(r.Cmds[0])
 
-	expected0 := Cmd{Cmd: "/bin/sh", Args: []string{"-c", "kubeadm init --config=/run/kubeadm/kubeadm.yaml --ignore-preflight-errors=all"}}
+	expected0 := Cmd{Cmd: "/bin/sh", Args: []string{"-c", "kubeadm init --config=/tmp/kubeadm.yaml --ignore-preflight-errors=all"}}
 	g.Expect(r.Cmds[0]).To(Equal(expected0))
 
 	r.Cmds[1] = hackKubeadmIgnoreErrors(r.Cmds[1])
 
-	expected1 := Cmd{Cmd: "kubeadm", Args: []string{"join", "--config=/run/kubeadm/kubeadm-controlplane-join-config.yaml", "--ignore-preflight-errors=all"}}
+	expected1 := Cmd{Cmd: "kubeadm", Args: []string{"join", "--config=/tmp/kubeadm-controlplane-join-config.yaml", "--ignore-preflight-errors=all"}}
 	g.Expect(r.Cmds[1]).To(Equal(expected1))
 }
diff --git a/test/infrastructure/docker/go.mod b/test/infrastructure/docker/go.mod
index 09c3701b1..eedea87f4 100644
--- a/test/infrastructure/docker/go.mod
+++ b/test/infrastructure/docker/go.mod
@@ -13,7 +13,7 @@ require (
 	k8s.io/klog v1.0.0
 	k8s.io/utils v0.0.0-20200912215256-4140de9c8800
 	sigs.k8s.io/cluster-api v0.3.3
-	sigs.k8s.io/controller-runtime v0.7.0-alpha.3
+	sigs.k8s.io/controller-runtime v0.7.0-alpha.2
 	sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802
 	sigs.k8s.io/yaml v1.2.0
 )
diff --git a/test/infrastructure/docker/go.sum b/test/infrastructure/docker/go.sum
index 36d1dc70a..17a1665a7 100644
--- a/test/infrastructure/docker/go.sum
+++ b/test/infrastructure/docker/go.sum
@@ -755,8 +755,8 @@ k8s.io/utils v0.0.0-20200912215256-4140de9c8800 h1:9ZNvfPvVIEsp/T1ez4GQuzCcCTEQW
 k8s.io/utils v0.0.0-20200912215256-4140de9c8800/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
 sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.9/go.mod h1:dzAXnQbTRyDlZPJX2SUPEqvnB+j7AJjtlox7PEwigU0=
-sigs.k8s.io/controller-runtime v0.7.0-alpha.3 h1:2M5hPRhlAlvqywBouX/jAdY49aVMEZ4xL/gDYpdtuUs=
-sigs.k8s.io/controller-runtime v0.7.0-alpha.3/go.mod h1:yNpmlc7C6HaRnHubtIcOqnlVF/iTrNRISKKQhZ3mkHk=
+sigs.k8s.io/controller-runtime v0.7.0-alpha.2 h1:g3ZMgi9eOd+xx5bbWO6dCyW3Sf7/kfHoilC6zBeLq0U=
+sigs.k8s.io/controller-runtime v0.7.0-alpha.2/go.mod h1:yNpmlc7C6HaRnHubtIcOqnlVF/iTrNRISKKQhZ3mkHk=
 sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802 h1:L6/8hETA7jvdx3xBcbDifrIN2xaYHE7tA58n+Kdp2Zw=
 sigs.k8s.io/kind v0.7.1-0.20200303021537-981bd80d3802/go.mod h1:HIZ3PWUezpklcjkqpFbnYOqaqsAE1JeCTEwkgvPLXjk=
 sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e h1:4Z09Hglb792X0kfOBBJUPFEyvVfQWrYT/l8h5EKA6JQ=