安装 IBM Cloud Bare Metal (Classic)


OpenShift Container Platform 4.13

在 IBM Cloud Bare Metal (Classic) 上安装 OpenShift Container Platform

Red Hat OpenShift Documentation Team

摘要

本文档论述了如何在 IBM Cloud Bare Metal (Classic) 上安装 OpenShift Container Platform。

第 1 章 先决条件

您可以使用安装程序置备的安装在 IBM Cloud® Bare Metal (Classic) 节点上安装 OpenShift Container Platform。本文档描述了在 IBM Cloud 节点上安装 OpenShift Container Platform 时的先决条件和步骤。

重要

红帽仅在置备网络上支持 IPMI 和 PXE。红帽尚未测试 Red Hat Fish、虚拟介质或其他补充技术,如 IBM 云部署的安全引导。需要 provisioning 网络。

OpenShift Container Platform 安装程序置备的安装需要:

  • 安装了 Red Hat Enterprise Linux CoreOS (RHCOS) 8.x 的一个节点,用于运行置备程序
  • 三个 control plane 节点
  • 一个可路由的网络
  • 一个 provisioning 网络

在 IBM Cloud® Bare Metal (Classic) 上启动 OpenShift Container Platform 安装程序置备的安装前,需要满足以下先决条件和要求。

1.1. 设置 IBM Cloud Bare Metal (Classic) 基础架构

要在 IBM Cloud® Bare Metal (Classic) 基础架构上部署 OpenShift Container Platform 集群,您必须首先置备 IBM Cloud 节点。

重要

红帽支持 provisioning 网络上的 IPMI 和 PXE。红帽尚未测试 Red Hat Fish、虚拟介质或其他补充技术,如 IBM 云部署的安全引导。provisioning 网络是必需的。

您可以使用 IBM Cloud API 自定义 IBM Cloud 节点。在创建 IBM Cloud 节点时,您必须考虑以下要求:

每个集群使用一个数据中心

OpenShift Container Platform 集群中的所有节点必须在同一 IBM Cloud 数据中心中运行。

创建公共和私有 VLAN

创建具有单个公共 VLAN 和单个私有 VLAN 的所有节点。

确定子网有足够的 IP 地址

IBM Cloud public VLAN 子网默认使用一个 /28 前缀,该前缀提供 16 个 IP 地址。这足以一个包含三个 control plane 节点、四个 worker 节点以及两个用于 baremetal 网络上的 API VIP 和 Ingress VIP 的集群。对于较大的集群,可能需要一个较小的前缀。

IBM Cloud 私有 VLAN 子网默认使用一个 /26 前缀,该前缀提供 64 个 IP 地址。IBM Cloud® Bare Metal (Classic) 使用专用网络 IP 地址访问每个节点的 Baseboard Management Controller (BMC)。OpenShift Container Platform 为 provisioning 网络创建一个额外的子网。用于 provisioning 网络子网路由的网络流量,通过专用 VLAN 进行路由。对于较大的集群,可能需要一个较小的前缀。

Expand
表 1.1. 每个前缀的 IP 地址
IP 地址prefix

32

/27

64

/26

128

/25

256

/24

配置 NIC

OpenShift Container Platform 使用两个网络部署:

  • provisioningprovisioning 网络是一个不可路由的网络,用于在作为 OpenShift Container Platform 集群一部分的每个节点上置备底层操作系统。
  • baremetalbaremetal 网络是一个可路由的网络。您可以使用任何 NIC 顺序与 baremetal 网络进行接口,只要它不是 provisioningNetworkInterface 配置设置中指定的 NIC,或者 NIC 关联到用于 provisioning 网络的节点的 bootMACAddress 配置设置。

虽然集群节点可以包含多于 2 个 NIC,但安装过程只关注于前两个 NIC:例如:

Expand
NIC网络VLAN

NIC1

provisioning

<provisioning_vlan>

NIC2

baremetal

<baremetal_vlan>

在上例中,所有 control plane 和 worker 节点上的 NIC1 连接到仅用于安装 OpenShift Container Platform 集群的不可路由网络(provisioning)。所有 control plane 和 worker 节点上的 NIC2 连接到 routable baremetal 网络。

Expand
PXE引导顺序

NIC1 PXE-enabled provisioning 网络

1

NIC2 baremetal 网络.

2

注意

确保用于 provisioning 网络的 NIC 上启用了 PXE,并在所有其他 NIC 上禁用。

配置规范名称

客户端通过 baremetal 网络访问 OpenShift Container Platform 集群节点。配置 IBM Cloud 子域或子区,其中规范名称扩展是集群名称。

<cluster_name>.<domain>
Copy to Clipboard Toggle word wrap

例如:

test-cluster.example.com
Copy to Clipboard Toggle word wrap
创建 DNS 条目

您必须为以下内容创建 DNS A 记录条目,解析为公共子网中未使用的 IP 地址:

Expand
用法主机名IP

API

api.<cluster_name>.<domain>

<ip>

