🚨 This is a BETA RELEASE. Use it only for testing purposes. If you find any bugs, file an issue.
More details about the release
⚠️ BETA RELEASE NOTES ⚠️
Changes since v1.14.0
📈 Overview
- 251 new commits merged
- 2 breaking changes ⚠️
- 22 feature additions ✨
- 41 bugs fixed 🐛
📝 Proposals
- ClusterClass: Add proposal for worker version pinning in Cluster API managed topologies (#13892)
⚠️ Breaking Changes
- CAPD: Remove Docker resources (#14000)
- Dependency: Bump to controller-runtime v0.25 / controller-tools v0.22 (#14188)
✨ New Features
- CABPK: Add cloud-init write_files defer support (#14182)
- CAPD: Add CAPD_DOCKER_NETWORK environment variable (#14041)
- CAPD: Implement v1beta2 contract for devmachinepool (#14099)
- CAPD: Refactor CAPD folder structure (#14069)
- CI: OmitToolVersion (#14376)
- ClusterClass: ClusterClass without template objects (#14092)
- ClusterClass: Validate apiVersion for reliant CRDs (#13954)
- clusterctl: Add cluster-api-provider-exoscale to the built-in infrastructure provider list (#14306)
- clusterctl: Add cluster-api-provider-kairos to the built-in bootstrap and control plane provider list (#14045)
- clusterctl: Add cluster-api-provider-kairos-fleet to the built-in infrastructure provider list (#14046)
- KCP: Implement AffectsAvailability for KCP in-place updates (#14200)
- KCP: Implement allowedOperations for KCP CanUpdateMachine hook (#14367)
- KCP: Implement RetryAfterSeconds for CanUpdateMachine (#14350)
- Machine/KCP/MachinePool/MachineSet: Introduce DynamicCache, BootstrapConfig/InfraMachine API types & dynamic KCP cache config (#13803)
- Machine: Add updateStatus to UpdateMachine hook (#14385)
- Machine: Promote MachineTaintPropagation feature gate to beta and enable it per default (#14395)
- MachineDeployment: Clarify MachineDeployment spec.paused docs and surface paused rollouts (#14347)
- MachineDeployment: Implement AffectsAvailability for MD in-place updates (#14195)
- MachineDeployment: Implement allowedOperations for MD CanUpdateMachineSet hook (#14378)
- MachineHealthCheck: Extend MHC to introduce CEL-based health evaluation (#14297)
- MachinePool: Add MachinesUpToDate condition to MachinePool (#13929)
- Security: Add --tls-curve-preferences flag to manager options (#14157)
🐛 Bug Fixes
- API: Don't use cache with CRD migrator (#14116)
- Bootstrap: Allow worker join with a cluster CA Secret that has only tls.crt (#14389)
- Bootstrap: Execute /etc/kubeadm.sh via /bin/bash for /etc noexec compatibility (#13970)
- Bootstrap: Fix ParseSecretName round-trip for purposes containing hyphens (#14040)
- CABPK: Make CABPK bootstrap token generate reentrant (#14101)
- CI: Bump machine to
highcpu-32 (#14214)
- CI: Bump timeout to 1hr (#14191)
- CI: Bump timeout to 2hr (#14209)
- Cluster: Also set cluster-name label even if BeforeClusterCreate hook is blocking (#14323)
- Cluster: Also set cluster-name label on Clusters without ClusterClass (#14308)
- Cluster: Fix ControlPlaneInitialized reason when the control plane does not exist (#14431)
- ClusterCache: Apply Options.ClusterFilter in SetupWithManager (#14119)
- ClusterClass: Fix CEL validation of top-level array variables in ClusterClass (#14396)
- ClusterClass: Fix Machine taint propagation in the Cluster topology controller for the v1beta1 contract (#13984)
- ClusterClass: Lifecycle hooks fix (#14171)
- clusterctl/Security: Point the huawei provider to its relocated repository (#14239)
- clusterctl: Convert CAPI resources in generic Lists (#14090)
- ClusterResourceSet: Ignore NotFound when deleting ClusterResourceSetBinding (#14177)
- ClusterResourceSet: Patch increased memory consumption (#14031)
- Conditions: Fix deprecate condition utils (#14130)
- Devtools: Fix Grafana deployment (#13997)
- Devtools: Fix parallel build of binaries in Tiltfile (#13989)
- e2e: Fix the source links in e2e config to be allowed and kept as they are (#14372)
- KCP: Avoid deleting learners after Node registration (#14199)
- KCP: Deduplicate KCP preflightchecks (#14170)
- KCP: Fix KCP rollout issue after upgrade from CAPI v1.11 (#14167)
- KCP: Fix race in KCP proxy DialContext (#14266)
- KCP: KCP should not remediate machines unhealthy since before MinHealthyPeriod expires (#14331)
- KCP: Support KCP in-place updates when coredns and kube-proxy phases are skipped (#14362)
- KCP: Try to match etcd member to machine being deleted by KCP (#14258)
- Machine/MachineSet: Gracefully handle not-found when resolving owner references (#13510)
- Machine: Requeue Machines waiting for their Node before the control plane is initialized (#14303)
- Machine: Stop checking kubelet version against an empty version (#14375)
- MachineHealthCheck: Fix MHC expression (#14450)
- MachinePool: Conditionally delegate taint removal (#14053)
- MachinePool: Fix inverted nil guards when a MachinePool records a failure (#14234)
- MachineSet: Fix retry to remove finalizer in MS topology reconciler (#13987)
- Misc: Implement support for multiNamespaceInformer in controller util consistency store (#14283)
- Release: Ignore cherry-picked PR suffixes in release notes (#14330)
- Testing: Resolve data race in inmemory proxy Conn deadline setters (#14248)
- util: Return an error from RegenerateSecret if the cluster is missing from the kubeconfig (#14444)
🌱 Others
- API: Optimize memory usage of conversion by only setting required fields in annotation (#14075)
- CABPK: Stop handling Kubernetes <= v1.30 in CABPK (#14083)
- CI: Bump gcb-docker-gcloud to a prod image (#14037)
- CI: Drop Docker golangci-lint excludes (#14077)
- CI: Fallback to alternate locations for Trivy DB (#14409)
- CI: Improve dependabot workflow (#14273)
- CI: Improve Kubernetes version resolution (#14270)
- CI: Remove the deleted Hivelocity infrastructure provider (#14051)
- CI: Stop trying to bump sigs.k8s.io/kubebuilder/docs/book/utils with dependabot (#14111)
- CI: Update matrix to drop release-1.12 (#14094)
- CI: Update matrix to include release 1.14 (#14018)
- ClusterCache: Reject file-based credentials in kubeconfigs (#14432)
- ClusterClass/MachineSet/MachineDeployment: Merge topology MachineDeployment and MachineSet controllers into the regular controllers (#14394)
- ClusterClass: Extract Cluster topology version validation into entry points (#14241)
- ClusterClass: Increase MD/MS topology reconciler concurrency to 25 (#14002)
- clusterctl: Bump cert-manager to v1.21.1 (#14010)
- clusterctl: Bump cert-manager to v1.21.2 (#14233)
- clusterctl: Bump cert-manager to v1.21.3 (#14428)
- clusterctl: Reset global viper state in viperReader Set test (#14284)
- ClusterResourceSet: Remove CRB clusterName migration logic (#14082)
- Conditions: Make condition message lists consistent (#14363)
- Dependency/clusterctl: Upgrade google/go-github to v92 (#14125)
- Dependency: Bump corefile-migration to v1.0.35 (#14115)
- Dependency: Bump corefile-migration to v1.0.36 (#14415)
- Dependency: Bump Go Version to 1.26.6 (#14096)
- Dependency: Bump google.golang.org/grpc + golang.org/x/crypto to fix CVEs (#14204)
- Dependency: Bump to CR main & k8s.io/* v0.37.0 (#14138)
- Dependency: Update Otel Version to v1.45.0 (#14313)
- Devtools: Add verify for downloaded binaries (#14272)
- Devtools: Bump Parca to v0.29.1 (#14265)
- Devtools: Use smaller image for tilt (#14249)
- e2e: Bump kind to v0.33.0 (#14141)
- e2e: Bump Kubernetes 1.37.0-rc.0 (#14058)
- e2e: Bump to Kubernetes v1.37.0 (#14139)
- e2e: Bump to Kubernetes v1.37.0-rc.1 (#14105)
- e2e: Check for duplicate informers in e2e tests (#14137)
- e2e: Drop syncer from in-memory server (#13986)
- e2e: Extend e2e tests to detect double rollouts (#14268)
- e2e: Fix debug endpoint for in-memory server (#13990)
- e2e: Increase clusterctl and e2e test dry-run cluster-template timeouts (#14013)
- e2e: Increase e2e test concurrency (#13898)
- e2e: Install the minimum required kind version for e2e test (#14176)
- e2e: Make e2e fail on controller pod restarts (#14289)
- e2e: Pin kind binary version and download exact version (#14337)
- e2e: Prepare main branch for v1.15 (#14005)
- e2e: Start testing against Kubernetes v1.38 (#14146)
- e2e: Store pod resources of management cluster into artifacts (#14293)
- e2e: Surface
ContainerProvisioned condition when container creation fails (#14342)
- KCP/MachineDeployment: Handle extension errors the same way in KCP, MD & Machine controllers (#14402)
- KCP/MachineSet/MachineDeployment/MachineHealthCheck: Standardize usage of reconcileStartTime (#14403)
- KCP/MachineSet: Avoid unnecessary memory allocation in ssa.Patch after cache hit (#14085)
- KCP: Cluster-admins CRB in KCP (#14081)
- KCP: Fix race conditions in KCP unit tests (#14221)
- KCP: Further optimize KCP cache config (#14084)
- KCP: Improve KCP remediation annotation handling (#14215)
- KCP: Reset MaxRetry when the unhealthy machine is outdated (#14369)
- Logging: Add Log rate limiting (#14422)
- Logging: Drop namespace from log messages (#14413)
- Logging: Improve diff logs (#14445)
- Logging: More log improvements (#14420)
- Logging: More log improvements (#14425)
- Logging: More log improvements (#14438)
- Machine: Get correct RV in Machine controller in-place update live get call (#14134)
- Machine: Improve logs machine lifecycle (#14405)
- Machine: Refactor UpdateMachine hook (#14382)
- Machine: Remove deprecated MachineWaitForVolumeDetachConsiderVolumeAttachments fg (#14078)
- MachineDeployment: Fix max-surge check-in rollout-planner (#13983)
- MachineDeployment: Handle rollout edge cases (#14312)
- MachineDeployment: Improve rollout planner golden files (#14201)
- MachineDeployment: Improve rollout sequence test (#14226)
- MachineDeployment: Log reconciled object name in Rollout planner sequence (#14257)
- MachineDeployment: Remove duplicated code between MachineSet controller and rollout planner (#14260)
- MachinePool: Add support for "initialization completed" to machine pools (#14030)
- MachinePool: Fixup MP unit tests after revert (#14286)
- Misc: Adding AI Disclosure to PR Template (#14334)
- Misc: Promote PriorityQueue and ReconcilerRateLimiting feature gates to GA (#14079)
- Misc: Standardize cache package imports (#14126)
- Misc: Update Kubernetes bump issue template (#14155)
- Release: Removing deprecated code (#14368)
- Release: Update kpromo version to v4.7.1 (#14329)
- Release: Update release issue template (#14017)
- Release: Updating v1.15 release team (#14222)
- Release: V1.15 release Team (#14091)
- Runtime SDK: Improve discovery (#14259)
- Security: Bump go to 1.26.10 (#14392)
- Security: Bump go to 1.26.9 and deps for security (#14356)
- Security: Fix typo in trivy DB mirror (#14447)
- Testing: Add contract labels to kubeadm CRDs in envtest (#14181)
- Testing: Bump envtest to v1.37.0 (#14145)
- Testing: Consider restart policy in containerHasTerminated (#14042)
- Testing: Fix flaky TestReconcileControlPlane by reading the Cluster with the API reader (#14295)
- Testing: Fix kubeconfig tests mutating shared validSecret fixture (#14285)
- Testing: Restore apiVersionGetter after unit tests (#14189)
- Testing: Use installed CRD refs in patch helper test fixtures (#14190)
- util: Add ClusterToControlPlaneMapFunc helper to util and remove ClusterToKubeadmControlPlane (#14274)
- util: Avoid DeepCopy in contract.GetGKMetadata (#14076)
- util: Remove deprecated types from remote/ packages (#13952)
- util: Remove deprecated util/record package (#13996)
- util: Use a random serial number for self-signed CA certificates (#14442)
📖 Additionally, there have been 57 contributions to our documentation and book. (#13964, #13965, #13975, #13994, #14006, #14022, #14028, #14038, #14047, #14048, #14049, #14050, #14057, #14068, #14070, #14072, #14080, #14095, #14102, #14104, #14106, #14113, #14127, #14129, #14140, #14144, #14147, #14161, #14162, #14179, #14202, #14213, #14223, #14227, #14230, #14231, #14232, #14244, #14246, #14281, #14282, #14287, #14292, #14294, #14298, #14302, #14304, #14305, #14332, #14333, #14335, #14343, #14371, #14397, #14406, #14407, #14410)
❓ Sort these by hand
- clusterctl: Fix clusterctl listing of resources whose kind ends in List (#14348)
Dependencies
Added
- cloud.google.com/go/auth: v0.18.2
- github.com/go-openapi/swag/cmdutils: v0.29.1
- github.com/go-openapi/swag/conv: v0.29.1
- github.com/go-openapi/swag/fileutils: v0.29.1
- github.com/go-openapi/swag/jsonutils/fixtures_test: v0.29.1
- github.com/go-openapi/swag/jsonutils: v0.29.1
- github.com/go-openapi/swag/loading: v0.29.1
- github.com/go-openapi/swag/mangling: v0.29.1
- github.com/go-openapi/swag/netutils: v0.29.1
- github.com/go-openapi/swag/pools: v0.29.1
- github.com/go-openapi/swag/stringutils: v0.29.1
- github.com/go-openapi/swag/typeutils: v0.29.1
- github.com/go-openapi/swag/yamlutils: v0.29.1
- github.com/go-openapi/testify/enable/yaml/v2: v2.6.1
- github.com/go-openapi/testify/v2: v2.6.1
- github.com/google/go-github/v92: v92.0.0
- github.com/google/s2a-go: v0.1.9
- github.com/googleapis/enterprise-certificate-proxy: v0.3.11
Changed
- cel.dev/expr: v0.25.1 → v0.25.2
- github.com/Azure/go-ansiterm: 306776e → faa5f7b
- github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp: v1.32.0 → v1.33.0
- github.com/coredns/corefile-migration: v1.0.34 → v1.0.36
- github.com/emicklei/go-restful/v3: v3.13.0 → v3.14.0
- github.com/fsnotify/fsnotify: v1.9.0 → v1.10.1
- github.com/fxamacker/cbor/v2: v2.9.0 → v2.9.3
- github.com/go-openapi/jsonpointer: v0.21.0 → v1.0.0
- github.com/go-openapi/jsonreference: v0.20.2 → v1.0.1
- github.com/go-openapi/swag: v0.23.0 → v0.29.1
- github.com/golang-jwt/jwt/v5: v5.3.0 → v5.3.1
- github.com/google/cel-go: v0.29.0 → v0.30.0
- github.com/google/gnostic-models: v0.7.0 → v0.7.1
- github.com/googleapis/gax-go/v2: v2.0.5 → v2.17.0
- github.com/grpc-ecosystem/grpc-gateway/v2: v2.28.0 → v2.29.0
- github.com/klauspost/compress: v1.18.0 → v1.19.1
- github.com/moby/term: v0.5.0 → v0.5.2
- github.com/olekukonko/tablewriter: v1.1.4 → v1.1.5
- github.com/onsi/ginkgo/v2: v2.32.0 → v2.33.1
- github.com/onsi/gomega: v1.42.1 → v1.44.0
- github.com/prometheus/client_golang: v1.23.2 → v1.24.1
- github.com/prometheus/client_model: v0.6.2 → v0.6.3
- github.com/prometheus/common: v0.67.5 → v0.70.1
- github.com/prometheus/procfs: v0.19.2 → v0.21.1
- github.com/sirupsen/logrus: v1.9.3 → v1.9.4
- github.com/spiffe/go-spiffe/v2: v2.6.0 → v2.7.0
- github.com/stretchr/objx: v0.5.2 → v0.5.3
- github.com/stretchr/testify: v1.11.1 → v1.12.1
- go.etcd.io/bbolt: v1.4.3 → v1.5.0
- go.etcd.io/etcd/api/v3: v3.6.14 → v3.7.3
- go.etcd.io/etcd/client/pkg/v3: v3.6.14 → v3.7.3
- go.etcd.io/etcd/client/v3: v3.6.14 → v3.7.3
- go.etcd.io/etcd/pkg/v3: v3.6.8 → v3.7.0
- go.etcd.io/etcd/server/v3: v3.6.8 → v3.7.0
- go.etcd.io/raft/v3: v3.6.0 → v3.7.0
- go.opentelemetry.io/contrib/detectors/gcp: v1.43.0 → v1.44.0
- go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc: v0.65.0 → v0.68.0
- go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp: v0.65.0 → v0.69.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc: v1.43.0 → v1.45.0
- go.opentelemetry.io/otel/exporters/otlp/otlptrace: v1.43.0 → v1.45.0
- go.opentelemetry.io/otel/metric: v1.43.0 → v1.45.0
- go.opentelemetry.io/otel/sdk/metric: v1.43.0 → v1.45.0
- go.opentelemetry.io/otel/sdk: v1.43.0 → v1.45.0
- go.opentelemetry.io/otel/trace: v1.43.0 → v1.45.0
- go.opentelemetry.io/otel: v1.43.0 → v1.45.0
- go.opentelemetry.io/proto/otlp: v1.10.0 → v1.11.0
- go.yaml.in/yaml/v2: v2.4.3 → v2.4.4
- go.yaml.in/yaml/v3: v3.0.4 → v3.0.5
- golang.org/x/crypto: v0.53.0 → v0.58.0
- golang.org/x/exp: 944ab1f → 746e56f
- golang.org/x/mod: v0.37.0 → v0.41.0
- golang.org/x/net: v0.56.0 → v0.61.0
- golang.org/x/oauth2: v0.36.0 → v0.37.0
- golang.org/x/sync: v0.22.0 → v0.24.0
- golang.org/x/sys: v0.46.0 → v0.49.0
- golang.org/x/telemetry: 59b4966 → ed294f9
- golang.org/x/term: v0.44.0 → v0.47.0
- golang.org/x/text: v0.40.0 → v0.43.0
- golang.org/x/time: v0.14.0 → v0.15.0
- golang.org/x/tools: v0.47.0 → v0.51.0
- golang.org/x/xerrors: 5ec99f8 → 9bdfabe
- google.golang.org/genproto/googleapis/api: afd174a → 6ac0973
- google.golang.org/genproto/googleapis/rpc: afd174a → 6ac0973
- google.golang.org/grpc: v1.82.1 → v1.83.2
- google.golang.org/protobuf: f2248ac → v1.36.12
- k8s.io/api: v0.36.3 → v0.37.2
- k8s.io/apiextensions-apiserver: v0.36.3 → v0.37.2
- k8s.io/apimachinery: v0.36.3 → v0.37.2
- k8s.io/apiserver: v0.36.3 → v0.37.2
- k8s.io/client-go: v0.36.3 → v0.37.2
- k8s.io/cluster-bootstrap: v0.36.3 → v0.37.2
- k8s.io/code-generator: v0.36.3 → v0.37.2
- k8s.io/component-base: v0.36.3 → v0.37.2
- k8s.io/gengo/v2: ec3ebc5 → 25e2208
- k8s.io/kms: v0.36.3 → v0.37.2
- k8s.io/kube-openapi: 43fb72c → be32def
- k8s.io/streaming: v0.36.3 → v0.37.2
- k8s.io/utils: b8788ab → cf1189d
- sigs.k8s.io/apiserver-network-proxy/konnectivity-client: v0.34.0 → v0.36.0
- sigs.k8s.io/controller-runtime: v0.24.1 → v0.25.2
Removed
- github.com/creack/pty: v1.1.9
- github.com/gogo/protobuf: v1.3.2
- github.com/google/go-github/v82: v82.0.0
- github.com/josharian/intern: v1.0.0
- github.com/kisielk/errcheck: v1.5.0
- github.com/mailru/easyjson: v0.7.7
- github.com/matttproud/golang_protobuf_extensions: v1.0.1
- github.com/stoewer/go-strcase: v1.3.0
_Thanks to all our contributors!_ 😊