使用 Red Hat Advanced Cluster Management 的 multicluster engine operator


Red Hat Advanced Cluster Management for Kubernetes 2.13

带有后续 Red Hat Advanced Cluster Management 集成的 multicluster engine operator 提供了更多多集群管理功能。

摘要

如果使用 multicluster engine operator,之后安装 Red Hat Advanced Cluster Management,您可以访问更多的多集群管理功能。例如,您可以在 Red Hat Advanced Cluster Management 中发现多集群引擎 Operator 托管的集群,使用 SiteConfig operator 进行模板驱动的集群置备等。

如果您使用 multicluster engine operator,然后安装 Red Hat Advanced Cluster Management,您可以访问更多多集群管理功能,如 ObservabilityPolicy

有关集成功能,请查看以下要求:

  • 您需要安装 Red Hat Advanced Cluster Management。请参阅 Red Hat Advanced Cluster Management 安装和升级文档。
  • 有关安装后 Red Hat Advanced Cluster Management 的详情,请参阅 MultiClusterHub 高级配置

有关 multicluster engine operator 和 Red Hat Advanced Cluster Management 多集群管理,请参阅以下步骤:

如果您有托管多个托管集群的多集群引擎 operator 集群,您可以将这些 托管集群 引入 Red Hat Advanced Cluster Management hub 集群,以使用 Red Hat Advanced Cluster Management 组件(如 应用程序生命周期和监管管理

这些托管集群可以自动发现并导入为受管集群。

注: 由于托管 control plane 在受管多集群引擎 operator 集群节点上运行,集群可以托管的 control plane 数量由受管多集群引擎 operator 集群节点的资源可用性决定,以及受管 multicluster engine operator 集群的数量。您可以添加更多节点或受管集群来托管更多托管的 control plane。

需要的访问权限:集群管理员

1.1.1. 先决条件

  • 您需要一个或多个多集群引擎 operator 集群。
  • 您需要一个设置为 hub 集群的 Red Hat Advanced Cluster Management 集群。
  • 运行以下命令来安装 clusteradm CLI:

    curl -L https://raw.githubusercontent.com/open-cluster-management-io/clusteradm/main/install.sh | bash
    Copy to Clipboard Toggle word wrap

multicluster engine operator 有一个 local-cluster,它是管理的 hub 集群。在 open-cluster-management-agent-addon 命名空间中为这个 local-cluster 启用以下默认附加组件:

  • cluster-proxy
  • managed-serviceaccount
  • work-manager
1.1.2.1. 配置附加组件

当 multicluster engine Operator 导入到 Red Hat Advanced Cluster Management 中时,Red Hat Advanced Cluster Management 会启用同一组附加组件来管理 multicluster engine operator。

在不同的多集群引擎 operator 命名空间中安装这些附加组件,以便 multicluster engine operator 可以在 Red Hat Advanced Cluster Management 管理多集群引擎 operator 时使用 local-cluster 附加组件进行自我管理。完成以下步骤:

  1. 使用 CLI 登录您的 Red Hat Advanced Cluster Management。
  2. 创建 AddOnDeploymentConfig 资源,以指定不同的附加组件安装命名空间。请参阅以下示例,其中 agentInstallNamespace 引用 open-cluster-management-agent-addon-discovery

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: AddOnDeploymentConfig
    metadata:
      name: addon-ns-config
      namespace: multicluster-engine
    spec:
      agentInstallNamespace: open-cluster-management-agent-addon-discovery
    Copy to Clipboard Toggle word wrap
  3. 运行 oc apply -f <filename>.yaml 以应用该文件。
  4. 更新附加组件的现有 ClusterManagementAddOn 资源,以便在您创建的 AddOnDeploymentConfig 资源中指定的 open-cluster-management-agent-addon-discovery 命名空间中安装附加组件。请参阅以下示例,并将 open-cluster-management-global-set 作为命名空间:

    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ClusterManagementAddOn
    metadata:
      name: work-manager
    spec:
      addonMeta:
        displayName: work-manager
      installStrategy:
        placements:
        - name: global
          namespace: open-cluster-management-global-set
          rolloutStrategy:
            type: All
        type: Placements
    Copy to Clipboard Toggle word wrap
    1. addonDeploymentConfig 添加到 ClusterManagementAddOn。请参见以下示例:

      apiVersion: addon.open-cluster-management.io/v1alpha1
      kind: ClusterManagementAddOn
      metadata:
        name: work-manager
      spec:
        addonMeta:
          displayName: work-manager
        installStrategy:
          placements:
          - name: global
            namespace: open-cluster-management-global-set
            rolloutStrategy:
              type: All
            configs:
            - group: addon.open-cluster-management.io
              name: addon-ns-config
              namespace: multicluster-engine
              resource: addondeploymentconfigs
          type: Placements
      Copy to Clipboard Toggle word wrap
    2. AddOnDeploymentConfig 添加到 managed-serviceaccount。请参见以下示例:

      apiVersion: addon.open-cluster-management.io/v1alpha1
      kind: ClusterManagementAddOn
      metadata:
        name: managed-serviceaccount
      spec:
        addonMeta:
          displayName: managed-serviceaccount
        installStrategy:
          placements:
          - name: global
            namespace: open-cluster-management-global-set
            rolloutStrategy:
              type: All
            configs:
            - group: addon.open-cluster-management.io
              name: addon-ns-config
              namespace: multicluster-engine
              resource: addondeploymentconfigs
          type: Placements
      Copy to Clipboard Toggle word wrap
    3. addondeploymentconfigs 值添加到名为 cluster-proxyClusterManagementAddOn 资源中。请参见以下示例:
    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ClusterManagementAddOn
    metadata:
      name: cluster-proxy
    spec:
      addonMeta:
        displayName: cluster-proxy
      installStrategy:
        placements:
        - name: global
          namespace: open-cluster-management-global-set
          rolloutStrategy:
            type: All
          configs:
          - group: addon.open-cluster-management.io
            name: addon-ns-config
            namespace: multicluster-engine
            resource: addondeploymentconfigs
        type: Placements
    Copy to Clipboard Toggle word wrap
  5. 运行以下命令,以验证 Red Hat Advanced Cluster Management local-cluster 的附加组件是否已重新安装到您指定的命名空间中:

    oc get deployment -n open-cluster-management-agent-addon-discovery
    Copy to Clipboard Toggle word wrap

    请参见以下输出示例:

    NAME                                 READY   UP-TO-DATE   AVAILABLE    AGE
    cluster-proxy-proxy-agent             1/1     1            1           24h
    klusterlet-addon-workmgr             1/1     1            1           24h
    managed-serviceaccount-addon-agent   1/1     1            1           24h
    Copy to Clipboard Toggle word wrap
1.1.2.2. 创建 KlusterletConfig 资源

multicluster engine operator 有一个 local-cluster,它是管理的 hub 集群。为这个 local-cluster 创建了名为 klusterlet 的资源。

当 multicluster engine operator 导入到 Red Hat Advanced Cluster Management 中时,Red Hat Advanced Cluster Management 会安装带有相同名称 klusterlet 的 klusterlet 来管理多集群引擎 operator。这与 multicluster engine operator local-cluster klusterlet 冲突。

您需要创建一个 ManagedCluster 资源用来导入多集群引擎 operator 集群的 KlusterletConfig 资源,以便 klusterlet 使用不同的名称安装,以避免冲突。完成以下步骤:

  1. 使用以下示例创建 KlusterletConfig 资源。当在受管集群中引用此 KlusterletConfig 资源时,spec.installMode.noOperator.postfix 字段的值用作 klusterlet 名称的一个后缀,如 klusterlet-mce-import

    kind: KlusterletConfig
    apiVersion: config.open-cluster-management.io/v1alpha1
    metadata:
      name: mce-import-klusterlet-config
    spec:
      installMode:
        type: noOperator
        noOperator:
           postfix: mce-import
    Copy to Clipboard Toggle word wrap
  2. 运行 oc apply -f <filename>.yaml 以应用该文件。
1.1.2.3. 配置用于备份和恢复

安装 Red Hat Advanced Cluster Management 后,您还可以使用备份和恢复功能

如果 hub 集群在灾难恢复场景中恢复,导入的 multicluster engine operator 集群和托管集群会导入到较新的 Red Hat Advanced Cluster Management hub 集群中。

在这种情况下,您需要在 Red Hat Advanced Cluster Management hub 集群恢复过程中恢复以前的配置。

添加 backup=true 标签以启用备份。参阅每个附加组件的以下步骤:

  • 对于 addon-ns-config,运行以下命令:

    oc label addondeploymentconfig addon-ns-config -n multicluster-engine cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap
  • 对于 hypershift-addon-deploy-config,请运行以下命令:

    oc label addondeploymentconfig hypershift-addon-deploy-config -n multicluster-engine cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap
  • 对于您的 work-manager,请运行以下命令:

    oc label clustermanagementaddon work-manager cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap
  • 对于 'cluster-proxy ',请运行以下命令:

    oc label clustermanagementaddon cluster-proxy cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap
  • 对于 managed-serviceaccount,运行以下命令:

    oc label clustermanagementaddon managed-serviceaccount cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap
  • 对于您的 mce-import-klusterlet-config,请运行以下命令:

    oc label KlusterletConfig mce-import-klusterlet-config cluster.open-cluster-management.io/backup=true
    Copy to Clipboard Toggle word wrap

1.1.3. 手动导入多集群引擎 operator

要从 Red Hat Advanced Cluster Management 集群中手动导入 multicluster engine operator 集群,请完成以下步骤:

  1. 在 Red Hat Advanced Cluster Management 集群中,手动创建 ManagedCluster 资源来导入 multicluster engine operator 集群。请参见以下文件示例:

    apiVersion: cluster.open-cluster-management.io/v1
    kind: ManagedCluster
    metadata:
      annotations:
        agent.open-cluster-management.io/klusterlet-config: mce-import-klusterlet-config 
    1
    
      labels:
        cloud: auto-detect
        vendor: auto-detect
      name: mce-a 
    2
    
    spec:
      hubAcceptsClient: true
      leaseDurationSeconds: 60
    Copy to Clipboard Toggle word wrap
    1
    mce-import-klusterlet-config 注解引用您在上一步中创建的 KlusterletConfig 资源,以便在 multicluster engine operator 中安装带有不同名称的 Red Hat Advanced Cluster Management klusterlet。
    2
    这个示例导入了一个名为 mce-a 的多集群引擎 operator 受管集群。
  2. 运行 oc apply -f <filename>.yaml 以应用该文件。
  3. 创建 auto-import-secret secret,该 secret 引用了 multicluster engine operator 集群的 kubeconfig。进入 导入集群,通过使用 CLI 在导入受管集群中使用自动导入 secret 来自动完成 multicluster engine operator auto-import 的过程。

    在 Red Hat Advanced Cluster Management 集群的 multicluster engine operator 受管集群命名空间中创建自动导入 secret 后,受管集群会被注册。

  4. 运行以下命令来获取状态:

    oc get managedcluster
    Copy to Clipboard Toggle word wrap

    请参阅以下带有受管集群的状态和示例 URL 的输出示例:

    NAME           HUB ACCEPTED   MANAGED CLUSTER URLS            JOINED   AVAILABLE   AGE
    local-cluster  true           https://<api.acm-hub.com:port>  True     True        44h
    mce-a          true           https://<api.mce-a.com:port>    True     True        27s
    Copy to Clipboard Toggle word wrap

重要: 不要为导入的多集群引擎 operator 启用任何其他 Red Hat Advanced Cluster Management 附加组件。

1.1.4. 发现托管集群

在将所有多集群引擎 operator 集群导入到 Red Hat Advanced Cluster Management 后,您需要为这些受管多集群引擎 operator 集群启用 hypershift-addon 来发现托管集群。

默认附加组件安装到前面流程的不同命名空间中。同样,您可以在多集群引擎 operator 中将 hypershift-addon 安装到不同的命名空间中,以便多集群引擎 operator local-cluster 的附加组件代理和 Red Hat Advanced Cluster Management 的代理可以在多集群引擎 operator 中正常工作。

重要: 对于所有命令,将 &lt ;managed-cluster-names > 替换为 multicluster engine operator 的以逗号分隔的受管集群名称。

  1. 运行以下命令,将附加组件的 agentInstallNamespace 命名空间设置为 open-cluster-management-agent-addon-discovery

    oc patch addondeploymentconfig hypershift-addon-deploy-config -n multicluster-engine --type=merge -p '{"spec":{"agentInstallNamespace":"open-cluster-management-agent-addon-discovery"}}'
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令以禁用指标并禁用 HyperShift operator 管理:

    oc patch addondeploymentconfig hypershift-addon-deploy-config -n multicluster-engine --type=merge -p '{"spec":{"customizedVariables":[{"name":"disableMetrics","value": "true"},{"name":"disableHOManagement","value": "true"}]}}'
    Copy to Clipboard Toggle word wrap
  3. 可选: 您可以使用 {"name":"discoveryPrefix","value": ""}]}}' 附加上一个命令来设置命名约定。当发现的托管集群自动导入到 Red Hat Advanced Cluster Management hub 集群时,它会成为具有以下命名约定 的受管集群:'<mce-cluster -name>'- <hosted-cluster-name >。您还可以将 discoveryPrefix 设置为其他一些字符串,将其用作替换 < mce-cluster-name > 的前缀。使用前缀运行以下命令:

    oc patch addondeploymentconfig hypershift-addon-deploy-config -n multicluster-engine --type=merge -p '{"spec":{"customizedVariables":[{"name":"disableMetrics","value": "true"},{"name":"disableHOManagement","value": "true"},{"name":"discoveryPrefix","value": ""}]}}'
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,为多集群引擎 operator 启用 hypershift-addon

    clusteradm addon enable --names hypershift-addon --clusters <managed-cluster-names>
    Copy to Clipboard Toggle word wrap
  5. 您可以通过在 Red Hat Advanced Cluster Management 中运行以下命令来获取 multicluster engine operator 受管集群名称。

    oc get managedcluster
    Copy to Clipboard Toggle word wrap
  6. 登录到多集群引擎 operator 集群,并验证您指定的命名空间中是否安装了 hypershift-addon。运行以下命令:

    oc get deployment -n open-cluster-management-agent-addon-discovery
    Copy to Clipboard Toggle word wrap

    请参阅以下列出附加组件的输出示例:

    NAME                                 READY   UP-TO-DATE   AVAILABLE   AGE
    cluster-proxy-proxy-agent            1/1     1            1           24h
    klusterlet-addon-workmgr            1/1     1            1           24h
    hypershift-addon-agent              1/1     1            1           24h
    managed-serviceaccount-addon-agent  1/1     1            1           24h
    Copy to Clipboard Toggle word wrap

