Cluster API v1.0 compared to v1.1

This document provides an overview over relevant changes between ClusterAPI v1.0 and v1.1 for maintainer of other providers and consumers of our Go API.

Minimum Go version

  • The Go version used by Cluster API is now Go 1.17+


Note: Only the most relevant dependencies are listed, and ginkgo/gomega dependencies are kept in sync with the versions used by

  • v0.10.x => v0.11.x
  •*: v0.22.x => v0.23.x (derived from controller-runtime)
  • v0.4.0 => v1.2.0 (derived from controller-runtime)
  • v2.9.0 => v2.30.0 (derived from controller-runtime)
  • v0.7.x => v0.8.x
  • v0.11.x => v0.11.x

Changes by Kind


  • The Cluster and ClusterClass webhooks have been moved to the webhooks package. Thus, the following methods on Cluster and ClusterClass in api/v1beta1 are deprecated: SetupWebhookWithManager, Default, ValidateCreate, ValidateUpdate and ValidateDelete.
  • The third_party/kubernetes-drain package is deprecated, as we’re now using instead (PR).
  • util/version.CompareWithBuildIdentifiers has been deprecated, please use util/version.Compare(a, b, WithBuildTags()) instead.
  • The functions annotations.HasPausedAnnotation and annotations.HasSkipRemediationAnnotation have been deprecated, please use annotations.HasPaused and annotations.HasSkipRemediation respectively instead.


  • KCPUpgradeSpec has been removed. Please use ClusterUpgradeConformanceSpec instead.

API Change


  • ClusterClass:
    • clusterctl is now able to handle cluster templates with ClusterClasses (PR). Please check out the corresponding documentation in clusterctl provider contract If you have any further questions about writing ClusterClasses, please let us know.
    • e2e tests:
      • QuickStartSpec is now able to test clusters using ClusterClass. Please see this PR for an example on how to use it.
      • SelfHostedSpec is now able to test clusters using ClusterClass. Please see this PR for an example on how to use it.
  • Test framework provides better logging in case of failures when creating the bootstrap kind cluster; in order to fully exploit this feature, it is required to pass the LogFolder parameter when calling CreateKindBootstrapClusterAndLoadImages. Please see this PR for an example on how to use it.
  • The gci linter has been enabled to enforce consistent imports. As usual, feel free to take a look at our linter config, but of course it’s not mandatory to adopt it.
  • The Tilt dev setup has been extended with: