v1.1.0
Changes since v1.0
📝 Proposals
- ClusterClass: Add MachineHealthCheck support details (#5511)
- ClusterClass: Add patching support details (#5212)
- Add proposal for opt-in autoscaling from zero (#4283)
⚠️ Breaking Changes
- Updated function name HasPausedAnnotation to HasPaused and HasSkipRemediationAnnotation to HasSkipRemediation (#5545)
- MachineSet on scale down now takes into account NodeHealthy condition (#5424)
- KubeadmControlPlaneTemplate: Remove redundant or unused fields (#5788)
- Update references with an APIReader as fallback (#5698)
- Move kubeadm controllers to internal (#5493)
✨ New Features
- Upgrade to Kubernetes 1.23.3 in Quickstart and CI (#6012)
- ClusterClass: Implement MachineDeployment variable overrides (#5928)
- ClusterClass: Implement object and array variables (#5779)
- ClusterClass: Add topology conditions (#5732)
- ClusterClass: Add MachineHealthCheck generation (#5873)
- Clusterclass: Make webhook cluster aware (#5717)
- ClusterClass: Add changes e2e test (#5664)
- ClusterClass: Add upgrade e2e test (#5645)
- ClusterClass: Enable rebase operation (#5644)
- ClusterClass: Add support for optional patches (#5694)
- ClusterClass: json patches support (#5583)
- ClusterClass: patch engine implementation (#5534)
- ClusterClass: Add reconciler (#5486)
- ClusterClass: variable and patch types (#5418)
- clusterctl: add
alpha topology plan
command (#5893, #5960) - clusterctl: Add BringYourOwnHost(BYOH) provider to (#5593)
- clusterctl: move with clusterclass (#5499)
- clusterctl: Add windows amd64 target (#5650)
- clusterctl: Add ibmcloud provider support (#5640)
- clusterctl: Add ClusterClass support to
clusterctl generate cluster
(#5351) - KubeadmConfig: Add Patches field in InitConfiguration and JoinConfiguration (#5897)
- KubeadmConfig: Set default format to cloud-config (#5869)
- KubeadmConfig: Add support for generating bootstrap data in Ignition format (#4172)
- KubeadmControlPlane: Support customizing the etcd dial timeout, increase default to 10s (#5778)
🐛 Bug Fixes
- clusterctl: Fix cert manager repo and add troubleshooting guide (#6052)
- clusterctl: Fix/backup restore error handling. (#5840)
- clusterctl: Fix clusterctl delete (#5662)
- clusterctl: init should report the correct namespace when detecting a provider is already intalled (#5739)
- clusterctl: Add delete webhook kubebuilder config for cluster and clusterclass (#5737)
- clusterctl: discovery should ignore provider's resources (#5684)
- clusterctl: update move to support new cluster validations (#5625)
- clusterctl: restore - set tenants on the new object graph constructed from files in the backup directory (#5588)
- clusterctl: only fix target namespace in template if TargetNamespace is set (#5488)
- clusterctl: Fix clusterctl delete when deleting providers with cluster-wide resources (#5420)
- clusterctl: Use release tag as git version for building clusterctl binaries (#5473)
- ClusterClass: Remove generated names from error messages to reduce reconciliation (#5992)
- ClusterClass: Make MHC ClusterClass authoritative on paths (#5949)
- ClusterClass: Make Topology controller authoritative on MachineDeployment failuredomain (#5950)
- ClusterClass: allow accessing nestedFields via valueFrom.variable (#5925)
- ClusterClass: fix remove patches (#5844)
- ClusterClass: drop support for nullable (#5780)
- ClusterClass: Fix defaulting of nullable variables (#5773)
- ClusterClass: make PatchSelector machineDeploymentClass.names optional (#5766)
- ClusterClass: fix nullable variables (#5756)
- ClusterClass: patch MachineDeployment selector authoritatively (#5731)
- ClusterClass: Ensure we're not trying to reconcile the topology of non-managed clusters (#5700)
- ClusterClass: fix authoritative mergepatch (#5629)
- ClusterClass: fix topologyReconcileLogger (#5617)
- CLusterClass: topology should not generate empty patch for metadata (#5580)
- ClusterClass: Add mandatory .spec.template.spec to DockerClusterTemplates (#5514)
- ClusterClass: drop multipleOf, change min/max to *int64 (#5494)
- ClusterClass: Prevents kubectl.kubernetes.io/last-applied-configuration annotation to be propagated to templates generated by ClusterClass (#5412)
- Cluster: Cluster FailureDomains should always be fully synced rather than additive (#5479)
- CABPK: Add unlock mechanism to the kubeadm bootstrap provider (#5824)
- CABPK: Remove redundant SetupWebhookWithManager funcs on list types (#5725)
- KCP: Allow KCP to Update when CoreDNS version doesn't change (#6011)
- KCP: make KubeadmConfig format mutable (#5904)
- KCP: Fix incorrect array initalization causing incorrect webhook failures (#5808)
- KCP: Fix adding appended list directly causing changing previous value on validation (#5670)
- KCP ensure etc client generators never return nil without an error (#5710)
- KCP: Add proper rbac rule in KCP controller for CRD (#5675)
- KCP: Make KCP nodeDrainTimeout mutable (#5663)
- KCP: don't run validation webhook on scale (#5454)
- MachineSet: normalize MachineSet version validation (#5406)
- MachineSet: Prevent orphaned InfrastructureMachines (#5865)
- MachineHealthCheck: Return an error if we can't delete the external remediation object (#5654)
- ClusterResourceSet: handle error in case ownerRef is not set on crs binding (#5996)
- CAPD: fix logContainerDebugInfo (#5901)
- CAPD: fix MachinePool reconciler (#5833)
- CAPD: Reconcile dockermachine.status.address after move (#5659)
- E2E: test/e2e/cluster-upgrade: skip worker upgrades if worker count is 0 (#5926)
- E2E: Added CleanupAndWait function to reduce flakiness in test (#5837)
- E2E: Fix control plane upgrade test etcd and dns image upgrade (#5868)
- E2E: Fix cluster topology and UpdateCoreDNS test flakes (#5815)
- E2E: Fix the TestBootstrapTokenRotationMachinePool test (#5733)
- E2E: Fix clusterctl upgrade test (v1-0 => main) (#5689)
- E2E: Fix WaitFor parameters for UpgradeControlPlaneAndWaitForUpgrade (#5679)
- E2E: Provide a better error message for WaitForControlPlaneToBeReady function (#5601)
- E2E: Fix Matchers bug on ignored paths and add tests (#5565)
- E2E: Update CAPI version to v1beta1 in kustomization in test-framework (#5526)
- util/predicates: log correct object type in cluster predicates (#5708)
- Fix CABPK, addons and CAPD manifest generation (#5696)
- Fix Tiltfile from clean-bin (#5630)
- ClusterCacheTracker test should wait and close its reconciler (#5427)
And #5527, #5538, #5540, #5590, #5653, #5671, #5691, #5701, #5702, #5703,
#5706, #5716, #5728, #5734, #5740, #5784, #5792, #5878, #5932, #5943
🌱 Others
- clusterctl: describe show MachineSets (#5438)
- clusterctl: Generate returns better error message in case there is no management cluster available (#5373)
- clusterctl: describe show Cluster conditions (#5437)
- clusterctl: fix typo for GitHub rate limit error (#5801)
- Tiltfile: Add observability tools (#5336)
- Enforce go import order via gci linter (#5592)
- Testing: Use kubebuilder envtest v1.23.3 (#6015, #5955)
- Update Docker and containerd dependencies (#5973)
- Make release-notes for pre-releases (#5962)
- Test rolling update scale-in doesn't race machine deletion (#5934)
- ClusterClass: Validate MachineDeployment topology name not empty (#5951)
- ClusterClass: Block +2 minor version upgrade in cluster topology (#5935)
- ClusterClass: Add reconcile repeatedly test (#5846)
- ClusterClass: Drop extensions in extensions/patches package path (#5931)
- ClusterClass: Topology controller upgrades templates in place when there are only metadata changes (#5416)
- ClusterClass: Validate default and enum JSON, extend schema conversion test (#5772)
- ClusterClass: Make ControlPlane.spec.machineTemplate.nodeDrainTimeout patchable (#5915)
- ClusterClass: Generate events for topology changes (#5631)
- ClusterClass: Add support for topology managed fields (#5812)
- ClusterClass: change selector machineDeploymentClass field to pointer (#5781)
- Check for build metadata in cert-manager version (#5573)
- Improve managed field annotation encoding (#5922)
- Collect kind logs when e2e bootstrap fails (#5910)
- Testing: improve logging of RunErrors occurring when bootstrap cluster creation fails (#5908)
- Modify providerid struct string method to receive value (#5821)
- Add timeout to check if KCP object exists (#5889)
- Replace hardcoded kind cluster name to pickup env values (#5822)
- Address in-loop deferred-close in etcd client generator (#5789)
- Deprecate the HealthCheckSucceded condition for typo (#5861)
- Add failureDomains in MachineDeploymentTopology (#5850)
- Tiltfile: Speedup startup time (#5785)
- Add validation for default, enum and example definitions in variables (#5835)
- Enable predeclared linter and fix problems (#5847)
- Standardize api import aliases (#5830)
- Enable more gocritic lint checks (#5843)
- Added variable example and description to clusterclass yamls (#5842)
- Testing: Implement release informing jobs with CC & IPv6 (#5804)
- Testing: Add basic integration tests for ClusterClass webhook (#5803)
- ClusterClass: clarify that enum works with all types (#5834)
- Add test coverage for container runtime calls (#5668)
- ClusterClass: add documentation fields for patches and variables (#5825)
- Set gci linter prefix value (#5669)
- Add v1.1 to metadata.yaml (#5819)
- Enforce godoc comments for exported functions (#5817)
- Replace disable-echo option with echo option in clusterctl describe (#5787)
- Use Kubernetes 1.23 in: quickstart, CAPD, e2e tests + update doc (#5800)
- CAPD: Add profiler-address flag (#5674)
- CAPD: add ClusterClass cluster-template (#5805)
- CAPD: move packages to internal (#5795)
- KubeadmControlPlane: move webhook to internal (#5791)
- ClusterClass: add check to ensure changes don't invalidate existing cluster variables (#5752)
- Remove unused forked package (#5794)
- Testing: test/clusterctl-upgrade: also cleanup v1alpha4 clusters (#5902)
- Testing: test/e2e/framework: log kind output during cluster creation (#5900)
- KubeadmControlPlane: Added C-R validating webhook for KCP scale subresource (#5697)
- Replace disable-grouping with grouping option in clusterctl describe command (#5550)
- Remove usage of reserved word new in codebase (#5775)
- Testing: Deprecate KCPUpgradeSpec, make ClusterUpgradeConformanceSpec more flexible (#5763)
- Remove redundant parantheses across codebase (#5771)
- Add deletion integration test for clusterclass (#5747)
- Extend verify modules to detect changes in the test module (#5767)
- Add patch validation to clusterclass webhook (#5735)
- Move
/exp/controllers
to internal (#5651) - Bump dependencies: primarily CoreDNS/ gRPC (#5761)
- ClusterClass: fix some nits in the topology reconciler (#5759)
- ClusterClass: change PatchSelectorMatch fields to non-pointer (#5757)
- ClusterClass: improve logging (#5751)
- ClusterClass: Small improvements to validation messages (#5744)
- Add image promotion make target using kpromo (#5713)
- Tiltfile: disable leader election when debugging is enabled (#5750)
- Testing: Default variable in ClusterClass quickstart test (#5748)
- Run GitHub workflows on all pull requests (#5723)
- Add Cluster and ClusterClass variable defaulting and validation (#5615)
- Move webhooks to internal (#5711)
- Tiltfile: deploy provider CRDs and CRs (#5712)
- Testing: Implement clusterctl-config flag (#5707)
- Move dockermachinepool controller to internal (#5690)
- Add a predicate for skipping clusters without topology (#5665)
- Change function name to prevent shadowing (#5692)
- Resolved Spelling of webhook in defaulting.go (#5683)
- Add Template compatibility checks to topology/checks package (#5641)
- Use internal/builders in tests for webhook package (#5622)
- Move experimental addon controllers to internal (#5639)
- Move docker controller to internal (#5595)
- Upgrade to Go 1.17, controller-runtime v0.11.x, k8s.io v1.23.0-alpha.4 (#5633)
- Topology reconciler collects orphan templates in case of errors - version2 (#5523)
- Move setup watch into separate func (#5618)
- Move topology/internal/checks to top level internal package (#5616)
- Add a check to the Cluster webhook to ensure ClusterClass exists (#5585)
- Topology should be authoritative for metadata (#5581)
- Testing: self-hosted (clusterctl move) with clusterclass (#5600)
- Enable godot on top-level comments (#5591)
- Update deprecation comments for Cluster and ClusterClass webhooks (#5609)
- Move Cluster and ClusterClass webhook implementation to top level package (#5596)
- Use evanphx/json-patch v5.6.0 (#5604)
- Testing: Add tests for merge patch private func (#5579)
- MachineDeploymentReconciler: log successful MachineSet adoption (#5575)
- Remove template cleanup func in Topology controller (#5525)
- Cleanup manager name from Tiltfile (#5554)
- Make Cluster API dev tooling to work on arm64 (#5547)
- Promote enxebre to maintainer (#5497)
- Add nodeDrainTimeout to contract package (#5531)
- Remove noisy log in machine pool upgrade test (#5543)
- Replace ioutil with os/io packages, run gofmt (#5533)
- Move cluster webhook to top-level package (#5518)
- clusterctl: config cluster render ClusterClass before Cluster (#5515)
- clusterctl: Add pre init hook to clusterctl upgrade test (#5521)
- Tiltfile: infer manager without yq (#5528)
- Tiltfile: Docs correction, Make label optional, infer manager name when not specified (#5507)
- Integration tests for clusterclass (#5429)
- Tiltfile: Enable debugging with delve (#5485)
- Move internal test packages into internal/test (#5930)
- Move KCP controllers to internal (#5929)
- Use kubernetes version instead of Upgrade to/from (#5495)
- Move ClusterClass webhook to a separate package (#5266)
- ClusterToObjectsMapper: use namespace in client.List for namespaced resources (#5383)
- Set MachineDeployment selector in managed clusters (#5492)
- Add owner files for docs/ and test/ (#5469)
- Testing: e2e tests for clusterctl quickstart flow using managed topologies (#5423)
- Deprecates drain code copied from kubernetes/kubernetes (#5440)
- Use k8s-staging-test-infra/gcb-docker-gcloud (#5474)
- Unit test and builder cleanups (#5465)
- Added ObjectMeta to DockerMachineTemplateResource, DockerClusterTemplateResource (#5441)
- KubeadmControlPlane: add log message when cluster infra not ready (#5468)
- CAPD: detect missing containers (#5434)
- Testing: Enable logging to a file with prefixed timestamps (#5367)
- Testing: Add initial clusterclass integration test (#5337)
- Testing: Upgrade clusterctl upgrade test to v0.4.4 (#5408)
- Added comments to
WatchFilterValue
in all the Reconcilers types. (#5403) - Promote sbueringer to cluster-api-test maintainer (#5504)
- Promote randomvariable to reviewer of /test (#5529)
- Promote randomvariable to KCP maintainer (#5508)
- Upgrade to controller-tools v0.8.0 (#5912)
- Upgrade to kustomize v4.4.1 (#5903)
- Upgrade controller-runtime v0.11.0 (#5866)
- Upgrade to Go 1.16.9 (#5530)
- Update kpromo to v3.3.0-beta.3 (#5802)
- Upgrade etcd v3.5.1 (#5797)
📖 Additionally, there have been 53 contributions to our documentation and book. (#6048, #6043, #6031, #6030, #6023, #6022, #6010, #5985, #5954, #5947, #5923, #5841, #5905, #5895, #5887, #5832, #5867, #5854, #5782, #5839, #5786, #5774, #5602, #5726, #5611, #5680, #5647, #5660, #5642, #5603, #5582, #5549, #5544, #5444, #5503, #5426, #5471, #5484, #5464, #5449, #5443, #5409, #5400, #5371, #6005, #5838, #5619, #5535, #5983, #5981, #5300, #5958, #5790)
👌 Kubernetes version support
- Management Cluster: v1.19.x -> v1.23.x [1]
- Workload Cluster: v1.18.x -> v1.23.x [1]
[1] There is an issue with CRDs in Kubernetes v1.23.{0-2}. ClusterClass with patches is affected by that (for more details please see this issue). Therefore we recommend to use Kubernetes v1.23.3+ with ClusterClass. Previous Kubernetes minor versions are not affected.
Thanks to all our contributors! 😊