k0rdent 1.13.0 Release Notes#
Release date: November 12, 2026
Components Versions#
| Provider Name | Version |
|---|---|
| Cluster API | v1.14.3 |
| Cluster API Provider AWS | v2.13.0 |
| Cluster API Provider Azure | v1.26.0 |
| Cluster API Provider Docker | v1.14.3 |
| Cluster API Provider GCP | v1.13.1 |
| Cluster API Provider Infoblox | v0.2.2 |
| Cluster API Provider IPAM | v1.1.0 |
| Cluster API Provider k0smotron | v2.3.1 |
| Cluster API Provider Kubevirt | v0.11.2 |
| Cluster API Provider OpenStack (ORC) | v0.14.7 (v2.1.0) |
| Cluster API Provider vSphere | v1.16.1 |
| Projectsveltos | v1.16.0 |
| k0s (control plane runtime) | v1.36.3 |
| cert-manager (charts) | v1.21.3 |
| CAPI Operator | v0.30.0 |
Highlights#
-
Cluster API In-Place Updates: Worker machines of k0s-based clusters can now be updated in place when only the k0s version changes, instead of being replaced. The feature is enabled with the
controller.enableInPlaceUpdatesKCM setting, which configures the Cluster API core provider and the k0smotron provider for theManagementobject and everyRegion. See Configuring Cluster API In-Place Updates. -
In-Place Version Updates with the Delete-First Strategy: The new
controller.enableInPlaceVersionWithDeleteFirstKCM setting enables the experimental k0smotronInPlaceVersionWithDeleteFirstfeature gate. k0s version-only changes of aK0sControlPlaneare applied in place, while other changes replace the control plane machines with theRecreateDeleteFirststrategy. See Combining in-place version updates with the delete-first strategy. -
Patches from ConfigMaps and Secrets: Services can now reference ConfigMaps or Secrets with Kustomize inline patches through the new
patchesFromfield. The patches are applied to the rendered manifests of the service and support Go templates. See ServiceTemplate Parameters. -
ClusterTemplate Distribution with AccessManagement:
ClusterTemplateis now a built-inAccessManagementKind, so individual templates can be distributed to other namespaces without aClusterTemplateChain. Distributed objects now have an owner reference to theAccessManagementobject, so they are garbage-collected when it is deleted. See AccessManagement. -
Reliable Service Upgrade Ordering:
dependsOnnow orders upgrades as well as the initial rollout. A service is not upgraded until the services it depends on, directly, transitively or in anotherMultiClusterService, have been upgraded to their desired versions. Deleting aMultiClusterServicewhose services form adependsOnchain no longer gets stuck, because Projectsveltos v1.16.0 uninstalls the services in the reverse of the installation order. -
Remote Cluster Control Plane Address: The
remote-clustertemplate exposes the newk0smotron.externalAddressandk0s.api.sansparameters, so a control plane exposed through NAT or a floating IP can be advertised on a routable address that works for joining workers and in the generated kubeconfig. See Remote machine parameters. -
Platform Updates: Cluster API v1.14.3, k0smotron v2.3.1, Projectsveltos v1.16.0, CAPI Operator v0.30.0, cert-manager v1.21.3 and Flux v2.19.1.
Upgrade Notes#
Stricter API Validation#
The k0rdent API types are now checked with the Kubernetes API Linter, and the CustomResourceDefinitions have stricter OpenAPI validation. Among other changes:
specis required forClusterAuthentication,ClusterIPAM,ClusterIPAMClaim,ClusterTemplate,Management,ProviderTemplate,Release,ServiceSet,ServiceTemplateandStateManagementProviderobjects.- Many optional string fields must be non-empty when set, and many lists have minimum and maximum lengths. For example,
the
namesandtargetNamespaces.listlists of theAccessManagementaccess rules must not be empty when set, and each name in them is limited to 512 characters.
Objects that are already stored are not revalidated, but creating or updating objects with empty strings or empty lists in such fields is rejected. Review your manifests and remove empty values for fields you do not set.
ClusterDeployment Provisioning Timeout Removed#
A ClusterDeployment no longer switches its Ready condition from Progressing to Failed after its Cluster API
cluster has not been ready for 30 minutes. It now stays Progressing and shows the message of the not-ready Cluster
API condition for as long as provisioning takes. If you relied on the Failed reason to detect stuck provisioning,
use your own timeout instead.
Helm Options of Services#
Previously, KCM always enabled the Helm atomic option for services, regardless of their helmOptions, as a
workaround for unintended service reinstallation after a failed upgrade. Projectsveltos v1.14.0 fixed that issue, so
the workaround is removed, and helmOptions of services are now passed to Projectsveltos as is. As a result, atomic
is disabled unless you set it, and a failed install or upgrade is no longer rolled back automatically. To keep the
previous behavior, set atomic: true in the helmOptions of the ServiceTemplate or of the service in
.spec.serviceSpec.services[].helmOptions.
Installation Retries of KCM Components#
The installation of KCM components through Flux HelmRelease objects is now retried indefinitely instead of failing
after three attempts, and the automatic remediation of the last failed attempt is removed. Investigate and fix
installation failures of the components manually.
Deleting System ClusterTemplates#
A ClusterTemplate in the system namespace can no longer be deleted while copies distributed by a
ClusterTemplateChain or an AccessManagement object still reference its HelmChart. Stop distributing the template
first.
Changelog#
New Features#
- feat: enable k0smotron InPlaceVersionWithDeleteFirst feature gate (#3171) by @Kshatrix
- feat: distribute ClusterTemplate as a built-in AccessManagement kind (#3148) by @Kshatrix
- feat: add patchesFrom field to allow using configmaps as a source of patches (#3104) by @kylewuolle
- feat: remote-cluster: expose control plane externalAddress and API SANs (#3093) by @valentynkhalin
- feat: enable inplace workers update (#3087) by @zerospiel
- feat: introduce KAL (#3014) by @zerospiel
Notable Fixes#
- fix(webhook): forbid removing a system ClusterTemplate with distributed copies (#3149) by @Kshatrix
- fix(ksm): resolve cross-MCS dependsOn desired versions in the ServiceSet namespace (#3141) by @wahabmk
- fix: remove finalizer from SveltosCluster manually (#3121) by @wahabmk
- fix: drop hardcoded CAPI provisioning timeout for ClusterDeployment (#3133) by @eromanova
- fix: wait for control plane initialization before syncing RBACPolicy (#3112) by @eromanova
- fix(ksm): deploy sveltos 1.16.0 so a dependsOn chain can be deleted (#3109) by @josef-hak
- fix(ksm): gate cross-MCS dependsOn on versions, not just Deployed (#3085) by @josef-hak
- fix(telemetry): hardcode leader-elect-id to enable FIPS (#3100) by @zerospiel
- fix(ksm): an unchanged service must not unlock what depends on it (#3081) by @josef-hak
- fix(helm): remove remediation; infinite retries (#3091) by @zerospiel
- fix(ksm): keep polling a ServiceSet whose version stamp is still owed (#3088) by @josef-hak
- fix(am): add ownerReference to distributed objects (#3084) by @eromanova
- fix: do not enforce atomic helm option (#3080) by @BROngineer
Platform & Dependency Updates#
- chore(deps): bump cel.dev/cel-go from 0.32.0 to 0.33.0 (#3174) by @dependabot
- chore(bump): k0smotron to v2.3.1 (#3170) by @Kshatrix
- chore(bump): flux to v2.19.1 (#3163) by @Kshatrix
- chore(deps): bump github.com/fluxcd/pkg/runtime from 0.120.0 to 0.122.0 (#3154) by @dependabot
- chore(bump): capi operator to v0.30.0 (#3161) by @Kshatrix
- chore(deps): bump github.com/fluxcd/pkg/apis/meta from 1.36.0 to 1.38.0 (#3157) by @dependabot
- chore(bump): cert-manager to v1.21.3 (#3159) by @Kshatrix
- chore(deps): bump github.com/cert-manager/cert-manager (#3155) by @dependabot
- chore(deps): bump sigs.k8s.io/cluster-api-operator from 0.29.0 to 0.30.0 (#3151) by @dependabot
- chore(deps): bump go from 1.27.1 to 1.27.3; golangci-lint from 2.13.2 to 2.15.0 (#3147) by @zerospiel
- chore(deps): bump k0smotron provider from 2.2.0 to 2.3.0 (#3143) by @zerospiel
- chore(deps): bump helm.sh/helm/v3 from 3.22.0 to 3.22.1 (#3138) by @dependabot
- chore(deps): bump github.com/fluxcd/pkg/runtime from 0.116.0 to 0.120.0 (#3139) by @dependabot
- chore(bump): capi to v1.14.3 (#3131) by @Kshatrix
- chore(deps): bump kubevirt.io/api from 1.9.0 to 1.9.1 (#3128) by @dependabot
- chore(deps): bump github.com/onsi/ginkgo/v2 from 2.33.0 to 2.33.1 (#3127) by @dependabot
- chore(deps): bump github.com/fluxcd/pkg/runtime from 0.115.0 to 0.116.0 (#3126) by @dependabot
- chore(deps): bump github.com/prometheus/client_golang (#3122) by @dependabot
- chore(deps): bump golang.org/x/net from 0.59.0 to 0.61.0 (#3124) by @dependabot
- chore(deps): bump sigs.k8s.io/cluster-api from 1.14.2 to 1.14.3 (#3118) by @dependabot
- chore(deps): bump sigs.k8s.io/cluster-api/api from 1.14.2 to 1.14.3 (#3117) by @dependabot
- chore(deps): bump golang.org/x/sync from 0.23.0 to 0.24.0 (#3116) by @dependabot
- chore(deps): bump github.com/fluxcd/helm-controller/api (#3111) by @dependabot
- chore(deps): bump github.com/fluxcd/pkg/runtime from 0.114.0 to 0.115.0 (#3108) by @dependabot
- chore(deps): bump github.com/segmentio/analytics-go/v3 (#3102) by @dependabot
- chore(deps): bump github.com/onsi/gomega from 1.43.1 to 1.44.0 (#3098) by @dependabot
- chore(deps): bump k8s.io/kubectl from 0.37.0 to 0.37.1 (#3097) by @dependabot
- chore(deps): bump k0smotron provider from 2.1.1 to 2.2.0 (#3096) by @zerospiel
- chore(deps): bump github.com/vmware-tanzu/velero from 1.18.3 to 1.18.4 (#3094) by @dependabot
- chore(deps): bump k8s.io/apiserver from 0.37.0 to 0.37.1 (#3092) by @dependabot
- chore(go): 1.27.1; bump deps (#3086) by @zerospiel
- chore(deps): bump github.com/onsi/gomega from 1.43.0 to 1.43.1 (#3082) by @dependabot
- chore(deps): bump github.com/onsi/ginkgo/v2 from 2.32.2 to 2.33.0 (#3079) by @dependabot
Other Changes (CI, Tests, Refactors)#
- chore(deps): bump docker/login-action (#3156) by @dependabot
- chore(deps): bump goreleaser/goreleaser-action (#3129) by @dependabot
- chore(deps): bump actions/upload-artifact (#3125) by @dependabot
- chore(deps): bump azure/setup-kubectl (#3119) by @dependabot
- chore(deps): bump mikefarah/yq (#3103) by @dependabot
- ci: skip GitHub release and changelog for -dev tags (#3099) by @eromanova
- test(e2e): drop the specs k0rdent/ksm-tests now covers (#3095) by @josef-hak
- ci: run the KSM scenarios on pull requests (#3090) by @josef-hak
- chore(deps): bump docker/setup-buildx-action (#3078) by @dependabot