4.3. 配置内核模块管理 Operator
在大多数情况下,内核模块管理(KMM) Operator 的默认配置不需要修改。但是,您可以按照以下流程修改 Operator 设置以适应您的环境。
Operator 配置在 Operator 命名空间中的 kmm-operator-manager-config
ConfigMap
中设置。
流程
要修改设置,请输入以下命令编辑
ConfigMap
数据:$ oc edit configmap -n "$namespace" kmm-operator-manager-config
输出示例
healthProbeBindAddress: :8081 job: gcDelay: 1h leaderElection: enabled: true resourceID: kmm.sigs.x-k8s.io webhook: disableHTTP2: true # CVE-2023-44487 port: 9443 metrics: enableAuthnAuthz: true disableHTTP2: true # CVE-2023-44487 bindAddress: 0.0.0.0:8443 secureServing: true worker: runAsUser: 0 seLinuxType: spc_t setFirmwareClassPath: /var/lib/firmware
表 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
注意<namespace> 的值取决于您的原始安装方法。
其他资源
- 如需更多信息,请参阅 安装内核模块管理 Operator。
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
。
其他资源
-
有关
worker.setFirmwareClassPath
路径的更多信息,请参阅配置内核模块管理 Operator。