Cluster API v1.3 compared to v1.4

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

Minimum Go version

  • The Go version used by Cluster API is still Go 1.19.x

Dependencies

Note: Only the most relevant dependencies are listed, k8s.io/ and ginkgo/gomega dependencies in Cluster API are kept in sync with the versions used by sigs.k8s.io/controller-runtime.

  • sigs.k8s.io/kind: v0.17.x => v0.20.x
  • sigs.k8s.io/controller-runtime: v0.13.x => v0.14.x
  • sigs.k8s.io/controller-tools: v0.10.x => v0.11.x
  • github.com/joelanford/go-apidiff: 0.5.0 => 0.6.0

Changes by Kind

Deprecation

  • The api versions v1alpha3 and v1alpha4 are deprecated and will be removed.

    • v1alpha3 will be removed in v1.5
    • v1alpha4 will be removed in v1.6

    For more information please see the note in the contributors guide.

Removals

  • util/conversion.GetCRDWithContract has been removed.
  • clusterctl backup has been removed.
  • clusterctl restore has been removed.
  • api/v1beta1.MachineHealthCheckSuccededCondition condition type has been removed.
  • controller/external/util.CloneTemplate and controllers/external/util.CloneTemplateInput has been removed.
  • The option --list-images from clusterctl init subcommand has been removed.
  • exp/runtime/server.NewServer has been removed.
  • --disable-no-echo option from clusterctl describe cluster subcommand has been removed
  • api/v1beta1.ClusterTopologyManagedFieldsAnnotation field has been removed.
  • api/v1beta1.PopulateDefaultsMachineDeployment func has been removed.

API Changes

  • util/conversion.UpdateReferenceAPIContract dropped the APIReader parameter because it’s not required anymore as we now only handle CRDs with compliant names.
  • Backup(options BackupOptions) error in the Client interface has been removed.
  • Restore(options RestoreOptions) error in the Client interface has been removed.
  • cmd/clusterctl/client.RolloutOptions has been removed, RolloutRestartOptions, RolloutPauseOptions , RolloutResumeOptions, and RolloutUndoOptions have been added instead.
  • Annotation constant DisableMachineCreate has been updated to DisableMachineCreateAnnotation
  • Below Label constant have been updated
    • ClusterLabelName to ClusterNameLabel
    • ClusterTopologyMachineDeploymentLabelName to ClusterTopologyMachineDeploymentNameLabel
    • ProviderLabelName to ProviderNameLabel
    • MachineControlPlaneLabelName to MachineControlPlaneLabel
    • MachineSetLabelName to MachineSetNameLabel
    • MachineDeploymentLabelName to MachineDeploymentNameLabel
  • Below Condition and Reason constants have been updated
    • ExternalRemediationTemplateAvailable to ExternalRemediationTemplateAvailableCondition
    • ExternalRemediationTemplateNotFound to ExternalRemediationTemplateNotFoundReason
    • ExternalRemediationRequestAvailable to ExternalRemediationRequestAvailableCondition
    • ExternalRemediationRequestCreationFailed to ExternalRemediationRequestCreationFailedReason
  • api/v1beta1.MachineDeployment.Default func has been replaced through api/v1beta1.MachineDeploymentDefaulter

Other

  • clusterctl now emits an error for provider CRDs which don’t comply with the CRD naming conventions. This warning can be skipped for resources not referenced by Cluster API core resources via the clusterctl.cluster.x-k8s.io/skip-crd-name-preflight-check annotation. The contracts specify:

    The CRD name must have the format produced by sigs.k8s.io/cluster-api/util/contract.CalculateCRDName(Group, Kind)

  • clusterctl upgrade apply no longer requires a namespace when updating providers. It is now optional and in a future release it will be deprecated. The new syntax is [namespace/]provider:version.
  • WatchDeploymentLogs is changed to WatchDeploymentLogsByName, it works same as before. Another function WatchDeploymentLogsByLabelSelector is added to stream logs of deployment by label selector.
  • Cluster API controllers are now using an explicit security context by default.
  • It is recommended to drop usages of logs.AddFlags(fs, logs.SkipLoggingConfigurationFlags()). It was previously used to configure deprecated logging flags, but with the bump to component-base v0.26.0 this function is not configuring any flags anymore. Please note that the following logging flags have been removed: (in component-base, but this affects all CAPI controllers): --add-dir-header, --alsologtostderr, --log-backtrace-at, --log-dir, --log-file, --log-file-max-size, --logtostderr, --one-output, --skip-headers, --skip-log-headers and --stderrthreshold. For more information, please see: https://github.com/kubernetes/enhancements/issues/2845
  • A new KCPRemediationSpec test has been added providing better test coverage for KCP remediation most common use cases. As a consequence MachineRemediationSpec has been renamed to MachineDeploymentRemediationSpec and now only tests remediation of worker machines (NOTE: we plan to improve this test as well in a future iteration).
  • Package test/infrastructure/docker/internal/third_party/forked/loadbalancer has been moved to test/infrastructure/docker/internal/loadbalancer to allow it to diverge from the upstream Kind package.

Suggested changes for providers

  • Providers should add an explicit security context to their controllers deployment, see #7831 for reference.