搜索

4.14. KMM hub 和 spoke

download PDF

在 hub 和 spoke 场景中,许多 spoke 集群连接到一个中央强大的 hub 集群。内核模块管理(KMM)依赖于 Red Hat Advanced Cluster Management (RHACM)在 hub 和 spoke 环境中运行。

KMM 通过分离 KMM 功能与 hub 和 spoke 环境兼容。提供了 ManagedClusterModule 自定义资源定义 (CRD) 来打包现有的 Module CRD,并将其扩展为选择 Spoke 集群。另外,提供了 KMM-Hub,它是一个新的独立控制器,用于在 hub 集群上构建镜像并签署模块。

在 hub 和 spoke 设置中,spokes 专注于由 hub 集群管理的资源受限集群。spoke 运行 KMM 的单集群版本,并禁用这些资源密集型功能。要将 KMM 适应此环境,您应该将 spoke 上运行的工作负载降低为最小值,而 hub 会处理昂贵的任务。

构建内核模块镜像并签名 .ko 文件,应在 hub 上运行。Module Loader 和 Device Plugin DaemonSet 的调度只能在 spoke 上进行。

4.14.1. KMM-Hub

KMM 项目提供 KMM-Hub,它是一个专用于 hub 集群的 KMM 版本。KMM-Hub 监控 spoke 上运行的所有内核版本,并决定集群中应该接收内核模块的节点。

KMM-Hub 运行所有计算密集型任务,如镜像构建和 kmod 签名,并准备裁剪通过 RHACM 传送到 spoke 的 Module

注意

KMM-Hub 无法用于在 hub 集群中加载内核模块。安装常规版本的 KMM 以加载内核模块。

其他资源

4.14.2. 安装 KMM-Hub

您可以使用以下方法之一安装 KMM-Hub:

  • 使用 Operator Lifecycle Manager (OLM)
  • 创建 KMM 资源

4.14.2.1. 使用 Operator Lifecycle Manager 安装 KMM-Hub

使用 OpenShift 控制台的 Operators 部分安装 KMM-Hub。

4.14.2.2. 通过创建 KMM 资源来安装 KMM-Hub

流程

  • 如果要以编程方式安装 KMM-Hub,您可以使用以下资源创建 NamespaceOperatorGroupSubscription 资源:
---
apiVersion: v1
kind: Namespace
metadata:
  name: openshift-kmm-hub
---
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: kernel-module-management-hub
  namespace: openshift-kmm-hub
---
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: kernel-module-management-hub
  namespace: openshift-kmm-hub
spec:
  channel: stable
  installPlanApproval: Automatic
  name: kernel-module-management-hub
  source: redhat-operators
  sourceNamespace: openshift-marketplace

4.14.3. 使用 ManagedClusterModule CRD

使用 ManagedClusterModule 自定义资源定义(CRD)在 spoke 集群上配置内核模块的部署。此 CRD 是集群范围的,嵌套了一个 Module spec,并添加以下附加字段:

apiVersion: hub.kmm.sigs.x-k8s.io/v1beta1
kind: ManagedClusterModule
metadata:
  name: <my-mcm>
  # No namespace, because this resource is cluster-scoped.
spec:
  moduleSpec: 1
    selector: 2
      node-wants-my-mcm: 'true'

  spokeNamespace: <some-namespace> 3

  selector: 4
    wants-my-mcm: 'true'
1
moduleSpec: 包含 moduleLoaderdevicePlugin 部分,类似于 Module 资源。
2
选择 ManagedCluster 中的节点。
3
指定应在其中创建 Module 的命名空间。
4
选择 ManagedCluster 对象。

如果 .spec.moduleSpec 中存在构建或签名指令,则这些 pod 在 Operator 命名空间中的 hub 集群上运行。

.spec.selector 匹配一个或多个 ManagedCluster 资源时,KMM-Hub 在对应的命名空间中创建 ManifestWork 资源。manifestwork 包含 trimmed-down Module 资源,保留了内核映射,但所有 buildsign 子部分都会被删除。包含以标签结尾的镜像名称的 containerImage 字段将替换为等效摘要。

4.14.4. 在 spoke 上运行 KMM

在 spoke 上安装内核模块管理 (KMM) 后,不需要进一步操作。从 hub 创建一个 ManagedClusterModule 对象,以便在 spoke 集群上部署内核模块。

流程

您可以通过 RHACM Policy 对象在 spokes 集群上安装 KMM。除了从 Operator hub 安装 KMM 并以轻量级 spoke 模式运行它外,Policy 还会配置 RHACM 代理所需的额外 RBAC 来管理 Module 资源。

  • 使用以下 RHACM 策略在 spoke 集群上安装 KMM:

    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: install-kmm
    spec:
      remediationAction: enforce
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: install-kmm
            spec:
              severity: high
              object-templates:
              - complianceType: mustonlyhave
                objectDefinition:
                  apiVersion: v1
                  kind: Namespace
                  metadata:
                    name: openshift-kmm
              - complianceType: mustonlyhave
                objectDefinition:
                  apiVersion: operators.coreos.com/v1
                  kind: OperatorGroup
                  metadata:
                    name: kmm
                    namespace: openshift-kmm
                  spec:
                    upgradeStrategy: Default
              - complianceType: mustonlyhave
                objectDefinition:
                  apiVersion: operators.coreos.com/v1alpha1
                  kind: Subscription
                  metadata:
                    name: kernel-module-management
                    namespace: openshift-kmm
                  spec:
                    channel: stable
                    config:
                      env:
                        - name: KMM_MANAGED 1
                          value: "1"
                    installPlanApproval: Automatic
                    name: kernel-module-management
                    source: redhat-operators
                    sourceNamespace: openshift-marketplace
              - complianceType: mustonlyhave
                objectDefinition:
                  apiVersion: rbac.authorization.k8s.io/v1
                  kind: ClusterRole
                  metadata:
                    name: kmm-module-manager
                  rules:
                    - apiGroups: [kmm.sigs.x-k8s.io]
                      resources: [modules]
                      verbs: [create, delete, get, list, patch, update, watch]
              - complianceType: mustonlyhave
                objectDefinition:
                  apiVersion: rbac.authorization.k8s.io/v1
                  kind: ClusterRoleBinding
                  metadata:
                    name: klusterlet-kmm
                  subjects:
                  - kind: ServiceAccount
                    name: klusterlet-work-sa
                    namespace: open-cluster-management-agent
                  roleRef:
                    kind: ClusterRole
                    name: kmm-module-manager
                    apiGroup: rbac.authorization.k8s.io
    ---
    apiVersion: apps.open-cluster-management.io/v1
    kind: PlacementRule
    metadata:
      name: all-managed-clusters
    spec:
      clusterSelector: 2
        matchExpressions: []
    ---
    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: install-kmm
    placementRef:
      apiGroup: apps.open-cluster-management.io
      kind: PlacementRule
      name: all-managed-clusters
    subjects:
      - apiGroup: policy.open-cluster-management.io
        kind: Policy
        name: install-kmm
    1
    当在 spoke 集群上运行 KMM 时,需要这个环境变量。
    2
    spec.clusterSelector 字段可以自定义为仅目标选择的集群。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.