使用 Red Hat Advanced Cluster Management 的 multicluster engine operator


Red Hat Advanced Cluster Management for Kubernetes 2.14

带有后续 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。

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

先决条件

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

    curl -L https://raw.githubusercontent.com/open-cluster-management-io/clusteradm/main/install.sh | bash

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

  • cluster-proxy
  • managed-serviceaccount
  • work-manager

接下来您可以配置插件。当 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
  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
    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
    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
    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
    4. addondeploymentconfigs值添加到名为application-manager 的ClusterManagementAddOn资源中。请参见以下示例:
    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ClusterManagementAddOn
    metadata:
      name: application-manager
    spec:
      addOnMeta:
        displayName: application-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
  5. 运行以下命令,以验证 Red Hat Advanced Cluster Management local-cluster 的附加组件是否已重新安装到您指定的命名空间中:

    oc get deployment -n open-cluster-management-agent-addon-discovery

    请参见以下输出示例:

    NAME                                                  READY   STATUS    RESTARTS   AGE
    application-manager-6b7f74b8f7-7sd25                  1/1     Running   0          5d18h
    cluster-proxy-proxy-agent-7985ddfdb6-kng5p            3/3     Running   0          5d18h
    klusterlet-addon-workmgr-55fd575b4b-rs5vz             1/1     Running   0          5d18h
    managed-serviceaccount-addon-agent-54bd989b94-g6gz9   1/1     Running   0          5d18h

创建KlusterletConfig资源。多集群引擎操作员有一个本地集群,这是一个受管理的中心集群。为该本地集群创建了一个名为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
  2. 运行 oc apply -f <filename>.yaml 以应用该文件。

配置备份和恢复功能。

安装 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
  • 对于 hypershift-addon-deploy-config,请运行以下命令:

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

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

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

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

    oc label KlusterletConfig mce-import-klusterlet-config cluster.open-cluster-management.io/backup=true

1.1.2. 手动导入多集群引擎 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
    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 导入托管集群”中的“使用自动导入密钥导入集群”部分,添加自动导入密钥以完成多集群引擎操作员自动导入过程。

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

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

    oc get managedcluster

    请参阅以下带有受管集群的状态和示例 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

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

1.1.3. 发现托管集群

在将所有多集群引擎 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"}}'
  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"}]}}'
  3. (可选)配置您的命名规则。默认情况下,导入的托管集群使用<mce-cluster-name>-<hosted-cluster-name>命名模式,但您可以自定义命名模式。

    1. 运行以下命令移除默认前缀:

      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":"custom-prefix"}]}}'
    2. custom-prefix替换为您的新前缀。托管集群名称采用<自定义前缀>-<托管集群名称>模式创建。运行以下命令:

      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":"custom-prefix"}]}}'
    3. 如果需要完全移除发现前缀,请先确保所有托管集群都已从各自的集群中分离。重要提示:使用空字符串作为自定义前缀可能会导致多集群引擎操作员集群内出现 klusterlet 命名冲突。运行以下命令:
    oc patch addondeploymentconfig hypershift-addon-deploy-config \
       -n multicluster-engine \
       --type=json \
       -p='[{"op":"add","path":"/spec/customizedVariables/-","value":{"name":"autoImportDisabled","value":"true"}}]'
  4. 运行以下命令,为多集群引擎 operator 启用 hypershift-addon

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

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

    oc get deployment -n open-cluster-management-agent-addon-discovery

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

    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

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 高级集群管理安装和升级文档。
  • 您需要了解 策略。请参阅 Red Hat 高级集群管理文档中的“治理”简介。

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

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 }}
    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"
  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
  2. 要验证,请运行以下命令:

    oc get policies.policy.open-cluster-management.io policy-mce-hcp-autoimport -n <namespace>

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

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

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

  annotations:
    discovery.open-cluster-management.io/previously-auto-imported: "true"

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

