4.6. 在 IBM Power 上部署托管的 control plane


您可以通过将集群配置为充当托管集群来部署托管 control plane。此配置为管理许多集群提供了高效且可扩展的解决方案。托管的集群是托管 control plane 的 OpenShift Container Platform 集群。托管集群也称为管理集群。

注意

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

multicluster engine Operator 只支持默认的 local-cluster,它是一个受管 hub 集群,hub 集群作为托管集群。

要在裸机基础架构上置备托管的 control plane,您可以使用 Agent 平台。Agent 平台使用中央基础架构管理服务将计算节点添加到托管集群。如需更多信息,请参阅"启用中央基础架构管理服务"。

您必须使用中央基础架构管理提供的发现镜像启动每个 IBM Power 主机。每个主机启动后,它会运行一个代理进程来发现主机的详细信息并完成安装。Agent 自定义资源代表每个主机。

当使用 Agent 平台创建托管集群时,Hyper HyperShift 会在托管的 control plane 命名空间中安装 Agent Cluster API 供应商。

  • 在 OpenShift Container Platform 集群上安装 Kubernetes Operator 版本 2.7 及更新的版本。安装 Red Hat Advanced Cluster Management (RHACM) 时会自动安装 multicluster engine Operator。您还可以在没有 RHACM 的情况下从 OpenShift Container Platform OperatorHub 安装 multicluster engine Operator。
  • multicluster engine Operator 必须至少有一个受管 OpenShift Container Platform 集群。local-cluster 受管 hub 集群会在 multicluster engine Operator 版本 2.7 及更高版本中自动导入。有关 local-cluster 的更多信息,请参阅 RHACM 文档中的高级配置。您可以运行以下命令来检查 hub 集群的状态:

    $ oc get managedclusters local-cluster
    Copy to Clipboard Toggle word wrap
  • 您需要具有至少 3 个计算节点的托管集群来运行 HyperShift Operator。
  • 您需要启用中央基础架构管理服务。如需更多信息,请参阅"启用中央基础架构管理服务"。
  • 您需要安装托管的 control plane 命令行界面。如需更多信息,请参阅"安装托管的 control plane 命令行界面"。

托管的 control plane 功能默认启用。如果您禁用了这个功能并希望手动启用该功能,请参阅"手动启用托管的 control plane 功能"。如果您需要禁用该功能,请参阅"禁用托管的 control planes 功能"。

4.6.2. IBM Power 基础架构要求

Agent 平台不会创建任何基础架构,但需要以下基础架构资源:

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

4.6.3. IBM Power 上托管的 control plane 的 DNS 配置

集群外的客户端可以访问托管集群的 API 服务器。必须存在 api.<hosted_cluster_name>.<basedomain> 的 DNS 条目,指向可以访问 API 服务器的目标。

DNS 条目可以像一个记录一样简单,该记录指向运行托管 control plane 的受管集群中的一个节点。

该条目也可以指向部署的负载均衡器,将传入的流量重定向到入口 pod。

请参阅以下 DNS 配置示例:

$ cat /var/named/<example.krnl.es.zone>
Copy to Clipboard Toggle word wrap

输出示例

$ TTL 900
@ IN  SOA bastion.example.krnl.es.com. hostmaster.example.krnl.es.com. (
      2019062002
      1D 1H 1W 3H )
  IN NS bastion.example.krnl.es.com.
;
;
api                   IN A 1xx.2x.2xx.1xx 
1

api-int               IN A 1xx.2x.2xx.1xx
;
;
*.apps.<hosted_cluster_name>.<basedomain>           IN A 1xx.2x.2xx.1xx
;
;EOF
Copy to Clipboard Toggle word wrap

1
记录指的是 API 负载均衡器的 IP 地址,用于处理托管 control plane 的入口和出口流量。

对于 IBM Power,添加与代理 IP 地址对应的 IP 地址。

配置示例

compute-0              IN A 1xx.2x.2xx.1yy
compute-1              IN A 1xx.2x.2xx.1yy
Copy to Clipboard Toggle word wrap

4.6.3.1. 定义自定义 DNS 名称

