×

您可以通过将集群配置为管理集群来部署托管控制平面。管理集群是托管控制平面的OpenShift Container Platform集群。在某些情况下,管理集群也称为*托管*集群。

管理集群与托管集群并非同一概念。托管集群是指由中心集群管理的集群。

托管控制平面功能默认启用。

多集群引擎 Operator 只支持默认的 local-cluster(一个受管理的中心集群)和作为管理集群的中心集群。如果您已安装 Red Hat Advanced Cluster Management,则可以使用托管中心集群(也称为 local-cluster)作为管理集群。

托管集群 是一个 OpenShift Container Platform 集群,其 API 端点和控制平面托管在管理集群上。托管集群包含控制平面及其相应的数据平面。您可以使用多集群引擎 Operator 控制台或托管控制平面命令行界面 hcp 创建托管集群。

托管集群会自动导入为托管集群。如果您想禁用此自动导入功能,请参见禁用将托管集群自动导入多集群引擎 Operator

准备在裸机上部署托管控制平面

准备在裸机上部署托管控制平面时,请考虑以下信息:

  • 对于托管控制平面,请在同一平台上运行管理集群和工作节点。

  • 所有裸机主机都需要使用中央基础设施管理提供的 Discovery Image ISO 进行手动启动。您可以手动启动主机,也可以通过使用 Cluster-Baremetal-Operator 进行自动化启动。每个主机启动后,都会运行一个 Agent 进程来发现主机详细信息并完成安装。一个 Agent 自定义资源代表每个主机。

  • 配置托管控制平面的存储时,请考虑推荐的 etcd 实践。为确保满足延迟要求,请将快速存储设备专用于在每个控制平面节点上运行的所有托管控制平面 etcd 实例。您可以使用 LVM 存储为托管 etcd pod 配置本地存储类。有关更多信息,请参见“推荐的 etcd 实践”和“使用逻辑卷管理器存储的持久性存储”。

配置管理集群的先决条件

  • 您需要在 OpenShift Container Platform 集群上安装 Kubernetes Operator 2.2 或更高版本的多集群引擎。您可以从 OpenShift Container Platform OperatorHub 安装多集群引擎 Operator 作为 Operator。

  • 多集群引擎 Operator 必须至少拥有一个托管的 OpenShift Container Platform 集群。local-cluster 在多集群引擎 Operator 2.2 及更高版本中会自动导入。有关 local-cluster 的更多信息,请参见 Red Hat Advanced Cluster Management 文档中的高级配置。您可以运行以下命令检查中心集群的状态:

    $ oc get managedclusters local-cluster
  • 您必须将 topology.kubernetes.io/zone 标签添加到管理集群上的裸机主机。否则,所有托管控制平面 pod 都将调度到单个节点上,从而导致单点故障。

  • 要在裸机上配置托管控制平面,您可以使用 Agent 平台。Agent 平台使用中央基础设施管理服务将工作节点添加到托管集群。有关更多信息,请参见启用中央基础设施管理服务

  • 您需要安装托管控制平面命令行界面。

裸机防火墙、端口和服务要求

您必须满足防火墙、端口和服务要求,以便端口可以在管理集群、控制平面和托管集群之间进行通信。

服务在其默认端口上运行。但是,如果您使用 NodePort 发布策略,则服务将在 NodePort 服务分配的端口上运行。

使用防火墙规则、安全组或其他访问控制来限制仅允许所需来源访问。除非必要,否则避免公开端口。对于生产部署,请使用负载均衡器通过单个 IP 地址简化访问。

如果您的中心集群具有代理配置,请确保它可以通过将所有托管集群 API 端点添加到 Proxy 对象的 noProxy 字段来访问托管集群 API 端点。有关更多信息,请参见“配置集群范围的代理”。

托管控制平面在裸机上公开以下服务:

  • APIServer

    • APIServer 服务默认在 6443 端口上运行,并且需要入口访问才能在控制平面组件之间进行通信。

    • 如果您使用 MetalLB 负载均衡,请允许对用于负载均衡器 IP 地址的 IP 范围进行入口访问。

  • OAuthServer

    • 当您使用路由和入口来公开服务时,OAuthServer 服务默认在 443 端口上运行。

    • 如果您使用 NodePort 发布策略,请为 OAuthServer 服务使用防火墙规则。

  • Konnectivity

    • 当您使用路由和入口来公开服务时,Konnectivity 服务默认在 443 端口上运行。

    • Konnectivity 代理建立反向隧道以允许控制平面访问托管集群的网络。代理使用出口连接到 Konnectivity 服务器。服务器通过在 443 端口上使用路由或手动分配的 NodePort 来公开。

    • 如果集群 API 服务器地址是内部 IP 地址,请允许从工作负载子网访问 6443 端口上的 IP 地址。

    • 如果地址是外部 IP 地址,请允许节点上 6443 端口上的出口到该外部 IP 地址。

  • Ignition

    • 当您使用路由和入口来公开服务时,Ignition 服务默认在 443 端口上运行。

    • 如果您使用 NodePort 发布策略,请为 Ignition 服务使用防火墙规则。

您不需要在裸机上使用以下服务:

  • OVNSbDb

  • OIDC

裸机基础设施要求

Agent 平台不创建任何基础设施,但对基础设施有以下要求:

  • Agent:Agent 代表一个使用 discovery image 启动并准备作为 OpenShift Container Platform 节点进行配置的主机。

  • DNS:API 和入口端点必须可路由。

裸机上的 DNS 配置

托管集群的 API 服务器作为 NodePort 服务公开。必须存在指向 API 服务器可访问位置的 api.<hosted_cluster_name>.<base_domain> 的 DNS 条目。

DNS 条目可以很简单,只是一个指向运行托管控制平面的管理集群中一个节点的记录。该条目也可以指向部署的负载均衡器,以将传入流量重定向到入口 pod。

DNS 配置示例
api.example.krnl.es.    IN A 192.168.122.20
api.example.krnl.es.    IN A 192.168.122.21
api.example.krnl.es.    IN A 192.168.122.22
api-int.example.krnl.es.    IN A 192.168.122.20
api-int.example.krnl.es.    IN A 192.168.122.21
api-int.example.krnl.es.    IN A 192.168.122.22
`*`.apps.example.krnl.es. IN A 192.168.122.23

如果您正在为 IPv6 网络上的断开连接的环境配置 DNS,则配置如下例所示。

IPv6 网络的示例 DNS 配置
api.example.krnl.es.    IN A 2620:52:0:1306::5
api.example.krnl.es.    IN A 2620:52:0:1306::6
api.example.krnl.es.    IN A 2620:52:0:1306::7
api-int.example.krnl.es.    IN A 2620:52:0:1306::5
api-int.example.krnl.es.    IN A 2620:52:0:1306::6
api-int.example.krnl.es.    IN A 2620:52:0:1306::7
`*`.apps.example.krnl.es. IN A 2620:52:0:1306::10

如果您正在为双栈网络上的断开连接的环境配置 DNS,请务必包含 IPv4 和 IPv6 的 DNS 条目。

双栈网络的示例 DNS 配置
host-record=api-int.hub-dual.dns.base.domain.name,192.168.126.10
host-record=api.hub-dual.dns.base.domain.name,192.168.126.10
address=/apps.hub-dual.dns.base.domain.name/192.168.126.11
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,192.168.126.20
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,192.168.126.21
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,192.168.126.22
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,192.168.126.25
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,192.168.126.26

host-record=api-int.hub-dual.dns.base.domain.name,2620:52:0:1306::2
host-record=api.hub-dual.dns.base.domain.name,2620:52:0:1306::2
address=/apps.hub-dual.dns.base.domain.name/2620:52:0:1306::3
dhcp-host=aa:aa:aa:aa:10:01,ocp-master-0,[2620:52:0:1306::5]
dhcp-host=aa:aa:aa:aa:10:02,ocp-master-1,[2620:52:0:1306::6]
dhcp-host=aa:aa:aa:aa:10:03,ocp-master-2,[2620:52:0:1306::7]
dhcp-host=aa:aa:aa:aa:10:06,ocp-installer,[2620:52:0:1306::8]
dhcp-host=aa:aa:aa:aa:10:07,ocp-bootstrap,[2620:52:0:1306::9]

在裸机上创建托管集群

使用 Agent 平台创建托管集群时,HyperShift 会在托管控制平面命名空间中安装 Agent Cluster API 提供程序。您可以在裸机上创建托管集群或导入一个集群。

创建托管集群时,请记住以下准则

  • 每个托管集群必须具有集群范围内的唯一名称。为了让多集群引擎 Operator 进行管理,托管集群名称不能与任何现有的托管集群名称相同。

  • 不要使用 clusters 作为托管集群名称。

  • 无法在多集群引擎 Operator 管理的集群的命名空间中创建托管集群。

  • 最常见的服务发布策略是通过负载均衡器公开服务。该策略是公开 Kubernetes API 服务器的首选方法。如果您使用 Web 控制台或 Red Hat Advanced Cluster Management 创建托管集群,要为 Kubernetes API 服务器以外的服务设置发布策略,则必须在 HostedCluster 自定义资源中手动指定 servicePublishingStrategy 信息。

