×

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

*管理* 集群不是 *被管理* 集群。被管理集群是由中心集群管理的集群。

您可以使用 `hypershift` 附加组件将 HyperShift 运算符部署到该集群,从而将被管理集群转换为管理集群。然后,您可以开始创建托管集群。

多集群引擎运算符仅支持默认的 `local-cluster`(这是一个被管理的中心集群)以及中心集群作为管理集群。

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

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

当您使用 Agent 平台创建托管集群时,HyperShift Operator 会在托管控制平面命名空间中安装 Agent 集群 API 提供程序。

在 IBM Z 上配置托管控制平面的前提条件

  • 必须在 OpenShift Container Platform 集群上安装 Kubernetes Operator 2.5 或更高版本的多分支引擎。您可以从 OpenShift Container Platform OperatorHub 安装多分支引擎 Operator。

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

    $ oc get managedclusters local-cluster
  • 您需要一个至少具有三个工作节点的主机集群来运行 HyperShift Operator。

  • 您需要启用中央基础设施管理服务。更多信息,请参阅《启用中央基础设施管理服务》。

  • 您需要安装托管控制平面命令行界面。更多信息,请参阅《安装托管控制平面命令行界面》。

IBM Z 基础设施要求

Agent 平台不会创建任何基础设施,但需要以下基础设施资源

  • Agent:一个Agent 代表一个使用发现镜像(或 PXE 镜像)启动并准备作为 OpenShift Container Platform 节点进行配置的主机。

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

托管控制平面功能默认启用。如果您禁用了此功能并想手动启用它,或者如果您需要禁用此功能,请参阅《启用或禁用托管控制平面功能》。

IBM Z 上托管控制平面的 DNS 配置

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

DNS 条目可以只是一个指向运行托管控制平面的受管集群中一个节点的记录。

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

请参见以下 DNS 配置示例

$ cat /var/named/<example.krnl.es.zone>
示例输出
$ 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        IN A 1xx.2x.2xx.1xx
;
;EOF
1 该记录指的是处理托管控制平面入口和出口流量的 API 负载均衡器的 IP 地址。

对于 IBM z/VM,请添加与 Agent IP 地址相对应的 IP 地址。

compute-0              IN A 1xx.2x.2xx.1yy
compute-1              IN A 1xx.2x.2xx.1yy

在裸机上创建托管集群

当您使用 Agent 平台创建托管集群时,HyperShift 会在托管控制平面命名空间中安装 Agent 集群 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>

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

  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 <托管控制平面命名空间> 命令确保此命名空间中存在 agent。
    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

为 IBM Z 上的托管控制平面创建 InfraEnv 资源

InfraEnv 是一个环境,使用 PXE 镜像启动的主机可以作为 agent 加入其中。在这种情况下,agent 会在与托管控制平面相同的命名空间中创建。

步骤
  1. 创建一个 YAML 文件来包含配置。请参见以下示例

    apiVersion: agent-install.openshift.io/v1beta1
    kind: InfraEnv
    metadata:
      name: <hosted_cluster_name>
      namespace: <hosted_control_plane_namespace>
    spec:
      cpuArchitecture: s390x
      pullSecretRef:
        name: pull-secret
      sshAuthorizedKey: <ssh_public_key>
  2. 将文件保存为 infraenv-config.yaml

  3. 输入以下命令应用配置

    $ oc apply -f infraenv-config.yaml
  4. 要获取下载 PXE 镜像(例如 initrd.imgkernel.imgrootfs.img)的 URL,这些镜像允许 IBM Z 机器作为 agent 加入,请输入以下命令:

    $ oc -n <hosted_control_plane_namespace> get InfraEnv <hosted_cluster_name> -o json

将 IBM Z agent 添加到 InfraEnv 资源

要将计算节点附加到托管控制平面,请创建有助于扩展节点池的 agent。在 IBM Z 环境中添加 agent 需要额外的步骤,本节将详细介绍。

除非另有说明,否则这些过程适用于 IBM Z 和 IBM LinuxONE 上的 z/VM 和 RHEL KVM 安装。

添加 IBM Z KVM 作为 agent

对于具有 KVM 的 IBM Z,请运行以下命令以使用从 InfraEnv 资源下载的 PXE 镜像启动您的 IBM Z 环境。创建 Agent 后,主机将与 Assisted Service 通信并在管理集群上的 InfraEnv 资源与相同的命名空间中注册。

步骤
  1. 运行以下命令

    virt-install \
       --name "<vm_name>" \ (1)
       --autostart \
       --ram=16384 \
       --cpu host \
       --vcpus=4 \
       --location "<path_to_kernel_initrd_image>,kernel=kernel.img,initrd=initrd.img" \ (2)
       --disk <qcow_image_path> \ (3)
       --network network:macvtap-net,mac=<mac_address> \ (4)
       --graphics none \
       --noautoconsole \
       --wait=-1
       --extra-args "rd.neednet=1 nameserver=<nameserver>   coreos.live.rootfs_url=http://<http_server>/rootfs.img random.trust_cpu=on rd.luks.options=discard ignition.firstboot ignition.platform.id=metal console=tty1 console=ttyS1,115200n8 coreos.inst.persistent-kargs=console=tty1 console=ttyS1,115200n8" (5)
    
    1 指定虚拟机的名称。
    2 指定 kernel_initrd_image 文件的位置。
    3 指定磁盘映像路径。
    4 指定MAC地址。
    5 指定代理的服务器名称。
  2. 对于ISO引导,请从InfraEnv资源下载ISO镜像,并运行以下命令引导节点

    virt-install \
      --name "<vm_name>" \ (1)
      --autostart \
      --memory=16384 \
      --cpu host \
      --vcpus=4 \
      --network network:macvtap-net,mac=<mac_address> \ (2)
      --cdrom "<path_to_image.iso>" \ (3)
      --disk <qcow_image_path> \
      --graphics none \
      --noautoconsole \
      --os-variant <os_version> \ (4)
      --wait=-1
    1 指定虚拟机的名称。
    2 指定MAC地址。
    3 指定image.iso文件的位置。
    4 指定您正在使用的操作系统版本。

添加IBM Z LPAR作为代理

您可以将IBM Z或IBM LinuxONE上的逻辑分区(LPAR)作为计算节点添加到托管控制平面。

步骤
  1. 为代理创建引导参数文件

    参数文件示例
    rd.neednet=1 cio_ignore=all,!condev \
    console=ttysclp0 \
    ignition.firstboot ignition.platform.id=metal
    coreos.live.rootfs_url=http://<http_server>/rhcos-<version>-live-rootfs.<architecture>.img \(1)
    coreos.inst.persistent-kargs=console=ttysclp0
    ip=<ip>::<gateway>:<netmask>:<hostname>::none nameserver=<dns> \(2)
    rd.znet=qeth,<network_adaptor_range>,layer2=1
    rd.<disk_type>=<adapter> \(3)
    zfcp.allow_lun_scan=0
    ai.ip_cfg_override=1 \(4)
    random.trust_cpu=on rd.luks.options=discard
    1 对于coreos.live.rootfs_url工件,请指定与您正在启动的kernelinitramfs匹配的rootfs工件。仅支持HTTP和HTTPS协议。
    2 对于ip参数,请根据《在IBM Z和IBM LinuxONE上使用z/VM安装集群》中的说明手动分配IP地址。
    3 对于DASD类型磁盘的安装,请使用rd.dasd指定安装Red Hat Enterprise Linux CoreOS (RHCOS)的DASD。对于FCP类型磁盘的安装,请使用rd.zfcp=<adapter>,<wwpn>,<lun>指定安装RHCOS的FCP磁盘。
    4 当您使用开放系统适配器(OSA)或HiperSockets时,请指定此参数。
  2. InfraEnv资源下载.insinitrd.img.addrsize文件。

    默认情况下,.insinitrd.img.addrsize文件的URL在InfraEnv资源中不可用。您必须编辑URL才能获取这些工件。

    1. 运行以下命令更新内核URL端点以包含ins-file

      $ curl -k -L -o generic.ins "< url for ins-file >"
      URL示例
      https://…/boot-artifacts/ins-file?arch=s390x&version=4.17.0
    2. 更新initrd URL端点以包含s390x-initrd-addrsize

      URL示例
      https://…./s390x-initrd-addrsize?api_key=<api-key>&arch=s390x&version=4.17.0
  3. initrdkernelgeneric.insinitrd.img.addrsize参数文件传输到文件服务器。有关如何使用FTP和引导传输文件的更多信息,请参见“在LPAR中安装”。

  4. 启动机器。

  5. 对集群中的所有其他机器重复此过程。

其他资源

添加IBM z/VM作为代理

如果您想为z/VM虚拟机使用静态IP,则必须配置z/VM代理的NMStateConfig属性,以便IP参数在第二次启动时保持不变。

完成以下步骤以使用从InfraEnv资源下载的PXE镜像启动您的IBM Z环境。创建代理后,主机将与辅助服务通信,并在与管理集群上的InfraEnv资源相同的命名空间中注册。

步骤
  1. 更新参数文件以添加rootfs_urlnetwork_adaptordisk_type值。

    参数文件示例
    rd.neednet=1 cio_ignore=all,!condev \
    console=ttysclp0  \
    ignition.firstboot ignition.platform.id=metal \
    coreos.live.rootfs_url=http://<http_server>/rhcos-<version>-live-rootfs.<architecture>.img \(1)
    coreos.inst.persistent-kargs=console=ttysclp0
    ip=<ip>::<gateway>:<netmask>:<hostname>::none nameserver=<dns> \(2)
    rd.znet=qeth,<network_adaptor_range>,layer2=1
    rd.<disk_type>=<adapter> \(3)
    zfcp.allow_lun_scan=0
    ai.ip_cfg_override=1 \(4)
    1 对于coreos.live.rootfs_url工件,请指定与您正在启动的kernelinitramfs匹配的rootfs工件。仅支持HTTP和HTTPS协议。
    2 对于ip参数,请根据《在IBM Z和IBM LinuxONE上使用z/VM安装集群》中的说明手动分配IP地址。
    3 对于DASD类型磁盘的安装,请使用rd.dasd指定安装Red Hat Enterprise Linux CoreOS (RHCOS)的DASD。对于FCP类型磁盘的安装,请使用rd.zfcp=<adapter>,<wwpn>,<lun>指定安装RHCOS的FCP磁盘。
    4 当您使用开放系统适配器(OSA)或HiperSockets时,请指定此参数。
  2. 运行以下命令将initrd、内核镜像和参数文件移动到虚拟机:

    vmur pun -r -u -N kernel.img $INSTALLERKERNELLOCATION/<image name>
    vmur pun -r -u -N generic.parm $PARMFILELOCATION/paramfilename
    vmur pun -r -u -N initrd.img $INSTALLERINITRAMFSLOCATION/<image name>
  3. 从虚拟机控制台运行以下命令:

    cp ipl c
  4. 要列出代理及其属性,请输入以下命令:

    $ oc -n <hosted_control_plane_namespace> get agents
    示例输出
    NAME    CLUSTER APPROVED    ROLE    STAGE
    50c23cda-cedc-9bbd-bcf1-9b3a5c75804d    auto-assign
    5e498cd3-542c-e54f-0c58-ed43e28b568a    auto-assign
  5. 运行以下命令批准代理。

    $ oc -n <hosted_control_plane_namespace> patch agent \
      50c23cda-cedc-9bbd-bcf1-9b3a5c75804d -p \
      '{"spec":{"installation_disk_id":"/dev/sda","approved":true,"hostname":"worker-zvm-0.hostedn.example.com"}}' \(1)
      --type merge
    1 可选地,您可以在规范中设置代理ID <installation_disk_id><hostname>
  6. 运行以下命令以验证代理是否已批准

    $ oc -n <hosted_control_plane_namespace> get agents
    示例输出
    NAME                                            CLUSTER     APPROVED   ROLE          STAGE
    50c23cda-cedc-9bbd-bcf1-9b3a5c75804d             true       auto-assign
    5e498cd3-542c-e54f-0c58-ed43e28b568a             true       auto-assign

扩展IBM Z上托管集群的NodePool对象

创建托管集群时会创建NodePool对象。通过扩展NodePool对象,您可以向托管控制平面添加更多计算节点。

当您扩展节点池时,将创建一个机器。集群API提供程序会找到一个已批准的、通过验证的、当前未使用的并且满足节点池规范中指定的条件的代理。您可以通过检查其状态和条件来监控代理的安装。

当您缩减节点池时,代理将与相应的集群解除绑定。在重用集群之前,必须使用PXE镜像引导集群以更新节点数。

步骤
  1. 运行以下命令将NodePool对象扩展到两个节点:

    $ oc -n <clusters_namespace> scale nodepool <nodepool_name> --replicas 2

    集群API代理提供程序会随机选择两个代理,然后将其分配给托管集群。这些代理将经历不同的状态,最终作为OpenShift Container Platform节点加入托管集群。代理将按照以下顺序经过转换阶段:

    • 绑定(binding)

    • 发现(discovering)

    • 不足(insufficient)

    • 安装(installing)

    • 安装中(installing-in-progress)

    • 添加到现有集群(added-to-existing-cluster)

  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}'
    示例输出
    BMH: Agent: 50c23cda-cedc-9bbd-bcf1-9b3a5c75804d State: known-unbound
    BMH: Agent: 5e498cd3-542c-e54f-0c58-ed43e28b568a State: insufficient
  3. 运行以下命令查看转换阶段:

    $ oc -n <hosted_control_plane_namespace> get agent
    示例输出
    NAME                                   CLUSTER           APPROVED       ROLE        STAGE
    50c23cda-cedc-9bbd-bcf1-9b3a5c75804d   hosted-forwarder   true          auto-assign
    5e498cd3-542c-e54f-0c58-ed43e28b568a                      true          auto-assign
    da503cf1-a347-44f2-875c-4960ddb04091   hosted-forwarder   true          auto-assign
  4. 运行以下命令生成访问托管集群的kubeconfig文件:

    $ hcp create kubeconfig --namespace <clusters_namespace> --name <hosted_cluster_namespace> > <hosted_cluster_name>.kubeconfig
  5. 代理达到added-to-existing-cluster状态后,通过输入以下命令验证您是否可以看到OpenShift Container Platform节点:

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get nodes
    示例输出
    NAME                             STATUS   ROLES    AGE      VERSION
    worker-zvm-0.hostedn.example.com Ready    worker   5m41s    v1.24.0+3882f8f
    worker-zvm-1.hostedn.example.com Ready    worker   6m3s     v1.24.0+3882f8f

    集群操作员开始通过向节点添加工作负载进行协调。

  6. 输入以下命令以验证在扩展NodePool对象时是否创建了两个机器:

    $ oc -n <hosted_control_plane_namespace> get machine.cluster.x-k8s.io
    示例输出
    NAME                                CLUSTER  NODENAME PROVIDERID     PHASE     AGE   VERSION
    hosted-forwarder-79558597ff-5tbqp   hosted-forwarder-crqq5   worker-zvm-0.hostedn.example.com   agent://50c23cda-cedc-9bbd-bcf1-9b3a5c75804d   Running   41h   4.15.0
    hosted-forwarder-79558597ff-lfjfk   hosted-forwarder-crqq5   worker-zvm-1.hostedn.example.com   agent://5e498cd3-542c-e54f-0c58-ed43e28b568a   Running   41h   4.15.0
  7. 运行以下命令检查集群版本:

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get clusterversion,co
    示例输出
    NAME                                         VERSION       AVAILABLE   PROGRESSING   SINCE   STATUS
    clusterversion.config.openshift.io/version   4.15.0-ec.2   True        False         40h     Cluster version is 4.15.0-ec.2
  8. 运行以下命令检查集群操作员状态:

    $ oc --kubeconfig <hosted_cluster_name>.kubeconfig get clusteroperators

对于集群的每个组件,输出将显示以下集群操作员状态:NAMEVERSIONAVAILABLEPROGRESSINGDEGRADEDSINCEMESSAGE

有关输出示例,请参见《初始操作员配置》。

其他资源