Red Hat Advanced Cluster Management 部署 hypershift-addon,它是从多集群引擎 operator 发现托管集群的发现代理。当托管集群 kube-apiserver 可用时,代理会在 Red Hat Advanced Cluster Management hub 集群中的 multicluster engine operator 受管集群命名空间中创建对应的 DiscoveredCluster 自定义资源。

您可以在控制台中查看发现的集群。

  1. 登录到 hub 集群控制台并进入到 All Clusters > Infrastructure > Clusters
  2. 找到 Discovered clusters 选项卡,以查看来自 multicluster engine operator 的所有发现的、类型为 MultiClusterEngineHCP 的托管集群。

接下来,请访问 Automating import for discovered hosted cluster,了解如何自动导入集群。

1.2. 为发现的托管集群自动导入

使用 DiscoveredCluster 资源自动导入托管集群以加快集群管理,而无需手动导入单个集群。

当您自动将发现的托管集群导入到 Red Hat Advanced Cluster Management 中时,会启用所有 Red Hat Advanced Cluster Management 附加组件,以便您可以使用可用的管理工具开始管理托管集群。

托管的集群还 自动导入到 多集群引擎 operator 中。通过 multicluster engine operator 控制台,您可以管理托管集群生命周期。但是,您无法从 Red Hat Advanced Cluster Management 控制台管理托管集群生命周期。

