4.15. 内核模块的自定义升级
如果需要,使用此流程在节点上运行维护操作时升级内核模块,包括重新引导节点。要最小化对集群中运行的工作负载的影响,请按顺序运行内核升级过程,一次一个节点。
此流程需要了解使用内核模块的工作负载,且必须由集群管理员管理。
先决条件
-
在升级前,在内核模块使用的所有节点上设置
kmm.node.kubernetes.io/version-module.<module_namespace>.<module_name>=$moduleVersion
标签。 - 终止节点上的所有用户应用程序工作负载,或将其移至另一节点。
- 卸载当前载入的内核模块。
- 在内核模块卸载前,确保用户工作负载(在访问内核模块的集群中运行的应用程序)在载入新内核模块版本后不会在节点上运行,且工作负载在载入了新的内核模块版本后在该节点上运行。
流程
- 确保节点上由 KMM 管理的设备插件已被卸载。
更新
Module
自定义资源(CR)中的以下字段:-
containerImage
(到适当的内核版本) version
更新应当具有原子性,即
containerImage
和version
字段必须同时更新。
-
- 使用升级的节点上的内核模块终止任何工作负载。
删除节点上的
kmm.node.kubernetes.io/version-module.<module_namespace>.<module_name>
标签。运行以下命令从节点卸载内核模块:$ oc label node/<node_name> kmm.node.kubernetes.io/version-module.<module_namespace>.<module_name>-
如果需要,作为集群管理员,在内核模块升级的节点上执行任何额外的维护。
如果没有额外的升级,您可以通过将
kmm.node.kubernetes.io/version-module.<module_namespace>.<module_name>
标签值更新为新的$moduleVersion
(如Module
中的设置),并跳过第 3 到 6 步。运行以下命令,将
kmm.node.kubernetes.io/version-module.<module_namespace>.<module_name>=$moduleVersion
标签添加到节点。$moduleVersion
必须与Module
CR 中的version
字段的新值相等。$ oc label node/<node_name> kmm.node.kubernetes.io/version-module.<module_namespace>.<module_name>=<desired_version>
注意由于标签名称中的 Kubernetes 限制,
Module
名称和命名空间的组合长度不能超过 39 个字符。- 恢复该节点上利用内核模块的任何工作负载。
- 重新加载节点上由 KMM 管理的设备插件。