Releases: kubernetes-sigs/kernel-module-management
v2.4.1
Fixed upgrade flow for KMM-hub
⏫ [email protected] can now be upgraded to [email protected].
Upgrading from KMM-hub 2.3.0 to 2.4.0 was not working properly, therefore, [email protected] was not published to operatorhub.io.
The 2.4.1 release was created to address this issue.
Community members who wish to upgrade from 2.3 to 2.4 should upgrade to 2.4.1.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM.
Using make
git fetch
git checkout v2.4.1
# For KMM
make deploy IMAGE_TAG=v20250710-v2.4.1
Full Changelog: v2.4.0...v2.4.1
v2.4.0
Main new features
🎄 Support for loading a device-plugin for an in-tree driver.
KMM can now only set a device-plugin for an already loaded, in-tree driver, in the Module
.
📦 Added an init-container to the device-plugin.
Allows setup validation before running the device plugin.
🏋️ Operator configuration will now persist operator upgrades.
Custom configuration for the operator via a configMap will now persist to the next KMM version in case on an upgrade.
Additional enhancements
- The operator is now pulling and checking images existence using the cluster's container-runtime.
- KMM can now be installed on worker nodes, when control-plane nodes aren't available, without the need to artificially label the worker nodes as "control-plane".
- Reduce significantly the number of events we had to one of the internal controller (NMC)
- Removed a service duplication (generated by OLM) for the webhook deployment.
Bug Fixes
- Fixed a bug when KMM was not re-loading the kmod when a reboot was very fast (and the kube-api was not noticing that the node even went down).
- Fixed a bug that the NMC CR was inheriting tolerations that were not set in the Module
- Fixed a bug in which a failing worker-pod was hanging forever if its Module was deleted.
Installing
We are working on a fix and will release KMM + KMM-hub 2.4.1 soon to address this issue.
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM.
Using make
git fetch
git checkout v2.4.0
# For KMM
make deploy IMAGE_TAG=v20250626-v2.4.0
Full Changelog: v2.3.0...v2.4.0
v2.3.0
New features
🚫 Added support for user defined tolerances to modules.
By adding tolerations
to a `Modules, the workers pods can be scheduled on a tainted node. This is required in order to manage a kmod upgrade when the the method used to drain the node is by tainting it.
🥇 Golang was bumped to 1.23.
Bug fixes
Fixed a bug in which nodes were keeping their kmods ready labels after the kmods were removed from the node.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout v2.3.0
# For KMM
make deploy IMAGE_TAG=v20250310-v2.3.0
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20250310-v2.3.0
Full Changelog: v2.2.1...v2.3.0
v2.2.1
Bug fixes
⏫ Fixed an issue preventing the upgrade from v2.1.x
when an module is present in the cluster during the upgrade.
The ImagePullPolicy
had a kubebuilder
instruction for getting a default value, which automatically made it a required field.
In previous versions, this field was optional, meaning that when upgrading the KMM
operator, the upgrade would fail , since the NMC
object is missing the required field.
This fix kept the default value, but made it optional.
🏎️ Fixed a race condition between a node reboot and the deletion of the KMM module.
In case a node was rebooted (for any reason) and the Module
was being deleted at the same period of time, we would have a race condition preventing the Module
from being finalized.
This issue is now fixed.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout v2.2.1
# For KMM
make deploy IMAGE_TAG=v20241223-v2.2.1
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20241223-v2.2.1
Full Changelog: v2.2.0...v2.2.1
v2.2.0
Improvements / Bug fixes
💻 Worker pod now pull images using the cluster's container-runtime.
By using the cluster's infrastructure we ensure that all the cluster-wide configuration applied that are respected by kubelet are also respected by KMM.
🚫 New validation in the validation webhook
The validation webhook will now ensure that all container images explicitly contain a tags/sha.
💾 Setting the firmware path is now configurable.
It is now possible to configure the path on the host in which the Module's firmware files will be written in the controller's ConfigMap.
The default value is /lib/firmware
.
🐛 Fixed a bug
Fixed a bug regarding in-cluster-build modules left in invalid state after upgrading the cluster.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout v2.2.0
# For KMM
make deploy IMAGE_TAG=v20241121-v2.2.0
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20241121-v2.2.0
Full Changelog: v2.1.1...v2.2.0
v2.1.1
Bug fixes
🎮 Smaller footprint in managed mode.
The following controllers are not started in managed mode (KMM_MANAGED=1
) anymore:
BuildSignReconciler
PreflightValidation
In managed mode, we assume compute-intensive tasks are run by the Hub, hence those controllers serve no purpose and will not be started anymore.
➕ Normalize kernel version in labels and image tags
The kernel version can contain some special characters like +
that cannot be used neither in a Kubernetes label value nor in a container image tag.
KMM will now convert all those characters to an underscore _
so that this value can be properly used internally as a resource labels or externally as container image tag.
The kernel mapping logic does not change; in literal
or regexp
fields, you should still target the kernel version as reported by the kubelet (in the Node
resource's .status.nodeInfo.kernelVersion
field).
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout v2.1.1
# For KMM
make deploy IMAGE_TAG=v20240618-v2.1.1
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20240618-v2.1.1
Full Changelog: v2.1.0...v2.1.1
v2.1.0
New features & improvements
⏳ Optional delay for the garbage collection of build pods
The new job.gcDelay
operator setting allows specifying a duration for which successful build & signing pods should be kept before they are garbage-collected.
🛂 Separate deployment for the webhook server
The webhook server is now running as a separate Deployment.
📜 CRD changes
Module
Added inTreeModulesToRemove
to allow specifying a list of in-tree modules to be removed before the main out-of-tree module is loaded.
The old inTreeModuleToRemove
field is still present, but deprecated.
PreflightValidation
Added version v1beta2
with a new status
subresource that is compliant with OpenAPI guidelines.
Version v1beta1
is still served.
🧹 Miscellaneous
cert-manager is not a required dependency anymore when KMM is instsalled via OLM.
Images are now built with Go 1.22.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout v2.1.0
# For KMM
make deploy IMAGE_TAG=v20240425-v2.1.0
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20240425-v2.1.0
Changelog
List of pull requests included in this release
- adapting Device Plugin status report in Module to v.2 by @yevgeny-shnaidman in #606
- Update webhook validation for name+namespace length by @yevgeny-shnaidman in #607
- Restructure Worker Pod secrets' volumes' names by @yevgeny-shnaidman in #610
- Bump sigs.k8s.io/controller-runtime from 0.16.2 to 0.16.3 by @dependabot in #613
- Bump k8s.io/kubectl from 0.28.2 to 0.28.3 by @dependabot in #614
- Set the worker restart policy to
OnFailure
by @qbarrand in #609 - Bump github.com/onsi/gomega from 1.28.0 to 1.28.1 by @dependabot in #618
- adapting Worker Pods status report in Module to v.2 by @yevgeny-shnaidman in #619
- Bump sigs.k8s.io/yaml from 1.3.0 to 1.4.0 by @dependabot in #620
- Bump google.golang.org/grpc from 1.54.0 to 1.56.3 by @dependabot in #623
- Bump github.com/go-logr/logr from 1.2.4 to 1.3.0 by @dependabot in #625
- Bump github.com/onsi/gomega from 1.28.1 to 1.29.0 by @dependabot in #624
- Bump golang.org/x/text from 0.13.0 to 0.14.0 by @dependabot in #629
- Bump github.com/spf13/cobra from 1.7.0 to 1.8.0 by @dependabot in #628
- Bump klog and use the new constructor by @qbarrand in #630
- Bump memory limit to 384Mi by @qbarrand in #631
- Bump github.com/onsi/gomega from 1.29.0 to 1.30.0 by @dependabot in #632
- Bump github.com/onsi/ginkgo/v2 from 2.13.0 to 2.13.1 by @dependabot in #635
- Rename controller-manager to controller by @qbarrand in #636
- Revert some changes to kustomization.yaml by @qbarrand in #637
- Do not set
createdAt
manually in the CSV by @qbarrand in #641 - Bump Kubernetes dependencies to 0.28.4 by @qbarrand in #643
- Bump github.com/docker/docker from 24.0.0+incompatible to 24.0.7+incompatible by @dependabot in #626
- Allow the controller to delete NodeModulesConfigs by @qbarrand in #645
- Bump OpenTelemetry dependencies by @qbarrand in #647
- Install go before initializing CodeQL by @qbarrand in #648
- Bump github.com/onsi/ginkgo/v2 from 2.13.1 to 2.13.2 by @dependabot in #650
- Update docs for v2.0.0 by @qbarrand in #652
- Bump actions/setup-go from 4 to 5 by @dependabot in #653
- Bump alpine from 3.18 to 3.19 by @dependabot in #654
- Update ordered upgrade docs for v2 by @qbarrand in #657
- Docs typo - Use Cases -
module.name
notmodule-name
by @pcolledg-amd in #656 - Bump client-go to v0.29.0 by @qbarrand in #663
- Bump github/codeql-action from 2 to 3 by @dependabot in #658
- Bump
actions/{up,down}load-artifact
by @qbarrand in #667 - Extract links from kmod images by @qbarrand in #651
- Bump github.com/google/go-containerregistry from 0.16.1 to 0.17.0 by @dependabot in #649
- Remove deprecated module ready labels on nodes by @qbarrand in #668
- Bump golang.org/x/crypto from 0.14.0 to 0.17.0 by @dependabot in #669
- Fix handling of unknown kernels by @qbarrand in #670
- Bump github.com/containerd/containerd from 1.7.10 to 1.7.11 by @dependabot in #671
- Making GetModuleReady/GetDevicePluginReadyLabels functions public by @yevgeny-shnaidman in #672
- Bump go.uber.org/mock from 0.3.0 to 0.4.0 by @dependabot in #674
- Build / sign: handle all owner kinds by @qbarrand in #673
- Refactor worker to support different type of image to be mounted by @yevgeny-shnaidman in #677
- Bump github.com/go-logr/logr from 1.3.0 to 1.4.1 by @dependabot in #676
- Bump github.com/prometheus/client_golang from 1.17.0 to 1.18.0 by @dependabot in #678
- Fixing DevicePlugin upgrade from v1.x to v2.x by @yevgeny-shnaidman in #679
- Removing
ci/kmm-kmod/Dockerfile
from the CI files. by @ybettan in #680 - Add extra label for controllers to install at worker nodes by @enriquebelarte in #683
- Create a helper interface for mounting OCI images by @yevgeny-shnaidman in #686
- Bump k8s.io/klog/v2 from 2.110.1 to 2.120.0 by @dependabot in #688
- Update docs to v2.0.1 by @qbarrand in #689
- Bump github.com/onsi/ginkgo/v2 from 2.13.2 to 2.14.0 by @dependabot in #690
- re-factoring worker's main and funcs_kmods by @yevgeny-shnaidman in #691
- Bump k8s.io/kubectl from 0.29.0 to 0.29.1 by @dependabot in #696
- Bump actions/cache from 3 to 4 by @dependabot in #698
- Bump sigs.k8s.io/controller-runtime from 0.16.3 to 0.17.0 by @dependabot in #692
- Bump github.com/onsi/gomega from 1.30.0 to 1.31.0 by @dependabot in #699
- Bump github.com/onsi/ginkgo/v2 from 2.14.0 to 2.15.0 by @dependabot in #702
- Bump k8s.io/klog/v2 from 2.120.0 to 2.120.1 by @dependabot in #701
- Bump github.com/google/go-containerregistry from 0.17.0 to 0.18.0 by @dependabot in #700
- Bump github.com/docker/docker from 24.0.7+incompatible to 2...
v2.0.2
New features & improvements
🛂 Webhook for namespace deletion
A validating webhook will now verify that namespaces do not contain any Module
resource before they can be deleted.
This avoids entering situations where the namespace is being deleted and KMM cannot create unloading Pods to honor Module
deletion.
📜 CRD changes
Module
: make moduleName an optional fieldManagedClusterModule
: make spokeNamespace a required field
🧹 Miscellaneous
Bug fixes.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout v2.0.2
# For KMM
make deploy IMAGE_TAG=v20240306-v2.0.2
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20240306-v2.0.2
Changelog
Full Changelog: v2.0.1...v2.0.2
v2.0.1
New features & improvements
🔗 Symlink support
The worker pod now extracts symbolic links from the kmod image. This means that Dockerfiles can now create symlinks from /opt/lib/modules/${kernelVersion}/host
to /lib/modules/${kernelVersion}
prior to running depmod
to have it figure out dependencies on in-tree kmods from the host's filesystem.
🔧 New selector for the controller
The KMM operator will now run on nodes labeled with kmm.node.kubernetes.io/control-plane: ''
.
This should be especially helpful in clusters without master nodes, such as HyperShift, GKE, AKS or EKS.
🧹 Miscellaneous
Bug fixes.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout release-2.0
# For KMM
make deploy IMAGE_TAG=v20240131-v2.0.1
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20240131-v2.0.1
Changelog
List of pull requests included in this release
- [release-2.0] Add commits for v2.0.1 by @qbarrand in #681
- Extract links from kmod images by @qbarrand in #682
- [release-2.0] Add extra label for controllers to install at worker nodes by @k8s-infra-cherrypick-robot in #685
- [release-2.0]
s/RELATED_IMAGES_/RELATED_IMAGE_/
by @k8s-infra-cherrypick-robot in #711 - [release-2.0] Allow the Hub to patch pods by @k8s-infra-cherrypick-robot in #721
New Contributors
- @k8s-infra-cherrypick-robot made their first contribution in #685
Full Changelog: v2.0.0...v2.0.1
v2.0.0
New features & improvements
👷🏻 Worker Pods
The operator now creates short-lived, standalone worker Pods to load kmods instead of long-running DaemonSets.
This change improves the reliability of kmod unloads and significantly reduces resource utilization on both worker nodes and the control plane.
ℹ️ Events
The KMM operator now emits events:
- on build & signing job creation, completion or failure (attached to the
Module
); - on kmod load or unload (attached to the
Node
).
💾 Binary firmwares
The firmware_class.path
kernel parameter, which configures an alternate firmware lookup path, can now be set on all nodes before the kmod is loaded.
This feature is disabled by default and must be enabled in the operator configuration.
Installing
Using OLM (recommended)
Follow the installations instructions at OperatorHub.io for KMM or KMM-Hub.
Using make
git fetch
git checkout release-2.0
# For KMM
make deploy IMAGE_TAG=v20231130-v2.0.0
# For KMM-Hub
make deploy-hub IMAGE_TAG=v20231130-v2.0.0
Changelog
List of pull requests included in this release
- Set the tag of related images when building bundles by @qbarrand in #425
- Fix a command in cloudbuild.yaml by @qbarrand in #427
- Inject the webhook CA into the validated CRDs by @qbarrand in #429
- Make cert-manager an OLM dependency of KMM by @qbarrand in #432
- Adding ordered upgrade documentation by @yevgeny-shnaidman in #431
- additional fixes for ordered upgrade doc by @yevgeny-shnaidman in #434
- Bump github.com/onsi/gomega from 1.27.7 to 1.27.8 by @dependabot in #435
- Bump github.com/onsi/ginkgo/v2 from 2.9.7 to 2.10.0 by @dependabot in #436
- Bump github.com/go-openapi/swag from 0.22.3 to 0.22.4 by @dependabot in #437
- Bump github.com/docker/distribution from 2.8.1+incompatible to 2.8.2+incompatible by @dependabot in #439
- Bump k8s.io/client-go from 0.27.2 to 0.27.3 by @dependabot in #443
- Add 1.1 docs by @qbarrand in #438
- Enforce name and namespace length in the webhook by @qbarrand in #445
- Do not require pods to have a
.spec.nodeName
by @qbarrand in #446 - Bump github.com/prometheus/client_golang from 1.15.1 to 1.16.0 by @dependabot in #447
- Use strings.Repeat and fix a typo by @qbarrand in #449
- Replace deprecated command with environment file by @jongwooo in #451
- Bump github.com/onsi/ginkgo/v2 from 2.10.0 to 2.11.0 by @dependabot in #453
- Bump k8s.io/kubectl from 0.27.2 to 0.27.3 by @dependabot in #441
- Add a script generating files for OperatorHub.io by @qbarrand in #302
- Quote arguments in modprobe commands by @qbarrand in #456
- Upgrade support between v1.02 and v1.1 by @yevgeny-shnaidman in #454
- Add further checks on Module version by @qbarrand in #457
- Fix the ordered upgrade documentation by @qbarrand in #459
- Add documentation for Hub & Spoke by @qbarrand in #460
- Fixing ModuleLoader recreation during Node reboot by @yevgeny-shnaidman in #464
- adding NodeModulesState type by @yevgeny-shnaidman in #480
- Bump k8s.io/kubectl from 0.27.3 to 0.27.4 by @dependabot in #485
- adding ModuleConfig struct to NodeModulesSpec by @yevgeny-shnaidman in #481
- Add a proposal for worker Pods in KMM by @qbarrand in #463
- Bump github.com/onsi/gomega from 1.27.8 to 1.27.9 by @dependabot in #486
- Bump github.com/onsi/gomega from 1.27.9 to 1.27.10 by @dependabot in #489
- introducing
nmc
package by @yevgeny-shnaidman in #487 - Fix race condition for Node reboot issue by @yevgeny-shnaidman in #494
- Add the worker application by @qbarrand in #491
- Add Cloud Build configuration for the worker image by @qbarrand in #496
- Document default DaemonSet image pull policy by @qbarrand in #499
- updating skipper Dockerfile to base image of Golang 1.20 by @yevgeny-shnaidman in #497
- Move to a maintained fork of gomock by @qbarrand in #500
- Require Go to 1.20 in go.mod by @qbarrand in #498
- Introducing Module-to-NMC reconciliation logic by @yevgeny-shnaidman in #495
- Bump github.com/google/go-containerregistry from 0.15.2 to 0.16.1 by @dependabot in #501
- Adding NotFound error to the GetMLD API by @yevgeny-shnaidman in #502
- Bump sigs.k8s.io/controller-runtime from 0.15.0 to 0.15.1 by @dependabot in #505
- Introducing Module-NMC controller by @yevgeny-shnaidman in #503
- In case NMC does not exists, Get should return NotFound error by @yevgeny-shnaidman in #510
- Replacing Jobs with Pods in the building/signing features. by @ybettan in #504
- Add
NodeModulesConfig
status management functions by @qbarrand in #514 - Bump golang from 1.20-alpine3.18 to 1.21-alpine3.18 by @dependabot in #516
- Module deleted scenario in Module-NMC controller by @yevgeny-shnaidman in #518
- Add the NodeModulesConfig controller by @qbarrand in #513
- Fixing panic in case worker pod has failed by @yevgeny-shnaidman in #523
- Bump k8s.io/client-go from 0.27.4 to 0.28.0 by @dependabot in #525
- Bump k8s.io/kubectl from 0.27.4 to 0.28.0 by @dependabot in #526
- Move
controllers
tointernal/controllers
by @qbarrand in #519 - Bump github.com/onsi/ginkgo/v2 from 2.11.0 to 2.12.0 by @dependabot in #531
- Fixing Unloading Kmod on a previously failed Load Pod by @yevgeny-shnaidman in #530
- Adding Makefile target for worker image creation by @yevgeny-shnaidman in #532
- Make the worker user owner of
/mnt/img
by @yevgeny-shnaidman in #522 - Bump k8s.io/client-go from 0.28.0 to 0.28.1 by @dependabot in #536
- Reconfigure worker pod capabilities by @yevgeny-shnaidman in #537
- Fixing Unload Pod not being created on Module deletion by @yevgeny-shnaidman in #539
- Bump k8s.io/kubectl from 0.28.0 to 0.28.1 by @dependabot in #533
- Add pull secrets support for the worker by @qbarrand in https://github.com/kubernetes-sigs...