需要的访问权限:集群管理员

1.2.1. 先决条件

  • 您需要安装 Red Hat Advanced Cluster Management。请参阅 Red Hat Advanced Cluster Management 安装和升级文档。
  • 您需要了解 策略。请参阅 Red Hat Advanced Cluster Management 文档中的 监管 介绍。

1.2.2. 为自动导入配置设置

从受管多集群引擎 operator 集群发现的集群以 DiscoveredCluster 自定义资源表示,这些资源位于 Red Hat Advanced Cluster Management 中的受管 multicluster engine operator 集群命名空间中。请参阅以下 DiscoveredCluster 资源和命名空间示例:

apiVersion: discovery.open-cluster-management.io/v1
kind: DiscoveredCluster
metadata:
  creationTimestamp: "2024-05-30T23:05:39Z"
  generation: 1
  labels:
    hypershift.open-cluster-management.io/hc-name: hosted-cluster-1
    hypershift.open-cluster-management.io/hc-namespace: clusters
  name: hosted-cluster-1
  namespace: mce-1
  resourceVersion: "1740725"
  uid: b4c36dca-a0c4-49f9-9673-f561e601d837
spec:
  apiUrl: https://a43e6fe6dcef244f8b72c30426fb6ae3-ea3fec7b113c88da.elb.us-west-1.amazonaws.com:6443
  cloudProvider: aws
  creationTimestamp: "2024-05-30T23:02:45Z"
  credential: {}
  displayName: mce-1-hosted-cluster-1
  importAsManagedCluster: false
  isManagedCluster: false
  name: hosted-cluster-1
  openshiftVersion: 0.0.0
  status: Active
  type: MultiClusterEngineHCP
Copy to Clipboard Toggle word wrap

spec.importAsManagedCluster 字段从 false 改为 true 之前,发现的托管集群不会自动导入到 Red Hat Advanced Cluster Management。了解如何使用 Red Hat Advanced Cluster Management 策略为 DiscoveredCluster 资源中的所有类型自动 将此字段设置为 true,以便发现的托管集群会立即并自动导入到 Red Hat Advanced Cluster Management。

配置您的 Policy 以导入所有发现的托管集群。

  1. 通过 CLI 登录到您的 hub 集群,以完成以下流程:
  2. 为您的 DiscoveredCluster 自定义资源创建 YAML 文件,并编辑以下示例中引用的配置:

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-mce-hcp-autoimport
      namespace: open-cluster-management-global-set
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/description: Discovered clusters that are of
          type MultiClusterEngineHCP can be automatically imported into ACM as managed clusters.
          This policy configure those discovered clusters so they are automatically imported.
          Fine tuning MultiClusterEngineHCP clusters to be automatically imported
          can be done by configure filters at the configMap or add annotation to the discoverd cluster.
    spec:
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: mce-hcp-autoimport-config
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: ConfigMap
                    metadata:
                      name: discovery-config
                      namespace: open-cluster-management-global-set
                    data:
                      rosa-filter: ""
              remediationAction: enforce 
    1
    
              severity: low
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-mce-hcp-autoimport
            spec:
              remediationAction: enforce
              severity: low
              object-templates-raw: |
                {{- /* find the MultiClusterEngineHCP DiscoveredClusters */ -}}
                {{- range $dc := (lookup "discovery.open-cluster-management.io/v1" "DiscoveredCluster" "" "").items }}
                  {{- /* Check for the flag that indicates the import should be skipped */ -}}
                  {{- $skip := "false" -}}
                  {{- range $key, $value := $dc.metadata.annotations }}
                    {{- if and (eq $key "discovery.open-cluster-management.io/previously-auto-imported")
                               (eq $value "true") }}
                      {{- $skip = "true" }}
                    {{- end }}
                  {{- end }}
                  {{- /* if the type is MultiClusterEngineHCP and the status is Active */ -}}
                  {{- if and (eq $dc.spec.status "Active")
                             (contains (fromConfigMap "open-cluster-management-global-set" "discovery-config" "mce-hcp-filter") $dc.spec.displayName)
                             (eq $dc.spec.type "MultiClusterEngineHCP")
                             (eq $skip "false") }}
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: discovery.open-cluster-management.io/v1
                    kind: DiscoveredCluster
                    metadata:
                      name: {{ $dc.metadata.name }}
                      namespace: {{ $dc.metadata.namespace }}
                    spec:
                      importAsManagedCluster: true 
    2
    
                  {{- end }}
                {{- end }}
    Copy to Clipboard Toggle word wrap
    1
    要启用自动导入,请将 spec.remediationAction 改为 enforce
    2
    要启用自动导入,请将 spec.importAsManagedCluster 改为 true
  3. 运行 oc apply -f <filename>.yaml -n <namespace > 以应用该文件。

1.2.3. 创建放置定义

您需要创建一个放置定义,为策略部署指定受管集群。完成以下步骤:

  1. 创建仅选择 local-cluster 的放置 定义,该定义是管理的 hub 集群。使用以下 YAML 示例:

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: policy-mce-hcp-autoimport-placement
      namespace: open-cluster-management-global-set
    spec:
      tolerations:
        - key: cluster.open-cluster-management.io/unreachable
          operator: Exists
        - key: cluster.open-cluster-management.io/unavailable
          operator: Exists
      clusterSets:
        - global
      predicates:
        - requiredClusterSelector:
            labelSelector:
              matchExpressions:
                - key: local-cluster
                  operator: In
                  values:
                    - "true"
    Copy to Clipboard Toggle word wrap
  2. 运行 oc apply -f placement.yaml -n & lt; namespace >,其中 namespace 与您之前创建的策略的命名空间匹配。

1.2.4. 将导入策略绑定到放置定义

创建策略和放置后,您需要连接这两个资源。完成以下步骤:

  1. 使用 PlacementBinding 资源连接资源。请参阅以下示例,placementRef 引用您创建的 放置主题 引用您创建的 策略

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: policy-mce-hcp-autoimport-placement-binding
      namespace: open-cluster-management-global-set
    placementRef:
      name: policy-mce-hcp-autoimport-placement
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
    subjects:
      - name: policy-mce-hcp-autoimport
        apiGroup: policy.open-cluster-management.io
        kind: Policy
    Copy to Clipboard Toggle word wrap
  2. 要验证,请运行以下命令:

    oc get policies.policy.open-cluster-management.io policy-mce-hcp-autoimport -n <namespace>
    Copy to Clipboard Toggle word wrap

重要: 您可以使用 Red Hat Advanced Cluster Management 控制台中的 Detach 选项,或者从命令行中删除对应的 ManagedCluster 自定义资源,从 Red Hat Advanced Cluster Management 控制台中 分离 托管集群。

为获得最佳结果,在 销毁 托管集群前分离受管集群。

当发现的集群分离时,以下注解会添加到 DiscoveredCluster 资源中,以防止策略再次导入发现的集群。

  annotations:
    discovery.open-cluster-management.io/previously-auto-imported: "true"
Copy to Clipboard Toggle word wrap

如果要重新导入分离发现的集群,请删除此注解。

使用 Red Hat Advanced Cluster Management 策略强制自动导入 OpenShift Service on AWS 集群,以便更快地进行集群管理,而无需手动导入单个集群。

需要的访问权限:集群管理员

1.3.1. 先决条件

  • 您需要安装 Red Hat Advanced Cluster Management。请参阅 Red Hat Advanced Cluster Management 安装和升级文档。
  • 您需要了解 策略。请参阅 Red Hat Advanced Cluster Management 文档中的 监管 介绍。

1.3.2. 创建自动导入策略

以下策略和步骤是如何在 AWS 集群上自动导入所有发现的 OpenShift Service 的示例。

通过 CLI 登录到您的 hub 集群,以完成以下流程:

  1. 使用以下示例创建 YAML 文件,并应用引用的更改:

    apiVersion: policy.open-cluster-management.io/v1
    kind: Policy
    metadata:
      name: policy-rosa-autoimport
      annotations:
        policy.open-cluster-management.io/standards: NIST SP 800-53
        policy.open-cluster-management.io/categories: CM Configuration Management
        policy.open-cluster-management.io/controls: CM-2 Baseline Configuration
        policy.open-cluster-management.io/description: OpenShift Service on AWS discovered clusters can be automatically imported into
    Red Hat Advanced Cluster Management as managed clusters with this policy. You can select and configure those managed clusters so you can import. Configure filters or add an annotation if you do not want all of your OpenShift Service on AWS clusters to be automatically imported.
    spec:
      remediationAction: inform 
    1
    
      disabled: false
      policy-templates:
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: rosa-autoimport-config
            spec:
              object-templates:
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: v1
                    kind: ConfigMap
                    metadata:
                      name: discovery-config
                      namespace: open-cluster-management-global-set
                    data:
                      rosa-filter: "" 
    2
    
              remediationAction: enforce
              severity: low
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-rosa-autoimport
            spec:
              remediationAction: enforce
              severity: low
              object-templates-raw: |
                {{- /* find the ROSA DiscoveredClusters */ -}}
                {{- range $dc := (lookup "discovery.open-cluster-management.io/v1" "DiscoveredCluster" "" "").items }}
                  {{- /* Check for the flag that indicates the import should be skipped */ -}}
                  {{- $skip := "false" -}}
                  {{- range $key, $value := $dc.metadata.annotations }}
                    {{- if and (eq $key "discovery.open-cluster-management.io/previously-auto-imported")
                               (eq $value "true") }}
                      {{- $skip = "true" }}
                    {{- end }}
                  {{- end }}
                  {{- /* if the type is ROSA and the status is Active */ -}}
                  {{- if and (eq $dc.spec.status "Active")
                             (contains (fromConfigMap "open-cluster-management-global-set" "discovery-config" "rosa-filter") $dc.spec.displayName)
                             (eq $dc.spec.type "ROSA")
                             (eq $skip "false") }}
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: discovery.open-cluster-management.io/v1
                    kind: DiscoveredCluster
                    metadata:
                      name: {{ $dc.metadata.name }}
                      namespace: {{ $dc.metadata.namespace }}
                    spec:
                      importAsManagedCluster: true
                  {{- end }}
                {{- end }}
        - objectDefinition:
            apiVersion: policy.open-cluster-management.io/v1
            kind: ConfigurationPolicy
            metadata:
              name: policy-rosa-managedcluster-status
            spec:
              remediationAction: enforce
              severity: low
              object-templates-raw: |
                {{- /* Use the same DiscoveredCluster list to check ManagedCluster status */ -}}
                {{- range $dc := (lookup "discovery.open-cluster-management.io/v1" "DiscoveredCluster" "" "").items }}
                  {{- /* Check for the flag that indicates the import should be skipped */ -}}
                  {{- $skip := "false" -}}
                  {{- range $key, $value := $dc.metadata.annotations }}
                    {{- if and (eq $key "discovery.open-cluster-management.io/previously-auto-imported")
                               (eq $value "true") }}
                      {{- $skip = "true" }}
                    {{- end }}
                  {{- end }}
                  {{- /* if the type is ROSA and the status is Active */ -}}
                  {{- if and (eq $dc.spec.status "Active")
                             (contains (fromConfigMap "open-cluster-management-global-set" "discovery-config" "rosa-filter") $dc.spec.displayName)
                             (eq $dc.spec.type "ROSA")
                             (eq $skip "false") }}
                - complianceType: musthave
                  objectDefinition:
                    apiVersion: cluster.open-cluster-management.io/v1
                    kind: ManagedCluster
                    metadata:
                      name: {{ $dc.spec.displayName }}
                      namespace: {{ $dc.spec.displayName }}
                    status:
                      conditions:
                        - type: ManagedClusterConditionAvailable
                          status: "True"
                  {{- end }}
                {{- end }}
    Copy to Clipboard Toggle word wrap
    1
    要启用自动导入,请将 spec.remediationAction 改为 enforce
    2
    可选:在此处指定一个值,以选择与 OpenShift Service on AWS 集群的子集,该集群基于 发现的集群 名称。rosa-filter 默认没有值,因此过滤器不会限制没有子集值的集群名称。
  2. 运行 oc apply -f <filename>.yaml -n <namespace > 以应用该文件。

1.3.3. 创建放置定义

您需要创建一个放置定义,为策略部署指定受管集群。

  1. 创建仅选择 local-cluster 的放置定义,该定义是管理的 hub 集群。使用以下 YAML 示例:

    apiVersion: cluster.open-cluster-management.io/v1beta1
    kind: Placement
    metadata:
      name: placement-openshift-plus-hub
    spec:
      predicates:
      - requiredClusterSelector:
          labelSelector:
            matchExpressions:
            - key: name
          	    operator: In
          	    values:
          	    - local-cluster
    Copy to Clipboard Toggle word wrap
  2. 运行 oc apply -f placement.yaml -n & lt; namespace >,其中 namespace 与您之前创建的策略的命名空间匹配。

1.3.4. 将导入策略绑定到放置定义

创建策略和放置后,您需要连接这两个资源。

  1. 使用 PlacementBinding 连接资源。请参阅以下示例,placementRef 引用您创建的 放置主题 引用您创建的 策略

    apiVersion: policy.open-cluster-management.io/v1
    kind: PlacementBinding
    metadata:
      name: binding-policy-rosa-autoimport
    placementRef:
      apiGroup: cluster.open-cluster-management.io
      kind: Placement
      name: placement-policy-rosa-autoimport
    subjects:
    - apiGroup: policy.open-cluster-management.io
      kind: Policy
      name: policy-rosa-autoimport
    Copy to Clipboard Toggle word wrap
  2. 要验证,请运行以下命令:

    oc get policies.policy.open-cluster-management.io policy-rosa-autoimport -n <namespace>
    Copy to Clipboard Toggle word wrap

1.4. Observability 集成

使用 Red Hat Advanced Cluster Management Observability 功能,您可以查看跨团队的集群的健康状态和利用率。您可以安装 Red Hat Advanced Cluster Management 并启用 Observability。

1.4.1. 观察托管的 control plane

启用 multicluster-observability pod 后,您可以使用 Red Hat Advanced Cluster Management Observability Grafana 仪表板查看有关托管 control plane 的以下信息:

  • ACM > Hosted Control Planes Overview 仪表板,查看托管 control plane、相关集群资源以及现有托管 control plane 的列表和状态的集群容量估算。如需更多信息,请参阅: 托管 control plane 简介
  • ACM > Resources > Hosted Control Plane 仪表板,您可以从 Overview 页面中访问来查看所选托管的 control plane 的资源利用率。如需更多信息,请参阅安装托管的 control plane 命令行界面

要启用,请参阅 Observability 服务

第 2 章 SiteConfig

SiteConfig operator 提供了一个带有统一 ClusterInstance API 的模板驱动的集群置备解决方案,它来自 SiteConfig generator kustomize 插件的 SiteConfig API。

要了解更多有关如何使用 SiteConfig operator 的信息,请参阅以下文档:

有关高级主题,请参阅以下文档:

2.1. 关于 SiteConfig operator

SiteConfig operator 提供了一个模板驱动的集群置备解决方案,它允许您使用各种安装方法置备集群。

