搜索

4.3. 配置内核模块管理 Operator

download PDF

在大多数情况下,内核模块管理(KMM) Operator 的默认配置不需要修改。但是,您可以按照以下流程修改 Operator 设置以适应您的环境。

Operator 配置在 Operator 命名空间中的 kmm-operator-manager-config ConfigMap 中设置。

流程

  1. 要修改设置,请输入以下命令编辑 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。否则,取消设置。

  2. 修改设置后,使用以下命令重启控制器:

    $ oc delete pod -n "<namespace>" -l app.kubernetes.io/component=kmm
    注意

    <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

其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.