通过使用 Red Hat Advanced Cluster Management 策略实施来自动导入 AWS 集群上的 Red Hat OpenShift Service,从而加快集群管理速度,而无需手动导入单个集群。

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

1.3.1. 先决条件

  • 您需要安装 Red Hat Advanced Cluster Management。请参阅 Red Hat 高级集群管理安装和升级文档。
  • 您需要了解 策略。请参阅 Red Hat 高级集群管理文档中的“治理”简介。

1.3.2. 创建自动导入策略

以下策略和程序是如何自动导入所有在 AWS 集群上发现的 Red Hat OpenShift 服务的示例。

通过 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 }}
    1
    要启用自动导入,请将 spec.remediationAction 改为 enforce
    2
    可选:在此处指定一个值以选择匹配的 Red Hat 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
  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
  2. 要验证,请运行以下命令:

    oc get policies.policy.open-cluster-management.io policy-rosa-autoimport -n <namespace>

第 2 章 Observability 集成

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

2.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 命令行界面"。

要启用,请参阅可观测性服务

第 3 章 SiteConfig

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

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

有关高级主题,请参阅SiteConfig 高级主题

3.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

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

3.1.1. SiteConfig operator 流

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

您可以通过 Argo CD 从 Git 存储库中获取ClusterInstance自定义资源,也可以手动或通过外部工具和工作流直接在中心集群上创建它。

以下是流程的高级概述:

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

3.2. 安装模板概述

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

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

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

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

3.2.1. 模板功能

您可以自定义模板字段。SiteConfig 操作符支持Sprig 库中的所有函数

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

toYaml

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

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

{{ if .Spec.Proxy }}
  proxy:
{{ .Spec.Proxy | toYaml | indent 4 }}
{{ end }}

3.2.2. 默认模板集合

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

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

支持的安装程序

集群级别模板

ai-cluster-templates-v1.yaml

AgentClusterInstall
ClusterDeployment
InfraEnv
KlusterletAddonConfig
ManagedCluster

节点级别模板

ai-node-templates-v1.yaml

BareMetalHost
NMStateConfig

Image Based Install Operator

集群级别模板

ibi-cluster-templates-v1.yaml

ClusterDeployment
KlusterletAddonConfig
ManagedCluster

节点级别模板

ibi-node-templates-v1.yaml

BareMetalHost
ImageClusterInstall
NetworkSecret

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

3.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 }}"

3.2.4. 自定义清单顺序

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

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

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

在以下示例中,如果 SiteConfig 操作员创建或更新清单,则AgentClusterInstallClusterDeployment自定义资源将在第一波中进行协调,而KlusterletAddonConfigManagedCluster自定义资源将在第三波中进行协调:

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

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

3.2.5. 配置额外注解和标签

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

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

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

查看以下 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"
1
此字段支持 SiteConfig operator 应用到 ManagedClusterClusterDeployment 清单的集群级注解和标签。
2
此字段支持 SiteConfig operator 应用到 BareMetalHost 清单的节点级别注解和标签。
3
BareMetalHost示例中的extraAnnotationsmyNodeAnnotation
4
BareMetalHost示例中的extraLabelstestExtraLabel

您可以运行以下命令来验证您的附加标签是否已应用:

oc get managedclusters example-sno -ojsonpath='{.metadata.labels}' | jq

查看以下应用标签示例:

{
  "common": "true",
  "group-du": "",
  ...
}

您可以运行以下命令来验证您的附加注解是否已应用:

oc get bmh example-sno.example.redhat.com -n example-sno -ojsonpath='{.metadata.annotations}' | jq

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

{
  "myNodeAnnotation": "success",
  ...
}

3.2.6. 配置完成后允许的更改

您可能想要更改集群配置,但在配置期间不允许对集群进行更改。但是,集群配置完成后,您可以修改以下字段:

  • spec.extraAnnotations
  • spec.extraLabels
  • spec.suppressedManifests
  • spec.pruneManifests
  • spec.clusterImageSetNameRef
  • spec.nodes.<node-id>.extraAnnotations
  • spec.nodes.<node-id>.extraLabels
  • spec.nodes.<node-id>.suppressedManifests
  • spec.nodes.<node-id>.pruneManifests

注意: <node-id>代表更新后的NodeSpec对象。

3.3. 启用 SiteConfig operator

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

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

3.3.1. 先决条件

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

3.3.2. 从 MultiClusterHub 资源启用 SiteConfig operator

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

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

    export MCH_NAMESPACE=<namespace>
  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}}]'
  3. 在 hub 集群中运行以下命令来验证 SiteConfig operator 是否已启用:

    oc -n ${MCH_NAMESPACE} get po | grep siteconfig

    请参见以下示例输出:

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

    oc -n ${MCH_NAMESPACE} get cm

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

    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
    ...

第 4 章 Image Based Install Operator

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

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

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

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

4.1.1. 先决条件

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

4.1.2. 创建目标命名空间

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

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

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

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

    oc apply -f clusterinstance-namespace.yaml

4.1.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
    1
    确保 namespace 值与目标命名空间匹配。
    2
    将 base64 编码的配置文件指定为值。
  2. 应用该文件以创建资源。在 hub 集群中运行以下命令:

    oc apply -f pull-secret.yaml

4.1.4. 创建 BMC secret

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

  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
    1
    确保 namespace 值与目标命名空间匹配。
  2. 应用该文件以创建资源。在 hub 集群中运行以下命令:

    oc apply -f example-bmc-secret.yaml

4.1.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
    1
    确保 namespace 值与目标命名空间匹配。
  2. 在 hub 集群中运行以下命令来创建资源:

    oc apply -f enable-crun.yaml

4.1.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"
      [...]
      reference: 
    6
    
      [...]
        namespace: 
    7
    
        [...]
      templateRefs: 
    8
    
        - name: ibi-cluster-templates-v1
          namespace: rhacm
          hostRef: 
    9
    
            - name: example-bmh
              namespace: example-sno
      [...]
      nodes:
          [...]
          bmcCredentialsName: 
    10
    
            name: "example-bmh-secret"
          [...]
          templateRefs: 
    11
    
            - name: ibi-node-templates-v1
              namespace: rhacm
          [...]
    1
    确保 ClusterInstance 自定义资源中的 命名空间 与您定义的目标命名空间匹配。
    2
    可选:如果您想要扩展或缩减单节点 OpenShift 集群,则必须将spec.clusterType字段设置为"SNO"
    3
    引用一个或多个额外清单 ConfigMap 对象的名称。
    4
    引用 pull secret 的名称
    5
    确保 ClusterInstance 自定义资源中的 clusterName 字段的值与 namespace 字段的值匹配。
    6
    指定不同命名空间中的依赖项或相关对象。
    7
    指定引用对象的命名空间。
    8
    spec.templateRefs 字段中引用集群级别 模板的名称。如果使用默认安装模板,命名空间 必须与安装 Operator 的命名空间匹配。
    9
    指定对位于不同命名空间中的BareMetalHost资源的引用。
    10
    引用 BMC secret 的名称
    11
    spec.nodes.templateRefs 字段中引用节点级别 模板的名称。如果使用默认安装模板,命名空间 必须与安装 Operator 的命名空间匹配。
  2. 运行以下命令应用该文件并创建资源:

    oc apply -f clusterinstance-ibi.yaml

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

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

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

    oc get clusterinstance <cluster_name> -n <target_namespace> -o yaml

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

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

    oc get clusterinstance <cluster_name> -n <target_namespace> -o jsonpath='{.status.manifestsRendered}'

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

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

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

4.2.1. 先决条件

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

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

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

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

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

    oc get clusterinstance <cluster_name> -n <target_namespace>

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

    Error from server (NotFound): clusterinstances.siteconfig.open-cluster-management.io "<cluster_name>" not found

4.3. SiteConfig 高级主题

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

4.3.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>
    1
    siteconfig.open-cluster-management.io/sync-wave 注解控制创建、更新或删除清单的顺序。
  2. 运行以下命令,在 hub 集群中应用自定义模板:

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

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

    oc apply -f clusterinstance-my-custom-secret.yaml

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

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

4.3.2.1. 先决条件
4.3.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"
    ...
  2. 应用更改。设置以下选项:

    1. 如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:

      oc apply -f <clusterinstance>.yaml
    2. 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
  3. 在 hub 集群中运行以下命令来验证注解是否已应用到 BaremetalHost worker 资源:

    oc get bmh -n <clusterinstance_namespace> worker-node2.example.com -ojsonpath='{.metadata.annotations}' | jq

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

    {
      "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",
    }
4.3.2.3. 删除 worker 节点的 BareMetalHost 资源

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

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

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

    ...
    spec:
       ...
       nodes:
         - hostName: "worker-node2.example.com"
           ...
           pruneManifests:
             - apiVersion: metal3.io/v1alpha1
               kind: BareMetalHost
    ...
  2. 应用更改。设置以下选项:

    1. 如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:

      oc apply -f <clusterinstance>.yaml
    2. 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
  3. 在 hub 集群中运行以下命令来验证 BareMetalHost 资源是否已移除:

    oc get bmh -n <clusterinstance_namespace> --watch --kubeconfig <hub_cluster_kubeconfig_filename>

    请参见以下示例输出:

    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
  4. 在 hub 集群中运行以下命令来验证 Agent 资源是否已移除:

    oc get agents -n <clusterinstance_namespace> --kubeconfig <hub_cluster_kubeconfig_filename>

    请参见以下示例输出:

    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
  5. 在受管集群中运行以下命令来验证 Node 资源是否已移除:

    oc get nodes --kubeconfig <managed_cluster_kubeconfig_filename>

    请参见以下示例输出:

    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
  6. 成功删除工作节点的BareMetalHost对象后,从ClusterInstance资源中的spec.nodes部分中删除关联的工作节点定义。

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

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

4.3.3.1. 先决条件
4.3.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>"
    ...
  2. 应用更改。设置以下选项:

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

    oc get bmh -n <clusterinstance_namespace> --watch --kubeconfig <hub_cluster_kubeconfig_filename>

    请参见以下示例输出:

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

    oc get agents -n <clusterinstance_namespace> --kubeconfig <hub_cluster_kubeconfig_filename>

    请参见以下示例输出:

    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
  5. 在受管集群中运行以下命令来验证是否已添加新 Node 资源:

    oc get nodes --kubeconfig <managed_cluster_kubeconfig_filename>

    请参见以下示例输出:

    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

4.3.4. 为断开连接的环境镜像

您可以使用基于映像的安装操作员作为底层操作员,通过 SiteConfig 操作员部署集群。如果您在断开连接的环境中使用基于映像的安装操作员部署集群,则必须在ClusterInstance自定义资源中提供镜像作为额外清单。

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

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

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

    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

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

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

    oc apply -f idms-configmap.yaml
  3. ClusterInstance自定义资源中引用您的ImageDigestMirrorSet对象:

    apiVersion: siteconfig.open-cluster-management.io/v1alpha1
    kind: ClusterInstance
    metadata:
      name: "example-sno"
      namespace: "example-sno"
    spec:
      ...
      extraManifestsRefs:
        - name: idms-configmap
    ...

SiteConfig 操作员通过ClusterInstance API 简化 OpenShift 集群重新安装,同时保留关键配置数据。

通过与 GitOps 兼容的声明式方法,用户可以通过更新ClusterInstance资源来开始重新安装。该操作员还包括中心端SecretConfigMap资源的备份和恢复机制,确保基本集群数据(例如身份验证凭据和配置资源)保持完整。

4.3.5.1. 集群身份保存

集群重新安装支持单节点 OpenShift 集群和多节点 OpenShift 集群。但是,仅使用基于映像的安装配置方法安装的单节点 OpenShift 集群支持集群身份保存。

有关基于映像的安装的更多信息,请参阅基于映像的单节点 OpenShift 安装

4.3.5.2. 集群重新安装工作流程

请参阅集群重新安装工作流程的以下步骤:

  • 标记资源以便保存。如果您不想保留资源,这是可选的。您可以在启动集群重新安装之前标记您的资源。
  • 启动集群重新安装。
  • 监控重新安装进度并验证重新安装的集群是否可用。这是可选的。
4.3.5.3. 资源标签保存

如果您希望在重新安装后保留必要的集群配置数据,SiteConfig 操作员为ClusterInstance命名空间内的中心端SecretConfigMap资源提供了备份和恢复机制。

您可以通过在ClusterInstance资源中设置preservationMode并向资源添加适当的保存标签来控制数据保存。有以下保存模式可供选择:

Expand
表 4.1. 保存模式
保存模式行为使用方法标签要求

None

ConfigMapSecret资源未被保留。

如果重装集群时不需要保留数据,请选择“无”模式。

None

All

ClusterInstance资源位于同一命名空间内的所有带标签的ConfigMapSecret资源均已备份。如果 SiteConfig 操作员没有找到任何标记的资源,操作员将继续重新安装而不保留数据。原始资源存储为不可变的 Kubernetes 机密。

如果您想保留标记的资源(如果有),请选择全部模式。

添加siteconfig.open-cluster-management.io/preserve: "<arbitrary-value>"标签,并添加任意值,例如, siteconfig.open-cluster-management.io/preserve: "" 。该标签指示操作员仅当保存模式设置为全部时才备份具有指定标签的资源。

ClusterIdentity

仅备份与ClusterInstance CR 位于同一命名空间中且标有siteconfig.open-cluster-management.io/preserve: "cluster-identity"标签的ConfigMapSecret资源。如果 SiteConfig 操作员没有找到任何标记的资源,操作员将停止重新安装过程并显示错误消息。这些资源的原始 CR 存储为不可变的 Kubernetes 机密。

如果您希望操作员验证您是否标记了至少一个资源,请选择ClusterIdentity模式。

添加siteconfig.open-cluster-management.io/preserve: "cluster-identity"标签,以指示操作员在保存模式设置为AllClusterIdentity时使用该标签备份资源。如果将保存模式设置为ClusterIdentity ,并且操作员未找到至少一个具有siteconfig.open-cluster-management.io/preserve:“cluster-identity”标签的资源,则重新安装将停止。

您可以在开始重新安装之前标记您的资源。

4.3.5.4. 集群重装监控

重新安装分为两个阶段:

第 1 阶段 - 重新安装请求处理
  • 请求验证:SiteConfig 操作员验证请求。
  • 数据保存:SiteConfig 操作员备份标记的资源。
  • 清理:SiteConfig 操作员删除现有的安装清单。如果此步骤超时,重新安装将停止并且ClusterInstance资源将暂停。
  • 数据恢复:SiteConfig 操作员恢复保存的数据。
第 2 阶段 - 集群配置
  • 清单再生:SiteConfig 操作员从模板生成新的清单。
  • 集群安装:使用新的清单配置集群。

您可以分别在status.reinstall.conditionsstatus.conditions字段中跟踪第 1 阶段和第 2 阶段的进度。为了跟踪集群重新安装进度,SiteConfig 操作员提供了以下状态条件:

Expand
表 4.2. 重新安装状态条件

状况

描述

原因

ReinstallRequestProcessed

指示重新安装请求的总体状态。

InProgress :重新安装过程正在进行中。
已完成:重新安装过程已成功完成,并且集群已准备好重新配置。
失败:重新安装过程遇到错误并失败。
TimedOut :重新安装过程超出了预期的时间限制,未成功完成。

ReinstallRequestValidated

确认重新安装请求的有效性。

已完成:重新安装请求有效。
失败:重新安装请求无效。

ReinstallPreservationDataBackedUp

跟踪已保存数据的备份状态。

PreservationNotRequired :由于设置了spec.reinstall.preservationMode: None,因此不需要备份。
DataUnavailable :在ClusterInstance命名空间中找不到带有保留标签的SecretConfigMap对象。
已完成SecretConfigMap对象已成功备份。
失败:一个或多个SecretConfigMap对象未备份。

ReinstallClusterIdentityDataDetected

确定集群身份数据是否可供保存。

PreservationNotRequired :不需要保存数据。preservationMode字段设置为None
DataAvailable :成功定位集群身份SecretConfigMap对象。
DataUnavailable :未检测到集群身份SecretConfigMap对象。
失败:保存模式设置为ClusterIdentity ,但未找到集群身份数据。

ReinstallRenderedManifestsDeleted

监控与ClusterInstance资源相关的渲染清单的删除。

InProgress :正在删除呈现的清单。
已完成:成功删除所有渲染的清单。
失败:无法删除一个或多个渲染的清单。
TimedOut :等待删除渲染的清单时超时。

ReinstallPreservationDataRestored

跟踪保存数据的恢复状态。

PreservationNotRequired :不需要保存,因为preservationMode字段设置为None
DataUnavailable :未检测到需要恢复的保留SecretConfigMap对象。
已完成SecretConfigMap对象已成功恢复。
失败:无法恢复一个或多个SecretConfigMap对象。

status.reinstall字段通过以下字段提供有关重新安装过程的更多信息:

  • InProgressGeneration :标识正在处理以重新安装的活动生成。
  • ObservedGeneration :指示最后成功处理的重新安装请求。
  • RequestStartTime :表示发起重新安装请求的时间。
  • RequestEndTime :表示重新安装过程完成的时间。
  • 历史记录:显示过去的重新安装尝试,包括生成详细信息、时间戳和ClusterInstance资源的规范更改。

使用 SiteConfig 操作员重新安装您的集群。启用重新安装后,您可以定义所需的保存模式,并在适用的情况下标记您的资源。

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

完成以下步骤来重新安装集群:

4.3.6.1. 启用集群重新安装

您必须在siteconfig-operator-configuration ConfigMap资源中明确启用集群重新安装,您可以在启动该过程之前完成此操作。默认情况下,重新安装是禁用的。

完成以下步骤:

  1. 设置NAMESPACE环境变量以匹配安装 SiteConfig 操作员的命名空间。运行以下命令:

    NAMESPACE=<namespace>
  2. 通过运行以下命令来验证当前配置:

    oc get configmap siteconfig-operator-configuration -n $NAMESPACE -o yaml

    输出示例:

    apiVersion: v1
    kind: ConfigMap
    metadata:
        name: siteconfig-operator-configuration
        namespace: <namespace> 
    1
    
    data:
        allowReinstalls: false 
    2
    
        ...
    1
    安装 SiteConfig 操作员的命名空间。
    2
    设置为true以启用重新安装。

    注意:操作员持续监控siteconfig-operator-configuration ConfigMap资源的变化。

  3. 要启用集群重新安装,请通过将data.allowReinstalls字段设置为true来更新ConfigMap资源。运行以下命令:

    oc patch configmap siteconfig-operator-configuration \
        -n $NAMESPACE \
        --type=json \
        -p '[{"op": "replace", "path": "/data/allowReinstalls", "value": "true"}]'
  4. 运行以下命令验证更新:

    oc get configmap siteconfig-operator-configuration -n $NAMESPACE -o yaml
4.3.6.2. 标记资源以便保存

您可以在ClusterInstance自定义资源中设置所需的保存模式,并在适用的情况下相应地标记您的资源。默认情况下, preservationMode字段设置为None 。有关详细信息,请参阅资源标签保存

完成以下示例步骤:

  • 通过运行以下命令将资源标记为全部保存模式:

    oc label configmap <your_configmap> "siteconfig.open-cluster-management.io/preserve=all"

ClusterInstance自定义资源使用与应用的标签相对应的正确的preservationMode进行更新。

4.3.6.3. 启动集群重新安装

要开始重新安装,请使用新的spec.reinstall.generation值更新ClusterInstance资源。

  1. 修改ClusterInstance资源中的spec.reinstall.generation值:

    apiVersion: siteconfig.open-cluster-management.io/v1alpha1
    kind: `ClusterInstance`
    metadata:
      name: clusterinstance-example
      namespace: some-namespace
    spec:
      reinstall:
        generation: "unique-generation-string"
        preservationMode: "<your-preservation-mode>"

    注意:修改ClusterInstance资源时,请确保设置适当的保存模式。“None”“All”“ClusterIdentity”是有效值。

  2. 可选:定义spec.reinstall对象时,您可以修改ClusterInstance资源中的以下附加字段:

    • spec.extraAnnotations
    • spec.extraLabels
    • spec.suppressedManifests
    • spec.pruneManifests
    • spec.nodes.<node-id>.extraAnnotations
    • spec.nodes.<node-id>.extraLabels
    • spec.nodes.<node-id>.suppressedManifests
    • spec.nodes.<node-id>.pruneManifests
    • spec.nodes.<node-id>.bmcAddress
    • spec.nodes.<node-id>.bootMACAddress
    • spec.nodes.<node-id>.nodeNetwork.interfaces.macAddress
    • spec.nodes.<node-id>.rootDeviceHints

    注意: <node-id>代表更新后的NodeSpec对象。

  3. 应用更改。设置以下选项:

    1. 如果您使用的是 OpenShift GitOps ZTP,请推送到您的 Git 存储库并等待 Argo CD 同步更改。
    2. 要手动应用更改,请在中心集群上运行以下命令:
    oc apply -f clusterinstance-example.yaml
4.3.6.4. 监控集群重新安装

您可以监控集群重新安装进度。完成以下步骤:

  1. 验证重新安装请求是否正在处理:

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRequestProcessed")'

    请参见以下示例输出:

    {
    "type": "ReinstallRequestProcessed"
    "reason": "InProgress",
    "status": "False",
    ...
    }
  2. 验证集群重新安装请求是否成功验证:

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRequestValidated")'

    请参见以下示例输出:

    {
    "type": "ReinstallRequestValidated"
    "reason": "Completed",
    "status": "True",
    ...
    }
  3. 可选。如果将spec.reinstall.preservationMode字段设置为AllClusterIdentity ,请验证集群身份数据是否被保留:

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallPreservationDataBackedup")'

    请参见以下示例输出:

    {
    "type": "ReinstallPreservationDataBackedup"
    "reason": "Completed",
    "status": "True",
    ...
    }
  4. 可选。如果将spec.reinstall.preservationMode字段设置为AllClusterIdentity ,请验证是否检测到集群身份数据:

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallClusterIdentityDataDetected")'

    请参见以下示例输出:

    {
    "type": "ReinstallClusterIdentityDataDetected"
    "reason": "DataAvailable",
    "status": "True",
    ...
    }
  5. 验证安装清单是否已被删除。删除可能需要几分钟才能完成。

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRenderedManifestsDeleted")'

    请参见以下示例输出:

    {
    "type": "ReinstallRenderedManifestsDeleted"
    "reason": "Completed",
    "status": "True",
    ...
    }
  6. 可选。如果将preseservationMode字段设置为AllClusterIdentity ,请验证之前保存的数据是否已恢复:

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallPreservationDataRestored")'

    请参见以下示例输出:

    {
    "type": "ReinstallPreservationDataRestored"
    "reason": "Completed",
    "status": "True",
    ...
    }
  7. 验证上述步骤后,请确保重新安装请求已成功完成:

    oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRequestProcessed")'

    请参见以下示例输出:

    {
    "type": "ReinstallRequestProcessed"
    "reason": "Completed",
    "status": "True",
    ...
    }
  8. 通过使用与重新安装的集群关联的kubeconfig文件运行oc命令来确认集群已成功重新安装并且可以运行。

基于映像的中断/修复功能利用 SiteConfig 操作员的集群重新安装机制来简化单节点 OpenShift 硬件更换。该功能通过保留集群的原始身份来最大限度地减少停机时间。基于映像的中断/修复功能保留了关键的集群详细信息,包括标识符、加密密钥(如kubeconfig )和身份验证凭据,这使得替换节点能够无缝地承担故障硬件的身份。

基于映像的中断/修复专为使用基于映像的安装方法安装的单节点 OpenShift 集群中的相同硬件替换而设计,它引入了与 GitOps 兼容的声明性 API。用户可以通过单个 Git 提交来启动硬件更换。在 SiteConfig 操作员和基于图像的安装操作员的支持下,基于图像的中断/修复可以使用现有的ClusterInstance自定义资源实现集群重新部署。

借助基于映像的中断/修复,OpenShift 容器平台用户可以获得弹性、自动化和 GitOps 原生解决方案,以便在硬件故障后快速恢复单节点 OpenShift 集群。

基于映像的中断/修复工作流程与集群重新安装工作流程类似,但存在某些差异。要熟悉工作流程中的差异,请参阅基于映像的中断/修复集群重新安装工作流程的高级概述:

  • 启用 SiteConfig 操作员重新安装服务。
  • 启动集群重新安装。

    • 设置spec.reinstall.preservationMode: "ClusterIdentity"
    • 使用更改后的硬件信息更新spec.nodes对象。
    • 注意:基于图像的安装操作员会自动标记集群身份资源。
  • 监控重新安装进度。

    • 在集群配置期间,使用安装清单的操作员使用新生成的清单来配置集群。
    • 注意:基于映像的安装操作员检测保留的集群身份数据并将其合并到配置 ISO 映像中。
  • 验证集群是否已配置且可用。

    • 使用与故障硬件关联的kubeconfig访问重新安装的辐射集群。

有关详细信息,请参阅使用 SiteConfig 操作员重新安装集群(技术预览版)。

4.3.7.2. 先决条件
  • 该集群是使用基于映像的安装配置方法安装的单节点 OpenShift 集群。
  • 故障硬件被具有相同规格的新节点替换。

要启动基于映像的中断/修复集群重新安装,请通过设置spec.reinstall.generation字段并使用更改的硬件信息更新spec.nodes对象来更新ClusterInstance资源。

  1. 修改spec.reinstall.generation字段并使用新节点详细信息更新ClusterInstance资源中的spec.nodes对象:

    apiVersion: siteconfig.open-cluster-management.io/v1alpha1
    kind: `ClusterInstance`
    metadata:
      name: clusterinstance-example
      namespace: some-namespace
    spec:
      ...
      reinstall:
        generation: "unique-generation-string"
        preservationMode: "ClusterIdentity"
      nodes:
        - bmcAddress: <new-node-bmcAddress>
          bootMACAddress: <new-node-bootMACAddress>
          rootDeviceHints: <new-node-rootDeviceHints>
          nodeNetwork:
            interfaces:
              macAddress: <new-node-macAddress>
              ...
          ...
  2. 应用更改。设置以下选项:

    1. 如果您使用的是 OpenShift GitOps ZTP,请推送到您的 Git 存储库并等待 Argo CD 同步更改。
    2. 要手动应用更改,请在中心集群上运行以下命令:
    oc apply -f clusterinstance-example.yaml

法律通告

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

© 2026 Red Hat
返回顶部