SiteConfig operator 引入了统一的 ClusterInstance API,来自 SiteConfig generator kustomize 插件的 SiteConfig API。

ClusterInstance API 将定义集群的参数与部署集群的方式分离。

这种分离会删除当前 GitOps Zero Touch Provisioning (ZTP)流中的 SiteConfig kustomize 插件提供的某些限制,如与 Argo CD 相关的代理集群安装和可扩展性限制。

使用统一 ClusterInstance API,SiteConfig operator 提供以下改进:

隔离
将集群定义与安装方法分开。ClusterInstance 自定义资源捕获集群定义,而安装模板会捕获集群架构和安装方法。
unification
SiteConfig 操作器统一 Git 和非 Git 工作流。您可以在 hub 集群中直接应用 ClusterInstance 自定义资源,或者通过 GitOps 解决方案(如 ArgoCD)同步资源。
一致性
在安装方法中维护一致的 API,无论您使用的是 Assisted Installer、Image Based Install Operator,还是任何其他基于自定义模板的方法。
可扩展性
SiteConfig kustomize 插件相比,每个集群具有更大的可扩展性。
灵活性
为您提供更多使用自定义模板部署和安装集群的功能。
故障排除
提供有关集群部署状态和呈现的清单的深入了解信息,显著提高故障排除体验。

如需有关 Image Based Install Operator 的更多信息,请参阅 Image Based Install Operator

有关辅助安装程序的更多信息,请参阅使用 辅助安装程序安装内部集群

2.1.1. SiteConfig operator 流

SiteConfig operator 根据用户定义的模板动态生成安装清单,这些模板从 ClusterInstance 自定义资源中的数据实例化。

您可以通过 ArgoCD 从 Git 存储库中提供 ClusterInstance 自定义资源,也可以手动在 hub 集群上或通过外部工具和工作流创建它。

以下是流程的高级概述:

  1. 您可以在 hub 集群中创建一个或多个安装模板集合。
  2. 您可以创建一个 ClusterInstance 自定义资源来引用这些安装模板和支持清单。
  3. 创建资源后,SiteConfig operator 通过填充自定义资源中引用的模板字段来协调 ClusterInstance 自定义资源。
  4. SiteConfig 操作器验证并呈现安装清单,然后 Operator 会执行空运行。
  5. 如果空运行成功,则创建清单,然后底层 Operator 会消耗并处理清单。
  6. 安装开始。
  7. SiteConfig operator 持续监控关联的 ClusterDeployment 资源的更改,并相应地更新 ClusterInstance 自定义资源的 status 字段。

2.2. 安装模板概述

安装模板是用来生成安装工件集合的数据驱动的模板。这些模板采用 Golang 文本/模板格式,并使用来自 ClusterInstance 自定义资源的数据进行实例化。这可为每个具有类似配置但具有不同值的每个目标集群动态创建安装清单。

您还可以根据不同的安装方法或集群拓扑创建多个集合。SiteConfig operator 支持以下类型的安装模板:

集群级别
只能引用特定于集群的字段的模板。
节点级别
可引用特定于集群和特定于节点的字段的模板。

有关安装模板的更多信息,请参阅以下文档:

2.2.1. 模板功能

您可以自定义模板字段。SiteConfig 操作器支持所有 sprig 库函数

另外,ClusterInstance API 提供了在创建自定义清单时可以使用以下功能:

toYaml
toYaml 函数将项目编码为 YAML 字符串。如果项目无法转换为 YAML,则函数会返回空字符串。

请参阅以下 ClusterInstance.Spec.Proxy 字段中的 .toYaml 规格示例:

{{ if .Spec.Proxy }}
  proxy:
{{ .Spec.Proxy | toYaml | indent 4 }}
{{ end }}
Copy to Clipboard Toggle word wrap

2.2.2. 默认模板集合

SiteConfig operator 在安装 Operator 的同一命名空间中提供以下默认、验证和不可变模板集合:

Expand
安装方法模板类型文件名模板内容

支持的安装程序

集群级别模板

ai-cluster-templates-v1.yaml

AgentClusterInstall
ClusterDeployment
InfraEnv
KlusterletAddonConfig
ManagedCluster

节点级别模板

ai-node-templates-v1.yaml

BareMetalHost
NMStateConfig

基于镜像的 Install Operator

集群级别模板

ibi-cluster-templates-v1.yaml

ClusterDeployment
KlusterletAddonConfig
ManagedCluster

节点级别模板

ibi-node-templates-v1.yaml

BareMetalHost
ImageClusterInstall
NetworkSecret

有关 ClusterInstance API 的更多信息,请参阅 ClusterInstance API

2.2.3. 特殊模板变量

SiteConfig operator 提供了一组可在模板中使用的特殊模板变量。请参见以下列表:

CurrentNode
SiteConfig operator 明确控制节点对象的迭代,并公开此变量来访问模板中处理的当前节点的所有内容。
InstallConfigOverrides
包含合并的 networkTypecpuPartitioningModeinstallConfigOverrides 内容。
ControlPlaneAgents
由 control plane 代理的数量组成,它会自动从 ClusterInstance 节点对象衍生而来。
WorkerAgents
由 worker 代理数量组成,它会自动从 ClusterInstance 节点对象派生而来。

在文本模板中使用字段名称来创建自定义模板字段。

例如,ClusterInstance spec 字段使用 .Spec 前缀引用。但是,您必须使用 .SpecialVars 前缀引用特殊变量字段。

重要: 对于 spec.nodes 字段使用 .Spec.Nodes 前缀,您必须使用 .SpecialVars.CurrentNode 特殊模板变量引用它。

例如,如果要使用 CurrentNode 特殊模板变量为当前节点指定 名称和命名空间,请使用以下格式的字段名称:

name: "{{ .SpecialVars.CurrentNode.HostName }}"
namespace: "{{ .Spec.ClusterName }}"
Copy to Clipboard Toggle word wrap

2.2.4. 自定义清单顺序

您可以使用 siteconfig.open-cluster-management.io/sync-wave 注解来控制创建、更新和删除清单的顺序。该注解使用一个整数作为值,该整数则作为 wave 组成。

您可以将一个或多个清单添加到单个 wave 中。如果没有指定值,注解将使用默认值 0。

SiteConfig operator 在创建或更新资源时以升序协调清单,并以降序删除资源。

在以下示例中,如果 SiteConfig operator 创建或更新清单,则 AgentClusterInstallClusterDeployment 自定义资源会在第一个 wave 中协调,而 KlusterletAddonConfigManagedCluster 自定义资源会在第三个 wave 中协调。

apiVersion: v1
data:
  AgentClusterInstall: |-
    ...
        siteconfig.open-cluster-management.io/sync-wave: "1"
    ...
  ClusterDeployment: |-
    ...
        siteconfig.open-cluster-management.io/sync-wave: "1"
    ...
  InfraEnv: |-
    ...
        siteconfig.open-cluster-management.io/sync-wave: "2"
    ...
  KlusterletAddonConfig: |-
    ...
        siteconfig.open-cluster-management.io/sync-wave: "3"
    ...
  ManagedCluster: |-
    ...
        siteconfig.open-cluster-management.io/sync-wave: "3"
    ...
kind: ConfigMap
metadata:
  name: assisted-installer-templates
  namespace: example-namespace
Copy to Clipboard Toggle word wrap

如果 SiteConfig operator 删除资源,KlusterletAddonConfigManagedCluster 自定义资源是第一个被删除,而 AgentClusterInstallClusterDeployment 自定义资源是最后一个。

2.2.5. 配置额外注解和标签

您可以使用 ClusterInstance API 中的 extraAnnotationsextraLabels 字段为集群级别和节点级别的安装清单配置额外的注解和标签。SiteConfig Operator 将额外注解和标签应用到您在 ClusterInstance 资源中指定的清单。

