4.4. 在非裸机代理机器上部署托管的 control plane


您可以通过将集群配置为充当托管集群来部署托管 control plane。托管的集群是一个托管 control plane 的 OpenShift Container Platform 集群。托管集群也称为管理集群。

重要

在非裸机代理机器上托管 control plane 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围

注意

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

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

multicluster engine Operator 只支持默认的 local-cluster 受管集群。在 Red Hat Advanced Cluster Management (RHACM) 2.10 上,您可以使用 local-cluster 管理的 hub 集群作为托管集群。

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

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

4.4.1. 准备在非裸机代理机器上部署托管的 control plane

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

  • 您可以使用 Agent 平台将代理机器作为 worker 节点添加到托管集群。代理机器表示使用 Discovery 镜像引导的主机,并准备好置备为 OpenShift Container Platform 节点。Agent 平台是中央基础架构管理服务的一部分。如需更多信息 ,请参阅启用中央基础架构管理服务
  • 不是裸机的所有主机都需要通过中央基础架构管理提供的发现镜像 ISO 进行手动引导。
  • 当您扩展节点池时,会为每个副本创建一个机器。对于每个机器,Cluster API 供应商会找到并安装已批准的代理,通过验证(验证)当前没有被使用,并满足节点池规格中指定的要求。您可以通过检查其状态和条件来监控代理的安装。
  • 当您缩减节点池时,代理会从对应的集群绑定。在重复使用代理前,您必须使用 Discovery 镜像重启它们。
  • 当您为托管 control plane 配置存储时,请考虑推荐的 etcd 实践。要确保您满足延迟要求,请将快速存储设备专用于每个 control-plane 节点上运行的所有托管 control plane etcd 实例。您可以使用 LVM 存储为托管的 etcd pod 配置本地存储类。如需更多信息,请参阅 OpenShift Container Platform 文档中的"推荐 etcd 实践"和"使用逻辑卷管理器存储的持久性存储"。

4.4.1.1. 在非裸机代理机器上部署托管 control plane 的先决条件

在非裸机代理机器上部署托管 control plane 前,您必须查看以下先决条件:

  • 您需要为 Kubernetes Operator 2.5 及之后的版本安装了 multicluster engine for OpenShift Container Platform 集群。安装 Red Hat Advanced Cluster Management (RHACM) 时会自动安装 multicluster engine Operator。您还可以在没有 RHACM 的情况下从 OpenShift Container Platform OperatorHub 安装 multicluster engine Operator。
  • 至少有一个受管 OpenShift Container Platform 集群用于多集群引擎 Operator。local-cluster 受管 hub 集群会自动导入。有关 local-cluster 的更多信息,请参阅高级配置。您可以运行以下命令来检查 hub 集群的状态:

    $ oc get managedclusters local-cluster
  • 启用了中央基础架构管理。如需更多信息 ,请参阅启用中央基础架构管理服务
  • 已安装 hcp 命令行界面。
  • 托管集群具有集群范围的唯一名称。托管的集群名称不能与任何现有的受管集群相同,以便多集群引擎 Operator 管理它。
  • 您可以在托管 control plane 的同一平台上运行 hub 集群和 worker。

4.4.1.2. 非裸机代理机器的防火墙、端口和服务要求

确保满足防火墙和端口要求,以便端口可以在管理集群、control plane 和托管的集群间进行通信:

注意

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

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

托管 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.4.1.3. 非裸机代理机器的基础架构要求

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

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

4.4.2. 在非裸机代理机器上配置 DNS

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

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

  • 如果您要为 IPv4 网络上的连接的环境配置 DNS,请查看以下 DNS 配置示例:

    api-int.example.krnl.es.    IN A 192.168.122.22
    `*`.apps.example.krnl.es.   IN A 192.168.122.23
  • 如果您要为 IPv6 网络上的断开连接的环境配置 DNS,请查看以下 DNS 配置示例:

    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,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]

4.4.3. 使用 CLI 在非裸机代理机器上创建托管集群

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

在创建托管集群时,请查看以下准则:

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

流程

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

    $ oc create ns <hosted_cluster_namespace>-<hosted_cluster_name> 1
    1
    <hosted_cluster_namespace> 替换为托管集群命名空间名称,如 clusters。将 <hosted_cluster_name> 替换为托管集群的名称。
  2. 输入以下命令创建托管集群:

    $ 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_key> \7
      --namespace <hosted_cluster_namespace> \8
      --control-plane-availability-policy HighlyAvailable \9
      --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release> 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
    验证您是否为集群配置了默认存储类。否则,您可能会使用待处理的 PVC 结束。指定 etcd 存储类名称,如 lvm-storageclass
    7
    指定 SSH 公钥的路径。默认文件路径为 ~/.ssh/id_rsa.pub
    8
    指定托管集群命名空间。
    9
    control plane 可用性策略的默认值为 HighlyAvailable
    10
    指定您要使用的 OpenShift Container Platform 版本,如 4.17.0-multi

验证

  • 片刻后,输入以下命令验证托管 control plane pod 是否正在运行:

    $ oc -n <hosted_control_plane_namespace> get pods

    输出示例

    NAME                                             READY   STATUS    RESTARTS   AGE
    catalog-operator-6cd867cc7-phb2q                 2/2     Running   0          2m50s
    control-plane-operator-f6b4c8465-4k5dh           1/1     Running   0          4m32s

4.4.3.1. 使用 Web 控制台在非裸机代理机器上创建托管集群

您可以使用 OpenShift Container Platform Web 控制台在非裸机代理机器上创建托管集群。

先决条件

  • 您可以使用 cluster-admin 权限访问集群。
  • 访问 OpenShift Container Platform web 控制台。

流程

  1. 打开 OpenShift Container Platform 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>.<basedomain> 的 DNS 条目,指向可以访问 API 服务器的目标。此条目可以是指向管理集群中某一节点的记录,也可以是指向将传入流量重定向到 Ingress pod 的负载均衡器的记录。

    1. 检查您的条目并点 Create

    此时会显示 Hosted 集群视图。

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

后续步骤

4.4.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.4.4. 在非裸机代理机器上验证托管集群创建

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

流程

  1. 输入以下命令获取新托管集群的 kubeconfig 文件:

    $ oc extract -n <hosted_cluster_namespace> secret/<hosted_cluster_name>-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
    csi-snapshot-controller                    4.10.26   True        False         False      4m3s
    dns                                        4.10.26   True        False         False      2m52s

  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-samples-operator                 cluster-samples-operator-6b5bcb9dff-kpnbc                 2/2     Running            0               20m
    openshift-monitoring                               alertmanager-main-0                                       6/6     Running            0               100s
    openshift-monitoring                               openshift-state-metrics-677b9fb74f-qqp6g                  3/3     Running            0               104s

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.