---
# System prepended metadata

title: Release v1.5.0-rc.0
tags: [Release]

---

🚨 This is a RELEASE CANDIDATE. Use it only for testing purposes. If you find any bugs, file an [issue](https://github.com/kubernetes-sigs/cluster-api/issues/new).

## ⚠️ Deprecation warning

The API version v1alpha3 is no longer served in this release. API version v1alpha4 is deprecated and will be removed in v1.6.

- [Version migration guide](https://main.cluster-api.sigs.k8s.io/developer/providers/version-migration.html)
- [GitHub issue #8038](https://github.com/kubernetes-sigs/cluster-api/issues/8038)
- [API deprecation details](https://main.cluster-api.sigs.k8s.io/contributing#removal-of-v1alpha3--v1alpha4-apiversions)


## Changes since v1.5.0-beta.1
---
## :chart_with_upwards_trend: Overview
- 19 new commits merged
- 7 feature additions ✨
- 1 bugs fixed 🐛

## :sparkles: New Features
- CAPIM: Enable Kubernetes upgrades in CAPIM (#8938)
- ClusterClass: Add webhook warning for missing ClusterClass (#8746)
- clusterctl: Add MachinePool Machine support in clusterctl discovery (#8836)
- clusterctl: Introduce possibility to create clusterctl plugins (#8957)
- Devtools: hack/observability bump kube-state-metrics chart to get version v2.9.2 (#8979)
- Devtools: hack/observability: improve dashboards (#8964)
- MachinePool: Add MachinePool Machine implementation in core CAPI components (#8828)

## :bug: Bug Fixes
- Devtools: tilt: fix build_engine setting when using podman (#8972)

## :seedling: Others
- CAPIM: in-memory provider: add apiserver & etcd metrics (#8962)
- Dependency: Bump golang.org/x/oauth2 from 0.9.0 to 0.10.0 (#8985)
- Devtools: Protect well know registry from accidental push during tilt up (#8930)
- Devtools: hack/observability: add apiserver request dashboards (#8978)
- e2e: Add SHA to default KIND image used in e2e tests (#8975)
- e2e: test/e2e: add field to scale test to deploy Clusters in separate namespace (#8963)
- e2e: test/e2e: improve logging for a detected rollout (#8953)
- KCP: KCP: Log the reason of a Machine rollout (#8959)
- Dependency: Update golangci-lint to v1.53.3 (#8796)
- Release: Improve release notes output (#8928)

:book: Additionally, there have been 1 contributions to our documentation and book. (#8958)

Reference to [v1.5.0-beta.1 release notes](https://github.com/kubernetes-sigs/cluster-api/releases/tag/v1.5.0-beta.1)

<details>
<summary>Changes since release v1.4.0</summary>

:warning: **RELEASE CANDIDATE NOTES** :warning: 

## 👌 Kubernetes version support

- Management Cluster: v1.24.x -> v1.27.x
- Workload Cluster: v1.22.x -> v1.27.x

[More information about version support can be found here](https://cluster-api.sigs.k8s.io/reference/versions.html)

## Changes since v1.4.0
---
## :chart_with_upwards_trend: Overview
- 323 new commits merged
- 4 breaking changes :warning:
- 19 feature additions ✨
- 62 bugs fixed 🐛

## :warning: Breaking Changes
- CAPD: Use k8s v1.27.0 in quickstart docs and CAPD (#8518)
- clusterctl: Bump to CR v0.15.0 (#8007)
- clusterctl: Follow XDG Directory standard for config/data/... files (#6913)
- clusterctl: Stop serving v1alpha3 API types (#8549)

## :sparkles: New Features
- CAPBK: Use caching read for bootstrap config owner (#8867)
- CAPIM: Enable Kubernetes upgrades in CAPIM (#8938)
- ClusterClass: Add webhook warning for missing ClusterClass (#8746)
- ClusterClass: add support or concurrent MD upgrades in classy clusters (#8432)
- clusterctl: Add MachinePool Machine support in clusterctl discovery (#8836)
- clusterctl: Add in memory provider (#8799)
- clusterctl: Add support for add-on providers in clusterctl (#8472)
- clusterctl: Introduce possibility to create clusterctl plugins (#8957)
- clusterctl: feat: accept resource mutators in Move operation (#7966)
- Devtools: hack/observability bump kube-state-metrics chart to get version v2.9.2 (#8979)
- Devtools: hack/observability: Add Parca, Bump observability tools, Add Grafana scale dashboard (#8754)
- Devtools: hack/observability: improve dashboards (#8964)
- e2e: ci: collect debug information about leftover processes (#8734)
- IPAM: Implements Getter interface for IPAddressClaim object (#8374)
- KCP/Core/CAPD: Add flags for configuring rate limits (#8579)
- Machine: Enable configuring the kubernetes rest client timeout for draining nodes (#8917)
- MachinePool: Add MachinePool Machine implementation in core CAPI components (#8828)
- MachineSet: MS preflight checks to improve cluster stability (#8595)
- util: Move mergeMap to util (#8377)

## :bug: Bug Fixes
- API: Ensure ownerReference apiVersions are always up to date (#8256)
- API: all: only set finalizers if deletionTimestamp is not set (#8949)
- CAPBK: ignition: start kubeadm after network.target (#8772)
- CAPBK: set uninitialized taint only on worker nodes (#8358)
- CAPD: Add kind mapper (#8880)
- CAPD: CAPD: Implement watch filter (#8789)
- CAPD: CAPD: change the haproxy entrypoint to prevent getting stopped immediately after start (#8685)
- CAPD: Delegate CAPD port selection to the container runtime (#8642)
- CAPD: test/capd: fix kind mapper entry for v1.25.11 (#8914)
- CAPD: test/e2e fix fail-swap-on=false flag not being part of kind images anymore (#8767)
- CAPIM: fix cluster deletion in the in-memory API server (#8818)
- CAPIM: fix inmemory provider docker build (#8822)
- CAPIM: test/e2e/in-memory: set providerID after VM is provisioned (#8879)
- CI: Always build Kind images for upgrade tests (#8859)
- CI: Ensure ALWAYS_BUILD_KIND_IMAGES is defaulted correctly in ci script (#8873)
- CI: verifier: use pull_request instead of pull_request_target (#8635)
- ClusterCacheTracker: ClusterCacheTracker: Stop pod caching when checking workload cluster (#8850)
- ClusterClass: Drop uid from error messages (#8333)
- ClusterClass: Validate variables in defaulting webhook (#8332)
- ClusterClass: avoid errors when MHC and upgrade occur together in classy clusters (#8464)
- ClusterClass: topology controller should avoid unnecessary rollouts during upgrades (#8628)
- ClusterClass: update TopologyReconciled condition on cluster deletion (#8422)
- clusterctl: Add soft ownership from clusters to ClusterResourceSetBinding (#8318)
- clusterctl: Ensure all GitHub releases are fetched when searching provider versions (#8240)
- clusterctl: Return error on infra cluster and control plane discovery (#8604)
- clusterctl: Use local kustomize version in create-local-repository.py (#8414)
- clusterctl: clusterctl: return early if release for latest tag does not exist yet (#8253)
- clusterctl: handle nil pointer in clusterctl describe (#8724)
- ClusterResourceSet: : Make sure the Kubernetes API Server service already created on remote cluster before applying ClusterResourceSets (#8048)
- ClusterResourceSet: ClusterResourceSet: continue applying when apply for a single cluster failed (#8611)
- Dependency: Update kindnetd and kindest/haproxy (#8469)
- Devtools: Update clean-charts make target for new paths (#8904)
- Devtools: tilt: fix build_engine setting when using podman (#8972)
- Devtools: tilt: set CR logger in tilt-prepare, fix allowed contexts (#8919)
- e2e: Adjust machinepool helper e2e timeout (#8739)
- e2e: Fix length check in MD helper (#8352)
- e2e: Ignore cert annotation in rollout test (#8761)
- e2e: Increase timeout for clusterclass rollout test (#8897)
- e2e: Increased assertClusterObjects timeout (#8758)
- e2e: Pin kindest/node images to known good versions in clusterctl upgrade tests (#8860)
- e2e: Remove non-functioning ginkgo.no-color flag (#8703)
- e2e: Revert "Add calico as e2e test CNI" (#8575)
- e2e: test/e2e check for machines being ready after provisioning on Runtime SDK test (#8625)
- e2e: test/e2e: use topology cluster-template for clusterctl upgrade mgmt cluster (#8311)
- e2e: test/framework fix docker pod log collector (#8634)
- IPAM: ipam: fix gateway being required for IPAddress (#8506)
- KCP: Allow machine rollout if cert reconcile fails (#8711)
- KCP: Ensure nil-pointer check in KCP syncMachines (#8481)
- KCP: Prevent KCP to create many private keys for each reconcile (#8617)
- KCP: enable updates from CloudInit (mostly ubuntu) based KCPs to Ignition (flatcar) based KCPs (#8339)
- Machine: bug fix to set node interruptible label (#8297)
- Machine: fix node label propagation (#8427)
- MachinePool: Add node watcher to MachinePool controller (#8443)
- MachinePool: Fix MachinePool node taint patching (#8462)
- MachinePool: MachinePool: always patch owned conditions, fix GetTypedPhase, doc fixes (#8627)
- MachinePool: Update MachinePool bootstrap dataSecretName when bootstrap config changes (#8667)
- Testing: Catch failure when fetching component URLs (#8455)
- Testing: Fix flake in machine phases test (#8370)
- Testing: Fix flaky wait in CRS test (#8334)
- Testing: Use CreateAndWait in MP ScaleFromZero test (#8927)
- Testing: internal/machine-controller fix flakes in phases test (#8576)
- Testing: machine-controller: fix phase tests race condition in tests on lastUpdated field (#8484)

## :seedling: Others
- API: Deprecate v1alpha3 and v1alpha4 in CRDs (#8687)
- CAPBK: replace reflect deepequal in bootstrap kubeadm (#8266)
- CAPD: Automatically set kubelet args for capd (#8881)
- CAPD: CAPD: only ignore necessary kubeadm preflight errors (#7911)
- CAPIM: Add startup timeout to the in memory provider (#8831)
- CAPIM: Add watch to in-memory server multiplexer (#8851)
- CAPIM: CAPIM: Enable update for coreDNS and kube-proxy (#8899)
- CAPIM: Fixups for watch in in-memory apiServer (#8898)
- CAPIM: Improve etcd management in CAPIM (#8906)
- CAPIM: add ClusterClass support for in-memory provider (#8807)
- CAPIM: fix readme for in-memory provider (#8905)
- CAPIM: in-memory provider: add apiserver & etcd metrics (#8962)
- CAPIM: test/e2e/in-memory: enable unit tests (#8886)
- CAPIM: test/e2e/in-memory: improve locking, return errors instead of panic (#8945)
- CAPIM: test/e2e/in-memory: improve performance by fixing locking issues (#8895)
- CAPIM: test/e2e/in-memory: sync in-memory provider ClusterClass with test (#8892)
- CAPIM: test/infra/inmemory: rename controller files (#8830)
- CI: Add area/dependency label for dependabot when bumping gomod (#8410)
- CI: Add dependency label to github actions update (#8845)
- CI: Switch cloudbuild.yaml to e2 machine type (#8428)
- CI: verifier: change back to pull_request_target to make it work again (#8637)
- ClusterCacheTracker: ClusterCacheTracker: improve error when workload cluster is not reachable (#8801)
- ClusterCacheTracker: Deprecate DefaultIndex usage and remove where not needed (#8855)
- ClusterCacheTracker: Use ClusterCacheTracker consistently (instead of NewClusterClient) (#8744)
- ClusterCacheTracker: Use rest config from ClusterCacheTracker consistently (#8894)
- ClusterCacheTracker/KCP/CAPBK: cache secrets in KCP, CABPK and ClusterCacheTracker (#8940)
- ClusterClass: use cached Cluster get in Reconcile (#8936)
- ClusterClass: use cached MD list in get current state (#8922)
- ClusterClass: deprecate rolloutAfter in cluster topology (#8324)
- ClusterClass: upgrading control plane should only be blocked if MD are upgrading (not just rolling out) (#8658)
- clusterctl: Add move annotation on objects for cluster move operation (#8322)
- clusterctl: Bump controller-tools to v0.12 (#8581)
- clusterctl: CAPIM: use consistent spelling for release artifacts (#8853)
- clusterctl: Drop cgroup-driver patch for CAPD (#8921)
- clusterctl: Fix spelling mistake in clusterctl comment (#8344)
- clusterctl: Update cert-manager to v1.12.2 (#8883)
- clusterctl: clusterctl: Add labels to OWNERS file (#8342)
- clusterctl: prepare main branch for v1.5 development (#8430)
- Core: Cache unstructured in Cluster, MD and MS controller (#8916)
- Core: Remove unnecessary requeues (#8743)
- Dependency: Bump EndBug/add-and-commit from 9.1.1 to 9.1.2 (#8584)
- Dependency: Bump EndBug/add-and-commit from 9.1.2 to 9.1.3 (#8621)
- Dependency: Bump actions/checkout from 3.3.0 to 3.4.0 (#8321)
- Dependency: Bump actions/checkout from 3.4.0 to 3.5.0 (#8389)
- Dependency: Bump actions/checkout from 3.5.0 to 3.5.2 (#8540)
- Dependency: Bump actions/checkout from 3.5.2 to 3.5.3 (#8837)
- Dependency: Bump actions/setup-go from 3.5.0 to 4.0.1 (#8664)
- Dependency: Bump docker/distribution to v2.8.2 (#8645)
- Dependency: Bump gcb-docker-gcloud from v20230424-910a2a439d to v20230522-312425ae46 (#8770)
- Dependency: Bump gcb-docker-gcloud image (#8570)
- Dependency: Bump github.com/go-logr/logr from 1.2.3 to 1.2.4 (#8461)
- Dependency: Bump github.com/onsi/ginkgo/v2 from 2.10.0 to 2.11.0 (#8891)
- Dependency: Bump github.com/onsi/ginkgo/v2 from 2.9.2 to 2.9.4 (#8622)
- Dependency: Bump github.com/onsi/ginkgo/v2 from 2.9.4 to 2.9.5 (#8666)
- Dependency: Bump github.com/onsi/ginkgo/v2 from 2.9.5 to 2.9.7 (#8792)
- Dependency: Bump github.com/onsi/ginkgo/v2 from 2.9.7 to 2.10.0 (#8839)
- Dependency: Bump github.com/onsi/gomega from 1.27.4 to 1.27.5 (#8390)
- Dependency: Bump github.com/onsi/gomega from 1.27.6 to 1.27.7 (#8715)
- Dependency: Bump github.com/onsi/gomega from 1.27.7 to 1.27.8 (#8841)
- Dependency: Bump github.com/prometheus/client_golang from 1.14.0 to 1.15.0 (#8541)
- Dependency: Bump github.com/prometheus/client_golang from 1.15.0 to 1.15.1 (#8623)
- Dependency: Bump github.com/prometheus/client_golang from 1.15.1 to 1.16.0 (#8890)
- Dependency: Bump github.com/spf13/cobra from 1.6.1 to 1.7.0 (#8502)
- Dependency: Bump github.com/spf13/viper from 1.15.0 to 1.16.0 (#8791)
- Dependency: Bump golang version (1.20.3 -> 1.20.4) (#8749)
- Dependency: Bump golang.org/x/oauth2 from 0.6.0 to 0.7.0 (#8503)
- Dependency: Bump golang.org/x/oauth2 from 0.7.0 to 0.8.0 (#8665)
- Dependency: Bump golang.org/x/oauth2 from 0.8.0 to 0.9.0 (#8889)
- Dependency: Bump golang.org/x/oauth2 from 0.9.0 to 0.10.0 (#8985)
- Dependency: Bump golang.org/x/text from 0.8.0 to 0.9.0 (#8504)
- Dependency: Bump golang.org/x/text from 0.9.0 to 0.10.0 (#8840)
- Dependency: Bump golangci-lint to 1.52.1 and fix findings (#8331)
- Dependency: Bump golangci-lint to v1.51.2 (#8312)
- Dependency: Bump golangci/golangci-lint-action from 3.4.0 to 3.5.0 (#8790)
- Dependency: Bump golangci/golangci-lint-action from 3.5.0 to 3.6.0 (#8838)
- Dependency: Bump gomodules.xyz/jsonpatch/v2 from 2.2.0 to 2.3.0 (#8716)
- Dependency: Bump kind to v0.19.0 (#8681)
- Dependency: Bump kindnet and haproxy images to latest (#8676)
- Dependency: Update KIND to v0.20.0 (#8908)
- Dependency: Update cert manager to v1.11.1 (#8529)
- Dependency: Update cert-manager to v1.11.2 (#8638)
- Dependency: Update cert-manager to v1.12.0 (#8702)
- Dependency: Update cert-manager to v1.12.1 (#8748)
- Dependency: Update controller runtime to 0.14.6 (#8405)
- Dependency: Update controller tools to v0.11.4 (#8547)
- Dependency: Update conversion-gen version (v0.26.0 -> v0.27.1) (#8573)
- Dependency: Update docker to v20.10.24 (#8475)
- Dependency: Update kind to v0.18.0 (#8433)
- Dependency: Update kpromo to v3.5.2 (#8487)
- Dependency: Update kpromo to v3.6.0 (#8680)
- Dependency: Update kubebuilder envtest (1.26.0 -> 1.27.1) (#8599)
- Dependency: Upgrade golang version (1.19.6 -> 1.20.3) (#8527)
- Dependency: Update golangci-lint to v1.53.3 (#8796)
- Devtools: Add go.work to .gitignore and .dockerignore (#8155)
- Devtools: Align kind registry script with upstream (#8731)
- Devtools: Build golangci-lint locally (#8933)
- Devtools: Pin delve to match go minor version (#8725)
- Devtools: Protect well know registry from accidental push during tilt up (#8930)
- Devtools: all: Add flags to enable block profiling (#8934)
- Devtools: bump containerd to 1.6.18 in hack/tools (#8523)
- Devtools: hack/observability: Add Grafana state dashboard, improve metrics (#8834)
- Devtools: hack/observability: Bump Loki, Grafana and promtail charts (#7182)
- Devtools: hack/observability: add apiserver request dashboards (#8978)
- Devtools: hack/observability: add metrics-server chart (#8950)
- Devtools: hack/observability: add tempo (for traces) (#8920)
- Devtools: hack/observability: disable unused loki-gateway (#8794)
- Devtools: hack/observability: improve Grafana dashboards (#8861)
- Devtools: hack/observability: move charts so they are ignored by go mod (#8795)
- Devtools: hack/observability: skip preload images on non-kind clusters (#8931)
- Devtools: hack/observability: use 20 Gi of storage for Prometheus (#8961)
- e2e: Add SHA to default KIND image used in e2e tests (#8975)
- e2e: Add Scale e2e - development only (#8833)
- e2e: Disable fail-fast by default for e2e tests (#8548)
- e2e: E2E: autoscaler e2e test (#8514)
- e2e: E2e: Unhold CI packages before installing (#7910)
- e2e: Improve gomega fail handling in clusterClass rollout (#8769)
- e2e: Improve logging for MachinePool upgrade test (#8728)
- e2e: Move ClusterClass quickstart test from e2e-informing to e2e-main (#8765)
- e2e: Pin cgroup driver used in v0.3 and v0.4 templates (#8684)
- e2e: add E2E test for MachineSet Preflight checks (#8698)
- e2e: add improvements to scale e2e (#8910)
- e2e: assert E2E error responses when waiting for MD nodes (#8501)
- e2e: e2e: log leftover processes to eventually detect zombies (#8662)
- e2e: modify scale e2e test defaults (#8902)
- e2e: test/e2e: Fixup dump kube-system pods (#8809)
- e2e: test/e2e: add field to scale test to deploy Clusters in separate namespace (#8963)
- e2e: test/e2e: also dump workload cluster kube-system pods (#8800)
- e2e: test/e2e: cleanup test files (#8557)
- e2e: test/e2e: improve logging for a detected rollout (#8953)
- e2e: test/e2e: increase apply timeout to 1m (#8941)
- e2e: test/framework: add functions to collect infrastructure logs in tests (#8675)
- IPAM: Make IPAddressClaim.Status.AddressRef optional (#8493)
- KCP: Change endpoints to endpoint in the etcd client (#8909)
- KCP: KCP: Log the reason of a Machine rollout (#8959)
- KCP: KCP: avoid panic if etcd server misbehaves (#8862)
- KCP: KCP: cache secrets between LookupOrGenerate and ensureCertificatesOwnerRef (#8926)
- KCP: KCP: cache unstructured (#8913)
- KCP: KCP: drop redundant get machines (#8912)
- KCP: KCP: fix noisy error log triggered by missing patch helper (#8863)
- KCP: KCP: improve error log on scale up when Machine doesn't have a nodeRef (#8564)
- KCP: Kcp use one workload cluster for reconcile (#8900)
- KCP: Remove v1alpha2 adoption logic from KCP (#8328)
- Machine: controller/machine: use unstructured caching client (#8896)
- Machine: optimize `reconcileInterruptibleNodeLabel` of machine controller (#8852)
- Machine: use providerID string as-is (#8577)
- MachineDeployment: Drop the first return value from FindOldMachineSets (#8415)
- MachineSet: add MachineFinalizer during machine computation (#8463)
- MachineSet: surface failed preflight checks on MachineSet in `MachinesCreated` condition (#8669)
- Release: Add area label lookup for prefixes to release notes tool (#8780)
- Release: Add runtime extension components to release (#8438)
- Release: Bump kpromo to v3.5.1 (#8301)
- Release: Improve release notes formatting (#8826)
- Release: Improve release notes output (#8928)
- Release: Make release notes generation concurrent (#8817)
- Runtime SDK: Update handler name validation rules (#8280)
- Testing: Add calico as e2e test CNI (#8420)
- Testing: Add dualstack e2e test (#8517)
- Testing: Add unit test for health check during creation of a new cluster accessor (#8269)
- Testing: Allow overriding gingko args in e2e tests (#8365)
- Testing: Fix typos in phrase "to exist" (#8688)
- Testing: Merge ownerReference tests with quick start (#8264)
- Testing: Update e2e upgrade test versions (#8361)
- Testing: Update version matrix for github workflows (#8398)
- Testing: Validating the warnings in tests (#8778)
- util: Rename internal/util/ssa util functions for better naming consistency (#8423)
- util: util: cache list calls in cluster to objects mapper (#8918)

:book: Additionally, there have been 72 contributions to our documentation and book. (#8958, #8960, #8956, #8955, #8932, #8924, #8901, #8854, #8843, #8782, #8812, #8805, #8802, #8798, #8775, #8760, #8787, #8779, #8781, #8763, #8762, #8753, #8740, #8729, #8719, #8712, #8701, #8699, #8686, #8661, #8673, #8651, #8632, #8630, #8613, #8612, #8596, #8597, #8593, #8587, #8580, #8552, #8559, #8554, #8520, #8521, #8509, #8510, #8511, #8508, #8454, #8279, #8446, #8447, #8293, #8419, #8416, #8439, #8383, #8355, #8308, #8309, #8397, #8375, #8319, #8327, #8363, #8351, #8284, #8307, #8252, #8288)


</details>
<br/>

_Thanks to all our contributors!_ 😊
