4.3. 配置内核模块管理 Operator
在大多数情况下,内核模块管理(KMM) Operator 的默认配置不需要修改。但是,您可以按照以下流程修改 Operator 设置以适应您的环境。
Operator 配置在 Operator 命名空间中的 kmm-operator-manager-config ConfigMap 中设置。
流程
要修改设置,请输入以下命令编辑
ConfigMap数据:oc edit configmap -n "$namespace" kmm-operator-manager-config
$ oc edit configmap -n "$namespace" kmm-operator-manager-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表 4.1. Operator 配置参数 参数 描述 healthProbeBindAddress定义 Operator 监控 kubelet 健康探测的地址。推荐的值为
:8081。job.gcDelay定义在删除之前,应保留成功构建 pod 的持续时间。此设置没有推荐的值。有关此设置的有效值的详情,请参考 ParseDuration。
leaderElection.enabled确定领导选举机制是否被用来确保任何时候都只有一个 KMM Operator 运行的副本。如需更多信息,请参阅 Leases。推荐的值为
true。leaderElection.resourceID确定领导选举机制用于存放领导锁的资源名称。推荐的值为
kmm.sigs.x-k8s.io。webhook.disableHTTP2如果为
true,则禁用 webhook 服务器的 HTTP/2,作为 cve-2023-44487 的缓解方案。推荐的值为true。webhook.port定义 Operator 监控 Webhook 请求的端口。推荐的值为
9443。metrics.enableAuthnAuthz确定指标是否使用
TokenReviews验证,并在 kube-apiserver 中使用SubjectAccessReviews授权。对于身份验证和授权,控制器需要一个具有以下规则的
ClusterRole:-
apiGroups: authentication.k8s.io, resources: tokenreviews, verbs: create -
apiGroups: authorization.k8s.io, resources: subjectaccessreviews, verbs: create
例如,要提取指标(例如使用 Prometheus),客户端需要具有以下规则的
ClusterRole:-
nonResourceURLs: "/metrics", verbs: get
推荐的值为
true。metrics.disableHTTP2如果为
true,则禁用 metrics 服务器的 HTTP/2 作为 CVE-2023-44487 的缓解方案。推荐的值为true。metrics.bindAddress决定指标服务器的绑定地址。如果未指定,则默认为
:8080。要禁用指标服务器,设置为0。推荐的值为0.0.0.0:8443。metrics.secureServing决定是否通过 HTTPS 而不是 HTTP 提供指标。推荐的值为
true。worker.runAsUser决定 worker 容器安全上下文的
runAsUser字段的值。如需更多信息,请参阅 SecurityContext。推荐的值为9443。worker.seLinuxType决定 worker 容器安全上下文的
seLinuxOptions.type字段的值。如需更多信息,请参阅 SecurityContext。推荐的值为spc_t。worker.setFirmwareClassPath将内核的固件搜索路径设置为节点上的
/sys/module/firmware_class/parameters/path文件中。如果您需要通过 worker 应用程序设置该值,则推荐的值为/var/lib/firmware。否则,取消设置。-
修改设置后,使用以下命令重启控制器:
oc delete pod -n "<namespace>" -l app.kubernetes.io/component=kmm
$ oc delete pod -n "<namespace>" -l app.kubernetes.io/component=kmmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意<namespace> 的值取决于您的原始安装方法。
4.3.1. 卸载内核模块 复制链接链接已复制到粘贴板!
在移至较新的版本时,您必须卸载内核模块,或者如果它们在节点上引入一些不必要的副作用。
流程
要从节点中卸载使用 KMM 加载的模块,请删除对应的
Module资源。然后,KMM 会根据需要创建 worker pod,以运行modprobe -r并从节点卸载内核模块。警告卸载 worker pod 时,KMM 需要载入内核模块时使用的所有资源。这包括
模块中引用的ServiceAccount,以及定义的任何 RBAC,以允许特权 KMM worker Pod 运行。它还包括.spec.imageRepoSecret中引用的任何 pull secret。为了避免 KMM 无法从节点卸载内核模块的情况,请确保在
Module资源仍存在于任何状态时不会删除这些资源,包括Terminating。KMM 包含一个验证准入 Webhook,它拒绝删除至少包含一个Module资源的命名空间。
4.3.2. 设置内核固件搜索路径 复制链接链接已复制到粘贴板!
Linux 内核接受 firmware_class.path 参数作为固件的搜索路径,如 固件搜索路径 中所述。
在尝试加载 kmods 前,KMM worker pod 可以通过写入 sysfs 来在节点上设置这个值。
流程
-
要定义固件搜索路径,请在 Operator 配置中将
worker.setFirmwareClassPath设置为/var/lib/firmware。