作为集群管理员,您可以使用外部 API DNS 名称创建托管集群,它与用于节点 bootstrap 和 control plane 通信的内部端点不同。您可能需要定义不同的 DNS 名称,理由如下:

  • 要将面向用户的 TLS 证书替换为公共 CA 中的一个,而不破坏绑定到内部 root CA 的 control plane 功能。
  • 支持 split-horizon DNS 和 NAT 场景。
  • 为确保与独立 control plane 类似的体验,您可以使用带有正确的 kubeconfig 和 DNS 配置等功能,如 Show Login Command 功能。

您可以通过在 HostedCluster 对象的 kubeAPIServerDNSName 参数中输入域名,在初始设置或安装后操作期间定义 DNS 名称。

先决条件

  • 您有一个有效的 TLS 证书,用于覆盖 kubeAPIServerDNSName 参数中设置的 DNS 名称。
  • 您有一个可解析的 DNS 名称 URI,可以访问并指向正确的地址。

流程

  • HostedCluster 对象的规格中,添加 kubeAPIServerDNSName 参数和域的地址,并指定要使用的证书,如下例所示:

    #...
    spec:
      configuration:
        apiServer:
          servingCerts:
            namedCertificates:
            - names:
              - xxx.example.com
              - yyy.example.com
              servingCertificate:
                name: <my_serving_certificate>
      kubeAPIServerDNSName: <custom_address> 
    1
    Copy to Clipboard Toggle word wrap
    1
    kubeAPIServerDNSName 参数的值必须是有效且可寻址的域。

在定义了 kubeAPIServerDNSName 参数并指定证书后,Control Plane Operator 控制器会创建一个名为 custom-admin- kubeconfig 的 kubeconfig 文件,其中的文件存储在 HostedControlPlane 命名空间中。证书生成发生自 root CA,而 HostedControlPlane 命名空间则管理其过期和续订。

Control Plane Operator 在 HostedControlPlane 命名空间中报告一个名为 CustomKubeconfig 的新 kubeconfig 文件。该文件使用 kubeAPIServerDNSName 参数中定义的新服务器。

自定义 kubeconfig 文件的引用存在于 status 参数中,作为 HostedCluster 对象的 CustomKubeconfigCustomKubeConfig 参数是可选的,只有在 kubeAPIServerDNSName 参数不为空时才添加该参数。设置 CustomKubeConfig 参数后,参数会在 HostedCluster 命名空间中触发名为 < hosted_cluster_name>-custom-admin-kubeconfig 的 secret 生成。您可以使用 secret 访问 HostedCluster API 服务器。如果在安装后操作过程中删除 CustomKubeConfig 参数,请删除所有相关 secret 和状态引用。

注意

定义自定义 DNS 名称不会影响数据平面,因此不会发生预期的推出部署。HostedControlPlane 命名空间从 HyperShift Operator 接收更改并删除对应的参数。

如果您从 HostedCluster 对象的规格中删除 kubeAPIServerDNSName 参数,则所有新生成的 secret 和 CustomKubeconfig 引用都会从集群中和 status 参数中删除。

4.6.4. 使用 CLI 创建托管集群

在裸机基础架构上,您可以创建或导入托管集群。在为多集群引擎 Operator 启用 Assisted Installer 作为附加组件后,您可以使用 Agent 平台创建一个托管集群,HyperShift Operator 会在托管的 control plane 命名空间中安装 Agent Cluster API 供应商。Agent Cluster API 供应商连接托管 control plane 和一个仅由计算节点组成的托管集群的管理集群。

先决条件

  • 每个托管集群都必须具有集群范围的唯一名称。托管的集群名称都不能与任何现有受管集群相同。否则,多集群引擎 Operator 无法管理托管集群。
  • 不要使用单词 cluster 作为托管的集群名称。
  • 您不能在多集群引擎 Operator 受管集群的命名空间中创建托管集群。
  • 为获得最佳安全性和管理实践,请创建一个与其他托管集群分开的托管集群。
  • 验证您是否为集群配置了默认存储类。否则,您可能会看到待处理的持久性卷声明(PVC)。
  • 默认情况下,当使用 hcp create cluster agent 命令时,命令会创建一个带有配置的节点端口的托管集群。裸机上托管集群的首选发布策略通过负载均衡器公开服务。如果使用 Web 控制台或使用 Red Hat Advanced Cluster Management 创建托管集群,要为 Kubernetes API 服务器以外的服务设置发布策略,您必须在 HostedCluster 自定义资源中手动指定 servicePublishingStrategy 信息。
  • 确保您满足裸机上托管 control plane 的 "Requirements for hosted control plane" 中描述的要求,其中包括与基础架构、防火墙、端口和服务相关的要求。例如,这些要求描述了如何在管理集群中的裸机主机中添加适当的区标签,如下例所示:

    $ oc label node [compute-node-1] topology.kubernetes.io/zone=zone1
    Copy to Clipboard Toggle word wrap
    $ oc label node [compute-node-2] topology.kubernetes.io/zone=zone2
    Copy to Clipboard Toggle word wrap
    $ oc label node [compute-node-3] topology.kubernetes.io/zone=zone3
    Copy to Clipboard Toggle word wrap
  • 确保您已将裸机节点添加到硬件清单中。

流程

  1. 运行以下命令来创建命名空间:

    $ oc create ns <hosted_cluster_namespace>
    Copy to Clipboard Toggle word wrap

    <hosted_cluster_namespace> 替换为托管集群命名空间的标识符。HyperShift Operator 创建命名空间。在裸机基础架构上托管集群创建过程中,生成的 Cluster API 供应商角色需要命名空间已存在。

  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=<base_domain> \
    4
    
      --api-server-address=api.<hosted_cluster_name>.<base_domain> \
    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_image>-multi \
    10
    
      --node-pool-replicas=<node_pool_replica_count> \
    11
    
      --render \
      --render-sensitive \
      --ssh-key <home_directory>/<path_to_ssh_key>/<ssh_key> > hosted-cluster-config.yaml 
    12
    Copy to Clipboard Toggle word wrap
    1
    指定托管集群的名称,
    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 组件的可用性策略。支持的选项包括 SingleReplicaHighlyAvailable。默认值为 HighlyAvailable
    10
    指定您要使用的 OpenShift Container Platform 版本,如 4.19.0-multi。如果您使用断开连接的环境,将 <ocp_release_image> 替换为摘要镜像。要提取 OpenShift Container Platform 发行镜像摘要,请参阅 提取 OpenShift Container Platform 发行镜像摘要
    11
    指定节点池副本数,如 3。您必须将副本数指定为 0 或更高,才能创建相同数量的副本。否则,您不会创建节点池。
    12
    --ssh-key 标志后,指定 SSH 密钥的路径,如 user/.ssh/id_rsa
  3. 配置服务发布策略。默认情况下,托管集群使用 NodePort 服务发布策略,因为节点端口始终在没有额外基础架构的情况下可用。但是,您可以将服务发布策略配置为使用负载均衡器。

    • 如果您使用默认的 NodePort 策略,请将 DNS 配置为指向托管的集群计算节点,而不是管理集群节点。如需更多信息,请参阅"裸机上的 DNS 配置"。
    • 对于生产环境,请使用 LoadBalancer 策略,因为此策略提供证书处理和自动 DNS 解析。以下示例演示了在托管集群配置文件中更改服务发布 LoadBalancer 策略:

      # ...
      spec:
        services:
        - service: APIServer
          servicePublishingStrategy:
            type: LoadBalancer 
      1
      
        - service: Ignition
          servicePublishingStrategy:
            type: Route
        - service: Konnectivity
          servicePublishingStrategy:
            type: Route
        - service: OAuthServer
          servicePublishingStrategy:
            type: Route
        - service: OIDC
          servicePublishingStrategy:
            type: Route
        sshKey:
          name: <ssh_key>
      # ...
      Copy to Clipboard Toggle word wrap
      1
      指定 LoadBalancer 作为 API 服务器类型。对于所有其他服务,将 Route 指定为类型。
  4. 输入以下命令将更改应用到托管集群配置文件:

    $ oc apply -f hosted_cluster_config.yaml
    Copy to Clipboard Toggle word wrap
  5. 输入以下命令检查托管集群、节点池和 pod 的创建:

    $ oc get hostedcluster \
      <hosted_cluster_namespace> -n \
      <hosted_cluster_namespace> -o \
      jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .
    Copy to Clipboard Toggle word wrap
    $ oc get nodepool \
      <hosted_cluster_namespace> -n \
      <hosted_cluster_namespace> -o \
      jsonpath='{.status.conditions[?(@.status=="False")]}' | jq .
    Copy to Clipboard Toggle word wrap
    $ oc get pods -n <hosted_cluster_namespace>
    Copy to Clipboard Toggle word wrap
  6. 确认托管集群已就绪。Available: True 的状态表示集群的就绪状态,节点池状态显示 AllMachinesReady: True。这些状态表示所有集群 Operator 的运行状况。
  7. 在托管集群中安装 MetalLB:

    1. 从托管集群中提取 kubeconfig 文件,并输入以下命令为托管集群访问设置环境变量:

      $ oc get secret \
        <hosted_cluster_namespace>-admin-kubeconfig \
        -n <hosted_cluster_namespace> \
        -o jsonpath='{.data.kubeconfig}' \
        | base64 -d > \
        kubeconfig-<hosted_cluster_namespace>.yaml
      Copy to Clipboard Toggle word wrap
      $ export KUBECONFIG="/path/to/kubeconfig-<hosted_cluster_namespace>.yaml"
      Copy to Clipboard Toggle word wrap
    2. 通过创建 install-metallb-operator.yaml 文件来安装 MetalLB Operator:

      apiVersion: v1
      kind: Namespace
      metadata:
        name: metallb-system
      ---
      apiVersion: operators.coreos.com/v1
      kind: OperatorGroup
      metadata:
        name: metallb-operator
        namespace: metallb-system
      ---
      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: metallb-operator
        namespace: metallb-system
      spec:
        channel: "stable"
        name: metallb-operator
        source: redhat-operators
        sourceNamespace: openshift-marketplace
        installPlanApproval: Automatic
      # ...
      Copy to Clipboard Toggle word wrap
    3. 输入以下命令应用该文件:

      $ oc apply -f install-metallb-operator.yaml
      Copy to Clipboard Toggle word wrap
    4. 通过创建 deploy-metallb-ipaddresspool.yaml 文件来配置 MetalLB IP 地址池:

      apiVersion: metallb.io/v1beta1
      kind: IPAddressPool
      metadata:
        name: metallb
        namespace: metallb-system
      spec:
        autoAssign: true
        addresses:
        - 10.11.176.71-10.11.176.75
      ---
      apiVersion: metallb.io/v1beta1
      kind: L2Advertisement
      metadata:
        name: l2advertisement
        namespace: metallb-system
      spec:
        ipAddressPools:
        - metallb
      # ...
      Copy to Clipboard Toggle word wrap
    5. 输入以下命令应用配置:

      $ oc apply -f deploy-metallb-ipaddresspool.yaml
      Copy to Clipboard Toggle word wrap
    6. 输入以下命令检查 Operator 状态、IP 地址池和 L2Advertisement 资源来验证 MetalLB 的安装:

      $ oc get pods -n metallb-system
      Copy to Clipboard Toggle word wrap
      $ oc get ipaddresspool -n metallb-system
      Copy to Clipboard Toggle word wrap
      $ oc get l2advertisement -n metallb-system
      Copy to Clipboard Toggle word wrap
  8. 为入口配置负载均衡器:

    1. 创建 ingress-loadbalancer.yaml 文件:

      apiVersion: v1
      kind: Service
      metadata:
        annotations:
          metallb.universe.tf/address-pool: metallb
        name: metallb-ingress
        namespace: openshift-ingress
      spec:
        ports:
          - name: http
            protocol: TCP
            port: 80
            targetPort: 80
          - name: https
            protocol: TCP
            port: 443
            targetPort: 443
        selector:
          ingresscontroller.operator.openshift.io/deployment-ingresscontroller: default
        type: LoadBalancer
      # ...
      Copy to Clipboard Toggle word wrap
    2. 输入以下命令应用配置:

      $ oc apply -f ingress-loadbalancer.yaml
      Copy to Clipboard Toggle word wrap
    3. 输入以下命令验证负载均衡器服务是否按预期工作:

      $ oc get svc metallb-ingress -n openshift-ingress
      Copy to Clipboard Toggle word wrap

      输出示例

      NAME              TYPE           CLUSTER-IP       EXTERNAL-IP    PORT(S)                      AGE
      metallb-ingress   LoadBalancer   172.31.127.129   10.11.176.71   80:30961/TCP,443:32090/TCP   16h
      Copy to Clipboard Toggle word wrap

  9. 配置 DNS 以使用负载均衡器:

    1. apps 域配置 DNS,将 *.apps.<hosted_cluster_namespace>.<base_domain> 通配符 DNS 记录指向负载均衡器的 IP 地址。
    2. 输入以下命令验证 DNS 解析:

      $ nslookup console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain> <load_balancer_ip_address>
      Copy to Clipboard Toggle word wrap

      输出示例

      Server:         10.11.176.1
      Address:        10.11.176.1#53
      
      Name:   console-openshift-console.apps.my-hosted-cluster.sample-base-domain.com
      Address: 10.11.176.71
      Copy to Clipboard Toggle word wrap

验证

  1. 输入以下命令检查集群 Operator:

    $ oc get clusteroperators
    Copy to Clipboard Toggle word wrap

    确保所有 Operator 显示 AVAILABLE: True,PROGRESSING: False, 和 DEGRADED: False

  2. 输入以下命令检查节点:

    $ oc get nodes
    Copy to Clipboard Toggle word wrap

    确保每个节点都有 READY 状态。

  3. 通过在 Web 浏览器中输入以下 URL 来测试对控制台的访问:

    https://console-openshift-console.apps.<hosted_cluster_namespace>.<base_domain>
    Copy to Clipboard Toggle word wrap

4.6.5. 关于在代理托管集群中创建异构节点池

节点池是集群中共享相同配置的一组节点。异构节点池有不同的配置,以便您可以创建池并针对各种工作负载优化它们。

您可以在代理平台上创建异构节点池。平台可让集群在单个托管集群中运行各种机器类型,如 x86_64ppc64le

创建异构节点池需要完成以下常规步骤:

  • 创建一个 AgentServiceConfig 自定义资源(CR),告知 Operator 会为组件(如数据库和文件系统)需要多少存储。CR 还定义要支持哪些 OpenShift Container Platform 版本。
  • 创建代理集群。
  • 创建异构节点池。
  • 为托管的 control plane 配置 DNS
  • 为每个架构创建一个 InfraEnv 自定义资源 (CR)。
  • 为异构集群添加代理。

4.6.5.1. 创建 AgentServiceConfig 自定义资源

要在托管集群中的代理中创建异构节点池,您需要创建带两个异构架构操作系统(OS)镜像的 AgentServiceConfig CR。

流程

  • 运行以下命令:

    $ envsubst <<"EOF" | oc apply -f -
    apiVersion: agent-install.openshift.io/v1beta1
    kind: AgentServiceConfig
    metadata:
     name: agent
    spec:
      databaseStorage:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <db_volume_name> 
    1
    
      filesystemStorage:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: <fs_volume_name> 
    2
    
      osImages:
        - openshiftVersion: <ocp_version> 
    3
    
          version: <ocp_release_version_x86> 
    4
    
          url: <iso_url_x86> 
    5
    
          rootFSUrl: <root_fs_url_x8> 
    6
    
          cpuArchitecture: <arch_x86> 
    7
    
        - openshiftVersion: <ocp_version> 
    8
    
          version: <ocp_release_version_ppc64le> 
    9
    
          url: <iso_url_ppc64le> 
    10
    
          rootFSUrl: <root_fs_url_ppc64le> 
    11
    
          cpuArchitecture: <arch_ppc64le> 
    12
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    为 Kubernetes Operator agentserviceconfig 配置、数据库卷名称指定多集群引擎。
    2
    指定 multicluster engine Operator agentserviceconfig 配置,文件系统卷名称。
    3
    指定 OpenShift Container Platform 的当前版本。
    4
    为 x86 指定当前的 OpenShift Container Platform 发行版本。
    5
    指定 x86 的 ISO URL。
    6
    指定 x86 的根文件系统 URL。
    7
    指定 x86 的 CPU 架构。
    8
    指定当前的 OpenShift Container Platform 版本。
    9
    指定 ppc64le 的 OpenShift Container Platform 发行版本。
    10
    指定 ppc64le 的 ISO URL。
    11
    指定 ppc64le 的根文件系统 URL。
    12
    指定 ppc64le 的 CPU 架构。

4.6.5.2. 创建代理集群

基于代理的方法管理和调配代理集群。代理集群可以使用异构节点池,允许在同一集群中使用不同类型的计算节点。

先决条件

  • 您在创建托管集群时,您使用多架构发行镜像启用对异构节点池的支持。在 Multi-arch 发行镜像页中找到最新的多架构镜像。

流程

  1. 运行以下命令,为集群命名空间创建环境变量:

    $ export CLUSTERS_NAMESPACE=<hosted_cluster_namespace>
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,为机器无类别域间路由(CIDR)标记创建环境变量:

    $ export MACHINE_CIDR=192.168.122.0/24
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来创建托管的控制命名空间:

    $ oc create ns <hosted_control_plane_namespace>
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令来创建集群:

    $ hcp create cluster agent \
        --name=<hosted_cluster_name> \
    1
    
        --pull-secret=<pull_secret_file> \
    2
    
        --agent-namespace=<hosted_control_plane_namespace> \
    3
    
        --base-domain=<basedomain> \
    4
    
        --api-server-address=api.<hosted_cluster_name>.<basedomain> \
        --release-image=quay.io/openshift-release-dev/ocp-release:<ocp_release> 
    5
    Copy to Clipboard Toggle word wrap
    1
    指定托管的集群名称。
    2
    指定 pull secret 文件路径。
    3
    指定托管 control plane 的命名空间。
    4
    指定托管集群的基域。
    5
    指定当前的 OpenShift Container Platform 发行版本。

4.6.5.3. 创建异构节点池

您可以使用 NodePool 自定义资源(CR)创建异构节点池,以便您可以通过将不同的工作负载与特定硬件关联来优化成本和性能。

流程

  • 要定义 NodePool CR,请创建一个类似以下示例的 YAML 文件:

    envsubst <<"EOF" | oc apply -f -
    apiVersion:apiVersion: hypershift.openshift.io/v1beta1
    kind: NodePool
    metadata:
      name: <hosted_cluster_name>
      namespace: <clusters_namespace>
    spec:
      arch: <arch_ppc64le>
      clusterName: <hosted_cluster_name>
      management:
        autoRepair: false
        upgradeType: InPlace
      nodeDrainTimeout: 0s
      nodeVolumeDetachTimeout: 0s
      platform:
        agent:
          agentLabelSelector:
            matchLabels:
              inventory.agent-install.openshift.io/cpu-architecture: <arch_ppc64le> 
    1
    
        type: Agent
      release:
        image: quay.io/openshift-release-dev/ocp-release:<ocp_release>
      replicas: 0
    EOF
    Copy to Clipboard Toggle word wrap
    1
    selector 块选择与指定标签匹配的代理。要创建带有零副本的架构 ppc64le 的节点池,请指定 ppc64le。这样可确保选择器块在扩展操作期间仅从 ppc64le 架构中选择代理。

4.6.5.4. 托管 control plane 的 DNS 配置

托管 control plane 的域名服务(DNS)配置意味着外部客户端可以访问入口控制器,以便客户端可以将流量路由到内部组件。配置此设置可确保流量路由到 ppc64lex86_64 计算节点。

您可以将 5.2. apps.<cluster_name > 记录指向托管 ingress 应用程序的任何计算节点。或者,如果您可以在计算节点之上设置负载均衡器,请将记录指向此负载均衡器。当您创建异构节点池时,请确保计算节点可以相互连接,或者将其保存在同一网络中。

4.6.5.5. 创建基础架构环境资源

对于异构节点池,您必须为每个架构创建一个 infraEnv 自定义资源 (CR)。此配置可确保在节点置备过程中使用了正确的特定于架构的操作系统和引导工件。例如,对于带有 x86_64ppc64le 架构的节点池,请为 x86_64ppc64le 创建 InfraEnv CR。

注意

在开始这个过程前,请确保将 x86_64ppc64le 架构的操作系统镜像添加到 AgentServiceConfig 资源中。之后,您可以使用 InfraEnv 资源获取最小 ISO 镜像。

流程

  1. 运行以下命令,使用 x86_64 架构为异构节点池创建 InfraEnv 资源:

    $ envsubst <<"EOF" | oc apply -f -
    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <hosted_cluster_name>-<arch_x86> 
    1
     
    2
    
      namespace: <hosted_control_plane_namespace> 
    3
    
    spec:
      cpuArchitecture: <arch_x86>
      pullSecretRef:
        name: pull-secret
      sshAuthorizedKey: <ssh_pub_key> 
    4
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    托管的集群名称。
    2
    x86_64 架构。
    3
    托管 control plane 命名空间。
    4
    SSH 公钥。
  2. 运行以下命令,使用异构节点池的 ppc64le 架构创建 InfraEnv 资源:

    envsubst <<"EOF" | oc apply -f -
    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <hosted_cluster_name>-<arch_ppc64le> 
    1
     
    2
    
      namespace: <hosted_control_plane_namespace> 
    3
    
    spec:
      cpuArchitecture: <arch_ppc64le>
      pullSecretRef:
        name: pull-secret
      sshAuthorizedKey: <ssh_pub_key> 
    4
    
    EOF
    Copy to Clipboard Toggle word wrap
    1
    托管的集群名称。
    2
    ppc64le 架构。
    3
    托管 control plane 命名空间。
    4
    SSH 公钥。
  3. 运行以下命令,验证 InfraEnv 资源是否成功创建:

    • 验证 x86_64 InfraEnv 资源是否成功创建:

      $ oc describe InfraEnv <hosted_cluster_name>-<arch_x86>
      Copy to Clipboard Toggle word wrap
    • 验证 ppc64le InfraEnv 资源是否成功创建:

      $ oc describe InfraEnv <hosted_cluster_name>-<arch_ppc64le>
      Copy to Clipboard Toggle word wrap
  4. 运行以下命令,生成一个实时 ISO,允许虚拟机或裸机作为代理加入代理:

    1. x86_64 生成 live ISO:

      $ oc -n <hosted_control_plane_namespace> get InfraEnv <hosted_cluster_name>-<arch_x86> -ojsonpath="{.status.isoDownloadURL}"
      Copy to Clipboard Toggle word wrap
    2. ppc64le 生成 live ISO:

      $ oc -n <hosted_control_plane_namespace> get InfraEnv <hosted_cluster_name>-<arch_ppc64le> -ojsonpath="{.status.isoDownloadURL}"
      Copy to Clipboard Toggle word wrap

4.6.5.6. 在异构集群中添加代理

您可以通过手动配置机器以使用 live ISO 引导来添加代理。您可以下载 live ISO,并使用它来引导裸机节点或虚拟机。在引导时,节点与 assisted-service 通信,并作为与 InfraEnv 资源相同的命名空间中的代理注册。创建每个代理后,您可以选择在规格中设置它的 installation_disk_idhostname 参数。然后,您可以批准代理来指示代理可用。

流程

  1. 运行以下命令来获取代理列表:

    $ oc -n <hosted_control_plane_namespace> get agents
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    86f7ac75-4fc4-4b36-8130-40fa12602218                        auto-assign
    e57a637f-745b-496e-971d-1abbf03341ba                        auto-assign
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令来修补代理:

    $ oc -n <hosted_control_plane_namespace> patch agent 86f7ac75-4fc4-4b36-8130-40fa12602218 -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-0.example.krnl.es"}}' --type merge
    Copy to Clipboard Toggle word wrap
  3. 运行以下命令来修补第二个代理:

    $ oc -n <hosted_control_plane_namespace> patch agent 23d0c614-2caa-43f5-b7d3-0b3564688baa -p '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-1.example.krnl.es"}}' --type merge
    Copy to Clipboard Toggle word wrap
  4. 运行以下命令检查代理批准状态:

    $ oc -n <hosted_control_plane_namespace> get agents
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                   CLUSTER   APPROVED   ROLE          STAGE
    86f7ac75-4fc4-4b36-8130-40fa12602218             true       auto-assign
    e57a637f-745b-496e-971d-1abbf03341ba             true       auto-assign
    Copy to Clipboard Toggle word wrap

4.6.5.7. 扩展节点池

批准代理后,您可以扩展节点池。您在节点池中配置的 agentLabelSelector 值可确保仅将匹配的代理添加到集群中。这也有助于缩减节点池。要从集群中删除特定的架构节点,请缩减对应的节点池。

流程

  • 运行以下命令来扩展节点池:

    $ oc -n <clusters_namespace> scale nodepool <nodepool_name> --replicas 2
    Copy to Clipboard Toggle word wrap
    注意

    Cluster API 代理供应商随机选择两个代理来分配给托管集群。这些代理通过不同的状态,然后将托管集群作为 OpenShift Container Platform 节点加入。各种代理状态是 binding, discovering, insufficient, installing, installing-in-progress, 和 added-to-existing-cluster

验证

  1. 运行以下命令列出代理:

    $ oc -n <hosted_control_plane_namespace> get agent
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                                   CLUSTER         APPROVED   ROLE          STAGE
    4dac1ab2-7dd5-4894-a220-6a3473b67ee6   hypercluster1   true       auto-assign
    d9198891-39f4-4930-a679-65fb142b108b                   true       auto-assign
    da503cf1-a347-44f2-875c-4960ddb04091   hypercluster1   true       auto-assign
    Copy to Clipboard Toggle word wrap

  2. 运行以下命令,检查特定扩展代理的状态:

    $ oc -n <hosted_control_plane_namespace> get agent -o jsonpath='{range .items[*]}BMH: {@.metadata.labels.agent-install\.openshift\.io/bmh} Agent: {@.metadata.name} State: {@.status.debugInfo.state}{"\n"}{end}'
    Copy to Clipboard Toggle word wrap

    输出示例

    BMH: ocp-worker-2 Agent: 4dac1ab2-7dd5-4894-a220-6a3473b67ee6 State: binding
    BMH: ocp-worker-0 Agent: d9198891-39f4-4930-a679-65fb142b108b State: known-unbound
    BMH: ocp-worker-1 Agent: da503cf1-a347-44f2-875c-4960ddb04091 State: insufficient
    Copy to Clipboard Toggle word wrap

  3. 代理访问 added-to-existing-cluster 状态后,运行以下命令验证 OpenShift Container Platform 节点是否已就绪:

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME           STATUS   ROLES    AGE     VERSION
    ocp-worker-1   Ready    worker   5m41s   v1.24.0+3882f8f
    ocp-worker-2   Ready    worker   6m3s    v1.24.0+3882f8f
    Copy to Clipboard Toggle word wrap

  4. 将工作负载添加到节点可以协调一些集群 operator。以下命令显示创建在扩展节点池后出现的两台机器:

    $ oc -n <hosted_control_plane_namespace> get machines
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME                            CLUSTER               NODENAME       PROVIDERID                                     PHASE     AGE   VERSION
    hypercluster1-c96b6f675-m5vch   hypercluster1-b2qhl   ocp-worker-1   agent://da503cf1-a347-44f2-875c-4960ddb04091   Running   15m   4.11.5
    hypercluster1-c96b6f675-tl42p   hypercluster1-b2qhl   ocp-worker-2   agent://4dac1ab2-7dd5-4894-a220-6a3473b67ee6   Running   15m   4.11.5
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat