4.2. 在裸机上部署托管的 control plane


您可以通过将集群配置为充当管理集群来部署托管的 control plane。管理集群是托管 control plane 的 OpenShift Container Platform 集群。在某些上下文中,管理集群也称为托管集群。

注意

受管集群与受管集群不同。受管集群是 hub 集群管理的集群。

托管的 control plane 功能默认启用。

multicluster engine Operator 只支持默认的 local-cluster,它是管理的 hub 集群,而 hub 集群作为管理集群。如果安装了 Red Hat Advanced Cluster Management,您可以使用受管 hub 集群(也称为 local-cluster )作为管理集群。

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

托管的集群自动导入为受管集群。如果要禁用此自动导入功能,请参阅禁用将托管集群自动导入到多集群引擎 Operator 中

4.2.1. 准备在裸机上部署托管的 control plane

当您准备在裸机上部署托管 control plane 时,请考虑以下信息:

  • 在托管 control plane 的同一平台上运行 hub 集群和 worker。
  • 所有裸机主机都需要手动从中央基础架构管理提供的发现镜像 ISO 开始。您可以使用 Cluster-Baremetal-Operator 手动启动主机或通过自动化来启动主机。每个主机启动后,它会运行一个代理进程来发现主机详情并完成安装。Agent 自定义资源代表每个主机。
  • 当您为托管 control plane 配置存储时,请考虑推荐的 etcd 实践。要确保您满足延迟要求,请将快速存储设备专用于每个 control-plane 节点上运行的所有托管 control plane etcd 实例。您可以使用 LVM 存储为托管的 etcd pod 配置本地存储类。如需更多信息,请参阅 Recommended etcd practicesPersistent storage using logical volume manager storage

4.2.1.1. 配置管理集群的先决条件

  • 您需要为 Kubernetes Operator 2.2 及之后的版本安装在 OpenShift Container Platform 集群上的多集群引擎。您可以从 OpenShift Container Platform OperatorHub 将 multicluster engine Operator 安装为 Operator。
  • multicluster engine Operator 必须至少有一个受管 OpenShift Container Platform 集群。local-cluster 在多集群引擎 Operator 2.2 及更高版本中自动导入。有关 local-cluster 的更多信息,请参阅 Red Hat Advanced Cluster Management 中的高级配置部分。您可以运行以下命令来检查 hub 集群的状态:

    $ oc get managedclusters local-cluster
  • 您必须将 topology.kubernetes.io/zone 标签添加到管理集群中的裸机主机中。否则,所有托管的 control plane pod 都调度到单一节点上,从而导致单点故障。
  • 要在裸机上置备托管的 control plane,您可以使用 Agent 平台。Agent 平台使用中央基础架构管理服务将 worker 节点添加到托管的集群中。如需更多信息,请参阅启用中央基础架构管理服务
  • 您需要安装托管的 control plane 命令行界面。

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

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

注意

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

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

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

托管 control plane 在裸机上公开以下服务:

  • APIServer

    • APIServer 服务默认在端口 6443 上运行,需要入口访问 control plane 组件之间的通信。
    • 如果使用 MetalLB 负载均衡,允许入口访问用于负载均衡器 IP 地址的 IP 范围。
  • OAuthServer

    • 当使用路由和入口来公开服务时,OAuthServer 服务默认在端口 443 上运行。
    • 如果使用 NodePort 发布策略,请为 OAuthServer 服务使用防火墙规则。
  • Konnectivity

    • 当使用路由和入口来公开服务时,Konnectivity 服务默认在端口 443 上运行。
    • Konnectity 代理建立一个反向隧道,允许 control plane 访问托管集群的网络。代理使用出口连接到 Konnectivity 服务器。服务器通过使用端口 443 上的路由或手动分配的 NodePort 来公开。
    • 如果集群 API 服务器地址是一个内部 IP 地址,允许从工作负载子网访问端口 6443 上的 IP 地址。
    • 如果地址是一个外部 IP 地址,允许从节点通过端口 6443 出口到该外部 IP 地址。
  • Ignition

    • 当使用路由和入口来公开服务时,Ignition 服务默认在端口 443 上运行。
    • 如果使用 NodePort 发布策略,请为 Ignition 服务使用防火墙规则。

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

  • OVNSbDb
  • OIDC

4.2.1.3. 裸机基础架构要求

Agent 平台不会创建任何基础架构,但它对基础架构有以下要求:

  • 代理 : 代理 代表使用发现镜像引导的主机,并准备好置备为 OpenShift Container Platform 节点。
  • DNS :API 和入口端点必须可以被路由。

4.2.2. 裸机上的 DNS 配置

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

DNS 条目可以是一个简单的记录,指向运行托管 control plane 的受管集群中的一个节点。该条目也可以指向部署的负载均衡器,将传入的流量重定向到入口 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 配置示例

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]

4.2.3. 在裸机上创建托管集群

当使用 Agent 平台创建托管集群时,Hyper HyperShift 会在托管的 control plane 命名空间中安装 Agent Cluster API 供应商。您可以在裸机上创建托管集群或导入一个集群。

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

  • 每个托管集群都必须具有集群范围的唯一名称。托管的集群名称不能与任何现有的受管集群相同,以便多集群引擎 Operator 可以管理它。
  • 不要使用 clusters 作为托管的集群名称。
  • 无法在多集群引擎 Operator 受管集群的命名空间中创建托管集群。

流程

  1. 输入以下命令来创建托管的 control plane 命名空间:

    $ 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
    指定 pull secret 的路径,例如 /user/name/pullsecret
    3
    指定托管的 control plane 命名空间,如 cluster-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
    control plane 可用性策略的默认值为 HighlyAvailable
    10
    指定您要使用的 OpenShift Container Platform 版本,如 4.17.0-multi。如果您使用断开连接的环境,将 <ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发行镜像摘要,请参阅 提取 OpenShift Container Platform 发行镜像摘要
  3. 片刻后,输入以下命令验证托管 control plane 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

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

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

流程

  1. 打开 OpenShift Container Platform Web 控制台,并输入您的管理员凭证登录。有关打开控制台的说明,请参阅访问 Web 控制台
  2. 在控制台标头中,确保选择了 All Clusters
  3. Infrastructure Clusters
  4. Create cluster Host inventory Hosted control plane

    此时会显示 Create cluster 页。

  5. Create cluster 页中,按照提示输入集群、节点池、网络和自动化的详细信息。

    注意

    在输入集群详情时,您可能会发现以下提示很有用:

    • 如果要使用预定义的值来自动填充控制台中的字段,您可以创建主机清单凭证。如需更多信息,请参阅为内部环境创建凭证
    • Cluster details 页中,pull secret 是用于访问 OpenShift Container Platform 资源的 OpenShift Container Platform pull secret。如果您选择了主机清单凭证,则会自动填充 pull secret。
    • Node pool 页中,命名空间包含节点池的主机。如果使用控制台创建主机清单,控制台会创建一个专用命名空间。
    • Networking 页上,您可以选择 API 服务器发布策略。托管集群的 API 服务器可以通过使用现有负载均衡器或 NodePort 类型的服务公开。必须存在 api.<hosted_cluster_name>.<base_domain> 的 DNS 条目,指向可以访问 API 服务器的目标。此条目可以是指向管理集群中某一节点的记录,也可以是指向将传入流量重定向到 Ingress pod 的负载均衡器的记录。
  6. 检查您的条目并点 Create

    此时会显示 Hosted 集群视图。

  7. 托管集群视图中监控托管集群的部署。
  8. 如果您没有看到托管集群的信息,请确保选择了 All Clusters,然后点集群名称。
  9. 等待 control plane 组件就绪。这个过程可能需要几分钟时间。
  10. 要查看节点池状态,请滚动到 NodePool 部分。安装节点的过程需要大约 10 分钟。您还可以点 Nodes 来确认节点是否加入托管集群。

后续步骤

4.2.3.2. 使用镜像 registry 在裸机上创建托管集群

您可以通过在 hcp create cluster 命令中指定 --image-content-sources 标志,来使用镜像 registry 在裸机上创建托管集群。

流程

  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。此文件包含您的镜像 registry。
  3. 要使用您的镜像 registry 创建托管集群,请运行以下命令:

    $ 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
    指定 pull secret 的路径,例如 /user/name/pullsecret
    3
    指定托管的 control plane 命名空间,如 cluster-example。使用 oc get agent -n <hosted-control-plane-namespace> 命令,确保此在命名空间中有可用的代理。
    4
    指定您的基域,如 krnl.es
    5
    --api-server-address 标志定义用于托管集群中的 Kubernetes API 通信的 IP 地址。如果没有设置 --api-server-address 标志,您必须登录以连接到管理集群。
    6
    指定定义 ICSP 和您的镜像 registry 的 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 发行镜像摘要

后续步骤

4.2.4. 验证托管集群创建

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

流程

  1. 输入 extract 命令,获取新的托管集群的 kubeconfig :

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

    $ 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.