Ingress LB(apps)

*.apps.<cluster_name>.<domain>

<ip>

在置备后,control plane 和 worker 节点已经有 DNS 条目。

下表提供了完全限定域名的示例。API 和 Nameserver 地址以规范名称扩展开头。control plane 和 worker 节点的主机名是示例,您可以使用您喜欢的任何主机命名约定。

Expand
用法主机名IP

API

api.<cluster_name>.<domain>

<ip>

Ingress LB(apps)

*.apps.<cluster_name>.<domain>

<ip>

provisioner 节点

provisioner.<cluster_name>.<domain>

<ip>

Master-0

openshift-master-0.<cluster_name>.<domain>

<ip>

Master-1

openshift-master-1.<cluster_name>.<domain>

<ip>

Master-2

openshift-master-2.<cluster_name>.<domain>

<ip>

Worker-0

openshift-worker-0.<cluster_name>.<domain>

<ip>

Worker-1

openshift-worker-1.<cluster_name>.<domain>

<ip>

Worker-n

openshift-worker-n.<cluster_name>.<domain>

<ip>

OpenShift Container Platform 包含使用集群成员资格信息来生成 A 记录的功能。这会将节点名称解析为其 IP 地址。使用 API 注册节点后,集群可以在不使用 CoreDNS-mDNS 的情况下分散节点信息。这可消除与多播 DNS 关联的网络流量。

重要

置备 IBM Cloud 节点后,您必须为外部 DNS 上的 api.<cluster_name>.<domain> 域名创建一个 DNS 条目,因为删除 CoreDNS 会导致本地条目消失。未能在外部 DNS 服务器中为 api.<cluster_name>.<domain> 域名创建 DNS 记录会阻止 worker 节点加入集群。

网络时间协议(NTP)

集群中的每个 OpenShift Container Platform 节点都必须有权访问 NTP 服务器。OpenShift Container Platform 节点使用 NTP 来同步其时钟。例如,集群节点使用需要验证的 SSL 证书,如果节点之间的日期和时间未同步,则可能会失败。

重要

在每个群集节点的 BIOS 设置中定义一致的时钟日期和时间格式,或者安装可能会失败。

配置 DHCP 服务器

IBM Cloud® Bare Metal (Classic) 不会在公共或私有 VLAN 上运行 DHCP。在置备 IBM Cloud 节点后,您必须为公共 VLAN 设置 DHCP 服务器,这与 OpenShift Container Platform 的 baremetal 网络对应。

注意

分配给每个节点的 IP 地址不需要与 IBM Cloud® Bare Metal (Classic) 置备系统分配的 IP 地址匹配。

详情请参阅"配置公共子网"部分。

确保 BMC 访问权限

仪表板上每个节点的"远程管理"页面包含节点的智能平台管理接口(IPMI)凭证。默认 IPMI 特权阻止用户进行某些引导目标更改。您必须将特权级别更改为 OPERATOR,以便 Ironic 能够进行这些更改。

install-config.yaml 文件中,将 privilegelevel 参数添加到用于配置每个 BMC 的 URL 中。如需了解更多详细信息,请参阅"配置 install-config.yaml 文件"部分。例如:

ipmi://<IP>:<port>?privilegelevel=OPERATOR
Copy to Clipboard Toggle word wrap

或者,联系 IBM 云支持并请求它们将 IPMI 权限增加到 ADMINISTRATOR

创建裸机服务器

IBM Cloud dashboard 中,进入到 Create resourceBare Metal Servers for Classic 来创建裸机服务器。

或者,您可以使用 ibmcloud CLI 实用程序创建裸机服务器。例如:

$ ibmcloud sl hardware create --hostname <SERVERNAME> \
                            --domain <DOMAIN> \
                            --size <SIZE> \
                            --os <OS-TYPE> \
                            --datacenter <DC-NAME> \
                            --port-speed <SPEED> \
                            --billing <BILLING>
Copy to Clipboard Toggle word wrap

有关装 IBM Cloud CLI 的详情,请参阅安装独立 IBM Cloud CLI

注意

IBM 云服务器可能需要 3-5 个小时才能使用。

执行以下步骤准备 provisioner 节点。

流程

  1. 通过 ssh 登录到 provisioner 节点。
  2. 创建非 root 用户(kni)并为该用户提供 sudo 权限:

    # useradd kni
    Copy to Clipboard Toggle word wrap
    # passwd kni
    Copy to Clipboard Toggle word wrap
    # echo "kni ALL=(root) NOPASSWD:ALL" | tee -a /etc/sudoers.d/kni
    Copy to Clipboard Toggle word wrap
    # chmod 0440 /etc/sudoers.d/kni
    Copy to Clipboard Toggle word wrap
  3. 为新用户创建 ssh 密钥:

    # su - kni -c "ssh-keygen -f /home/kni/.ssh/id_rsa -N ''"
    Copy to Clipboard Toggle word wrap
  4. 以新用户身份登录到 provisioner 节点:

    # su - kni
    Copy to Clipboard Toggle word wrap
  5. 使用 Red Hat Subscription Manager 注册 provisioner 节点:

    $ sudo subscription-manager register --username=<user> --password=<pass> --auto-attach
    Copy to Clipboard Toggle word wrap
    $ sudo subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms \
                                      --enable=rhel-8-for-x86_64-baseos-rpms
    Copy to Clipboard Toggle word wrap
    注意

    有关 Red Hat Subscription Manager 的详情,请参考 使用和配置 Red Hat Subscription Manager

  6. 安装以下软件包:

    $ sudo dnf install -y libvirt qemu-kvm mkisofs python3-devel jq ipmitool
    Copy to Clipboard Toggle word wrap
  7. 修改用户,将 libvirt 组添加到新创建的用户:

    $ sudo usermod --append --groups libvirt kni
    Copy to Clipboard Toggle word wrap
  8. 启动 firewalld

    $ sudo systemctl start firewalld
    Copy to Clipboard Toggle word wrap
  9. 启用 firewalld

    $ sudo systemctl enable firewalld
    Copy to Clipboard Toggle word wrap
  10. 启动 http 服务:

    $ sudo firewall-cmd --zone=public --add-service=http --permanent
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --reload
    Copy to Clipboard Toggle word wrap
  11. 启动并启用 libvirtd 服务:

    $ sudo systemctl enable libvirtd --now
    Copy to Clipboard Toggle word wrap
  12. 设置 provisioner 节点的 ID:

    $ PRVN_HOST_ID=<ID>
    Copy to Clipboard Toggle word wrap

    您可以使用以下 ibmcloud 命令查看 ID:

    $ ibmcloud sl hardware list
    Copy to Clipboard Toggle word wrap
  13. 设置公共子网的 ID:

    $ PUBLICSUBNETID=<ID>
    Copy to Clipboard Toggle word wrap

    您可以使用以下 ibmcloud 命令查看 ID:

    $ ibmcloud sl subnet list
    Copy to Clipboard Toggle word wrap
  14. 设置专用子网的 ID:

    $ PRIVSUBNETID=<ID>
    Copy to Clipboard Toggle word wrap

    您可以使用以下 ibmcloud 命令查看 ID:

    $ ibmcloud sl subnet list
    Copy to Clipboard Toggle word wrap
  15. 设置 provisioner 节点公共 IP 地址:

    $ PRVN_PUB_IP=$(ibmcloud sl hardware detail $PRVN_HOST_ID --output JSON | jq .primaryIpAddress -r)
    Copy to Clipboard Toggle word wrap
  16. 为公共网络设置 CIDR:

    $ PUBLICCIDR=$(ibmcloud sl subnet detail $PUBLICSUBNETID --output JSON | jq .cidr)
    Copy to Clipboard Toggle word wrap
  17. 为公共网络设置 IP 地址和 CIDR:

    $ PUB_IP_CIDR=$PRVN_PUB_IP/$PUBLICCIDR
    Copy to Clipboard Toggle word wrap
  18. 为公共网络设置网关:

    $ PUB_GATEWAY=$(ibmcloud sl subnet detail $PUBLICSUBNETID --output JSON | jq .gateway -r)
    Copy to Clipboard Toggle word wrap
  19. 设置 provisioner 节点的专用 IP 地址:

    $ PRVN_PRIV_IP=$(ibmcloud sl hardware detail $PRVN_HOST_ID --output JSON | \
                     jq .primaryBackendIpAddress -r)
    Copy to Clipboard Toggle word wrap
  20. 为专用网络设置 CIDR:

    $ PRIVCIDR=$(ibmcloud sl subnet detail $PRIVSUBNETID --output JSON | jq .cidr)
    Copy to Clipboard Toggle word wrap
  21. 设置专用网络的 IP 地址和 CIDR:

    $ PRIV_IP_CIDR=$PRVN_PRIV_IP/$PRIVCIDR
    Copy to Clipboard Toggle word wrap
  22. 为专用网络设置网关:

    $ PRIV_GATEWAY=$(ibmcloud sl subnet detail $PRIVSUBNETID --output JSON | jq .gateway -r)
    Copy to Clipboard Toggle word wrap
  23. baremetal 设置网桥并 置备 网络:

    $ sudo nohup bash -c "
        nmcli --get-values UUID con show | xargs -n 1 nmcli con delete
        nmcli connection add ifname provisioning type bridge con-name provisioning
        nmcli con add type bridge-slave ifname eth1 master provisioning
        nmcli connection add ifname baremetal type bridge con-name baremetal
        nmcli con add type bridge-slave ifname eth2 master baremetal
        nmcli connection modify baremetal ipv4.addresses $PUB_IP_CIDR ipv4.method manual ipv4.gateway $PUB_GATEWAY
        nmcli connection modify provisioning ipv4.addresses 172.22.0.1/24,$PRIV_IP_CIDR ipv4.method manual
        nmcli connection modify provisioning +ipv4.routes \"10.0.0.0/8 $PRIV_GATEWAY\"
        nmcli con down baremetal
        nmcli con up baremetal
        nmcli con down provisioning
        nmcli con up provisioning
        init 6
    "
    Copy to Clipboard Toggle word wrap
    注意

    对于 eth1eth2,根据需要替换相应的接口名称。

  24. 如果需要,通过 SSH 重新连接到 provisioner 节点:

    # ssh kni@provisioner.<cluster-name>.<domain>
    Copy to Clipboard Toggle word wrap
  25. 验证连接网桥是否已正确创建:

    $ sudo nmcli con show
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME               UUID                                  TYPE      DEVICE
    baremetal          4d5133a5-8351-4bb9-bfd4-3af264801530  bridge    baremetal
    provisioning       43942805-017f-4d7d-a2c2-7cb3324482ed  bridge    provisioning
    virbr0             d9bca40f-eee1-410b-8879-a2d4bb0465e7  bridge    virbr0
    bridge-slave-eth1  76a8ed50-c7e5-4999-b4f6-6d9014dd0812  ethernet  eth1
    bridge-slave-eth2  f31c3353-54b7-48de-893a-02d2b34c4736  ethernet  eth2
    Copy to Clipboard Toggle word wrap

  26. 创建 pull-secret.txt 文件:

    $ vim pull-secret.txt
    Copy to Clipboard Toggle word wrap

    在 Web 浏览器中,导航到 Install on Bare Metal with user-provisioned infrastructure。在第 1 步中,点击 Download pull secret。将内容粘贴到 pull-secret.txt 文件中,并将内容保存到 kni 用户的主目录中。

2.2. 配置公共子网

所有 OpenShift Container Platform 集群节点都必须位于公共子网中。IBM Cloud® Bare Metal (Classic) 不会在子网上提供 DHCP 服务器。在 provisioner 节点上单独设置它。

您必须重置准备 provisioner 节点时定义的 BASH 变量。在准备完置备程序节点后,重新引导置备程序节点将删除之前设置的 BASH 变量。

流程

  1. 安装 dnsmasq:

    $ sudo dnf install dnsmasq
    Copy to Clipboard Toggle word wrap
  2. 打开 dnsmasq 配置文件:

    $ sudo vi /etc/dnsmasq.conf
    Copy to Clipboard Toggle word wrap
  3. dnsmasq 配置文件中添加以下配置:

    interface=baremetal
    except-interface=lo
    bind-dynamic
    log-dhcp
    
    dhcp-range=<ip_addr>,<ip_addr>,<pub_cidr> 
    1
    
    dhcp-option=baremetal,121,0.0.0.0/0,<pub_gateway>,<prvn_priv_ip>,<prvn_pub_ip> 
    2
    
    
    dhcp-hostsfile=/var/lib/dnsmasq/dnsmasq.hostsfile
    Copy to Clipboard Toggle word wrap
    1
    设置 DHCP 范围。将 <ip_addr> 实例替换为一个来自公共子网的未使用的 IP 地址,以便 baremetal 网络的 dhcp-range 并以相同的 IP 地址开始和结尾。将 <pub_cidr> 替换为公共子网的 CIDR。
    2
    设置 DHCP 选项。将 <pub_gateway> 替换为 baremetal 网络的网关 IP 地址。将 <prvn_priv_ip> 替换为 provisioning 网络上 provisioner 节点的专用 IP 地址的 IP 地址。将 <prvn_pub_ip> 替换为 baremetal 网络中 provisioner 节点的公共 IP 地址的 IP 地址。

    要检索 <pub_cidr> 的值,请执行:

    $ ibmcloud sl subnet detail <publicsubnetid> --output JSON | jq .cidr
    Copy to Clipboard Toggle word wrap

    <publicsubnetid> 替换为公共子网的 ID。

    要检索 <pub_gateway> 的值,请执行:

    $ ibmcloud sl subnet detail <publicsubnetid> --output JSON | jq .gateway -r
    Copy to Clipboard Toggle word wrap

    <publicsubnetid> 替换为公共子网的 ID。

    要检索 <prvn_priv_ip> 的值,请执行:

    $ ibmcloud  sl hardware detail <id> --output JSON | \
                jq .primaryBackendIpAddress -r
    Copy to Clipboard Toggle word wrap

    <id> 替换为 provisioner 节点的 ID。

    要检索 <prvn_pub_ip> 的值,请执行:

    $ ibmcloud sl hardware detail <id> --output JSON | jq .primaryIpAddress -r
    Copy to Clipboard Toggle word wrap

    <id> 替换为 provisioner 节点的 ID。

  4. 获取集群的硬件列表:

    $ ibmcloud sl hardware list
    Copy to Clipboard Toggle word wrap
  5. 获取每个节点的 MAC 地址和 IP 地址:

    $ ibmcloud sl hardware detail <id> --output JSON | \
      jq '.networkComponents[] | \
      "\(.primaryIpAddress) \(.macAddress)"' | grep -v null
    Copy to Clipboard Toggle word wrap

    <id> 替换为节点的 ID。

    输出示例

    "10.196.130.144 00:e0:ed:6a:ca:b4"
    "141.125.65.215 00:e0:ed:6a:ca:b5"
    Copy to Clipboard Toggle word wrap

    记录公共网络的 MAC 地址和 IP 地址。单独记录专用网络的 MAC 地址,稍后您将在 install-config.yaml 文件中使用它。对每个节点重复这个过程,直到您拥有公共 baremetal 网络的所有公共 MAC 和 IP 地址,以及私有 provisioning 网络的 MAC 地址。

  6. 将每个节点的 public baremetal 网络的 MAC 和 IP 地址对添加到 dnsmasq.hostsfile 文件中:

    $ sudo vim /var/lib/dnsmasq/dnsmasq.hostsfile
    Copy to Clipboard Toggle word wrap

    输入示例

    00:e0:ed:6a:ca:b5,141.125.65.215,master-0
    <mac>,<ip>,master-1
    <mac>,<ip>,master-2
    <mac>,<ip>,worker-0
    <mac>,<ip>,worker-1
    ...
    Copy to Clipboard Toggle word wrap

    <mac>,<ip> 替换为相应节点名称的公共 MAC 地址和公共 IP 地址。

  7. 启动 dnsmasq:

    $ sudo systemctl start dnsmasq
    Copy to Clipboard Toggle word wrap
  8. 启用 dnsmasq,以便在引导节点时启动:

    $ sudo systemctl enable dnsmasq
    Copy to Clipboard Toggle word wrap
  9. 验证 dnsmasq 是否正在运行:

    $ sudo systemctl status dnsmasq
    Copy to Clipboard Toggle word wrap

    输出示例

    ● dnsmasq.service - DNS caching server.
    Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
    Active: active (running) since Tue 2021-10-05 05:04:14 CDT; 49s ago
    Main PID: 3101 (dnsmasq)
    Tasks: 1 (limit: 204038)
    Memory: 732.0K
    CGroup: /system.slice/dnsmasq.service
    └─3101 /usr/sbin/dnsmasq -k
    Copy to Clipboard Toggle word wrap

  10. 使用 UDP 协议打开端口 5367

    $ sudo firewall-cmd --add-port 53/udp --permanent
    Copy to Clipboard Toggle word wrap
    $ sudo firewall-cmd --add-port 67/udp --permanent
    Copy to Clipboard Toggle word wrap
  11. 使用 masquerade 为外部区添加 置备

    $ sudo firewall-cmd --change-zone=provisioning --zone=external --permanent
    Copy to Clipboard Toggle word wrap

    这一步可确保将 IPMI 调用的网络地址转换为管理子网。

  12. 重新载入 firewalld 配置:

    $ sudo firewall-cmd --reload
    Copy to Clipboard Toggle word wrap

2.3. 检索 OpenShift Container Platform 安装程序

使用安装程序的 stable-4.x 版本和您选择的架构来部署 OpenShift Container Platform 的一般稳定版本:

$ export VERSION=stable-4.13
Copy to Clipboard Toggle word wrap
$ export RELEASE_ARCH=<architecture>
Copy to Clipboard Toggle word wrap
$ export RELEASE_IMAGE=$(curl -s https://mirror.openshift.com/pub/openshift-v4/$RELEASE_ARCH/clients/ocp/$VERSION/release.txt | grep 'Pull From: quay.io' | awk -F ' ' '{print $3}')
Copy to Clipboard Toggle word wrap

2.4. 提取 OpenShift Container Platform 安装程序

在获取安装程序后,下一步是提取它。

流程

  1. 设置环境变量:

    $ export cmd=openshift-baremetal-install
    Copy to Clipboard Toggle word wrap
    $ export pullsecret_file=~/pull-secret.txt
    Copy to Clipboard Toggle word wrap
    $ export extract_dir=$(pwd)
    Copy to Clipboard Toggle word wrap
  2. 获取 oc 二进制文件:

    $ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux.tar.gz | tar zxvf - oc
    Copy to Clipboard Toggle word wrap
  3. 解压安装程序:

    $ sudo cp oc /usr/local/bin
    Copy to Clipboard Toggle word wrap
    $ oc adm release extract --registry-config "${pullsecret_file}" --command=$cmd --to "${extract_dir}" ${RELEASE_IMAGE}
    Copy to Clipboard Toggle word wrap
    $ sudo cp openshift-baremetal-install /usr/local/bin
    Copy to Clipboard Toggle word wrap

2.5. 配置 install-config.yaml 文件

install-config.yaml 文件需要一些额外的详情。大多数信息用于指导安装程序,从而让集群足够了解可用的 IBM Cloud® Bare Metal (Classic) 硬件,以便它可以完全管理它。在裸机上安装和在 IBM Cloud® Bare Metal (Classic)上安装之间的材料区别在于,您必须在 install-config.yaml 文件的 BMC 部分中明确设置 IPMI 的权限级别。

流程

  1. 配置 install-config.yaml。更改适当的变量以匹配环境,包括 pullSecretsshKey

    apiVersion: v1
    baseDomain: <domain>
    metadata:
      name: <cluster_name>
    networking:
      machineNetwork:
      - cidr: <public-cidr>
      networkType: OVNKubernetes
    compute:
    - name: worker
      replicas: 2
    controlPlane:
      name: master
      replicas: 3
      platform:
        baremetal: {}
    platform:
      baremetal:
        apiVIP: <api_ip>
        ingressVIP: <wildcard_ip>
        provisioningNetworkInterface: <NIC1>
        provisioningNetworkCIDR: <CIDR>
        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: ipmi://10.196.130.145?privilegelevel=OPERATOR 
    1
    
              username: root
              password: <password>
            bootMACAddress: 00:e0:ed:6a:ca:b4 
    2
    
            rootDeviceHints:
              deviceName: "/dev/sda"
          - name: openshift-worker-0
            role: worker
            bmc:
              address: ipmi://<out-of-band-ip>?privilegelevel=OPERATOR 
    3
    
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address> 
    4
    
            rootDeviceHints:
              deviceName: "/dev/sda"
    pullSecret: '<pull_secret>'
    sshKey: '<ssh_pub_key>'
    Copy to Clipboard Toggle word wrap
    1 3
    bmc.address 提供了 privilegelevel 配置设置,值设为 OPERATOR。这是 IBM Cloud® Bare Metal (Classic)基础架构所必需的。
    2 4
    为对应节点添加私有 provisioning 网络 NIC 的 MAC 地址。
    注意

    您可以使用 ibmcloud 命令行实用程序来检索密码。

    $ ibmcloud sl hardware detail <id> --output JSON | \
      jq '"(.networkManagementIpAddress) (.remoteManagementAccounts[0].password)"'
    Copy to Clipboard Toggle word wrap

    <id> 替换为节点的 ID。

  2. 创建用于存储集群配置的目录:

    $ mkdir ~/clusterconfigs
    Copy to Clipboard Toggle word wrap
  3. install-config.yaml 文件复制到目录中:

    $ cp install-config.yaml ~/clusterconfigs
    Copy to Clipboard Toggle word wrap
  4. 在安装 OpenShift Container Platform 集群前,请确保关闭所有裸机节点:

    $ ipmitool -I lanplus -U <user> -P <password> -H <management_server_ip> power off
    Copy to Clipboard Toggle word wrap
  5. 如果以前的部署尝试中保留了旧的 bootstrap 资源,请删除旧的 bootstrap 资源:

    for i in $(sudo virsh list | tail -n +3 | grep bootstrap | awk {'print $2'});
    do
      sudo virsh destroy $i;
      sudo virsh undefine $i;
      sudo virsh vol-delete $i --pool $i;
      sudo virsh vol-delete $i.ign --pool $i;
      sudo virsh pool-destroy $i;
      sudo virsh pool-undefine $i;
    done
    Copy to Clipboard Toggle word wrap

2.6. 其他 install-config 参数

下表列出了 install-config.yaml 文件所需的 参数hosts 参数和 bmc 参数。

Expand
表 2.1. 所需的参数
参数default描述

baseDomain

 

集群的域名。例如: example.com

bootMode

UEFI

节点的引导模式。选项为 legacyU EFI 和 UEFISecureBoot。如果没有设置 bootMode,Ironic 在检查节点时设置它。

bootstrapExternalStaticIP

 

bootstrap 虚拟机的静态 IP 地址。当 bare-metal 网络中没有 DHCP 服务器时部署使用静态 IP 地址的集群时,必须设置这个值。

bootstrapExternalStaticGateway

 

bootstrap 虚拟机网关的静态 IP 地址。当 bare-metal 网络中没有 DHCP 服务器时部署使用静态 IP 地址的集群时,必须设置这个值。

sshKey

 

sshKey 配置设置包含 ~/.ssh/id_rsa.pub 文件中访问 control plane 节点和 worker 节点所需的密钥。通常,这个密钥来自 provisioner 节点。

pullSecret

 

pullSecret 配置设置包含准备 provisioner 节点时从 Install OpenShift on Bare Metal 页面下载的 pull secret 的副本。

metadata:
    name:
Copy to Clipboard Toggle word wrap
 

提供给 OpenShift Container Platform 集群的名称。例如: openshift

networking:
    machineNetwork:
    - cidr:
Copy to Clipboard Toggle word wrap
 

外部网络的公共 CIDR(Classless Inter-Domain Routing)。例如:10.0.0.0/24

compute:
  - name: worker
Copy to Clipboard Toggle word wrap
 

OpenShift Container Platform 集群需要为 worker(或计算节点)节点提供一个名称,即使没有节点也是如此。

compute:
    replicas: 2
Copy to Clipboard Toggle word wrap
 

replicas 设置 OpenShift Container Platform 集群中 worker(或计算)节点的数量。

controlPlane:
    name: master
Copy to Clipboard Toggle word wrap
 

OpenShift Container Platform 集群需要一个 control plane(master)节点的名称。

controlPlane:
    replicas: 3
Copy to Clipboard Toggle word wrap
 

replicas 设置作为 OpenShift Container Platform 集群一部分的 control plane(master)节点数量。

provisioningNetworkInterface

 

连接到 provisioning 网络的节点上的网络接口名称。对于 OpenShift Container Platform 4.9 及更新的版本,使用 bootMACAddress 配置设置来启用 Ironic 标识 NIC 的 IP 地址,而不使用 provisioningNetworkInterface 配置设置来标识 NIC 的名称。

defaultMachinePlatform

 

用于没有平台配置的机器池的默认配置。

apiVIPs

 

(可选)用于 Kubernetes API 通信的虚拟 IP 地址。

此设置必须在 install-config.yaml 文件中作为保留的 IP,或从 DNS 中预先配置到 DNS 中,以便正确解析默认名称。在 install-config.yaml 文件中的 apiVIPs 配置设置中添加值时,请使用虚拟 IP 地址而不是 FQDN。在使用双栈网络时,主 IP 地址必须来自 IPv4 网络。如果没有设置,安装程序将使用 api.<cluster_name>.<base_domain> 从 DNS 派生 IP 地址。

注意

在 OpenShift Container Platform 4.12 之前,集群安装程序只接受 apiVIP 配置设置的 IPv4 地址或 IPv6 地址。在 OpenShift Container Platform 4.12 或更高版本中,apiVIP 配置设置已弃用。反之,使用 apiVIPs 配置设置的列表格式来指定 IPv4 地址、IPv6 地址或两个 IP 地址格式。

disableCertificateVerification

False

RedFishredfish-virtualmedia 需要这个参数来管理 BMC 地址。当 BMC 地址使用自签名证书时,这个值应该是 True

ingressVIPs

 

(可选)入口流量的虚拟 IP 地址。

此设置必须在 install-config.yaml 文件中作为保留的 IP,或从 DNS 中预先配置到 DNS 中,以便正确解析默认名称。在 install-config.yaml 文件中的 ingressVIPs 配置设置中添加值时,请使用虚拟 IP 地址而不是 FQDN。在使用双栈网络时,主 IP 地址必须来自 IPv4 网络。如果没有设置,安装程序将使用 test.apps.<cluster_name>.<base_domain> 从 DNS 派生 IP 地址。

注意

在 OpenShift Container Platform 4.12 之前,集群安装程序只接受 ingressVIP 配置设置的 IPv4 地址或 IPv6 地址。在 OpenShift Container Platform 4.12 及更新的版本中,ingressVIP 配置设置已弃用。反之,使用 ingressVIPs 配置设置的列表格式来指定 IPv4 地址、IPv6 地址或两个 IP 地址格式。

Expand
表 2.2. 可选参数
参数default描述

provisioningDHCPRange

172.22.0.10,172.22.0.100

定义 provisioning 网络上节点的 IP 范围。

provisioningNetworkCIDR

172.22.0.0/24

用于置备的网络的 CIDR。在 provisioning 网络中不使用默认地址范围时需要这个选项。

clusterProvisioningIP

provisioningNetworkCIDR 的第三个 IP 地址。

运行置备服务的集群中的 IP 地址。默认为 provisioning 子网的第三个 IP 地址。例如: 172.22.0.3

bootstrapProvisioningIP

provisioningNetworkCIDR 的第二个 IP 地址。

在安装程序部署 control plane(master)节点时运行置备服务的 bootstrap 虚拟机上的 IP 地址。默认为 provisioning 子网的第二个 IP 地址。例如: 172.22.0.2 或 2620:52:0:1307::2

externalBridge

baremetal

附加到裸机网络的虚拟机监控程序的裸机网桥名称。

provisioningBridge

provisioning

附加到 provisioning 网络的 provisioner 主机上的 provisioning 网桥的名称。

架构

 

定义集群的主机架构。有效值为 amd64arm64

defaultMachinePlatform

 

用于没有平台配置的机器池的默认配置。

bootstrapOSImage

 

用于覆盖 bootstrap 节点的默认操作系统镜像的 URL。URL 必须包含镜像的 SHA-256 哈希。例如: https://mirror.openshift.com/rhcos-<version>-qemu.qcow2.gz?sha256=<uncompressed_sha256>

provisioningNetwork

 

provisioningNetwork 配置设置决定了集群是否使用 provisioning 网络。如果存在,配置设置也会决定集群是否管理网络。

disabled :将此参数设置为 Disabled,以禁用对 provisioning 网络的要求。当设置为 Disabled 时,您必须只使用基于虚拟介质的置备,或使用支持的安装程序启动集群。如果 Disabled 并使用电源管理,则必须可以从 bare-metal 网络访问 BMC。如果 Disabled,则必须在 bare-metal 网络上提供两个用于置备服务的 IP 地址。

Managed :将此参数设置为 Managed( 默认设置),以全面管理调配网络,包括 DHCP、TFTP 等。

Unmanaged :将此参数 设置为 Unmanaged 以启用调配网络,但需要手动配置 DHCP。建议进行虚拟介质调配,但在需要时仍可使用 PXE。

httpProxy

 

将此参数设置为环境中使用的适当 HTTP 代理。

httpsProxy

 

将此参数设置为环境中使用的适当 HTTPS 代理。

noProxy

 

将此参数设置为适合环境中代理使用的排除项。

主机

hosts 参数是用于构建集群的独立裸机资产列表。

Expand
表 2.3. 主机
名称default描述

名称

 

与详细信息 关联的 BareMetalHost 资源的名称。例如: openshift-master-0

role

 

裸机节点的角色。masterworker

bmc

 

基板管理控制器的连接详情。如需了解更多详细信息,请参阅 BMC 寻址部分。

bootMACAddress

 

主机用于 provisioning 网络的 NIC 的 MAC 地址。Ironic 使用 bootMACAddress 配置设置检索 IP 地址。然后,它将绑定到 主机。

注意

如果您禁用了 provisioning 网络,则必须从主机提供有效的 MAC 地址。

networkConfig

 

设置此可选参数来配置主机的网络接口。如需了解更多详细信息,请参阅"(可选)配置主机网络接口"。

2.7. Root 设备提示

rootDeviceHints 参数可让安装程序将 Red Hat Enterprise Linux CoreOS(RHCOS)镜像置备到特定的设备。安装程序会按照发现设备的顺序检查设备,并将发现的值与 hint 值进行比较。安装程序使用第一个与 hint 值匹配的发现设备。配置可以组合多个 hint,但设备必须与所有提示匹配,以便安装程序进行选择。

Expand
表 2.4. 子字段
子字段描述

deviceName

包含 Linux 设备名称的字符串(如 /dev/vda/dev/disk/by-path/ )。建议您使用 /dev/disk/by-path/<device_path> 链接到存储位置。hint 必须与实际值完全匹配。

hctl

包含类似 0:0:0:0:0 的 SCSI 总线地址的字符串。hint 必须与实际值完全匹配。

model

包含特定厂商的设备标识符的字符串。hint 可以是实际值的子字符串。

vendor

包含该设备厂商或制造商名称的字符串。hint 可以是实际值的子字符串。

serialNumber

包含设备序列号的字符串。hint 必须与实际值完全匹配。

minSizeGigabytes

以 GB 为单位代表设备的最小大小的整数。

wwn

包含唯一存储标识符的字符串。hint 必须与实际值完全匹配。

wwnWithExtension

包含唯一存储标识符的字符串,并附加厂商扩展。hint 必须与实际值完全匹配。

wwnVendorExtension

包含唯一厂商存储标识符的字符串。hint 必须与实际值完全匹配。

rotational

指明该设备为旋转磁盘(true)还是非旋转磁盘(false)的布尔值。

示例用法

     - name: master-0
       role: master
       bmc:
         address: ipmi://10.10.0.3:6203
         username: admin
         password: redhat
       bootMACAddress: de:ad:be:ef:00:40
       rootDeviceHints:
         deviceName: "/dev/sda"
Copy to Clipboard Toggle word wrap

2.8. 创建 OpenShift Container Platform 清单

  1. 创建 OpenShift Container Platform 清单。

    $ ./openshift-baremetal-install --dir ~/clusterconfigs create manifests
    Copy to Clipboard Toggle word wrap
    INFO Consuming Install Config from target directory
    WARNING Making control-plane schedulable by setting MastersSchedulable to true for Scheduler cluster settings
    WARNING Discarding the OpenShift Manifest that was provided in the target directory because its dependencies are dirty and it needs to be regenerated
    Copy to Clipboard Toggle word wrap

运行 OpenShift Container Platform 安装程序:

$ ./openshift-baremetal-install --dir ~/clusterconfigs --log-level debug create cluster
Copy to Clipboard Toggle word wrap

2.10. 监控安装进度

在部署过程中,您可以通过向安装目录文件夹中的 .openshift_install.log 日志文件发出 tail 命令来检查安装的整体状态:

$ tail -f /path/to/install-dir/.openshift_install.log
Copy to Clipboard Toggle word wrap

Legal Notice

Copyright © 2025 Red Hat

OpenShift documentation is licensed under the Apache License 2.0 (https://www.apache.org/licenses/LICENSE-2.0).

Modified versions must remove all Red Hat trademarks.

Portions adapted from https://github.com/kubernetes-incubator/service-catalog/ with modifications by Red Hat.

Red Hat, Red Hat Enterprise Linux, the Red Hat logo, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux® is the registered trademark of Linus Torvalds in the United States and other countries.

Java® is a registered trademark of Oracle and/or its affiliates.

XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation’s permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat