1.7. 将目标受管集群导入到 hub 集群
您可以从不同的 Kubernetes 云供应商导入集群。导入后,目标集群就成为 Red Hat Advanced Cluster Management for Kubernetes hub 集群的受管集群。除非另有指定,否则在可以访问 hub 集群和目标受管集群的任意位置完成导入任务。
hub 集群无法管理任何其他 hub 集群,但可以管理自己。hub 集群被配置为自动导入和自助管理。您不需要手动导入 hub 集群。
但是,如果您删除 hub 集群并尝试再次导入它,则需要添加 local-cluster:true
标签。
从以下说明中进行选择以通过控制台或 CLI 设置受管集群:
所需的用户类型或访问权限级别:集群管理员
1.7.1. 使用控制台导入现有集群
安装 Red Hat Advanced Cluster Management for Kubernetes 后,就可以导入集群来进行管理。您可以从控制台和 CLI 导入。
按照以下步骤从控制台导入。在此过程中,您需要通过终端来进行身份验证。
1.7.1.1. 先决条件
- 您需要一个已部署的 Red Hat Advanced Cluster Management for Kubernetes hub 集群。如果要导入裸机集群,则必须在 Red Hat OpenShift Container Platform 版本 4.8 或更高版本上安装了 hub 集群。
- 您需要一个要管理的集群,以及互联网连接。
-
安装
kubectl
。要安装kubectl
,请参阅 Kubernetes 文档中的安装和设置 kubectl。 -
您需要
base64
命令行工具。 注: 如果要导入不是由 OpenShift Container Platform 创建的集群,则需要定义
multiclusterhub.spec.imagePullSecret
。安装 Red Hat Advanced Cluster Management 时可能会创建此 secret。如果您需要创建新服务,请完成以下步骤:
- 从 cloud.redhat.com 下载 Kubernetes pull secret。
- 将 pull secret 添加到 hub 集群的命名空间。
运行以下命令,在 hub 集群的命名空间中创建新 secret:
oc create secret generic pull-secret -n <open-cluster-management> --from-file=.dockerconfigjson=<path-to-pull-secret> --type=kubernetes.io/dockerconfigjson
将
open-cluster-management
替换为 hub 集群的命名空间的名称。hub 集群的默认命名空间是open-cluster-management
。将
path-to-pull-secret
替换为您下载的 pull secret 的路径。在导入时,secret 会自动复制到受管集群。
如需了解更多与 pull secret 相关的信息,请参阅使用镜像 pull secret 或了解并创建服务帐户。
如需有关如何定义此 secret 的更多信息,请参阅自定义镜像 pull secret。
-
确保您要导入的集群中已删除代理。必须删除
open-cluster-management-agent
和open-cluster-management-agent-addon
命名空间以避免错误。 有关在 Red Hat OpenShift Dedicated 环境中导入,请参阅以下备注:
- 您必须在 Red Hat OpenShift Dedicated 环境中部署了 hub 集群。
-
Red Hat OpenShift Dedicated 的默认权限是 dedicated-admin,但不包含创建命名空间的所有权限。您必须具有
cluster-admin
权限才能使用 Red Hat Advanced Cluster Management for Kubernetes 导入和管理集群。
所需的用户类型或访问权限级别:集群管理员
1.7.1.2. 导入集群
您可以从 Red Hat Advanced Cluster Management for Kubernetes 控制台中为每个可用的云供应商导入现有集群。
注: hub 集群无法管理不同的 hub 集群。hub 集群被设置为自动导入和管理自身,因此您不必手动导入 hub 集群来管理自己。
- 在导航菜单中选择 Infrastructure > Clusters。
- 在 Managed cluster 选项卡中,点 Import cluster。
- 为集群提供名称。默认情况下,命名空间用于集群名称和命名空间。
重要: 当您创建集群时,Red Hat Advanced Cluster Management 控制器为集群及其资源创建一个命名空间。确保只在该命名空间中包含该集群实例的资源。销毁集群会删除命名空间和所有资源。
如果要将其添加到现有集群集 中,请指定 Cluster set,则指定具有
cluster-admin
权限的现有集群集。如果在创建集群时没有cluster-admin
权限,则必须选择一个具有clusterset-admin
权限的集群集。如果您在指定的集群集中没有正确的权限,集群创建会失败。如果没有要选择的集群设置选项,请联系集群管理员,为集群集提供clusterset-admin
权限。每个受管集群都必须与受管集群集关联。如果您没有将受管集群分配给
ManagedClusterSet
,则会自动添加到default
受管集群集中。可选: 添加任何 附加标签。
注: 如果您导入 Red Hat OpenShift Dedicated 集群,且没有添加
vendor=OpenShiftDedicated
标签指定一个厂商,或者添加了vendor=auto-detect
标签,则managed-by=platform
标签会自动添加到集群中。您可以使用此添加标签将集群标识为一个 Red Hat OpenShift Dedicated 集群,并作为一个组来获取 Red Hat OpenShift Dedicated 集群。选择您要用来标识从以下选项导入的集群的导入模式 :
手动运行导入命令:根据您提供的信息生成可复制和运行的导入命令。点 Save import and generate code 生成用于部署
open-cluster-management-agent-addon
的命令。此时会显示确认信息。在 Import an existing cluster 窗口中,选择 Copy 命令将生成的命令和令牌复制到剪贴板。
重要:命令中包含复制到每个导入集群的 pull secret 信息。具有访问导入集群权限的所有用户都可以查看 pull secret 信息。考虑在 https://cloud.redhat.com/ 创建一个二级 pull secret,或创建一个服务帐户来保护个人凭证。
- 登录到您要导入的受管集群。
对于 Red Hat OpenShift Dedicated 环境:完成以下步骤:
-
创建
open-cluster-management-agent
和open-cluster-management
命名空间或受管集群上的项目。 - 在 OpenShift Container Platform 目录中找到 klusterlet Operator。
在
open-cluster-management
命名空间中或您创建的项目中安装它。重要: 不要在
open-cluster-management-agent
命名空间中安装 Operator。通过完成以下步骤,从导入命令中提取 bootstrap secret:
生成导入命令:
- 从 Red Hat Advanced Cluster Management 控制台主导航中选择 Infrastructure > Clusters。
- 选择 Add a cluster > Import an existing cluster。
- 添加集群信息,选择 Save import and generate code。
- 复制导入命令。
-
将导入命令粘贴到您创建的名为
import-command
的文件中。 运行以下命令以将内容插入新文件中:
cat import-command | awk '{split($0,a,"&&"); print a[3]}' | awk '{split($0,a,"|"); print a[1]}' | sed -e "s/^ echo //" | base64 -d
-
在输出中找到并复制名为
bootstrap-hub-kubeconfig
的 secret。 -
将 secret 应用到受管集群上的
open-cluster-management-agent
命名空间。 使用安装的 Operator 中的示例创建 klusterlet 资源,clusterName 应该与导入过程中设置的集群名称相同。
注: 当
managedcluster
资源在 hub 中成功注册时,会安装两个 klusterlet operator。一个 klusterlet operator 位于open-cluster-management
命名空间中,另一个位于open-cluster-management-agent
命名空间中。多个 operator 并不会影响 klusterlet 的功能。
-
创建
对于不在 Red Hat OpenShift Dedicated 环境中的集群导入,请完成以下步骤:
如有必要,为您的受管集群配置
kubectl
命令。请参阅支持的供应商以了解如何配置
kubectl
命令行界面。-
要将
open-cluster-management-agen-addon
部署到受管集群,请运行您复制的命令和令牌。
- 选择 View cluster 在 Overview 页面中查看集群概述。
- 为现有集群输入服务器 URL 和 API 令牌 :提供您要导入的集群的服务器 URL 和 API 令牌。
-
kubeconfig :复制并粘贴您要导入的集群
kubeconfig
文件的内容。
可选: 在集群详情页中配置 Cluster API address,它为运行
oc get managedcluster
命令时在表中显示的 URL。-
使用具有
cluster-admin
权限的 ID 登录到 hub 集群。 为目标受管集群配置
kubectl
。请参阅支持的供应商了解如何配置
kubectl
。输入以下命令编辑您要导入的集群的受管集群条目:
oc edit managedcluster <cluster-name>
使用受管集群的名称替换
cluster-name
。在 YAML 文件中的
ManagedCluster
spec 中添加ManagedClusterClientConfigs
,如下例所示:spec: hubAcceptsClient: true managedClusterClientConfigs: - url: https://multicloud-console.apps.new-managed.dev.redhat.com
将 URL 值替换为提供对您要导入的受管集群的外部访问的 URL。
-
使用具有
集群已导入。您可以选择 Import another 来导入另一个。
1.7.1.3. 删除导入的集群
完成以下步骤以删除导入的集群以及在受管集群上创建的 open-cluster-management-agent-addon
。
在 Clusters 页面上,点 Actions > Detach cluster 从管理中删除集群。
注意: 如果您试图分离名为 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 集群的值,使其不会自动导入。如需更多信息,请参阅 disableHubSelfManagement 主题。
1.7.2. 使用 CLI 导入受管集群
安装 Red Hat Advanced Cluster Management for Kubernetes 后,就可以使用 Red Hat OpenShift Container Platform CLI 导入集群来管理。您可以使用您要导入的集群的 kubeconfig
文件导入集群,也可以在要导入的集群中手动运行导入命令。这两个流程都已被记录在文档中。
重要: hub 集群无法管理不同的 hub 集群。hub 集群被设置为自动导入并管理自己。您不必手动导入 hub 集群来自己管理。
但是,如果您删除 hub 集群并尝试再次导入它,则需要添加 local-cluster:true
标签。
1.7.2.1. 先决条件
- 您需要一个已部署的 Red Hat Advanced Cluster Management for Kubernetes hub 集群。如果要导入裸机集群,则必须在 Red Hat OpenShift Container Platform 版本 4.6 或更高版本上安装了 hub 集群。
- 您需要一个需要管理的独立集群,且具有互联网连接。
-
您需要 Red Hat OpenShift Container Platform CLI 版本 4.6 或更高版本来运行
oc
命令。如需有关安装和配置 Red Hat OpenShift Container Platform CLIoc
的信息,请参阅 OpenShift CLI 入门。 您需要安装 Kubernetes CLI
kubectl
。要安装kubectl
,请参阅 Kubernetes 文档中的安装和设置 kubectl。注: 通过控制台下载 CLI 工具的安装文件。
-
如果您导入不是由 OpenShift Container Platform 创建的集群,则需要定义一个
multiclusterhub.spec.imagePullSecret
。安装 Red Hat Advanced Cluster Management for Kubernetes 时可能已创建此 secret。如需有关定义 secret 的更多信息,请参阅自定义 Image Pull Secret。
1.7.2.2. 支持的构架
- Linux (x86_64, s390x, ppc64le)
- macOS
1.7.2.3. 准备导入
运行以下命令登录到您的 hub 集群 :
oc login
在 hub 集群中运行以下命令以创建项目和命名空间: 请注意:
CLUSTER_NAME
中定义的集群名称也用作 YAML 文件和命令中的集群命名空间:oc new-project ${CLUSTER_NAME}
重要:
cluster.open-cluster-management.io/managedCluster
标签会自动添加到受管集群命名空间中并从中删除。不要手动将其添加到受管集群或从受管集群中删除。使用以下示例内容,创建一个名为
managed-cluster.yaml
的文件:apiVersion: cluster.open-cluster-management.io/v1 kind: ManagedCluster metadata: name: ${CLUSTER_NAME} labels: cloud: auto-detect vendor: auto-detect spec: hubAcceptsClient: true
当
cloud
和vendor
的值被设置为auto-detect
时,Red Hat Advanced Cluster Management 会检测您要导入的集群的云和厂商类型。您可以选择将auto-detect
的值替换为集群的 cloud 和 vendor 值。请参见以下示例:cloud: Amazon vendor: OpenShift
输入以下命令将 YAML 文件应用到
ManagedCluster
资源:oc apply -f managed-cluster.yaml
使用自动导入 secret 或使用手动命令导入集群继续导入集群。
1.7.2.4. 使用自动导入 secret 导入集群
要使用自动导入 secret,您必须创建一个 secret,其中包含集群的 kubeconfig
文件或 kube API 服务器和集群的令牌对。
-
检索您要导入的集群的
kubeconfig
文件或 kube API 服务器和令牌。请参阅 Kubernetes 集群的文档,了解在哪里可以找到您的kubeconfig
文件或 kube API 服务器和令牌。 在 ${CLUSTER_NAME} 命名空间中创建
auto-import-secret.yaml
文件。创建名为
auto-import-secret.yaml
的 YAML 文件,其中包含类似以下模板的内容:apiVersion: v1 kind: Secret metadata: name: auto-import-secret namespace: <cluster_name> stringData: autoImportRetry: "5" # If you are using the kubeconfig file, add the following value for the kubeconfig file # that has the current context set to the cluster to import: kubeconfig: |- <kubeconfig_file> # If you are using the token/server pair, add the following two values instead of # the kubeconfig file: token: <Token to access the cluster> server: <cluster_api_url> type: Opaque
使用以下命令应用 ${CLUSTER_NAME} 命名空间中的 YAML 文件:
oc apply -f auto-import-secret.yaml
注:默认情况下,自动导入 secret 只使用一次,在导入过程完成后会被删除。如果要保留自动导入 secret,请将
managedcluster-import-controller.open-cluster-management.io/keeping-auto-import-secret
添加到 secret。您可以运行以下命令来添加它:
oc -n <cluster_name> annotate secrets auto-import-secret managedcluster-import-controller.open-cluster-management.io/keeping-auto-import-secret=""
验证您的导入集群的
JOINED
和AVAILABLE
状态。在 hub 集群中运行以下命令:oc get managedcluster ${CLUSTER_NAME}
在受管集群中运行以下命令来登录到受管集群:
oc login
运行以下命令,以验证您要导入的集群中的 pod 状态:
oc get pod -n open-cluster-management-agent
1.7.2.5. 使用手动命令导入集群
重要: 导入命令包含复制到每个导入集群的 pull secret 信息。具有访问导入集群权限的所有用户都可以查看 pull secret 信息。
运行以下命令,获取由导入控制器在 hub 集群上生成的
klusterlet-crd.yaml
文件:oc get secret ${CLUSTER_NAME}-import -n ${CLUSTER_NAME} -o jsonpath={.data.crds\\.yaml} | base64 --decode > klusterlet-crd.yaml
运行以下命令,获取导入控制器在 hub 集群上生成的
import.yaml
文件:oc get secret ${CLUSTER_NAME}-import -n ${CLUSTER_NAME} -o jsonpath={.data.import\\.yaml} | base64 --decode > import.yaml
在要导入的集群中执行以下步骤:
输入以下命令登录到您导入的受管集群:
oc login
运行以下命令应用您在第 1 步中生成的
klusterlet-crd.yaml
:oc apply -f klusterlet-crd.yaml
运行以下命令应用您之前生成的
import.yaml
文件:oc apply -f import.yaml
验证您要导入的集群的
JOINED
和AVAILABLE
状态。在 hub 集群中运行以下命令:oc get managedcluster ${CLUSTER_NAME}
1.7.2.6. 导入 klusterlet 附加组件
您可以通过完成以下步骤来创建并应用 klusterlet 附加组件配置文件:
创建一个类似以下示例的 YAML 文件:
apiVersion: agent.open-cluster-management.io/v1 kind: KlusterletAddonConfig metadata: name: <cluster_name> namespace: <cluster_name> spec: applicationManager: enabled: true certPolicyController: enabled: true iamPolicyController: enabled: true policyController: enabled: true searchCollector: enabled: true
-
将文件保存为
klusterlet-addon-config.yaml
。 运行以下命令来应用 YAML:
oc apply -f klusterlet-addon-config.yaml
ManagedCluster-Import-Controller 将生成一个名为
${CLUSTER_NAME}-import
的 secret。${CLUSTER_NAME}-import
secret 包括import.yaml
,用户会把它应用到一个受管集群来安装 klusterlet.附加组件安装在您导入的集群后为
AVAILABLE
。运行以下命令,验证您要导入的集群上附加组件的 pod 状态:
oc get pod -n open-cluster-management-agent-addon
集群现已导入。
1.7.2.7. 使用 CLI 删除导入的集群
要删除集群,请运行以下命令:
oc delete managedcluster ${CLUSTER_NAME}
将 cluster_name
替换为集群的名称。
您的集群现已被删除。
1.7.3. 使用自定义 ManagedClusterImageRegistry CRD 导入集群
有时您可能需要覆盖您要导入的受管集群中的镜像 registry。您可以通过创建一个 ManagedClusterImageRegistry
自定义资源定义(CRD)来完成此操作。
ManagedClusterImageRegistry
CRD 是一个命名空间范围的资源。
ManagedClusterImageRegistry
CRD 为要选择的放置指定一组受管集群,但需要与自定义镜像 registry 不同的镜像。使用新镜像更新受管集群后,会在每个受管集群中添加以下标签进行识别: open-cluster-management.io/image-registry=<namespace>.<managedClusterImageRegistryName>
。
以下示例显示了 ManagedClusterImageRegistry
CRD:
apiVersion: imageregistry.open-cluster-management.io/v1alpha1 kind: ManagedClusterImageRegistry metadata: name: <imageRegistryName> namespace: <namespace> spec: placementRef: group: cluster.open-cluster-management.io resource: placements name: <placementName> pullSecret: name: <pullSecretName> registries: - mirror: <mirrored-image-registry-address> source: <image-registry-address> - mirror: <mirrored-image-registry-address> source: <image-registry-address>
在 spec
部分中:
-
将
placementName
替换为选择一组受管集群的放置名称。 -
将
pullSecretName
替换为用于从自定义镜像 registry 中拉取镜像的 pull secret 名称。 列出每个
source
和mirror
registry 的值。将mirrored-image-registry-address
和image-registry-address
替换为每个 registry 的mirror
和source
的值。示例 1:要将名为
registry.redhat.io/rhacm2
的源 registry 替换为localhost:5000/rhacm2
,并将registry.redhat.io/multicluster-engine
替换为localhost:5000/multicluster-engine
,请使用以下示例:registries: - mirror: localhost:5000/rhacm2/ source: registry.redhat.io/rhacm2 - mirror: localhost:5000/multicluster-engine source: registry.redhat.io/multicluster-engine
示例 2: 要将源镜像
registry.redhat.io/rhacm2/registration-rhel8-operator
替换为localhost:5000/rhacm2-registration-rhel8-operator
,请使用以下示例:registries: - mirror: localhost:5000/rhacm2-registration-rhel8-operator source: registry.redhat.io/rhacm2/registration-rhel8-operator
1.7.3.1. 使用 ManagedClusterImageRegistry CRD 导入集群
完成以下步骤,使用 ManagedClusterImageRegistry CRD 导入集群:
在您要导入集群的命名空间中创建 pull secret。对于这些步骤,是
myNamespace
。$ kubectl create secret docker-registry myPullSecret \ --docker-server=<your-registry-server> \ --docker-username=<my-name> \ --docker-password=<my-password>
在您创建的命名空间中创建一个放置。
apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: name: myPlacement namespace: myNamespace spec: clusterSets: - myClusterSet tolerations: - key: "cluster.open-cluster-management.io/unreachable" operator: Exists
注: 需要
unreachable
容限才能使配置来选择集群。创建一个
ManagedClusterSet
资源,并将其绑定到命名空间。apiVersion: cluster.open-cluster-management.io/v1beta1 kind: ManagedClusterSet metadata: name: myClusterSet --- apiVersion: cluster.open-cluster-management.io/v1beta1 kind: ManagedClusterSetBinding metadata: name: myClusterSet namespace: myNamespace spec: clusterSet: myClusterSet
在命名空间中创建
ManagedClusterImageRegistry
CRD。apiVersion: imageregistry.open-cluster-management.io/v1alpha1 kind: ManagedClusterImageRegistry metadata: name: myImageRegistry namespace: myNamespace spec: placementRef: group: cluster.open-cluster-management.io resource: placements name: myPlacement pullSecret: name: myPullSecret registry: myRegistryAddress
- 从 Red Hat Advanced Cluster Management 控制台导入受管集群,并将其添加到受管集群集中。
-
在标签
open-cluster-management.io/image-registry=myNamespace.myImageRegistry
添加到受管集群后,在受管集群中复制并运行导入命令。
1.7.4. 修改集群的 klusterlet 附加组件设置
您可以使用 hub 集群修改 KlusterletAddonConfig
的设置,以更改您的配置。
KlusterletAddonConfig
控制器根据 klusterletaddonconfigs.agent.open-cluster-management.io
Kubernetes 资源中的设置管理启用和禁用的功能。查看以下 KlusterletAddonConfig
示例:
apiVersion: agent.open-cluster-management.io/v1 kind: KlusterletAddonConfig metadata: name: <cluster-name> namespace: <cluster-name> spec: clusterName: <cluster-name> clusterNamespace: <cluster-name> clusterLabels: cloud: auto-detect vendor: auto-detect applicationManager: enabled: true certPolicyController: enabled: true iamPolicyController: enabled: true policyController: enabled: true searchCollector: enabled: false version: 2.5.0
1.7.4.1. klusterlet 附加组件设置描述
以下设置可以在 klusterletaddonconfigs.agent.open-cluster-management.io
Kubernetes 资源中更新:
设置名称 | 值 | 描述 |
---|---|---|
applicationmanager |
| 此控制器在受管集群中管理应用程序订阅生命周期。 |
certPolicyController |
| 此控制器在受管集群中强制实施基于证书的策略。 |
iamPolicyController |
| 此控制器在受管集群上强制实施基于 IAM 的策略生命周期。 |
policyController |
| 此控制器在受管集群上强制执行所有其他策略规则。 |
searchCollector |
| 此控制器用于定期将资源索引数据推送回 hub 集群。 |
1.7.4.2. 使用 hub 集群中的控制台进行修改
您可以使用 hub 集群修改 klusterletaddonconfigs.agent.open-cluster-management.io
资源设置。完成以下步骤以更改设置:
- 登录到 hub 集群的 Red Hat Advanced Cluster Management for Kubernetes 控制台。
- 在 hub 集群控制台的标头菜单中选择 Search 图标。
-
在搜索参数中输入以下值:
kind:klusterletaddonconfigs
- 选择您要更新的端点资源。
-
找到
spec
部分并选择 Edit 以编辑内容。 - 修改设置。
- 选择 Save 以应用您的更改。
1.7.4.3. 使用 hub 集群中的命令行进行修改
您必须有权访问 cluster-name
命名空间才能使用 hub 集群修改设置。完成以下步骤:
- 登录到 hub 集群。
输入以下命令以编辑资源:
kubectl edit klusterletaddonconfigs.agent.open-cluster-management.io <cluster-name> -n <cluster-name>
-
找到
spec
部分。 - 根据需要修改您的设置。