在创建额外的注解和标签时,您必须指定清单类型,以允许 SiteConfig 操作器将它们应用到所有匹配的清单。但是,注解和标签是任意的,您可以设置对应用程序有意义的任何键值对。

注: 附加注解和标签只适用于通过引用模板呈现的资源。

查看以下 extraAnnotationsextraLabels 应用程序示例:

extraAnnotationsextraLabels的应用程序示例

apiVersion: siteconfig.open-cluster-management.io/v1alpha1
kind: ClusterInstance
metadata:
  name: "example-sno"
  namespace: "example-sno"
spec:
  [...]
  clusterName: "example-sno"
  extraAnnotations: 
1

    ClusterDeployment:
      myClusterAnnotation: success
  extraLabels: 
2

    ManagedCluster:
      common: "true"
      group-du: ""
  nodes:
    - hostName: "example-sno.example.redhat.com"
      role: "master"
      extraAnnotations: 
3

        BareMetalHost:
          myNodeAnnotation: success
      extraLabels: 
4

        BareMetalHost:
          "testExtraLabel": "success"
Copy to Clipboard Toggle word wrap

1 2
此字段支持 SiteConfig operator 应用到 ManagedClusterClusterDeployment 清单的集群级注解和标签。
3 4
此字段支持 SiteConfig operator 应用到 BareMetalHost 清单的节点级别注解和标签。
  • 您可以运行以下命令来验证您的附加标签是否已应用:

    oc get managedclusters example-sno -ojsonpath='{.metadata.labels}' | jq
    Copy to Clipboard Toggle word wrap

    查看以下应用标签示例:

    应用的标签示例

    {
      "common": "true",
      "group-du": "",
      ...
    }
    Copy to Clipboard Toggle word wrap

  • 您可以运行以下命令来验证您的附加注解是否已应用:
oc get bmh example-sno.example.redhat.com -n example-sno -ojsonpath='{.metadata.annotations}' | jq
Copy to Clipboard Toggle word wrap

查看以下应用的注解示例:

应用注解示例

{
  "myNodeAnnotation": "success",
  ...
}
Copy to Clipboard Toggle word wrap

2.3. 启用 SiteConfig operator

启用 SiteConfig Operator,以使用默认的安装模板,并大规模安装单节点 OpenShift 集群。

需要的访问权限:集群管理员

2.3.1. 先决条件

  • 您需要一个 Red Hat Advanced Cluster Management hub 集群。

2.3.2. 从 MultiClusterHub 资源启用 SiteConfig operator

MultiClusterHub 资源进行补丁,然后验证是否启用了 SiteConfig operator。完成以下步骤:

  1. 运行以下命令,设置与 MultiClusterHub operator 的命名空间匹配的环境变量:

    export MCH_NAMESPACE=<namespace>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,在 Multiclusterhub 资源中的 spec.overrides.componentssiteconfig 条目中将 enabled 字段设置为 true

    oc patch multiclusterhubs.operator.open-cluster-management.io multiclusterhub -n ${MCH_NAMESPACE} --type json --patch '[{"op": "add", "path":"/spec/overrides/components/-", "value": {"name":"siteconfig","enabled": true}}]'
    Copy to Clipboard Toggle word wrap
  3. 在 hub 集群中运行以下命令来验证 SiteConfig operator 是否已启用:

    oc -n ${MCH_NAMESPACE} get po | grep siteconfig
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    siteconfig-controller-manager-6fdd86cc64-sdg87                    2/2     Running   0             43s
    Copy to Clipboard Toggle word wrap
  4. 可选: 在 hub 集群中运行以下命令来验证您是否具有默认安装模板:

    oc -n ${MCH_NAMESPACE} get cm
    Copy to Clipboard Toggle word wrap

    请参阅输出示例中的以下模板列表:

    NAME                                DATA   AGE
    ai-cluster-templates-v1             5      97s
    ai-node-templates-v1                2      97s
    ...
    ibi-cluster-templates-v1            3      97s
    ibi-node-templates-v1               3      97s
    ...
    Copy to Clipboard Toggle word wrap

2.4. Image Based Install Operator

安装 Image Based Install Operator,以便您可以使用与现有安装方法相同的 API 来完成和管理基于镜像的集群安装。

有关以及如何启用 Image Based Install Operator 的更多信息,请参阅 用于单节点 OpenShift 的基于镜像的安装

使用默认安装模板使用 SiteConfig operator 安装集群。使用 Image-Based Install Operator 的安装模板完成此步骤。

需要的访问权限:集群管理员

2.5.1. 先决条件

完成以下步骤,使用 SiteConfig operator 安装集群:

2.5.2. 创建目标命名空间

在创建 pull secret、BMC secret、额外清单 ConfigMap 对象和 ClusterInstance 自定义资源时,您需要一个目标命名空间。

完成以下步骤以创建目标命名空间:

  1. 为目标命名空间创建 YAML 文件。请参阅以下名为 clusterinstance-namespace.yaml 的示例文件:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: example-sno
    Copy to Clipboard Toggle word wrap
  2. 应用您的文件以创建资源。在 hub 集群中运行以下命令:

    oc apply -f clusterinstance-namespace.yaml
    Copy to Clipboard Toggle word wrap

2.5.3. 创建 pull secret

您需要 pull secret 才能使集群从容器 registry 中拉取镜像。完成以下步骤以创建 pull secret:

  1. 创建 YAML 文件以拉取镜像。请参阅以下名为 pull-secret.yaml 的文件示例:

    apiVersion: v1
    kind: Secret
    metadata:
      name: pull-secret
      namespace: example-sno 
    1
    
    data:
      .dockerconfigjson: <encoded_docker_configuration> 
    2
    
    type: kubernetes.io/dockerconfigjson
    Copy to Clipboard Toggle word wrap
    1
    确保 namespace 值与目标命名空间匹配。
    2
    将 base64 编码的配置文件指定为值。
  2. 应用该文件以创建资源。在 hub 集群中运行以下命令:

    oc apply -f pull-secret.yaml
    Copy to Clipboard Toggle word wrap

2.5.4. 创建 BMC secret

您需要一个 secret 来连接到基板管理控制器(BMC)。完成以下步骤以创建 secret:

  1. 为 BMC secret 创建 YAML 文件。请参阅以下名为 example-bmc-secret.yaml 的示例文件:

    apiVersion: v1
    data:
      password: <password>
      username: <username>
    kind: Secret
    metadata:
      name: example-bmh-secret
      namespace: "example-sno" 
    1
    
    type: Opaque
    Copy to Clipboard Toggle word wrap
    1
    确保 namespace 值与目标命名空间匹配。
  2. 应用该文件以创建资源。在 hub 集群中运行以下命令:

    oc apply -f example-bmc-secret.yaml
    Copy to Clipboard Toggle word wrap

2.5.5. 可选:创建额外的清单

您可以创建在 ClusterInstance 自定义资源中引用的额外清单。完成以下步骤以创建额外的清单:

  1. 为额外的清单 ConfigMap 对象创建 YAML 文件,如 enable-crun.yaml

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: enable-crun
      namespace: example-sno 
    1
    
    data:
      enable-crun-master.yaml: |
        apiVersion: machineconfiguration.openshift.io/v1
        kind: ContainerRuntimeConfig
        metadata:
          name: enable-crun-master
        spec:
          machineConfigPoolSelector:
            matchLabels:
              pools.operator.machineconfiguration.openshift.io/master: ""
          containerRuntimeConfig:
            defaultRuntime: crun
      enable-crun-worker.yaml: |
        apiVersion: machineconfiguration.openshift.io/v1
        kind: ContainerRuntimeConfig
        metadata:
          name: enable-crun-worker
        spec:
          machineConfigPoolSelector:
            matchLabels:
              pools.operator.machineconfiguration.openshift.io/worker: ""
          containerRuntimeConfig:
            defaultRuntime: crun
    Copy to Clipboard Toggle word wrap
    1
    确保 namespace 值与目标命名空间匹配。
  2. 在 hub 集群中运行以下命令来创建资源:

    oc apply -f enable-crun.yaml
    Copy to Clipboard Toggle word wrap

