Cluster API v1.7 compared to v1.8

This document provides an overview over relevant changes between Cluster API v1.7 and v1.8 for maintainers of providers and consumers of our Go API.

Go version

  • The Go version used by Cluster API is Go 1.22.x

Changes by Kind

Deprecation

Removals

API Changes

Other

  • The support for INIT env variables was dropped in the clusterctl upgrade tests. If you were using INIT_WITH_BINARY, INIT_WITH_PROVIDERS_CONTRACT or INIT_WITH_KUBERNETES_VERSION consider using the corresponding fields in ClusterctlUpgradeSpecInput. If you prefer to use environment variables, read them e.g. via os.Getenv and then set the spec fields accordingly.

Suggested changes for providers

  • From Cluster API v1.7 the manager pods are created with terminationMessagePolicy set to FallbackToLogsOnError for the manager container. This offers the chance that the pod’s termination message will contain something useful if the manager exits unexpectedly, which in turn makes debugging easier. We also recommend this setting to provider managers. For an example, see the corresponding change in CAPV or CAPO.
  • It’s highly recommended to move to a new setup-envtest version that uses envtest binaries from controller-tools releases instead of the deprecated GCS bucket. More details can be found in #10569 and kubernetes-sigs/controller-runtime#2811.
  • remote.NewClusterCacheTracker now has options to configure QPS & Burst. It’s highly recommended to implement corresponding flags the same way as core Cluster API (see PR: https://github.com/kubernetes-sigs/cluster-api/pull/10880).
  • There were changes made to flags in core CAPI (https://github.com/kubernetes-sigs/cluster-api/pull/10883, https://github.com/kubernetes-sigs/cluster-api/pull/10880). It’s recommended to adopt these changes in providers as well.
  • To support Kubernetes 1.31, providers should stop setting caBundle to invalid values in there CRDs (see core CAPI PR: https://github.com/kubernetes-sigs/cluster-api/pull/10972) Setting caBundle to Cg== is a pattern that is widely spread across the ecosystem but it will stop working with Kubernetes 1.31. Please see the following Slack thread for details: https://kubernetes.slack.com/archives/C0EG7JC6T/p1722441161968339