1.20. 从管理中移除集群

当您从管理中删除通过 Red Hat Advanced Cluster Management for Kubernetes 创建的 OpenShift Container Platform 集群时,您可以将其分离(detach)销毁(destroy)。分离集群会将其从管理中移除,但不会完全删除。如果要管理它,您可以再次导入它。只有集群处于 Ready 状态时方可使用这个选项。

以下流程在以下情况下从管理中删除集群:

  • 您已删除集群,并希望从 Red Hat Advanced Cluster Management 中删除已删除的集群。
  • 您要从管理中删除集群,但还没有删除集群。

重要:

1.20.1. 使用控制台删除集群

在导航菜单中导航到 Infrastructure > Clusters,从您要从管理中删除的集群旁的选项菜单中选择 Destroy clusterDetach cluster

+ 提示: 您可以通过选择要分离或销毁的集群的复选框来分离或销毁多个集群,然后选择 DetachDestroy

注: 如果您在管理的 hub 集群(称为 local-cluster )时尝试分离 hub 集群,请检查 disableHubSelfManagement 的默认设置是否为 false。此设置会导致 hub 集群在分离时重新导入自己并管理自己,并协调 MultiClusterHub 控制器。hub 集群可能需要几小时时间来完成分离过程并重新导入。

要在不需要等待进程完成的情况下重新导入 hub 集群,您可以输入以下命令来重启 multiclusterhub-operator pod 并更快地重新导入:

oc delete po -n open-cluster-management `oc get pod -n open-cluster-management | grep multiclusterhub-operator| cut -d' ' -f1`

您可以通过将 disableHubSelfManagement 值改为 true 来更改 hub 集群的值,如在线安装所述。

1.20.2. 使用命令行删除集群

要使用 hub 集群的命令行分离受管集群,请运行以下命令:

oc delete managedcluster $CLUSTER_NAME

要在分离后删除受管集群,请运行以下命令:

oc delete clusterdeployment <CLUSTER_NAME> -n $CLUSTER_NAME

注意: 如果您试图分离名为 local-cluster 的 hub 集群,请注意 disableHub selfManagement 的默认设置为 false 。此设置会导致 hub 集群在分离时会重新导入自己并管理自己,并协调 MultiClusterHub 控制器。hub 集群可能需要几小时时间来完成分离过程并重新导入。如果要在等待进程完成后重新导入 hub 集群,您可以输入以下命令来重启 multiclusterhub-operator pod 并更快地重新导入:

oc delete po -n open-cluster-management `oc get pod -n open-cluster-management | grep multiclusterhub-operator| cut -d' ' -f1`

您可以通过将 disableHubSelfManagement 值改为 true 来更改 hub 集群的值,如在线安装所述。

1.20.3. 删除集群后删除剩余的资源

如果受管集群上有剩余的资源,则需要额外的步骤以确保删除所有剩余的组件。需要这些额外步骤的情况,包括以下示例:

  • 受管集群在完全创建前会被分离,但 klusterlet 等一些组件会保留在受管集群中。
  • 在分离受管集群前,管理集群的 hub 丢失或销毁,因此无法从 hub 中分离受管集群。
  • 当受管集群被分离后,受管集群将处于非在线状态。

如果其中一个情况适用于您试图分离的受管集群,则有些资源将无法从受管集群中删除。完成以下步骤以分离受管集群:

  1. 确保配置了 oc 命令行界面。
  2. 确保您在受管集群中配置了 KUBECONFIG

    如果运行 oc get ns | grep open-cluster-management-agent,您应该看到两个命名空间:

    open-cluster-management-agent         Active   10m
    open-cluster-management-agent-addon   Active   10m
  3. 运行以下命令以删除剩余的资源:

    oc delete namespaces open-cluster-management-agent open-cluster-management-agent-addon --wait=false
    oc get crds | grep open-cluster-management.io | awk '{print $1}' | xargs oc delete crds --wait=false
    oc get crds | grep open-cluster-management.io | awk '{print $1}' | xargs oc patch crds --type=merge -p '{"metadata":{"finalizers": []}}'
  4. 运行以下命令,以确保命名空间和所有打开的集群管理 crds 均已被删除:

    oc get crds | grep open-cluster-management.io | awk '{print $1}'
    oc get ns | grep open-cluster-management-agent

1.20.4. 删除集群后对 etcd 数据库进行碎片整理

拥有多个受管集群可能会影响 hub 集群中 etcd 数据库的大小。在 OpenShift Container Platform 4.8 中,当删除受管集群时,hub 集群中的 etcd 数据库不会被自动减小。在某些情况下,etcd 数据库可能会耗尽空间。此时会显示一个错误 etcdserver: mvcc: database space exceeded。要更正此错误,请通过压缩数据库历史记录并对 etcd 数据库进行碎片整理来减小 etcd 数据库的大小。

注: 对于 OpenShift Container Platform 版本 4.9 及更新的版本,etcd Operator 会自动清理磁盘并压缩 etcd 历史记录。不需要人工干预。以下流程适用于 OpenShift Container Platform 版本 4.8 及更早版本。

通过完成以下步骤,压缩 etcd 历史记录并整理 hub 集群中 etcd 数据库的碎片。

1.20.4.1. 先决条件

  • 安装 OpenShift CLI(oc)。
  • 以具有 cluster-admin 权限的用户身份登录。

1.20.4.2. 流程

  1. 压缩 etcd 历史记录。

    1. 打开到 etcd 成员的远程 shell 会话,例如:

      $ oc rsh -n openshift-etcd etcd-control-plane-0.example.com etcdctl endpoint status --cluster -w table
    2. 运行以下命令来压缩 etcd 历史记录:

      sh-4.4#etcdctl compact $(etcdctl endpoint status --write-out="json" |  egrep -o '"revision":[0-9]*' | egrep -o '[0-9]*' -m1)

      输出示例

      $ compacted revision 158774421

  2. 清理 etcd 数据库并清除任何 NOSPACE 警报,如分离 etcd 数据 中所述。