2.5.6. 渲染安装清单

引用 ClusterInstance 自定义资源中的模板和支持清单。完成以下步骤,使用默认集群和节点模板呈现安装清单:

  1. example-sno 命名空间中,在以下示例中创建名为 clusterinstance-ibi.yamlClusterInstance 自定义资源:

    apiVersion: siteconfig.open-cluster-management.io/v1alpha1
    kind: ClusterInstance
    metadata:
      name: "example-clusterinstance"
      namespace: "example-sno" 
    1
    
    spec:
      #clusterType: "SNO" 
    2
    
      holdInstallation: false
      extraManifestsRefs: 
    3
    
        - name: extra-machine-configs
        - name: enable-crun
      pullSecretRef:
        name: "pull-secret" 
    4
    
      [...]
      clusterName: "example-sno" 
    5
    
      [...]
      clusterImageSetNameRef: "img4.17-x86-64"
      [...]
      templateRefs: 
    6
    
        - name: ibi-cluster-templates-v1
          namespace: rhacm
      [...]
      nodes:
          [...]
          bmcCredentialsName: 
    7
    
            name: "example-bmh-secret"
          [...]
          templateRefs: 
    8
    
            - name: ibi-node-templates-v1
              namespace: rhacm
          [...]
    Copy to Clipboard Toggle word wrap
    1
    确保 ClusterInstance 自定义资源中的 命名空间 与您定义的目标命名空间匹配。
    2
    可选: 如果要在单节点 OpenShift 集群中扩展或扩展,您必须将 spec.clusterType 字段设置为 "SNO "。
    3
    引用一个或多个额外清单 ConfigMap 对象的名称。
    4
    引用 pull secret 的名称
    5
    确保 ClusterInstance 自定义资源中的 clusterName 字段的值与 namespace 字段的值匹配。
    6
    spec.templateRefs 字段中引用集群级别 模板的名称。如果使用默认安装模板,命名空间 必须与安装 Operator 的命名空间匹配。
    7
    引用 BMC secret 的名称
    8
    spec.nodes.templateRefs 字段中引用节点级别 模板的名称。如果使用默认安装模板,命名空间 必须与安装 Operator 的命名空间匹配。
  2. 运行以下命令应用该文件并创建资源:

    oc apply -f clusterinstance-ibi.yaml
    Copy to Clipboard Toggle word wrap

    创建自定义资源后,SiteConfig operator 开始协调 ClusterInstance 自定义资源,然后验证并呈现安装清单。

    SiteConfig operator 继续监控 ClusterDeployment 自定义资源中的更改,以更新相应 ClusterInstance 自定义资源的集群安装进度。

  3. 运行以下命令监控进程:

    oc get clusterinstance <cluster_name> -n <target_namespace> -o yaml
    Copy to Clipboard Toggle word wrap

    有关成功生成清单,请参阅 status.conditions 部分中的以下示例输出:

    message: Applied site config manifests
    reason: Completed
    status: "True"
    type: RenderedTemplatesApplied
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令,检查 SiteConfig operator 呈现的清单:

    oc get clusterinstance <cluster_name> -n <target_namespace> -o jsonpath='{.status.manifestsRendered}'
    Copy to Clipboard Toggle word wrap

如需有关状态条件的更多信息,请参阅 ClusterInstance API

使用 SiteConfig operator 取消置备集群,以删除与该集群关联的所有资源和访问。

需要的访问权限:集群管理员

2.6.1. 先决条件

  • 使用默认安装模板使用 SiteConfig operator 部署集群。

2.6.2. 取消置备单节点 OpenShift 集群

完成以下步骤以删除集群:

  1. 运行以下命令来删除 ClusterInstance 自定义资源:

    oc delete clusterinstance <cluster_name> -n <target_namespace>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令验证删除是否成功:

    oc get clusterinstance <cluster_name> -n <target_namespace>
    Copy to Clipboard Toggle word wrap

请参阅以下示例输出,其中 (NotFound) 错误表示您的集群已被取消置备。

Error from server (NotFound): clusterinstances.siteconfig.open-cluster-management.io "<cluster_name>" not found
Copy to Clipboard Toggle word wrap

2.7. SiteConfig 高级主题

SiteConfig operator 提供了额外的功能,如创建自定义模板或扩展 worker 节点,扩展适用于大多数用例的标准操作。有关 SiteConfig operator 的高级主题,请参阅以下文档:

2.7.1. 使用 SiteConfig operator 创建自定义模板

创建在默认模板集合中未提供的用户定义模板。

需要的访问权限:集群管理员

在创建自定义模板中完成以下步骤:

  1. 创建名为 my-custom-secret.yaml 的 YAML 文件,该文件在 ConfigMap 中包含集群级别模板:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: my-custom-secret
      namespace: rhacm
    data:
      MySecret: |-
        apiVersion: v1
        kind: Secret
        metadata:
          name: "{{ .Spec.ClusterName }}-my-custom-secret-key"
          namespace: "clusters"
          annotations:
            siteconfig.open-cluster-management.io/sync-wave: "1" 
    1
    
        type: Opaque
        data:
          key: <key>
    Copy to Clipboard Toggle word wrap
    1
    siteconfig.open-cluster-management.io/sync-wave 注解控制创建、更新或删除清单的顺序。
  2. 运行以下命令,在 hub 集群中应用自定义模板:

    oc apply -f my-custom-secret.yaml
    Copy to Clipboard Toggle word wrap
  3. 在名为 clusterinstance-my-custom-secret.yamlClusterInstance 自定义资源中引用您的模板:

    spec:
        ...
      templateRefs:
        - name: ai-cluster-templates-v1.yaml
          namespace: rhacm
        - name: my-custom-secret.yaml
          namespace: rhacm
        ...
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来应用 ClusterInstance 自定义资源:

    oc apply -f clusterinstance-my-custom-secret.yaml
    Copy to Clipboard Toggle word wrap

在由 SiteConfig operator 安装的受管集群中扩展。您可以通过删除 worker 节点来在集群中扩展。

需要的访问权限:集群管理员

2.7.2.1. 先决条件
2.7.2.2. 为 worker 节点添加注解

向 worker 节点添加注解以进行移除。

完成以下步骤,从受管集群注解 worker 节点:

  1. 在用于置备集群的 ClusterInstance 自定义资源中的 worker 节点条目的 extraAnnotations 字段中添加注解:

    spec:
       ...
       nodes:
       - hostName: "worker-node2.example.com"
          role: "worker"
          ironicInspect: ""
          extraAnnotations:
            BareMetalHost:
              bmac.agent-install.openshift.io/remove-agent-and-node-on-delete: "true"
    ...
    Copy to Clipboard Toggle word wrap
  2. 应用更改。请参见以下选项:

    1. 如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:
    oc apply -f <clusterinstance>.yaml
    Copy to Clipboard Toggle word wrap
    1. 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
  3. 在 hub 集群中运行以下命令来验证注解是否已应用到 BaremetalHost worker 资源:

    oc get bmh -n <clusterinstance_namespace> worker-node2.example.com -ojsonpath='{.metadata.annotations}' | jq
    Copy to Clipboard Toggle word wrap

    有关注解成功应用程序的示例输出:

{
  "baremetalhost.metal3.io/detached": "assisted-service-controller",
  "bmac.agent-install.openshift.io/hostname": "worker-node2.example.com",
  "bmac.agent-install.openshift.io/remove-agent-and-node-on-delete": "true"
  "bmac.agent-install.openshift.io/role": "master",
  "inspect.metal3.io": "disabled",
  "siteconfig.open-cluster-management.io/sync-wave": "1",
}
Copy to Clipboard Toggle word wrap
2.7.2.3. 删除 worker 节点的 BareMetalHost 资源

删除您要删除的 worker 节点的 BareMetalHost 资源。

完成以下步骤,从受管集群中删除 worker 节点:

  1. 使用以下配置更新要在现有 ClusterInstance 自定义资源中删除的节点对象:

    ...
    spec:
       ...
       nodes:
         - hostName: "worker-node2.example.com"
           ...
           pruneManifests:
             - apiVersion: metal3.io/v1alpha1
               kind: BareMetalHost
    ...
    Copy to Clipboard Toggle word wrap
  2. 应用更改。请参见以下选项:

    1. 如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:
    oc apply -f <clusterinstance>.yaml
    Copy to Clipboard Toggle word wrap
    1. 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
  3. 在 hub 集群中运行以下命令来验证 BareMetalHost 资源是否已移除:

    oc get bmh -n <clusterinstance_namespace> --watch --kubeconfig <hub_cluster_kubeconfig_filename>
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME                        STATE                        CONSUMER         ONLINE   ERROR   AGE
    master-node1.example.com    provisioned                  true             81m
    worker-node2.example.com    deprovisioning               true             44m
    worker-node2.example.com    powering off before delete   true             20h
    worker-node2.example.com    deleting                     true             50m
    Copy to Clipboard Toggle word wrap
  4. 在 hub 集群中运行以下命令来验证 Agent 资源是否已移除:

    oc get agents -n <clusterinstance_namespace> --kubeconfig <hub_cluster_kubeconfig_filename>
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME                       CLUSTER                  APPROVED   ROLE     STAGE
    master-node1.example.com   <managed_cluster_name>   true       master   Done
    master-node2.example.com   <managed_cluster_name>   true       master   Done
    master-node3.example.com   <managed_cluster_name>   true       master   Done
    worker-node1.example.com   <managed_cluster_name>   true       worker   Done
    Copy to Clipboard Toggle word wrap
  5. 在受管集群中运行以下命令来验证 Node 资源是否已移除:

    oc get nodes --kubeconfig <managed_cluster_kubeconfig_filename>
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME                       STATUS                        ROLES                  AGE   VERSION
    worker-node2.example.com   NotReady,SchedulingDisabled   worker                 19h   v1.30.5
    worker-node1.example.com   Ready                         worker                 19h   v1.30.5
    master-node1.example.com   Ready                         control-plane,master   19h   v1.30.5
    master-node2.example.com   Ready                         control-plane,master   19h   v1.30.5
    master-node3.example.com   Ready                         control-plane,master   19h   v1.30.5
    Copy to Clipboard Toggle word wrap
  6. 成功删除 worker 节点的 BareMetalHost 对象后,从 ClusterInstance 资源的 spec.nodes 部分中删除关联的 worker 节点定义。

扩展由 SiteConfig operator 安装的受管集群。您可以通过添加 worker 节点来扩展集群。

需要的访问权限:集群管理员

2.7.3.1. 先决条件
2.7.3.2. 添加 worker 节点

通过更新用于置备集群的 ClusterInstance 自定义资源来添加 worker 节点。

完成以下步骤,将 worker 节点添加到受管集群:

  1. 在现有 ClusterInstance 自定义资源中定义新节点对象:

    spec:
      ...
      nodes:
        - hostName: "<host_name>"
          role: "worker"
          templateRefs:
            - name: ai-node-templates-v1
              namespace: rhacm
          bmcAddress: "<bmc_address>"
          bmcCredentialsName:
            name: "<bmc_credentials_name>"
          bootMACAddress: "<boot_mac_address>"
    ...
    Copy to Clipboard Toggle word wrap
  2. 应用更改。请参见以下选项:

    1. 如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:
    oc apply -f <clusterinstance>.yaml
    Copy to Clipboard Toggle word wrap
    1. 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
  3. 在 hub 集群中运行以下命令来验证是否已添加新 BareMetalHost 资源:

    oc get bmh -n <clusterinstance_namespace> --watch --kubeconfig <hub_cluster_kubeconfig_filename>
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME                        STATE          CONSUMER   ONLINE   ERROR   AGE
    master-node1.example.com    provisioned               true             81m
    worker-node2.example.com    provisioning              true             44m
    Copy to Clipboard Toggle word wrap
  4. 在 hub 集群中运行以下命令来验证是否已添加新 Agent 资源:

    oc get agents -n <clusterinstance_namespace> --kubeconfig <hub_cluster_kubeconfig_filename>
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME                       CLUSTER                   APPROVED    ROLE     STAGE
    master-node1.example.com   <managed_cluster_name>    true        master   Done
    master-node2.example.com   <managed_cluster_name>    true        master   Done
    master-node3.example.com   <managed_cluster_name>    true        master   Done
    worker-node1.example.com   <managed_cluster_name>    false       worker
    worker-node2.example.com   <managed_cluster_name>    true        worker   Starting installation
    worker-node2.example.com   <managed_cluster_name>    true        worker   Installing
    worker-node2.example.com   <managed_cluster_name>    true        worker   Writing image to disk
    worker-node2.example.com   <managed_cluster_name>    true        worker   Waiting for control plane
    worker-node2.example.com   <managed_cluster_name>    true        worker   Rebooting
    worker-node2.example.com   <managed_cluster_name>    true        worker   Joined
    worker-node2.example.com   <managed_cluster_name>    true        worker   Done
    Copy to Clipboard Toggle word wrap
  5. 在受管集群中运行以下命令来验证是否已添加新 Node 资源:

    oc get nodes --kubeconfig <managed_cluster_kubeconfig_filename>
    Copy to Clipboard Toggle word wrap

    请参见以下示例输出:

    NAME                       STATUS    ROLES                  AGE   VERSION
    worker-node2.example.com   Ready     worker                 1h    v1.30.5
    worker-node1.example.com   Ready     worker                 19h   v1.30.5
    master-node1.example.com   Ready     control-plane,master   19h   v1.30.5
    master-node2.example.com   Ready     control-plane,master   19h   v1.30.5
    master-node3.example.com   Ready     control-plane,master   19h   v1.30.5
    Copy to Clipboard Toggle word wrap

2.7.4. 为断开连接的环境 mirror 镜像

您可以使用 Image Based Install Operator 作为底层 Operator,使用 SiteConfig operator 部署集群。如果在断开连接的环境中使用 Image Based Install Operator 部署集群,则必须在 ClusterInstance 自定义资源中提供您的镜像镜像作为额外清单。

需要的访问权限:集群管理员

完成以下步骤,为断开连接的环境镜像镜像:

  1. 为您的 ImageDigestMirrorSet 对象创建一个名为 idms-configmap.yaml 的 YAML 文件,其中包含您的镜像 registry 位置:

    kind: ConfigMap
    apiVersion: v1
    metadata:
      name: "idms-configmap"
      namespace: "example-sno"
    data:
      99-example-idms.yaml: |
        apiVersion: config.openshift.io/v1
        kind: ImageDigestMirrorSet
        metadata:
          name: example-idms
        spec:
          imageDigestMirrors:
          - mirrors:
            - mirror.registry.example.com/image-repo/image
            source: registry.example.com/image-repo/image
    Copy to Clipboard Toggle word wrap

重要: 定义包含与 ClusterInstance 资源相同的命名空间中的额外清单的 ConfigMap 资源。

  1. 在 hub 集群中运行以下命令来创建资源:

    oc apply -f idms-configmap.yaml
    Copy to Clipboard Toggle word wrap
  2. ClusterInstance 自定义资源中引用 ImageDigestMirrorSet 对象:

    apiVersion: siteconfig.open-cluster-management.io/v1alpha1
    kind: ClusterInstance
    metadata:
      name: "example-sno"
      namespace: "example-sno"
    spec:
      ...
      extraManifestsRefs:
        - name: idms-configmap
    ...
    Copy to Clipboard Toggle word wrap

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat