使用 Red Hat Advanced Cluster Management 的 multicluster engine operator
带有后续 Red Hat Advanced Cluster Management 集成的 multicluster engine operator 提供了更多多集群管理功能。
摘要
如果您使用 multicluster engine operator,然后安装 Red Hat Advanced Cluster Management,您可以访问更多多集群管理功能,如 Observability 和 Policy。有关集成功能,请查看以下要求:
- 您需要安装 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 集群。
运行以下命令来安装
clusteradmCLI: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 附加组件进行自我管理。完成以下步骤:
- 使用 CLI 登录您的 Red Hat Advanced Cluster Management。
创建
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-
运行
oc apply -f <filename>.yaml以应用该文件。 更新附加组件的现有
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将
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将
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将
addondeploymentconfigs值添加到名为cluster-proxy的ClusterManagementAddOn资源中。请参见以下示例: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-
将
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运行以下命令,以验证 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 使用不同的名称安装,以避免冲突。完成以下步骤:
使用以下示例创建
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-
运行
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 集群,请完成以下步骤:
在 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-config1 labels: cloud: auto-detect vendor: auto-detect name: mce-a2 spec: hubAcceptsClient: true leaseDurationSeconds: 60-
运行
oc apply -f <filename>.yaml以应用该文件。 创建
auto-import-secretsecret,该 secret 引用了 multicluster engine operator 集群的kubeconfig。转到“使用 CLI 导入托管集群”中的“使用自动导入密钥导入集群”部分,添加自动导入密钥以完成多集群引擎操作员自动导入过程。在 Red Hat Advanced Cluster Management 集群的 multicluster engine operator 受管集群命名空间中创建自动导入 secret 后,受管集群会被注册。
运行以下命令来获取状态:
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 中正常工作。
重要: 对于所有命令,将 < ;managed-cluster-names > 替换为 multicluster engine operator 的以逗号分隔的受管集群名称。
运行以下命令,将附加组件的
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"}}'运行以下命令以禁用指标并禁用 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"}]}}'(可选)配置您的命名规则。默认情况下,导入的托管集群使用
<mce-cluster-name>-<hosted-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":"custom-prefix"}]}}'将
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"}]}}'- 如果需要完全移除发现前缀,请先确保所有托管集群都已从各自的集群中分离。重要提示:使用空字符串作为自定义前缀可能会导致多集群引擎操作员集群内出现 klusterlet 命名冲突。运行以下命令:
oc patch addondeploymentconfig hypershift-addon-deploy-config \ -n multicluster-engine \ --type=json \ -p='[{"op":"add","path":"/spec/customizedVariables/-","value":{"name":"autoImportDisabled","value":"true"}}]'运行以下命令,为多集群引擎 operator 启用
hypershift-addon:clusteradm addon enable --names hypershift-addon --clusters <managed-cluster-names>您可以通过在 Red Hat Advanced Cluster Management 中运行以下命令来获取 multicluster engine operator 受管集群名称。
oc get managedcluster登录到多集群引擎 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 自定义资源。
您可以在控制台中查看发现的集群。
- 登录到 hub 集群控制台并进入到 All Clusters > Infrastructure > Clusters。
-
找到 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. 先决条件 复制链接链接已复制到粘贴板!
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 以导入所有发现的托管集群。
- 通过 CLI 登录到您的 hub 集群,以完成以下流程:
为您的
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: enforce1 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: true2 {{- end }} {{- end }}-
运行
oc apply -f <filename>.yaml -n <namespace> 以应用该文件。
1.2.3. 创建放置定义 复制链接链接已复制到粘贴板!
您需要创建一个放置定义,为策略部署指定受管集群。完成以下步骤:
创建仅选择
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"-
运行
oc apply -f placement.yaml -n <namespace>,其中 namespace 与您之前创建的策略的命名空间匹配。
1.2.4. 将导入策略绑定到放置定义 复制链接链接已复制到粘贴板!
创建策略和放置后,您需要连接这两个资源。完成以下步骤:
使用
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要验证,请运行以下命令:
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"
如果要重新导入分离发现的集群,请删除此注解。
1.3. 自动导入在 AWS 集群上发现的 Red Hat OpenShift 服务 复制链接链接已复制到粘贴板!
通过使用 Red Hat Advanced Cluster Management 策略实施来自动导入 AWS 集群上的 Red Hat OpenShift Service,从而加快集群管理速度,而无需手动导入单个集群。
需要的访问权限:集群管理员
1.3.1. 先决条件 复制链接链接已复制到粘贴板!
1.3.2. 创建自动导入策略 复制链接链接已复制到粘贴板!
以下策略和程序是如何自动导入所有在 AWS 集群上发现的 Red Hat OpenShift 服务的示例。
通过 CLI 登录到您的 hub 集群,以完成以下流程:
使用以下示例创建 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: inform1 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 }}-
运行
oc apply -f <filename>.yaml -n <namespace> 以应用该文件。
1.3.3. 创建放置定义 复制链接链接已复制到粘贴板!
您需要创建一个放置定义,为策略部署指定受管集群。
创建仅选择
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-
运行
oc apply -f placement.yaml -n <namespace>,其中 namespace 与您之前创建的策略的命名空间匹配。
1.3.4. 将导入策略绑定到放置定义 复制链接链接已复制到粘贴板!
创建策略和放置后,您需要连接这两个资源。
使用
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要验证,请运行以下命令:
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,还是任何其他基于自定义模板的方法。
- 可扩展性
-
与
SiteConfigkustomize 插件相比,每个集群具有更大的可扩展性。 - 灵活性
- 为您提供更多使用自定义模板部署和安装集群的功能。
- 故障排除
- 提供有关集群部署状态和呈现的清单的深入了解信息,显著提高故障排除体验。
如需有关 Image Based Install Operator 的更多信息,请参阅 Image Based Install Operator。
有关辅助安装程序的更多信息,请参阅使用 辅助安装程序安装内部集群
3.1.1. SiteConfig operator 流 复制链接链接已复制到粘贴板!
SiteConfig operator 根据用户定义的模板动态生成安装清单,这些模板从 ClusterInstance 自定义资源中的数据实例化。
您可以通过 Argo CD 从 Git 存储库中获取ClusterInstance自定义资源,也可以手动或通过外部工具和工作流直接在中心集群上创建它。
以下是流程的高级概述:
- 您可以在 hub 集群中创建一个或多个安装模板集合。
-
您可以创建一个
ClusterInstance自定义资源来引用这些安装模板和支持清单。 -
创建资源后,SiteConfig operator 通过填充自定义资源中引用的模板字段来协调
ClusterInstance自定义资源。 - SiteConfig 操作器验证并呈现安装清单,然后 Operator 会执行空运行。
- 如果空运行成功,则创建清单,然后底层 Operator 会消耗并处理清单。
- 安装开始。
-
SiteConfig 操作员持续监视关联的
ClusterDeployment资源的变化,并相应地更新ClusterInstance自定义资源的状态字段。
3.2. 安装模板概述 复制链接链接已复制到粘贴板!
安装模板是用来生成安装工件集合的数据驱动的模板。这些模板采用 Golang 文本/模板格式,并使用来自 ClusterInstance 自定义资源的数据进行实例化。这可为每个具有类似配置但具有不同值的每个目标集群动态创建安装清单。
您还可以根据不同的安装方法或集群拓扑创建多个集合。SiteConfig operator 支持以下类型的安装模板:
- cluster_level
- 只能引用特定于集群的字段的模板。
- 节点级别
- 可引用特定于集群和特定于节点的字段的模板。
有关安装模板的更多信息,请参阅以下文档:
3.2.1. 模板功能 复制链接链接已复制到粘贴板!
您可以自定义模板字段。SiteConfig 操作符支持Sprig 库中的所有函数。
另外,ClusterInstance API 提供了在创建自定义清单时可以使用以下功能:
toYamltoYaml函数将项目编码为 YAML 字符串。如果项目无法转换为 YAML,则函数会返回空字符串。请参阅以下
ClusterInstance.Spec.Proxy字段中的.toYaml规格示例:
{{ if .Spec.Proxy }}
proxy:
{{ .Spec.Proxy | toYaml | indent 4 }}
{{ end }}
3.2.2. 默认模板集合 复制链接链接已复制到粘贴板!
SiteConfig operator 在安装 Operator 的同一命名空间中提供以下默认、验证和不可变模板集合:
| 安装方法 | 模板类型 | 文件名 | 模板内容 |
|---|---|---|---|
| 支持的安装程序 | 集群级别模板 |
|
|
| 节点级别模板 |
|
| |
| Image Based Install Operator | 集群级别模板 |
|
|
| 节点级别模板 |
|
|
有关ClusterInstance API 的更多信息,请参阅ClusterInstance API 。
3.2.3. 特殊模板变量 复制链接链接已复制到粘贴板!
SiteConfig operator 提供了一组可在模板中使用的特殊模板变量。请参见以下列表:
CurrentNode- SiteConfig operator 明确控制节点对象的迭代,并公开此变量来访问模板中处理的当前节点的所有内容。
InstallConfigOverrides-
包含合并的
networkType、cpuPartitioningMode和installConfigOverrides内容。 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 操作员创建或更新清单,则AgentClusterInstall和ClusterDeployment自定义资源将在第一波中进行协调,而KlusterletAddonConfig和ManagedCluster自定义资源将在第三波中进行协调:
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 删除资源,KlusterletAddonConfig 和 ManagedCluster 自定义资源是第一个被删除,而 AgentClusterInstall 和 ClusterDeployment 自定义资源是最后一个。
3.2.5. 配置额外注解和标签 复制链接链接已复制到粘贴板!
您可以使用 ClusterInstance API 中的 extraAnnotations 和 extraLabels 字段为集群级别和节点级别的安装清单配置额外的注解和标签。SiteConfig Operator 将额外注解和标签应用到您在 ClusterInstance 资源中指定的清单。
在创建额外的注解和标签时,您必须指定清单类型,以允许 SiteConfig 操作器将它们应用到所有匹配的清单。但是,注解和标签是任意的,您可以设置对应用程序有意义的任何键值对。
注: 附加注解和标签只适用于通过引用模板呈现的资源。
查看以下 extraAnnotations 和 extraLabels 应用程序示例:
apiVersion: siteconfig.open-cluster-management.io/v1alpha1
kind: ClusterInstance
metadata:
name: "example-sno"
namespace: "example-sno"
spec:
[...]
clusterName: "example-sno"
extraAnnotations:
ClusterDeployment:
myClusterAnnotation: success
extraLabels:
ManagedCluster:
common: "true"
group-du: ""
nodes:
- hostName: "example-sno.example.redhat.com"
role: "master"
extraAnnotations:
BareMetalHost:
myNodeAnnotation: success
extraLabels:
BareMetalHost:
"testExtraLabel": "success"
您可以运行以下命令来验证您的附加标签是否已应用:
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。完成以下步骤:
运行以下命令,设置与
MultiClusterHuboperator 的命名空间匹配的环境变量:export MCH_NAMESPACE=<namespace>运行以下命令,在
Multiclusterhub资源中的spec.overrides.components的siteconfig条目中将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}}]'在 hub 集群中运行以下命令来验证 SiteConfig operator 是否已启用:
oc -n ${MCH_NAMESPACE} get po | grep siteconfig请参见以下示例输出:
siteconfig-controller-manager-6fdd86cc64-sdg87 2/2 Running 0 43s可选: 在 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 的基于镜像的安装。
4.1. 使用 SiteConfig Operator 安装单节点 OpenShift 集群 复制链接链接已复制到粘贴板!
使用默认安装模板使用 SiteConfig operator 安装集群。使用 Image-Based Install Operator 的安装模板完成此步骤。
需要的访问权限:集群管理员
4.1.1. 先决条件 复制链接链接已复制到粘贴板!
- 如果使用 GitOps ZTP,请配置 GitOps ZTP 环境。要配置环境,请参阅为 GitOps ZTP 准备 hub 集群。
- 您有默认安装模板。要熟悉默认模板,请参阅 默认设置模板
安装和配置您选择的底层操作器。
- 要了解并安装用于单节点 OpenShift 的镜像安装 Operator,请参阅 Image Based Install Operator。
- 要安装 Assisted Installer,请参阅使用 Assisted Installer 安装内部集群。
完成以下步骤,使用 SiteConfig operator 安装集群:
4.1.2. 创建目标命名空间 复制链接链接已复制到粘贴板!
在创建 pull secret、BMC secret、额外清单 ConfigMap 对象和 ClusterInstance 自定义资源时,您需要一个目标命名空间。
完成以下步骤以创建目标命名空间:
为目标命名空间创建 YAML 文件。请参阅以下名为
clusterinstance-namespace.yaml的示例文件:apiVersion: v1 kind: Namespace metadata: name: example-sno应用您的文件以创建资源。在 hub 集群中运行以下命令:
oc apply -f clusterinstance-namespace.yaml
4.1.3. 创建 pull secret 复制链接链接已复制到粘贴板!
您需要 pull secret 才能使集群从容器 registry 中拉取镜像。完成以下步骤以创建 pull secret:
创建 YAML 文件以拉取镜像。请参阅以下名为
pull-secret.yaml的文件示例:apiVersion: v1 kind: Secret metadata: name: pull-secret namespace: example-sno1 data: .dockerconfigjson: <encoded_docker_configuration>2 type: kubernetes.io/dockerconfigjson应用该文件以创建资源。在 hub 集群中运行以下命令:
oc apply -f pull-secret.yaml
4.1.4. 创建 BMC secret 复制链接链接已复制到粘贴板!
您需要一个 secret 来连接到基板管理控制器(BMC)。完成以下步骤以创建存储桶。
为 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值与目标命名空间匹配。
应用该文件以创建资源。在 hub 集群中运行以下命令:
oc apply -f example-bmc-secret.yaml
4.1.5. 可选:创建额外的清单 复制链接链接已复制到粘贴板!
您可以创建在 ClusterInstance 自定义资源中引用的额外清单。完成以下步骤以创建额外的清单:
为额外的清单
ConfigMap对象创建 YAML 文件,如enable-crun.yaml:apiVersion: v1 kind: ConfigMap metadata: name: enable-crun namespace: example-sno1 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值与目标命名空间匹配。
在 hub 集群中运行以下命令来创建资源:
oc apply -f enable-crun.yaml
4.1.6. 渲染安装清单 复制链接链接已复制到粘贴板!
引用 ClusterInstance 自定义资源中的模板和支持清单。完成以下步骤,使用默认集群和节点模板呈现安装清单:
在
example-sno命名空间中,在以下示例中创建名为clusterinstance-ibi.yaml的ClusterInstance自定义资源: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 的命名空间匹配。
运行以下命令应用该文件并创建资源:
oc apply -f clusterinstance-ibi.yaml创建自定义资源后,SiteConfig operator 开始协调
ClusterInstance自定义资源,然后验证并呈现安装清单。SiteConfig operator 继续监控
ClusterDeployment自定义资源中的更改,以更新相应ClusterInstance自定义资源的集群安装进度。运行以下命令监控进程:
oc get clusterinstance <cluster_name> -n <target_namespace> -o yaml有关成功生成清单,请参阅
status.conditions部分中的以下示例输出:message: Applied site config manifests reason: Completed status: "True" type: RenderedTemplatesApplied运行以下命令,检查 SiteConfig operator 呈现的清单:
oc get clusterinstance <cluster_name> -n <target_namespace> -o jsonpath='{.status.manifestsRendered}'
如需有关状态条件的更多信息,请参阅 ClusterInstance API。
4.2. 使用 SiteConfig operator 取消置备单节点 OpenShift 集群 复制链接链接已复制到粘贴板!
使用 SiteConfig operator 取消置备集群,以删除与该集群关联的所有资源和访问。
需要的访问权限:集群管理员
4.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 使用默认安装模板使用 SiteConfig operator 部署集群。
4.2.2. 取消置备单节点 OpenShift 集群 复制链接链接已复制到粘贴板!
完成以下步骤以删除集群:
运行以下命令来删除
ClusterInstance自定义资源:oc delete clusterinstance <cluster_name> -n <target_namespace>运行以下命令验证删除是否成功:
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 创建自定义模板 复制链接链接已复制到粘贴板!
创建在默认模板集合中未提供的用户定义模板。
需要的访问权限:集群管理员
在创建自定义模板中完成以下步骤:
创建名为
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注解控制创建、更新或删除清单的顺序。
运行以下命令,在 hub 集群中应用自定义模板:
oc apply -f my-custom-secret.yaml在名为
clusterinstance-my-custom-secret.yaml的ClusterInstance自定义资源中引用您的模板:spec: ... templateRefs: - name: ai-cluster-templates-v1.yaml namespace: rhacm - name: my-custom-secret.yaml namespace: rhacm ...运行以下命令来应用
ClusterInstance自定义资源:oc apply -f clusterinstance-my-custom-secret.yaml
4.3.2. 使用 SiteConfig operator 在单节点 OpenShift 集群中扩展 复制链接链接已复制到粘贴板!
在由 SiteConfig operator 安装的受管集群中扩展。您可以通过删除 worker 节点来在集群中扩展。
需要的访问权限:集群管理员
4.3.2.1. 先决条件 复制链接链接已复制到粘贴板!
- 如果使用 GitOps ZTP,请配置了 GitOps ZTP 环境。要配置环境,请参阅为 GitOps ZTP 准备 hub 集群。
- 您有默认模板。要熟悉默认模板,请参阅 默认设置模板
- 已使用 SiteConfig operator 安装集群。要使用 SiteConfig operator 安装集群,请参阅使用 SiteConfig operator 安装单节点 OpenShift 集群
-
您已将
spec.clusterType设置为"SNO"。
4.3.2.2. 为 worker 节点添加注解 复制链接链接已复制到粘贴板!
向 worker 节点添加注解以进行移除。
完成以下步骤,从受管集群注解 worker 节点:
在用于置备集群的
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" ...应用更改。设置以下选项:
如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:
oc apply -f <clusterinstance>.yaml- 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
在 hub 集群中运行以下命令来验证注解是否已应用到
BaremetalHostworker 资源: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 节点:
使用以下配置更新要在现有
ClusterInstance自定义资源中删除的节点对象:... spec: ... nodes: - hostName: "worker-node2.example.com" ... pruneManifests: - apiVersion: metal3.io/v1alpha1 kind: BareMetalHost ...应用更改。设置以下选项:
如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:
oc apply -f <clusterinstance>.yaml- 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
在 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在 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在受管集群中运行以下命令来验证
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-
成功删除工作节点的
BareMetalHost对象后,从ClusterInstance资源中的spec.nodes部分中删除关联的工作节点定义。
4.3.3. 使用 SiteConfig operator 扩展单节点 OpenShift 集群 复制链接链接已复制到粘贴板!
扩展由 SiteConfig operator 安装的受管集群。您可以通过添加 worker 节点来扩展集群。
需要的访问权限:集群管理员
4.3.3.1. 先决条件 复制链接链接已复制到粘贴板!
- 如果使用 GitOps ZTP,则已配置了 GitOps ZTP 环境。要配置环境,请参阅为 GitOps ZTP 准备 hub 集群。
- 您有默认安装模板。要熟悉默认模板,请参阅 默认设置模板。
- 已使用 SiteConfig operator 安装集群。要使用 SiteConfig operator 安装集群,请参阅使用 SiteConfig operator 安装单节点 OpenShift 集群。
-
您已将
spec.clusterType设置为"SNO"。
4.3.3.2. 添加 worker 节点 复制链接链接已复制到粘贴板!
通过更新用于置备集群的 ClusterInstance 自定义资源来添加 worker 节点。
完成以下步骤,将 worker 节点添加到受管集群:
在现有
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>" ...应用更改。设置以下选项:
- 如果您在没有 Red Hat OpenShift GitOps 的情况下使用 Red Hat Advanced Cluster Management,请在 hub 集群中运行以下命令:
oc apply -f <clusterinstance>.yaml- 如果使用 GitOps ZTP,请推送到 Git 存储库并等待 Argo CD 同步更改。
在 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在 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在受管集群中运行以下命令来验证是否已添加新
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自定义资源中提供镜像作为额外清单。
需要的访问权限:集群管理员
完成以下步骤来为断开连接的环境镜像:
为您的
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资源。在 hub 集群中运行以下命令来创建资源:
oc apply -f idms-configmap.yaml在
ClusterInstance自定义资源中引用您的ImageDigestMirrorSet对象:apiVersion: siteconfig.open-cluster-management.io/v1alpha1 kind: ClusterInstance metadata: name: "example-sno" namespace: "example-sno" spec: ... extraManifestsRefs: - name: idms-configmap ...
4.3.5. 使用 SiteConfig 操作员重新安装集群(技术预览) 复制链接链接已复制到粘贴板!
SiteConfig 操作员通过ClusterInstance API 简化 OpenShift 集群重新安装,同时保留关键配置数据。
通过与 GitOps 兼容的声明式方法,用户可以通过更新ClusterInstance资源来开始重新安装。该操作员还包括中心端Secret和ConfigMap资源的备份和恢复机制,确保基本集群数据(例如身份验证凭据和配置资源)保持完整。
4.3.5.1. 集群身份保存 复制链接链接已复制到粘贴板!
集群重新安装支持单节点 OpenShift 集群和多节点 OpenShift 集群。但是,仅使用基于映像的安装配置方法安装的单节点 OpenShift 集群支持集群身份保存。
有关基于映像的安装的更多信息,请参阅基于映像的单节点 OpenShift 安装。
4.3.5.2. 集群重新安装工作流程 复制链接链接已复制到粘贴板!
请参阅集群重新安装工作流程的以下步骤:
- 标记资源以便保存。如果您不想保留资源,这是可选的。您可以在启动集群重新安装之前标记您的资源。
- 启动集群重新安装。
- 监控重新安装进度并验证重新安装的集群是否可用。这是可选的。
4.3.5.3. 资源标签保存 复制链接链接已复制到粘贴板!
如果您希望在重新安装后保留必要的集群配置数据,SiteConfig 操作员为ClusterInstance命名空间内的中心端Secret和ConfigMap资源提供了备份和恢复机制。
您可以通过在ClusterInstance资源中设置preservationMode并向资源添加适当的保存标签来控制数据保存。有以下保存模式可供选择:
| 保存模式 | 行为 | 使用方法 | 标签要求 |
|---|---|---|---|
|
|
|
如果重装集群时不需要保留数据,请选择 | None |
|
|
与 |
如果您想保留标记的资源(如果有),请选择 |
添加 |
|
|
仅备份与 |
如果您希望操作员验证您是否标记了至少一个资源,请选择 |
添加 |
您可以在开始重新安装之前标记您的资源。
4.3.5.4. 集群重装监控 复制链接链接已复制到粘贴板!
重新安装分为两个阶段:
- 第 1 阶段 - 重新安装请求处理
- 请求验证:SiteConfig 操作员验证请求。
- 数据保存:SiteConfig 操作员备份标记的资源。
-
清理:SiteConfig 操作员删除现有的安装清单。如果此步骤超时,重新安装将停止并且
ClusterInstance资源将暂停。 - 数据恢复:SiteConfig 操作员恢复保存的数据。
- 第 2 阶段 - 集群配置
- 清单再生:SiteConfig 操作员从模板生成新的清单。
- 集群安装:使用新的清单配置集群。
您可以分别在status.reinstall.conditions和status.conditions字段中跟踪第 1 阶段和第 2 阶段的进度。为了跟踪集群重新安装进度,SiteConfig 操作员提供了以下状态条件:
| 状况 | 描述 | 原因 |
|
| 指示重新安装请求的总体状态。 |
|
|
| 确认重新安装请求的有效性。 |
|
|
| 跟踪已保存数据的备份状态。 |
|
|
| 确定集群身份数据是否可供保存。 |
|
|
|
监控与 |
|
|
| 跟踪保存数据的恢复状态。 |
|
status.reinstall字段通过以下字段提供有关重新安装过程的更多信息:
-
InProgressGeneration:标识正在处理以重新安装的活动生成。 -
ObservedGeneration:指示最后成功处理的重新安装请求。 -
RequestStartTime:表示发起重新安装请求的时间。 -
RequestEndTime:表示重新安装过程完成的时间。 -
历史记录:显示过去的重新安装尝试,包括生成详细信息、时间戳和ClusterInstance资源的规范更改。
4.3.6. 使用 SiteConfig 操作员重新安装集群(技术预览) 复制链接链接已复制到粘贴板!
使用 SiteConfig 操作员重新安装您的集群。启用重新安装后,您可以定义所需的保存模式,并在适用的情况下标记您的资源。
需要的访问权限:集群管理员
完成以下步骤来重新安装集群:
4.3.6.1. 启用集群重新安装 复制链接链接已复制到粘贴板!
您必须在siteconfig-operator-configuration ConfigMap资源中明确启用集群重新安装,您可以在启动该过程之前完成此操作。默认情况下,重新安装是禁用的。
完成以下步骤:
设置
NAMESPACE环境变量以匹配安装 SiteConfig 操作员的命名空间。运行以下命令:NAMESPACE=<namespace>通过运行以下命令来验证当前配置:
oc get configmap siteconfig-operator-configuration -n $NAMESPACE -o yaml输出示例:
apiVersion: v1 kind: ConfigMap metadata: name: siteconfig-operator-configuration namespace: <namespace>1 data: allowReinstalls: false2 ...注意:操作员持续监控
siteconfig-operator-configurationConfigMap资源的变化。要启用集群重新安装,请通过将
data.allowReinstalls字段设置为true来更新ConfigMap资源。运行以下命令:oc patch configmap siteconfig-operator-configuration \ -n $NAMESPACE \ --type=json \ -p '[{"op": "replace", "path": "/data/allowReinstalls", "value": "true"}]'运行以下命令验证更新:
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资源。
修改
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”是有效值。可选:定义
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对象。-
应用更改。设置以下选项:
- 如果您使用的是 OpenShift GitOps ZTP,请推送到您的 Git 存储库并等待 Argo CD 同步更改。
- 要手动应用更改,请在中心集群上运行以下命令:
oc apply -f clusterinstance-example.yaml
4.3.6.4. 监控集群重新安装 复制链接链接已复制到粘贴板!
您可以监控集群重新安装进度。完成以下步骤:
验证重新安装请求是否正在处理:
oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRequestProcessed")'请参见以下示例输出:
{ "type": "ReinstallRequestProcessed" "reason": "InProgress", "status": "False", ... }验证集群重新安装请求是否成功验证:
oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRequestValidated")'请参见以下示例输出:
{ "type": "ReinstallRequestValidated" "reason": "Completed", "status": "True", ... }可选。如果将
spec.reinstall.preservationMode字段设置为All或ClusterIdentity,请验证集群身份数据是否被保留:oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallPreservationDataBackedup")'请参见以下示例输出:
{ "type": "ReinstallPreservationDataBackedup" "reason": "Completed", "status": "True", ... }可选。如果将
spec.reinstall.preservationMode字段设置为All或ClusterIdentity,请验证是否检测到集群身份数据:oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallClusterIdentityDataDetected")'请参见以下示例输出:
{ "type": "ReinstallClusterIdentityDataDetected" "reason": "DataAvailable", "status": "True", ... }验证安装清单是否已被删除。删除可能需要几分钟才能完成。
oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRenderedManifestsDeleted")'请参见以下示例输出:
{ "type": "ReinstallRenderedManifestsDeleted" "reason": "Completed", "status": "True", ... }可选。如果将
preseservationMode字段设置为All或ClusterIdentity,请验证之前保存的数据是否已恢复:oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallPreservationDataRestored")'请参见以下示例输出:
{ "type": "ReinstallPreservationDataRestored" "reason": "Completed", "status": "True", ... }验证上述步骤后,请确保重新安装请求已成功完成:
oc get clusterinstance clusterinstance-example -n some-namespace -o json | jq -r '.status.reinstall.conditions[] | select(.type=="ReinstallRequestProcessed")'请参见以下示例输出:
{ "type": "ReinstallRequestProcessed" "reason": "Completed", "status": "True", ... }-
通过使用与重新安装的集群关联的
kubeconfig文件运行oc命令来确认集群已成功重新安装并且可以运行。
4.3.7. 使用基于映像的中断/修复程序为单节点 OpenShift 替换硬件(技术预览) 复制链接链接已复制到粘贴板!
基于映像的中断/修复功能利用 SiteConfig 操作员的集群重新安装机制来简化单节点 OpenShift 硬件更换。该功能通过保留集群的原始身份来最大限度地减少停机时间。基于映像的中断/修复功能保留了关键的集群详细信息,包括标识符、加密密钥(如kubeconfig )和身份验证凭据,这使得替换节点能够无缝地承担故障硬件的身份。
基于映像的中断/修复专为使用基于映像的安装方法安装的单节点 OpenShift 集群中的相同硬件替换而设计,它引入了与 GitOps 兼容的声明性 API。用户可以通过单个 Git 提交来启动硬件更换。在 SiteConfig 操作员和基于图像的安装操作员的支持下,基于图像的中断/修复可以使用现有的ClusterInstance自定义资源实现集群重新部署。
借助基于映像的中断/修复,OpenShift 容器平台用户可以获得弹性、自动化和 GitOps 原生解决方案,以便在硬件故障后快速恢复单节点 OpenShift 集群。
4.3.7.1. 基于映像的中断/修复集群重新安装工作流程 复制链接链接已复制到粘贴板!
基于映像的中断/修复工作流程与集群重新安装工作流程类似,但存在某些差异。要熟悉工作流程中的差异,请参阅基于映像的中断/修复集群重新安装工作流程的高级概述:
- 启用 SiteConfig 操作员重新安装服务。
启动集群重新安装。
-
设置
spec.reinstall.preservationMode: "ClusterIdentity"。 -
使用更改后的硬件信息更新
spec.nodes对象。 - 注意:基于图像的安装操作员会自动标记集群身份资源。
-
设置
监控重新安装进度。
- 在集群配置期间,使用安装清单的操作员使用新生成的清单来配置集群。
- 注意:基于映像的安装操作员检测保留的集群身份数据并将其合并到配置 ISO 映像中。
验证集群是否已配置且可用。
-
使用与故障硬件关联的
kubeconfig访问重新安装的辐射集群。
-
使用与故障硬件关联的
有关详细信息,请参阅使用 SiteConfig 操作员重新安装集群(技术预览版)。
4.3.7.2. 先决条件 复制链接链接已复制到粘贴板!
- 该集群是使用基于映像的安装配置方法安装的单节点 OpenShift 集群。
- 故障硬件被具有相同规格的新节点替换。
4.3.7.3. 启动基于映像的中断/修复集群重新安装 复制链接链接已复制到粘贴板!
要启动基于映像的中断/修复集群重新安装,请通过设置spec.reinstall.generation字段并使用更改的硬件信息更新spec.nodes对象来更新ClusterInstance资源。
修改
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> ... ...应用更改。设置以下选项:
- 如果您使用的是 OpenShift GitOps ZTP,请推送到您的 Git 存储库并等待 Argo CD 同步更改。
- 要手动应用更改,请在中心集群上运行以下命令:
oc apply -f clusterinstance-example.yaml