步骤
  1. 输入以下命令创建托管控制平面命名空间

    $ oc create ns <hosted_cluster_namespace>-<hosted_cluster_name>

    <hosted_cluster_namespace> 替换为您的托管集群命名空间名称,例如 clusters。将 <hosted_cluster_name> 替换为您的托管集群名称。

  2. 验证您是否已为集群配置了默认存储类。否则,您可能会看到挂起的 PVC。运行以下命令

    $ hcp create cluster agent \
        --name=<hosted_cluster_name> \(1)
        --pull-secret=<path_to_pull_secret> \(2)
        --agent-namespace=<hosted_control_plane_namespace> \(3)
        --base-domain=<basedomain> \(4)
        --api-server-address=api.<hosted_cluster_name>.<basedomain> \(5)
        --etcd-storage-class=<etcd_storage_class> \(6)
        --ssh-key  <path_to_ssh_public_key> \(7)
        --namespace <hosted_cluster_namespace> \(8)
        --control-plane-availability-policy HighlyAvailable \(9)
        --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image> (10)
    1 指定您的托管集群名称,例如 example
    2 指定您的拉取密钥路径,例如 /user/name/pullsecret
    3 指定您的托管控制平面命名空间,例如 clusters-example。使用 oc get agent -n <hosted_control_plane_namespace> 命令确保代理在此命名空间中可用。
    4 指定您的基础域名,例如 krnl.es
    5 --api-server-address 标志定义用于托管集群中 Kubernetes API 通信的 IP 地址。如果您没有设置 --api-server-address 标志,则必须登录才能连接到管理集群。
    6 指定 etcd 存储类名称,例如 lvm-storageclass
    7 指定您的 SSH 公钥路径。默认文件路径为 ~/.ssh/id_rsa.pub
    8 指定您的托管集群命名空间。
    9 指定托管控制平面组件的可用性策略。支持的选项为 SingleReplicaHighlyAvailable。默认值为 HighlyAvailable
    10 指定要使用的受支持的 OpenShift Container Platform 版本,例如 4.17.0-multi。如果您使用的是断开连接的环境,请将 <ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发布镜像摘要,请参见《提取 OpenShift Container Platform 发布镜像摘要》。
  3. 片刻之后,输入以下命令验证您的托管控制平面 Pod 是否正在运行

    $ oc -n <hosted_control_plane_namespace> get pods
    示例输出
    NAME                                             READY   STATUS    RESTARTS   AGE
    capi-provider-7dcf5fc4c4-nr9sq                   1/1     Running   0          4m32s
    catalog-operator-6cd867cc7-phb2q                 2/2     Running   0          2m50s
    certified-operators-catalog-884c756c4-zdt64      1/1     Running   0          2m51s
    cluster-api-f75d86f8c-56wfz                      1/1     Running   0          4m32s

使用控制台在裸机上创建托管集群

要使用控制台创建托管集群,请完成以下步骤。

步骤
  1. 打开 OpenShift Container Platform Web 控制台,并输入您的管理员凭据登录。有关打开控制台的说明,请参见《访问 Web 控制台》。

  2. 在控制台标题中,确保已选择**所有集群**。

  3. 单击**基础设施→集群**。

  4. 单击**创建集群→主机清单→托管控制平面**。

    将显示**创建集群**页面。

  5. 在**创建集群**页面上,按照提示输入有关集群、节点池、网络和自动化的详细信息。

    输入集群详细信息时,您可能会发现以下提示很有用

    • 如果您想使用预定义的值来自动填充控制台中的字段,您可以创建一个主机清单凭据。有关更多信息,请参见《为本地环境创建凭据》。

    • 在**集群详细信息**页面上,拉取密钥是您用于访问 OpenShift Container Platform 资源的 OpenShift Container Platform 拉取密钥。如果您选择了主机清单凭据,则会自动填充拉取密钥。

    • 在**节点池**页面上,命名空间包含节点池的主机。如果您使用控制台创建了主机清单,则控制台会创建一个专用的命名空间。

    • 在**网络**页面上,您选择 API 服务器发布策略。托管集群的 API 服务器可以使用现有的负载均衡器或作为 NodePort 类型的服务公开。必须存在指向 API 服务器可访问的目标的 api.<hosted_cluster_name>.<base_domain> 设置的 DNS 条目。此条目可以是一个指向管理集群中一个节点的记录,也可以是一个将传入流量重定向到 Ingress Pod 的负载均衡器的记录。

  6. 查看您的条目并单击**创建**。

    将显示**托管集群**视图。

  7. 在**托管集群**视图中监控托管集群的部署。

  8. 如果您没有看到有关托管集群的信息,请确保已选择**所有集群**,然后单击集群名称。

  9. 等待控制平面组件准备就绪。此过程可能需要几分钟。

  10. 要查看节点池状态,请滚动到**NodePool** 部分。安装节点的过程大约需要 10 分钟。您也可以单击**节点**以确认节点是否已加入托管集群。

后续步骤

使用镜像注册表在裸机上创建托管集群

您可以使用镜像注册表在裸机上创建托管集群,方法是在 hcp create cluster 命令中指定 --image-content-sources 标志。

步骤
  1. 创建一个 YAML 文件来定义镜像内容源策略 (ICSP)。请参见以下示例

    - mirrors:
      - brew.registry.redhat.io
      source: registry.redhat.io
    - mirrors:
      - brew.registry.redhat.io
      source: registry.stage.redhat.io
    - mirrors:
      - brew.registry.redhat.io
      source: registry-proxy.engineering.redhat.com
  2. 将文件保存为 icsp.yaml。此文件包含您的镜像注册表。

  3. 要使用镜像注册表创建托管集群,请运行以下命令

    $ hcp create cluster agent \
        --name=<hosted_cluster_name> \(1)
        --pull-secret=<path_to_pull_secret> \(2)
        --agent-namespace=<hosted_control_plane_namespace> \(3)
        --base-domain=<basedomain> \(4)
        --api-server-address=api.<hosted_cluster_name>.<basedomain> \(5)
        --image-content-sources icsp.yaml  \(6)
        --ssh-key  <path_to_ssh_key> \(7)
        --namespace <hosted_cluster_namespace> \(8)
        --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release_image> (9)
    1 指定您的托管集群名称,例如 example
    2 指定您的拉取密钥路径,例如 /user/name/pullsecret
    3 指定您的托管控制平面命名空间,例如 clusters-example。使用 oc get agent -n <hosted-control-plane-namespace> 命令确保代理在此命名空间中可用。
    4 指定您的基础域名,例如 krnl.es
    5 --api-server-address 标志定义用于托管集群中 Kubernetes API 通信的 IP 地址。如果您没有设置 --api-server-address 标志,则必须登录才能连接到管理集群。
    6 指定定义 ICSP 和镜像注册表的 icsp.yaml 文件。
    7 指定您的 SSH 公钥路径。默认文件路径为 ~/.ssh/id_rsa.pub
    8 指定您的托管集群命名空间。
    9 指定要使用的受支持的 OpenShift Container Platform 版本,例如 4.17.0-multi。如果您使用的是断开连接的环境,请将 <ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发布镜像摘要,请参见《提取 OpenShift Container Platform 发布镜像摘要》。
后续步骤

验证托管集群创建

部署过程完成后,您可以验证托管集群是否已成功创建。创建托管集群几分钟后,请按照以下步骤操作。

步骤
  1. 通过输入以下提取命令获取新托管集群的 kubeconfig

    $ oc extract -n <hosted-control-plane-namespace> secret/admin-kubeconfig --to=- > kubeconfig-<hosted-cluster-name>
  2. 使用 kubeconfig 查看托管集群的集群操作符。输入以下命令:

    $ oc get co --kubeconfig=kubeconfig-<hosted-cluster-name>
    示例输出
    NAME                                       VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    console                                    4.10.26   True        False         False      2m38s
    dns                                        4.10.26   True        False         False      2m52s
    image-registry                             4.10.26   True        False         False      2m8s
    ingress                                    4.10.26   True        False         False      22m
  3. 您也可以通过输入以下命令查看托管集群上正在运行的 Pod:

    $ oc get pods -A --kubeconfig=kubeconfig-<hosted-cluster-name>
    示例输出
    NAMESPACE                                          NAME                                                      READY   STATUS             RESTARTS        AGE
    kube-system                                        konnectivity-agent-khlqv                                  0/1     Running            0               3m52s
    openshift-cluster-node-tuning-operator             tuned-dhw5p                                               1/1     Running            0               109s
    openshift-cluster-storage-operator                 cluster-storage-operator-5f784969f5-vwzgz                 1/1     Running            1 (113s ago)    20m
    openshift-cluster-storage-operator                 csi-snapshot-controller-6b7687b7d9-7nrfw                  1/1     Running            0               3m8s
    openshift-console                                  console-5cbf6c7969-6gk6z                                  1/1     Running            0               119s
    openshift-console                                  downloads-7bcd756565-6wj5j                                1/1     Running            0               4m3s
    openshift-dns-operator                             dns-operator-77d755cd8c-xjfbn                             2/2     Running            0               21m
    openshift-dns                                      dns-default-kfqnh                                         2/2     Running            0               113s