×

在预配节点上安装 RHEL

完成前提条件的配置后,下一步是在预配节点上安装 RHEL 9.x。安装程序在安装 OpenShift Container Platform 集群时使用预配节点作为协调器。对于本文档的目的,在预配节点上安装 RHEL 范围之外。但是,选项包括但不限于使用 RHEL Satellite 服务器、PXE 或安装介质。

准备预配节点以安装 OpenShift Container Platform

执行以下步骤准备环境。

步骤
  1. 通过ssh登录到预配节点。

  2. 创建一个非 root 用户 (kni) 并为该用户提供sudo权限

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

    # su - kni -c "ssh-keygen -t ed25519 -f /home/kni/.ssh/id_rsa -N ''"
  4. 以新用户的身份登录配置节点

    # su - kni
  5. 使用 Red Hat Subscription Manager 注册配置节点

    $ sudo subscription-manager register --username=<user> --password=<pass> --auto-attach
    $ sudo subscription-manager repos --enable=rhel-9-for-<architecture>-appstream-rpms --enable=rhel-9-for-<architecture>-baseos-rpms

    有关 Red Hat Subscription Manager 的更多信息,请参阅 使用和配置 Red Hat Subscription Manager

  6. 安装以下软件包

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

    $ sudo usermod --append --groups libvirt <user>
  8. 重启firewalld并启用http服务

    $ sudo systemctl start firewalld
    $ sudo firewall-cmd --zone=public --add-service=http --permanent
    $ sudo firewall-cmd --reload
  9. 启动并启用libvirtd服务

    $ sudo systemctl enable libvirtd --now
  10. 创建default存储池并启动它

    $ sudo virsh pool-define-as --name default --type dir --target /var/lib/libvirt/images
    $ sudo virsh pool-start default
    $ sudo virsh pool-autostart default
  11. 创建一个pull-secret.txt文件

    $ vim pull-secret.txt

    在网络浏览器中,导航到 使用 installer-provisioned 基础架构在裸机上安装 OpenShift。点击复制拉取密钥。将内容粘贴到pull-secret.txt文件中,并将内容保存到kni用户的 home 目录。

检查 NTP 服务器同步

OpenShift Container Platform 安装程序会在集群节点上安装chrony网络时间协议 (NTP) 服务。要完成安装,每个节点都必须能够访问 NTP 时间服务器。您可以使用chrony服务验证 NTP 服务器同步。

对于断开连接的集群,必须在控制平面节点上配置 NTP 服务器。有关更多信息,请参见“其他资源”部分。

先决条件
  • 您已在目标节点上安装chrony软件包。

步骤
  1. 使用ssh命令登录到节点。

  2. 运行以下命令查看节点可用的 NTP 服务器

    $ chronyc sources
    示例输出
    MS Name/IP address         Stratum Poll Reach LastRx Last sample
    ===============================================================================
    ^+ time.cloudflare.com           3  10   377   187   -209us[ -209us] +/-   32ms
    ^+ t1.time.ir2.yahoo.com         2  10   377   185  -4382us[-4382us] +/-   23ms
    ^+ time.cloudflare.com           3  10   377   198   -996us[-1220us] +/-   33ms
    ^* brenbox.westnet.ie            1  10   377   193  -9538us[-9761us] +/-   24ms
  3. 使用ping命令确保节点可以访问 NTP 服务器,例如

    $ ping time.cloudflare.com
    示例输出
    PING time.cloudflare.com (162.159.200.123) 56(84) bytes of data.
    64 bytes from time.cloudflare.com (162.159.200.123): icmp_seq=1 ttl=54 time=32.3 ms
    64 bytes from time.cloudflare.com (162.159.200.123): icmp_seq=2 ttl=54 time=30.9 ms
    64 bytes from time.cloudflare.com (162.159.200.123): icmp_seq=3 ttl=54 time=36.7 ms
    ...

配置网络

安装前,必须在配置节点上配置网络。Installer-provisioned 集群以裸机桥和网络以及可选的配置桥和网络进行部署。

Configure networking

您也可以从 Web 控制台配置网络。

步骤
  1. 运行以下命令导出裸机网络 NIC 名称

    $ export PUB_CONN=<baremetal_nic_name>
  2. 配置裸机网络

    执行这些步骤后,SSH 连接可能会断开。

    1. 对于使用 DHCP 的网络,请运行以下命令

      $ sudo nohup bash -c "
          nmcli con down \"$PUB_CONN\"
          nmcli con delete \"$PUB_CONN\"
          # RHEL 8.1 appends the word \"System\" in front of the connection, delete in case it exists
          nmcli con down \"System $PUB_CONN\"
          nmcli con delete \"System $PUB_CONN\"
          nmcli connection add ifname baremetal type bridge <con_name> baremetal bridge.stp no (1)
          nmcli con add type bridge-slave ifname \"$PUB_CONN\" master baremetal
          pkill dhclient;dhclient baremetal
      "
      1 <con_name>替换为连接名称。
    2. 对于使用静态 IP 地址且没有 DHCP 网络的网络,请运行以下命令

      $ sudo nohup bash -c "
          nmcli con down \"$PUB_CONN\"
          nmcli con delete \"$PUB_CONN\"
          # RHEL 8.1 appends the word \"System\" in front of the connection, delete in case it exists
          nmcli con down \"System $PUB_CONN\"
          nmcli con delete \"System $PUB_CONN\"
          nmcli connection add ifname baremetal type bridge con-name baremetal bridge.stp no ipv4.method manual ipv4.addr "x.x.x.x/yy" ipv4.gateway "a.a.a.a" ipv4.dns "b.b.b.b" (1)
          nmcli con add type bridge-slave ifname \"$PUB_CONN\" master baremetal
          nmcli con up baremetal
      "
      1 <con_name>替换为连接名称。将x.x.x.x/yy替换为网络的 IP 地址和 CIDR。将a.a.a.a替换为网络网关。将b.b.b.b替换为 DNS 服务器的 IP 地址。
  3. 可选:如果您要部署配置网络,请运行以下命令导出配置网络 NIC 名称

    $ export PROV_CONN=<prov_nic_name>
  4. 可选:如果您要部署配置网络,请运行以下命令配置配置网络

    $ sudo nohup bash -c "
        nmcli con down \"$PROV_CONN\"
        nmcli con delete \"$PROV_CONN\"
        nmcli connection add ifname provisioning type bridge con-name provisioning
        nmcli con add type bridge-slave ifname \"$PROV_CONN\" master provisioning
        nmcli connection modify provisioning ipv6.addresses fd00:1101::1/64 ipv6.method manual
        nmcli con down provisioning
        nmcli con up provisioning
    "

    执行这些步骤后,SSH 连接可能会断开。

    IPv6 地址可以是任何无法通过裸机网络路由的地址。

    使用 IPv6 地址时,请确保已启用 UEFI 并将 UEFI PXE 设置设置为 IPv6 协议。

  5. 可选:如果您要部署配置网络,请运行以下命令配置配置网络上的 IPv4 地址

    $ nmcli connection modify provisioning ipv4.addresses 172.22.0.254/24 ipv4.method manual
  6. 运行以下命令重新 SSH 连接到provisioner节点(如果需要)

    # ssh kni@provisioner.<cluster-name>.<domain>
  7. 运行以下命令验证连接桥是否已正确创建

    $ sudo nmcli con show
    示例输出
    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-eno1  76a8ed50-c7e5-4999-b4f6-6d9014dd0812  ethernet  eno1
    bridge-slave-eno2  f31c3353-54b7-48de-893a-02d2b34c4736  ethernet  eno2

创建包含自定义br-ex桥的清单对象

作为使用configure-ovs.sh shell 脚本在裸机平台上设置自定义br-ex桥的替代方法,您可以创建一个包含自定义br-ex桥网络配置的MachineConfig对象。

创建包含自定义br-ex桥的MachineConfig对象只是一个技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的抢先访问,使客户能够在开发过程中测试功能并提供反馈。

有关 Red Hat 技术预览功能的支持范围的更多信息,请参见 技术预览功能支持范围

考虑创建包含自定义br-ex桥的清单对象的以下用例

  • 您想要对桥进行安装后更改,例如更改 Open vSwitch (OVS) 或 OVN-Kubernetes br-ex桥网络。configure-ovs.sh shell 脚本不支持对桥进行安装后更改。

  • 您想在与主机或服务器 IP 地址上可用的接口不同的接口上部署桥。

  • 您想对桥进行configure-ovs.sh shell 脚本无法实现的高级配置。对这些配置使用脚本可能会导致桥无法连接多个网络接口并促进接口之间的数据转发。

如果您需要具有单个网络接口控制器 (NIC) 和默认网络设置的环境,请使用configure-ovs.sh shell 脚本。

安装 Red Hat Enterprise Linux CoreOS (RHCOS) 并系统重新启动后,Machine Config Operator 会将 Ignition 配置文件注入集群中的每个节点,以便每个节点都收到br-ex桥网络配置。为避免配置冲突,configure-ovs.sh shell 脚本会收到一个信号,指示它不要配置br-ex桥。

先决条件
  • 可选:您已安装 nmstate API,以便您可以验证 NMState 配置。

步骤
  1. 创建一个 NMState 配置文件,其中包含自定义br-ex桥网络的已解码 base64 信息

    自定义br-ex桥网络的 NMState 配置示例
    interfaces:
    - name: enp2s0 (1)
      type: ethernet (2)
      state: up (3)
      ipv4:
        enabled: false (4)
      ipv6:
        enabled: false
    - name: br-ex
      type: ovs-bridge
      state: up
      ipv4:
        enabled: false
        dhcp: false
      ipv6:
        enabled: false
        dhcp: false
      bridge:
        port:
        - name: enp2s0 (5)
        - name: br-ex
    - name: br-ex
      type: ovs-interface
      state: up
      copy-mac-from: enp2s0
      ipv4:
        enabled: true
        dhcp: true
      ipv6:
        enabled: false
        dhcp: false
    # ...
    1 接口的名称。
    2 以太网的类型。
    3 创建后接口的请求状态。
    4 在此示例中禁用 IPv4 和 IPv6。
    5 桥连接到的节点 NIC。
  2. 使用cat命令对 NMState 配置的内容进行 base64 编码

    $ cat <nmstate_configuration>.yaml | base64 (1)
    1 <nmstate_configuration>替换为 NMState 资源 YAML 文件的名称。
  3. 创建一个MachineConfig清单文件,并定义类似于以下示例的自定义br-ex桥网络配置

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: worker (1)
      name: 10-br-ex-worker (2)
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
          - contents:
              source: data:text/plain;charset=utf-8;base64,<base64_encoded_nmstate_configuration> (3)
            mode: 0644
            overwrite: true
            path: /etc/nmstate/openshift/cluster.yml
    # ...
    1 对于集群中的每个节点,请指定节点的主机名路径以及机器类型的 base-64 编码的 Ignition 配置文件数据。如果您在/etc/nmstate/openshift/cluster.yml配置文件中指定了一个要应用于集群中所有节点的单个全局配置,则无需为每个节点指定主机名路径。worker角色是集群中节点的默认角色。在MachineConfig清单文件中为每个节点或所有节点指定主机名路径时,.yaml扩展名不起作用。
    2 策略的名称。
    3 将编码的 base64 信息写入指定路径。

将每个机器集扩展到计算节点

要将自定义的br-ex桥接配置应用于OpenShift Container Platform集群中的所有计算节点,必须编辑MachineConfig自定义资源(CR)并修改其角色。此外,还必须创建一个BareMetalHost CR,其中定义了裸机的信息,例如主机名、凭据等。

配置这些资源后,必须扩展机器集,以便机器集可以将资源配置应用于每个计算节点并重新启动节点。

先决条件
  • 您已创建包含自定义br-ex桥接配置的MachineConfig清单对象。

步骤
  1. 通过输入以下命令编辑MachineConfig CR

    $ oc edit mc <machineconfig_custom_resource_name>
  2. 将每个计算节点配置添加到CR中,以便CR可以管理集群中每个已定义计算节点的角色。

  3. 创建一个名为extraworker-secretSecret对象,该对象具有最小的静态IP配置。

  4. 通过输入以下命令将extraworker-secret密钥应用于集群中的每个节点。此步骤为每个计算节点提供对Ignition配置文件的访问权限。

    $ oc apply -f ./extraworker-secret.yaml
  5. 创建一个BareMetalHost资源,并在preprovisioningNetworkDataName参数中指定网络密钥。

    带有附加网络密钥的BareMetalHost资源示例
    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    spec:
    # ...
      preprovisioningNetworkDataName: ostest-extraworker-0-network-config-secret
    # ...
  6. 要在集群的openshift-machine-api命名空间中管理BareMetalHost对象,请通过输入以下命令更改到该命名空间

    $ oc project openshift-machine-api
  7. 获取机器集

    $ oc get machinesets
  8. 通过输入以下命令扩展每个机器集。必须为每个机器集运行此命令。

    $ oc scale machineset <machineset_name> --replicas=<n> (1)
    1 其中<machineset_name>是机器集的名称,<n>是计算节点的数量。

建立子网之间的通信

在典型的OpenShift Container Platform集群设置中,所有节点(包括控制平面和计算节点)都位于同一网络中。但是,对于边缘计算场景,将计算节点放置更靠近边缘可能更有益。这通常涉及为远程节点使用与控制平面和本地计算节点使用的子网不同的网络段或子网。这种设置可以减少边缘的延迟并提高可扩展性。

在安装OpenShift Container Platform之前,必须正确配置网络以确保包含远程节点的边缘子网可以访问包含控制平面节点的子网,并也能接收来自控制平面的流量。

可以通过配置用户管理的负载均衡器来代替默认负载均衡器,从而在同一子网或多个子网中运行控制平面节点。在多子网环境中,可以降低OpenShift Container Platform集群因硬件故障或网络中断而失败的风险。有关更多信息,请参见“用户管理的负载均衡器的服务”和“配置用户管理的负载均衡器”。

在多子网环境中运行控制平面节点需要完成以下关键任务

  • 通过在install-config.yaml文件的loadBalancer.type参数中指定UserManaged来配置用户管理的负载均衡器,而不是默认负载均衡器。

  • install-config.yaml文件的ingressVIPsapiVIPs参数中配置用户管理的负载均衡器地址。

  • 将多子网无类别域间路由 (CIDR) 和用户管理的负载均衡器 IP 地址添加到install-config.yaml 文件的networking.machineNetworks参数中。

部署具有多个子网的集群需要使用虚拟介质,例如redfish-virtualmediaidrac-virtualmedia

此过程详细介绍了所需的网络配置,以允许第二个子网中的远程计算节点与第一个子网中的控制平面节点有效通信,并允许第一个子网中的控制平面节点与第二个子网中的远程计算节点有效通信。

在此过程中,集群跨越两个子网

  • 第一个子网 (10.0.0.0) 包含控制平面和本地计算节点。

  • 第二个子网 (192.168.0.0) 包含边缘计算节点。

步骤
  1. 配置第一个子网以与第二个子网通信

    1. 通过运行以下命令以root用户身份登录到控制平面节点

      $ sudo su -
    2. 通过运行以下命令获取网络接口的名称

      # nmcli dev status
    3. 通过运行以下命令添加通往第二个子网 (192.168.0.0) 的路由(通过网关)

      # nmcli connection modify <interface_name> +ipv4.routes "192.168.0.0/24 via <gateway>"

      <interface_name>替换为接口名称。将<gateway>替换为实际网关的IP地址。

      示例
      # nmcli connection modify eth0 +ipv4.routes "192.168.0.0/24 via 192.168.0.1"
    4. 通过运行以下命令应用更改

      # nmcli connection up <interface_name>

      <interface_name>替换为接口名称。

    5. 验证路由表以确保已成功添加路由

      # ip route
    6. 对第一个子网中的每个控制平面节点重复上述步骤。

      调整命令以匹配您的实际接口名称和网关。

  2. 配置第二个子网以与第一个子网通信

    1. 通过运行以下命令以root用户身份登录到远程计算节点

      $ sudo su -
    2. 通过运行以下命令获取网络接口的名称

      # nmcli dev status
    3. 通过运行以下命令添加通往第一个子网 (10.0.0.0) 的路由(通过网关)

      # nmcli connection modify <interface_name> +ipv4.routes "10.0.0.0/24 via <gateway>"

      <interface_name>替换为接口名称。将<gateway>替换为实际网关的IP地址。

      示例
      # nmcli connection modify eth0 +ipv4.routes "10.0.0.0/24 via 10.0.0.1"
    4. 通过运行以下命令应用更改

      # nmcli connection up <interface_name>

      <interface_name>替换为接口名称。

    5. 通过运行以下命令验证路由表以确保已成功添加路由

      # ip route
    6. 对第二个子网中的每个计算节点重复上述步骤。

      调整命令以匹配您的实际接口名称和网关。

  3. 配置网络后,测试连接性以确保远程节点可以访问控制平面节点,并且控制平面节点可以访问远程节点。

    1. 从第一个子网中的控制平面节点 ping 第二个子网中的远程节点,运行以下命令

      $ ping <remote_node_ip_address>

      如果 ping 成功,则表示第一个子网中的控制平面节点可以访问第二个子网中的远程节点。如果未收到响应,请检查网络配置并为该节点重复此过程。

    2. 从第二个子网中的远程节点 ping 第一个子网中的控制平面节点,运行以下命令

      $ ping <control_plane_node_ip_address>

      如果 ping 成功,则表示第二个子网中的远程计算节点可以访问第一个子网中的控制平面。如果未收到响应,请检查网络配置并为该节点重复此过程。

检索OpenShift Container Platform安装程序

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

$ export VERSION=stable-4.17
$ export RELEASE_ARCH=<architecture>
$ 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}')

提取OpenShift Container Platform安装程序

获取安装程序后,下一步是解压它。

步骤
  1. 设置环境变量

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

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

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

创建 RHCOS 镜像缓存

要使用镜像缓存,您必须下载引导 VM 用于配置集群节点的 Red Hat Enterprise Linux CoreOS (RHCOS) 镜像。镜像缓存是可选的,但在网络带宽有限的情况下特别有用。

安装程序不再需要clusterOSImage RHCOS 镜像,因为正确的镜像位于发行版有效负载中。

如果您在网络带宽有限的网络上运行安装程序,并且 RHCOS 镜像下载时间超过 15 到 20 分钟,安装程序将超时。在这种情况下,在 Web 服务器上缓存镜像将有所帮助。

如果您为 HTTPD 服务器启用 TLS,则必须确认根证书已由客户端信任的机构签名,并验证 OpenShift Container Platform 集线器和辐射集群与 HTTPD 服务器之间的受信任证书链。使用配置了不受信任证书的服务器会阻止将镜像下载到镜像创建服务。不支持使用不受信任的 HTTPS 服务器。

安装包含镜像的容器。

步骤
  1. 安装podman

    $ sudo dnf install -y podman
  2. 打开防火墙端口8080,用于 RHCOS 镜像缓存

    $ sudo firewall-cmd --add-port=8080/tcp --zone=public --permanent
    $ sudo firewall-cmd --reload
  3. 创建一个目录来存储bootstraposimage

    $ mkdir /home/kni/rhcos_image_cache
  4. 为新创建的目录设置适当的 SELinux 上下文

    $ sudo semanage fcontext -a -t httpd_sys_content_t "/home/kni/rhcos_image_cache(/.*)?"
    $ sudo restorecon -Rv /home/kni/rhcos_image_cache/
  5. 获取安装程序将在引导 VM 上部署的 RHCOS 镜像的 URI

    $ export RHCOS_QEMU_URI=$(/usr/local/bin/openshift-baremetal-install coreos print-stream-json | jq -r --arg ARCH "$(arch)" '.architectures[$ARCH].artifacts.qemu.formats["qcow2.gz"].disk.location')
  6. 获取安装程序将在引导 VM 上部署的镜像的名称

    $ export RHCOS_QEMU_NAME=${RHCOS_QEMU_URI##*/}
  7. 获取将在引导 VM 上部署的 RHCOS 镜像的 SHA 哈希值

    $ export RHCOS_QEMU_UNCOMPRESSED_SHA256=$(/usr/local/bin/openshift-baremetal-install coreos print-stream-json | jq -r --arg ARCH "$(arch)" '.architectures[$ARCH].artifacts.qemu.formats["qcow2.gz"].disk["uncompressed-sha256"]')
  8. 下载镜像并将其放置在/home/kni/rhcos_image_cache目录中

    $ curl -L ${RHCOS_QEMU_URI} -o /home/kni/rhcos_image_cache/${RHCOS_QEMU_NAME}
  9. 确认新文件的 SELinux 类型为httpd_sys_content_t

    $ ls -Z /home/kni/rhcos_image_cache
  10. 创建 Pod

    $ podman run -d --name rhcos_image_cache \(1)
    -v /home/kni/rhcos_image_cache:/var/www/html \
    -p 8080:8080/tcp \
    registry.access.redhat.com/ubi9/httpd-24
    1 创建一个名为rhcos_image_cache的缓存 Web 服务器。此 Pod 提供install-config.yaml文件中用于部署的bootstrapOSImage镜像。
  11. 生成bootstrapOSImage配置

    $ export BAREMETAL_IP=$(ip addr show dev baremetal | awk '/inet /{print $2}' | cut -d"/" -f1)
    $ export BOOTSTRAP_OS_IMAGE="http://${BAREMETAL_IP}:8080/${RHCOS_QEMU_NAME}?sha256=${RHCOS_QEMU_UNCOMPRESSED_SHA256}"
    $ echo "    bootstrapOSImage=${BOOTSTRAP_OS_IMAGE}"
  12. 将所需配置添加到install-config.yaml文件中的platform.baremetal

    platform:
      baremetal:
        bootstrapOSImage: <bootstrap_os_image>  (1)
    
    1 <bootstrap_os_image>替换为$BOOTSTRAP_OS_IMAGE的值。

    有关更多详细信息,请参阅“配置 install-config.yaml 文件”部分。

用户管理的负载均衡器的服务

您可以将 OpenShift Container Platform 集群配置为使用用户管理的负载均衡器来代替默认的负载均衡器。

配置用户管理的负载均衡器取决于您的供应商的负载均衡器。

本节中的信息和示例仅供指导。有关供应商负载均衡器的更多具体信息,请咨询供应商文档。

Red Hat 支持以下用于用户管理的负载均衡器的服务

  • Ingress 控制器

  • OpenShift API

  • OpenShift MachineConfig API

您可以选择是否要为用户管理的负载均衡器配置一个或所有这些服务。仅配置 Ingress 控制器服务是一个常见的配置选项。要更好地了解每个服务,请查看以下图表

An image that shows an example network workflow of an Ingress Controller operating in an OpenShift Container Platform environment.
图 1. 显示 Ingress 控制器在 OpenShift Container Platform 环境中运行的示例网络工作流程
An image that shows an example network workflow of an OpenShift API operating in an OpenShift Container Platform environment.
图 2. 显示 OpenShift API 在 OpenShift Container Platform 环境中运行的示例网络工作流程
An image that shows an example network workflow of an OpenShift MachineConfig API operating in an OpenShift Container Platform environment.
图 3. 显示 OpenShift MachineConfig API 在 OpenShift Container Platform 环境中运行的示例网络工作流程

以下配置选项受用户管理的负载均衡器支持

  • 使用节点选择器将 Ingress 控制器映射到特定的一组节点。您必须为此集合中的每个节点分配一个静态 IP 地址,或者配置每个节点从动态主机配置协议 (DHCP) 接收相同的 IP 地址。基础架构节点通常会收到此类配置。

  • 目标子网上的所有 IP 地址。此配置可以减少维护开销,因为您可以在这些网络中创建和销毁节点而无需重新配置负载均衡器目标。如果您使用机器集在较小的网络(例如/27/28)上部署 Ingress Pod,则可以简化负载均衡器目标。

    您可以通过检查机器配置池的资源来列出网络中存在的所有 IP 地址。

在为 OpenShift Container Platform 集群配置用户管理的负载均衡器之前,请考虑以下信息

  • 对于前端 IP 地址,您可以对前端 IP 地址、Ingress 控制器的负载均衡器和 API 负载均衡器使用相同的 IP 地址。请检查供应商文档以了解此功能。

  • 对于后端 IP 地址,请确保 OpenShift Container Platform 控制平面节点的 IP 地址在用户管理的负载均衡器的生命周期内不会更改。您可以通过完成以下一项操作来实现此目的

    • 为每个控制平面节点分配一个静态 IP 地址。

    • 配置每个节点每次节点请求 DHCP 租约时都从 DHCP 接收相同的 IP 地址。根据供应商的不同,DHCP 租约可能以 IP 预留或静态 DHCP 分配的形式存在。

  • 手动定义在 Ingress 控制器用户管理的负载均衡器中运行 Ingress 控制器的每个节点。例如,如果 Ingress 控制器移动到未定义的节点,则可能会发生连接中断。

配置用户管理的负载均衡器

您可以将 OpenShift Container Platform 集群配置为使用用户管理的负载均衡器来代替默认的负载均衡器。

在配置用户管理的负载均衡器之前,请确保您已阅读“用户管理的负载均衡器的服务”部分。

阅读以下适用于您要为用户管理的负载均衡器配置的服务的先决条件。

在集群上运行的 MetalLB 充当用户管理的负载均衡器。

OpenShift API 先决条件
  • 您已定义前端 IP 地址。

  • TCP 端口 6443 和 22623 在负载均衡器的前端 IP 地址上公开。检查以下项目

    • 端口 6443 提供对 OpenShift API 服务的访问。

    • 端口 22623 可以向节点提供点火启动配置。

  • 所有系统用户都可以从 OpenShift Container Platform 集群外部的位置访问前端 IP 地址和端口 6443。

  • 只有 OpenShift Container Platform 节点才能访问前端 IP 地址和端口 22623。

  • 负载均衡器后端可以与 OpenShift Container Platform 控制平面节点在端口 6443 和 22623 上通信。

Ingress 控制器先决条件
  • 您已定义前端 IP 地址。

  • TCP 端口 443 和 80 在负载均衡器的前端 IP 地址上公开。

  • 所有系统用户都可以从 OpenShift Container Platform 集群外部的位置访问前端 IP 地址、端口 80 和端口 443。

  • OpenShift Container Platform 集群中运行的所有节点都可以访问前端 IP 地址、端口 80 和端口 443。

  • 负载均衡器后端可以与在端口 80、443 和 1936 上运行 Ingress 控制器的 OpenShift Container Platform 节点通信。

运行状况检查 URL 规范的先决条件

您可以通过设置确定服务可用或不可用的运行状况检查 URL 来配置大多数负载均衡器。OpenShift Container Platform 为 OpenShift API、机器配置 API 和 Ingress 控制器后端服务提供这些运行状况检查。

以下示例显示前面列出的后端服务的运行状况检查规范

Kubernetes API 运行状况检查规范示例
Path: HTTPS:6443/readyz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
机器配置 API 运行状况检查规范示例
Path: HTTPS:22623/healthz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10
Ingress Controller 健康检查规范示例
Path: HTTP:1936/healthz/ready
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 5
Interval: 10
步骤
  1. 配置 HAProxy Ingress Controller,以便您可以通过负载均衡器访问集群的 6443、22623、443 和 80 端口。根据您的需求,您可以在 HAProxy 配置中指定单个子网的 IP 地址或多个子网的 IP 地址。

    列出单个子网的 HAProxy 配置示例
    # ...
    listen my-cluster-api-6443
        bind 192.168.1.100:6443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /readyz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:6443 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:6443 check inter 10s rise 2 fall 2
    
    listen my-cluster-machine-config-api-22623
        bind 192.168.1.100:22623
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz
      http-check expect status 200
        server my-cluster-master-2 192.168.1.101:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-0 192.168.1.102:22623 check inter 10s rise 2 fall 2
        server my-cluster-master-1 192.168.1.103:22623 check inter 10s rise 2 fall 2
    
    listen my-cluster-apps-443
        bind 192.168.1.100:443
        mode tcp
        balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:443 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:443 check port 1936 inter 10s rise 2 fall 2
    
    listen my-cluster-apps-80
       bind 192.168.1.100:80
       mode tcp
       balance roundrobin
      option httpchk
      http-check connect
      http-check send meth GET uri /healthz/ready
      http-check expect status 200
        server my-cluster-worker-0 192.168.1.111:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-1 192.168.1.112:80 check port 1936 inter 10s rise 2 fall 2
        server my-cluster-worker-2 192.168.1.113:80 check port 1936 inter 10s rise 2 fall 2
    # ...
    列出多个子网的 HAProxy 配置示例
    # ...
    listen api-server-6443
        bind *:6443
        mode tcp
          server master-00 192.168.83.89:6443 check inter 1s
          server master-01 192.168.84.90:6443 check inter 1s
          server master-02 192.168.85.99:6443 check inter 1s
          server bootstrap 192.168.80.89:6443 check inter 1s
    
    listen machine-config-server-22623
        bind *:22623
        mode tcp
          server master-00 192.168.83.89:22623 check inter 1s
          server master-01 192.168.84.90:22623 check inter 1s
          server master-02 192.168.85.99:22623 check inter 1s
          server bootstrap 192.168.80.89:22623 check inter 1s
    
    listen ingress-router-80
        bind *:80
        mode tcp
        balance source
          server worker-00 192.168.83.100:80 check inter 1s
          server worker-01 192.168.83.101:80 check inter 1s
    
    listen ingress-router-443
        bind *:443
        mode tcp
        balance source
          server worker-00 192.168.83.100:443 check inter 1s
          server worker-01 192.168.83.101:443 check inter 1s
    
    listen ironic-api-6385
        bind *:6385
        mode tcp
        balance source
          server master-00 192.168.83.89:6385 check inter 1s
          server master-01 192.168.84.90:6385 check inter 1s
          server master-02 192.168.85.99:6385 check inter 1s
          server bootstrap 192.168.80.89:6385 check inter 1s
    
    listen inspector-api-5050
        bind *:5050
        mode tcp
        balance source
          server master-00 192.168.83.89:5050 check inter 1s
          server master-01 192.168.84.90:5050 check inter 1s
          server master-02 192.168.85.99:5050 check inter 1s
          server bootstrap 192.168.80.89:5050 check inter 1s
    # ...
  2. 使用curl CLI 命令验证用户管理的负载均衡器及其资源是否正常运行

    1. 通过运行以下命令并观察响应,验证 Kubernetes API 服务器资源是否可以访问集群机器配置 API

      $ curl https://<loadbalancer_ip_address>:6443/version --insecure

      如果配置正确,您将收到一个 JSON 对象作为响应

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
      }
    2. 通过运行以下命令并观察输出,验证机器配置服务器资源是否可以访问集群机器配置 API

      $ curl -v https://<loadbalancer_ip_address>:22623/healthz --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      Content-Length: 0
    3. 通过运行以下命令并观察输出,验证控制器是否可以通过 80 端口访问 Ingress Controller 资源

      $ curl -I -L -H "Host: console-openshift-console.apps.<cluster_name>.<base_domain>" http://<load_balancer_front_end_IP_address>

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.ocp4.private.opequon.net/
      cache-control: no-cache
    4. 通过运行以下命令并观察输出,验证控制器是否可以通过 443 端口访问 Ingress Controller 资源

      $ curl -I -L --insecure --resolve console-openshift-console.apps.<cluster_name>.<base_domain>:443:<Load Balancer Front End IP Address> https://console-openshift-console.apps.<cluster_name>.<base_domain>

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
  3. 将集群的 DNS 记录配置为指向用户管理的负载均衡器的前端 IP 地址。您必须更新集群 API 和通过负载均衡器访问的应用程序的 DNS 服务器记录。

    修改后的 DNS 记录示例
    <load_balancer_ip_address>  A  api.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End
    <load_balancer_ip_address>   A apps.<cluster_name>.<base_domain>
    A record pointing to Load Balancer Front End

    每个 DNS 记录的传播可能需要一些时间才能可用。请确保每个 DNS 记录都传播完毕后再进行验证。

  4. 为了让您的 OpenShift Container Platform 集群使用用户管理的负载均衡器,您必须在集群的install-config.yaml文件中指定以下配置

    # ...
    platform:
      baremetal:
        loadBalancer:
          type: UserManaged (1)
          apiVIPs:
          - <api_ip> (2)
          ingressVIPs:
          - <ingress_ip> (3)
    # ...
    1 type参数设置为UserManaged,以指定集群的用户管理负载均衡器。该参数默认为OpenShiftManagedDefault,表示默认的内部负载均衡器。对于在openshift-kni-infra命名空间中定义的服务,用户管理的负载均衡器可以将coredns服务部署到集群中的 Pod,但会忽略keepalivedhaproxy服务。
    2 指定用户管理负载均衡器时所需的参数。指定用户管理负载均衡器的公共 IP 地址,以便 Kubernetes API 可以与用户管理的负载均衡器通信。
    3 指定用户管理负载均衡器时所需的参数。指定用户管理负载均衡器的公共 IP 地址,以便用户管理的负载均衡器可以管理集群的入口流量。
验证
  1. 使用curl CLI 命令验证用户管理的负载均衡器和 DNS 记录配置是否正常运行

    1. 通过运行以下命令并观察输出,验证您是否可以访问集群 API

      $ curl https://api.<cluster_name>.<base_domain>:6443/version --insecure

      如果配置正确,您将收到一个 JSON 对象作为响应

      {
        "major": "1",
        "minor": "11+",
        "gitVersion": "v1.11.0+ad103ed",
        "gitCommit": "ad103ed",
        "gitTreeState": "clean",
        "buildDate": "2019-01-09T06:44:10Z",
        "goVersion": "go1.10.3",
        "compiler": "gc",
        "platform": "linux/amd64"
        }
    2. 通过运行以下命令并观察输出,验证您是否可以访问集群机器配置

      $ curl -v https://api.<cluster_name>.<base_domain>:22623/healthz --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      Content-Length: 0
    3. 通过运行以下命令并观察输出,验证您是否可以访问每个集群应用程序的端口

      $ curl http://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 302 Found
      content-length: 0
      location: https://console-openshift-console.apps.<cluster-name>.<base domain>/
      cache-control: no-cacheHTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=39HoZgztDnzjJkq/JuLJMeoKNXlfiVv2YgZc09c3TBOBU4NI6kDXaJH1LdicNhN1UsQWzon4Dor9GWGfopaTEQ==; Path=/; Secure
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Tue, 17 Nov 2020 08:42:10 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=9b714eb87e93cf34853e87a92d6894be; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private
    4. 通过运行以下命令并观察输出,验证您是否可以访问每个集群应用程序的 443 端口

      $ curl https://console-openshift-console.apps.<cluster_name>.<base_domain> -I -L --insecure

      如果配置正确,命令的输出将显示以下响应

      HTTP/1.1 200 OK
      referrer-policy: strict-origin-when-cross-origin
      set-cookie: csrf-token=UlYWOyQ62LWjw2h003xtYSKlh1a0Py2hhctw0WmV2YEdhJjFyQwWcGBsja261dGLgaYO0nxzVErhiXt6QepA7g==; Path=/; Secure; SameSite=Lax
      x-content-type-options: nosniff
      x-dns-prefetch-control: off
      x-frame-options: DENY
      x-xss-protection: 1; mode=block
      date: Wed, 04 Oct 2023 16:29:38 GMT
      content-type: text/html; charset=utf-8
      set-cookie: 1e2670d92730b515ce3a1bb65da45062=1bf5e9573c9a2760c964ed1659cc1673; path=/; HttpOnly; Secure; SameSite=None
      cache-control: private

通过 DHCP 设置集群节点主机名

在 Red Hat Enterprise Linux CoreOS (RHCOS) 机器上,NetworkManager设置主机名。默认情况下,DHCP 将主机名提供给NetworkManager,这是推荐的方法。NetworkManager在以下情况下通过反向 DNS 查询获取主机名

  • 如果 DHCP 未提供主机名

  • 如果使用内核参数设置主机名

  • 如果使用其他方法设置主机名

反向 DNS 查询发生在节点网络初始化之后,可能会增加NetworkManager设置主机名所需的时间。其他系统服务可以在NetworkManager设置主机名之前启动,这会导致这些服务使用默认主机名,例如localhost

您可以通过使用 DHCP 提供每个集群节点的主机名来避免设置主机名的延迟。此外,通过 DHCP 设置主机名可以绕过在具有 DNS 分裂视野实现的环境中手动 DNS 记录名称配置错误。

配置 install-config.yaml 文件

配置 install-config.yaml 文件

install-config.yaml文件需要一些额外的详细信息。大部分信息用于指导安装程序和生成的集群充分了解可用硬件,以便能够完全管理它。

安装程序不再需要clusterOSImage RHCOS 镜像,因为正确的镜像位于发行版有效负载中。

  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 (1)
    controlPlane:
      name: master
      replicas: 3
      platform:
        baremetal: {}
    platform:
      baremetal:
        apiVIPs:
          - <api_ip>
        ingressVIPs:
          - <wildcard_ip>
        provisioningNetworkCIDR: <CIDR>
        bootstrapExternalStaticIP: <bootstrap_static_ip_address> (2)
        bootstrapExternalStaticGateway: <bootstrap_static_gateway> (3)
        bootstrapExternalStaticDNS: <bootstrap_static_dns> (4)
        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: ipmi://<out_of_band_ip> (5)
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>" (6)
          - name: <openshift_master_1>
            role: master
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>"
          - name: <openshift_master_2>
            role: master
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>"
          - name: <openshift_worker_0>
            role: worker
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
          - name: <openshift_worker_1>
            role: worker
            bmc:
              address: ipmi://<out_of_band_ip>
              username: <user>
              password: <password>
            bootMACAddress: <NIC1_mac_address>
            rootDeviceHints:
             deviceName: "<installation_disk_drive_path>"
    pullSecret: '<pull_secret>'
    sshKey: '<ssh_pub_key>'
    1 根据属于 OpenShift Container Platform 集群的计算节点数量来调整计算机器的规模。replicas值的有效选项为0和大于等于2的整数。将副本数设置为0以部署一个三节点集群,该集群仅包含三个控制平面机器。三节点集群是一个更小、更节省资源的集群,可用于测试、开发和生产。您不能只用一个计算节点安装集群。
    2 当部署具有静态 IP 地址的集群时,如果裸机网络上没有 DHCP 服务器,则必须设置bootstrapExternalStaticIP配置设置以指定引导 VM 的静态 IP 地址。
    3 当部署具有静态 IP 地址的集群时,如果裸机网络上没有 DHCP 服务器,则必须设置bootstrapExternalStaticGateway配置设置以指定引导 VM 的网关 IP 地址。
    4 当部署具有静态 IP 地址的集群时,如果裸机网络上没有 DHCP 服务器,则必须设置bootstrapExternalStaticDNS配置设置以指定引导 VM 的 DNS 地址。
    5 有关更多选项,请参阅 BMC 地址章节。
    6 要设置安装磁盘驱动器的路径,请输入磁盘的内核名称。例如,/dev/sda

    由于磁盘发现顺序无法保证,因此对于有多个磁盘的机器,磁盘的内核名称在不同启动选项之间可能会发生变化。例如,/dev/sda 变为 /dev/sdb,反之亦然。为避免此问题,必须使用持久性磁盘属性,例如磁盘世界范围名称 (WWN) 或 /dev/disk/by-path/。建议使用指向存储位置的 /dev/disk/by-path/ 链接。要使用磁盘 WWN,请将 deviceName 参数替换为 wwnWithExtension 参数。根据您使用的参数,输入以下值之一:

    • 磁盘名称。例如,/dev/sda/dev/disk/by-path/

    • 磁盘 WWN。例如,"0x64cd98f04fde100024684cf3034da5c2"。请确保将磁盘 WWN 值用引号括起来,以便将其用作字符串值而不是十六进制值。

    未满足 rootDeviceHints 参数的这些要求可能会导致以下错误:

    ironic-inspector inspection failed: No disks satisfied root device hints

    在 OpenShift Container Platform 4.12 之前,集群安装程序仅接受 apiVIPingressVIP 配置设置的 IPv4 地址或 IPv6 地址。在 OpenShift Container Platform 4.12 及更高版本中,这些配置设置已弃用。请改用 apiVIPsingressVIPs 配置设置中的列表格式来指定 IPv4 地址、IPv6 地址或两种 IP 地址格式。

  2. 创建一个目录来存储集群配置。

    $ mkdir ~/clusterconfigs
  3. install-config.yaml 文件复制到新目录。

    $ cp install-config.yaml ~/clusterconfigs
  4. 在安装 OpenShift Container Platform 集群之前,确保所有裸机节点都已关闭电源。

    $ ipmitool -I lanplus -U <user> -P <password> -H <management-server-ip> power off
  5. 删除先前部署尝试中遗留的旧引导资源(如有)。

    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

其他 install-config 参数

有关 install-config.yaml 文件的必需参数、hosts 参数和 bmc 参数,请参见下表。

表 1. 必需参数
参数 默认值 描述

baseDomain

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

bootMode

UEFI

节点的启动模式。选项包括 legacyUEFIUEFISecureBoot。如果未设置 bootMode,则 Ironic 会在检查节点时设置它。

bootstrapExternalStaticDNS

引导节点的静态网络 DNS。当在裸机网络上没有动态主机配置协议 (DHCP) 服务器时,使用静态 IP 地址部署集群时,必须设置此值。如果不设置此值,安装程序将使用 bootstrapExternalStaticGateway 中的值,这会在网关和 DNS 的 IP 地址值不同时导致问题。

bootstrapExternalStaticIP

引导虚拟机的静态 IP 地址。当在裸机网络上没有 DHCP 服务器时,使用静态 IP 地址部署集群时,必须设置此值。

bootstrapExternalStaticGateway

引导虚拟机的网关的静态 IP 地址。当在裸机网络上没有 DHCP 服务器时,使用静态 IP 地址部署集群时,必须设置此值。

sshKey

sshKey 配置设置包含访问控制平面节点和计算节点所需的 ~/.ssh/id_rsa.pub 文件中的密钥。通常,此密钥来自 provisioner 节点。

pullSecret

pullSecret 配置设置包含从 在裸机上安装 OpenShift 页面下载的拉取密钥的副本,在准备供应程序节点时下载。

metadata:
    name:

要赋予 OpenShift Container Platform 集群的名称。例如,openshift

networking:
    machineNetwork:
    - cidr:

外部网络的公共 CIDR(无类域间路由)。例如,10.0.0.0/24

compute:
  - name: worker

即使没有节点,OpenShift Container Platform 集群也需要为计算节点提供名称。

compute:
    replicas: 2

Replicas 设置 OpenShift Container Platform 集群中计算节点的数量。

controlPlane:
    name: master

OpenShift Container Platform 集群需要为控制平面节点提供名称。

controlPlane:
    replicas: 3

Replicas 设置作为 OpenShift Container Platform 集群一部分包含的控制平面节点的数量。

provisioningNetworkInterface

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

defaultMachinePlatform

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

apiVIPs

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

此设置必须在 install-config.yaml 文件中作为 MachineNetwork 中的保留 IP 提供,或者在 DNS 中预先配置,以便默认名称正确解析。在 install-config.yaml 文件中向 apiVIPs 配置设置添加值时,请使用虚拟 IP 地址而不是 FQDN。使用双栈网络时,主 IP 地址必须来自 IPv4 网络。如果未设置,安装程序将使用 api.. 从 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 文件中作为 MachineNetwork 中的保留 IP 提供,或者在 DNS 中预先配置,以便默认名称正确解析。在 install-config.yaml 文件中向 ingressVIPs 配置设置添加值时,请使用虚拟 IP 地址而不是 FQDN。使用双栈网络时,主 IP 地址必须来自 IPv4 网络。如果未设置,安装程序将使用 test.apps.. 从 DNS 获取 IP 地址。

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

表 2. 可选参数
参数 默认值 描述

provisioningDHCPRange

172.22.0.10,172.22.0.100

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

provisioningNetworkCIDR

172.22.0.0/24

用于供应的网络的 CIDR。在不使用供应网络上的默认地址范围时,此选项是必需的。

clusterProvisioningIP

provisioningNetworkCIDR 的第三个 IP 地址。

集群中运行供应服务的 IP 地址。默认为供应子网的第三个 IP 地址。例如,172.22.0.3

bootstrapProvisioningIP

provisioningNetworkCIDR 的第二个 IP 地址。

安装程序部署控制平面(主节点)时,供应服务运行的引导 VM 上的 IP 地址。默认为供应子网的第二个 IP 地址。例如,172.22.0.22620:52:0:1307::2

外部桥接器

裸机

连接到裸机网络的虚拟机管理程序的裸机桥接器的名称。

供应桥接器

供应

provisioner 主机上连接到供应网络的供应桥接器的名称。

架构

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

defaultMachinePlatform

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

引导操作系统镜像

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

供应网络

provisioningNetwork 配置设置决定集群是否使用供应网络。如果使用,该配置设置还决定集群是否管理网络。

已禁用:将此参数设置为 已禁用 可禁用对供应网络的要求。设置为 已禁用 时,您只能使用基于虚拟介质的供应,或使用辅助安装程序启动集群。如果设置为 已禁用 并使用电源管理,则必须从裸机网络访问 BMC。如果设置为 已禁用,则必须在裸机网络上提供两个用于供应服务的 IP 地址。

已管理:将此参数设置为 已管理(默认值)以完全管理供应网络,包括 DHCP、TFTP 等。

未管理:将此参数设置为 未管理 以启用供应网络,但需手动配置 DHCP。建议使用虚拟介质供应,但如果需要,PXE 仍然可用。

HTTP 代理

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

HTTPS 代理

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

无代理

将此参数设置为环境中代理使用情况的适当排除列表。

主机

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

表 3. 主机
名称 默认值 描述

名称

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

角色

裸机节点的角色。master(控制平面节点)或 worker(计算节点)。

BMC

主板管理控制器的连接详细信息。有关更多详细信息,请参阅 BMC寻址部分。

引导 MAC 地址

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

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

网络配置

设置此可选参数以配置主机的网络接口。有关更多详细信息,请参阅“(可选) 配置主机网络接口”。

BMC 寻址

大多数供应商都支持使用智能平台管理接口 (IPMI) 进行主板管理控制器 (BMC) 寻址。IPMI 不加密通信。它适用于在安全或专用管理网络上的数据中心中使用。请咨询您的供应商以了解他们是否支持 Redfish 网络启动。Redfish 为融合的混合 IT 和软件定义数据中心 (SDDC) 提供简单安全的管理。Redfish 可供人和机器读取,并利用通用的互联网和 Web 服务标准将信息直接公开给现代工具链。如果您的硬件不支持 Redfish 网络启动,请使用 IPMI。

在节点处于 注册中 状态时,您可以在安装过程中修改 BMC 地址。如果需要在节点离开 注册中 状态后修改 BMC 地址,则必须从 Ironic 断开节点连接,编辑 BareMetalHost 资源,然后将节点重新连接到 Ironic。有关详细信息,请参阅“编辑 BareMetalHost 资源”部分。

IPMI

使用 IPMI 的主机使用 ipmi://<out-of-band-ip>:<port> 地址格式,如果未指定,则默认为端口 623。以下示例演示了 install-config.yaml 文件中的 IPMI 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: ipmi://<out-of-band-ip>
          username: <user>
          password: <password>

使用 IPMI 进行 BMC 寻址时,PXE 引导需要 provisioning 网络。如果没有 provisioning 网络,则无法 PXE 引导主机。如果在没有 provisioning 网络的情况下部署,则必须使用虚拟介质 BMC 寻址选项,例如 redfish-virtualmediaidrac-virtualmedia。有关更多详细信息,请参阅“BMC addressing for HPE iLO”部分中的“HPE iLO 的 Redfish 虚拟介质”或“BMC addressing for Dell iDRAC”部分中的“Dell iDRAC 的 Redfish 虚拟介质”。

Redfish 网络启动

要启用 Redfish,请使用 redfish://redfish+http:// 来禁用 TLS。安装程序需要主机名或 IP 地址以及系统 ID 的路径。以下示例演示了 install-config.yaml 文件中的 Redfish 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>

虽然建议为带外管理地址拥有证书颁发机构证书,但如果使用自签名证书,则必须在 bmc 配置中包含 disableCertificateVerification: True。以下示例演示了在 install-config.yaml 文件中使用 disableCertificateVerification: True 配置参数的 Redfish 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
          disableCertificateVerification: True

验证对 Redfish API 的支持

在使用 Redfish API 进行安装时,安装程序在使用裸机上的安装程序预配基础设施时,会在主板管理控制器 (BMC) 上调用多个 Redfish 端点。如果使用 Redfish,请确保您的 BMC 在安装前支持所有 Redfish API。

步骤
  1. 运行以下命令设置 BMC 的 IP 地址或主机名

    $ export SERVER=<ip_address> (1)
    1 <ip_address> 替换为 BMC 的 IP 地址或主机名。
  2. 运行以下命令设置系统的 ID

    $ export SystemID=<system_id> (1)
    1 <system_id> 替换为系统 ID。例如,System.Embedded.11。有关详细信息,请参阅以下特定于供应商的 BMC 部分。
Redfish API 列表
  1. 运行以下命令检查 电源开启 支持

    $ curl -u $USER:$PASS -X POST -H'Content-Type: application/json' -H'Accept: application/json' -d '{"ResetType": "On"}' https://$SERVER/redfish/v1/Systems/$SystemID/Actions/ComputerSystem.Reset
  2. 运行以下命令检查 电源关闭 支持

    $ curl -u $USER:$PASS -X POST -H'Content-Type: application/json' -H'Accept: application/json' -d '{"ResetType": "ForceOff"}' https://$SERVER/redfish/v1/Systems/$SystemID/Actions/ComputerSystem.Reset
  3. 运行以下命令检查使用 pxe 的临时引导实现

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json"  https://$Server/redfish/v1/Systems/$SystemID/ -d '{"Boot": {"BootSourceOverrideTarget": "pxe", "BootSourceOverrideEnabled": "Once"}}
  4. 运行以下命令检查使用 LegacyUEFI 设置 BIOS 引导模式的状态

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json"  https://$Server/redfish/v1/Systems/$SystemID/ -d '{"Boot": {"BootSourceOverrideMode":"UEFI"}}
Redfish 虚拟介质 API 列表
  1. 运行以下命令检查使用 cddvd 设置临时引导设备的能力

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json" https://$Server/redfish/v1/Systems/$SystemID/ -d '{"Boot": {"BootSourceOverrideTarget": "cd", "BootSourceOverrideEnabled": "Once"}}'
  2. 运行以下命令检查挂载虚拟介质的能力

    $ curl -u $USER:$PASS -X PATCH -H "Content-Type: application/json" -H "If-Match: *" https://$Server/redfish/v1/Managers/$ManagerID/VirtualMedia/$VmediaId -d '{"Image": "https://example.com/test.iso", "TransferProtocolType": "HTTPS", "UserName": "", "Password":""}'

Redfish API 的 PowerOnPowerOff 命令与 Redfish 虚拟介质 API 的命令相同。

HTTPSHTTPTransferProtocolTypes 支持的唯一参数类型。

Dell iDRAC 的 BMC 寻址

每个 bmc 条目的 address 字段是用于连接到 OpenShift Container Platform 集群节点的 URL,包括 URL 方案中的控制器类型及其在网络上的位置。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> (1)
          username: <user>
          password: <password>
1 address 配置设置指定协议。

对于 Dell 硬件,Red Hat 支持集成 Dell 远程访问控制器 (iDRAC) 虚拟介质、Redfish 网络启动和 IPMI。

Dell iDRAC 的 BMC 地址格式

协议 地址格式

iDRAC 虚拟介质

idrac-virtualmedia://<带外IP>/redfish/v1/Systems/System.Embedded.1

Redfish 网络启动

redfish://<带外IP>/redfish/v1/Systems/System.Embedded.1

IPMI

ipmi://<带外IP>

对于Redfish虚拟介质,请使用idrac-virtualmedia作为协议。redfish-virtualmedia在戴尔硬件上无效。戴尔的idrac-virtualmedia使用Redfish标准以及戴尔的OEM扩展。

更多详情,请参见以下章节。

戴尔iDRAC的Redfish虚拟介质

对于戴尔服务器上的Redfish虚拟介质,请在address设置中使用idrac-virtualmedia://。使用redfish-virtualmedia://无效。

对于Redfish虚拟介质,请使用idrac-virtualmedia://作为协议。在戴尔硬件上,使用redfish-virtualmedia://无效,因为idrac-virtualmedia://协议对应于Ironic中的idrac硬件类型和Redfish协议。戴尔的idrac-virtualmedia://协议使用Redfish标准以及戴尔的OEM扩展。Ironic也支持使用WSMAN协议的idrac类型。因此,在选择在戴尔硬件上使用Redfish和虚拟介质时,必须指定idrac-virtualmedia://以避免出现意外行为。

以下示例演示如何在install-config.yaml文件中使用iDRAC虚拟介质。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: idrac-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>

虽然建议为带外管理地址使用证书颁发机构颁发的证书,但如果使用自签名证书,则必须在bmc配置中包含disableCertificateVerification: True

确保OpenShift Container Platform集群节点通过iDRAC控制台启用了**自动连接**(AutoAttach)。菜单路径为:**配置** → **虚拟介质** → **连接模式** → **自动连接**。

以下示例演示了在install-config.yaml文件中使用disableCertificateVerification: True配置参数的Redfish配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: idrac-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>
          disableCertificateVerification: True

iDRAC的Redfish网络启动

要启用Redfish,请使用redfish://redfish+http://来禁用传输层安全(TLS)。安装程序需要主机名或IP地址以及系统ID的路径。以下示例演示了在install-config.yaml文件中进行Redfish配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>

虽然建议为带外管理地址拥有证书颁发机构证书,但如果使用自签名证书,则必须在 bmc 配置中包含 disableCertificateVerification: True。以下示例演示了在 install-config.yaml 文件中使用 disableCertificateVerification: True 配置参数的 Redfish 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/System.Embedded.1
          username: <user>
          password: <password>
          disableCertificateVerification: True

戴尔iDRAC 9固件版本04.40.00.00以及所有版本(包括5.xx系列)在裸机部署的安装程序配置安装中存在已知问题。虚拟控制台插件默认为eHTML5(HTML5的增强版本),这会导致**InsertVirtualMedia**工作流程出现问题。将插件设置为使用HTML5以避免此问题。菜单路径为:**配置** → **虚拟控制台** → **插件类型** → **HTML5**。

确保OpenShift Container Platform集群节点通过iDRAC控制台启用了**自动连接**(AutoAttach)。菜单路径为:**配置** → **虚拟介质** → **连接模式** → **自动连接**。

HPE iLO的BMC寻址

每个 bmc 条目的 address 字段是用于连接到 OpenShift Container Platform 集群节点的 URL,包括 URL 方案中的控制器类型及其在网络上的位置。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> (1)
          username: <user>
          password: <password>
1 address 配置设置指定协议。

对于HPE集成式Lights Out (iLO),Red Hat支持Redfish虚拟介质、Redfish网络启动和IPMI。

表4. HPE iLO的BMC地址格式
协议 地址格式

Redfish虚拟介质

redfish-virtualmedia://<带外IP>/redfish/v1/Systems/1

Redfish 网络启动

redfish://<带外IP>/redfish/v1/Systems/1

IPMI

ipmi://<带外IP>

更多详情,请参见以下章节。

HPE iLO的Redfish虚拟介质

要为HPE服务器启用Redfish虚拟介质,请在address设置中使用redfish-virtualmedia://。以下示例演示如何在install-config.yaml文件中使用Redfish虚拟介质。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>

虽然建议为带外管理地址拥有证书颁发机构证书,但如果使用自签名证书,则必须在 bmc 配置中包含 disableCertificateVerification: True。以下示例演示了在 install-config.yaml 文件中使用 disableCertificateVerification: True 配置参数的 Redfish 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
          disableCertificateVerification: True

在运行iLO4的第九代系统上不支持Redfish虚拟介质,因为Ironic不支持带有虚拟介质的iLO4。

HPE iLO的Redfish网络启动

要启用 Redfish,请使用 redfish://redfish+http:// 来禁用 TLS。安装程序需要主机名或 IP 地址以及系统 ID 的路径。以下示例演示了 install-config.yaml 文件中的 Redfish 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>

虽然建议为带外管理地址拥有证书颁发机构证书,但如果使用自签名证书,则必须在 bmc 配置中包含 disableCertificateVerification: True。以下示例演示了在 install-config.yaml 文件中使用 disableCertificateVerification: True 配置参数的 Redfish 配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish://<out-of-band-ip>/redfish/v1/Systems/1
          username: <user>
          password: <password>
          disableCertificateVerification: True

富士通iRMC的BMC寻址

每个 bmc 条目的 address 字段是用于连接到 OpenShift Container Platform 集群节点的 URL,包括 URL 方案中的控制器类型及其在网络上的位置。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> (1)
          username: <user>
          password: <password>
1 address 配置设置指定协议。

对于富士通硬件,Red Hat支持集成式远程管理控制器(iRMC)和IPMI。

表5. 富士通iRMC的BMC地址格式
协议 地址格式

iRMC

irmc://<带外IP>

IPMI

ipmi://<带外IP>

iRMC

富士通节点可以使用irmc://<带外IP>,默认端口为443。以下示例演示如何在install-config.yaml文件中配置iRMC。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: irmc://<out-of-band-ip>
          username: <user>
          password: <password>

目前,富士通支持iRMC S5固件版本3.05P及以上版本用于裸机上的安装程序配置安装。

思科CIMC的BMC寻址

每个 bmc 条目的 address 字段是用于连接到 OpenShift Container Platform 集群节点的 URL,包括 URL 方案中的控制器类型及其在网络上的位置。

platform:
  baremetal:
    hosts:
      - name: <hostname>
        role: <master | worker>
        bmc:
          address: <address> (1)
          username: <user>
          password: <password>
1 address 配置设置指定协议。

对于思科UCS C系列和X系列服务器,Red Hat支持思科集成管理控制器(CIMC)。

表6. 思科CIMC的BMC地址格式
协议 地址格式

Redfish虚拟介质

redfish-virtualmedia://<服务器KVM IP>/redfish/v1/Systems/<序列号>

要为思科UCS C系列和X系列服务器启用Redfish虚拟介质,请在address设置中使用redfish-virtualmedia://。以下示例演示如何在install-config.yaml文件中使用Redfish虚拟介质。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<server_kvm_ip>/redfish/v1/Systems/<serial_number>
          username: <user>
          password: <password>

虽然建议为带外管理地址使用证书颁发机构颁发的证书,但如果使用自签名证书,则必须在bmc配置中包含disableCertificateVerification: True。以下示例演示了在install-config.yaml文件中使用disableCertificateVerification: True配置参数进行Redfish配置。

platform:
  baremetal:
    hosts:
      - name: openshift-master-0
        role: master
        bmc:
          address: redfish-virtualmedia://<server_kvm_ip>/redfish/v1/Systems/<serial_number>
          username: <user>
          password: <password>
          disableCertificateVerification: True

根设备提示

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

表7. 子字段
子字段 描述

deviceName

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

hctl

包含SCSI总线地址(如0:0:0:0)的字符串。提示必须与实际值完全匹配。

model

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

vendor

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

serialNumber

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

minSizeGigabytes

表示设备最小大小(以GB为单位)的整数。

wwn

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

wwnWithExtension

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

wwnVendorExtension

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

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"

设置代理设置

要使用代理部署 OpenShift Container Platform 集群,请对install-config.yaml文件进行以下更改。

步骤
  1. proxy键映射下添加代理值

    apiVersion: v1
    baseDomain: <domain>
    proxy:
      httpProxy: http://USERNAME:[email protected]:PORT
      httpsProxy: https://USERNAME:[email protected]:PORT
      noProxy: <WILDCARD_OF_DOMAIN>,<PROVISIONING_NETWORK/CIDR>,<BMC_ADDRESS_RANGE/CIDR>

    以下是包含值的noProxy示例。

    noProxy: .example.com,172.22.0.0/24,10.10.0.0/24
  2. 启用代理后,在相应的键值对中设置代理的适当值。

    关键注意事项

    • 如果代理没有 HTTPS 代理,请将httpsProxy的值从https://更改为http://

    • 如果集群使用预配网络,请将其包含在noProxy设置中,否则安装程序将失败。

    • 将所有代理设置都设置为预配节点中的环境变量。例如,HTTP_PROXYHTTPS_PROXYNO_PROXY

无预配网络部署

要部署没有provisioning网络的 OpenShift Container Platform 集群,请对install-config.yaml文件进行以下更改。

platform:
  baremetal:
    apiVIPs:
      - <api_VIP>
    ingressVIPs:
      - <ingress_VIP>
    provisioningNetwork: "Disabled" (1)
1 如有需要,添加provisioningNetwork配置设置,并将其设置为Disabled

PXE 启动需要provisioning网络。如果您在没有provisioning网络的情况下进行部署,则必须使用虚拟介质 BMC寻址选项,例如redfish-virtualmediaidrac-virtualmedia。有关更多详细信息,请参阅“HPE iLO 的 BMC 寻址”部分中的“HPE iLO 的 Redfish 虚拟介质”或“Dell iDRAC 的 BMC 寻址”部分中的“Dell iDRAC 的 Redfish 虚拟介质”。

双栈网络部署

对于 OpenShift Container Platform 集群中的双栈网络,您可以为集群节点配置 IPv4 和 IPv6 地址端点。要为集群节点配置 IPv4 和 IPv6 地址端点,请编辑install-config.yaml文件中的machineNetworkclusterNetworkserviceNetwork配置设置。每个设置都必须分别包含两个 CIDR 条目。对于以 IPv4 族作为主地址族的集群,请先指定 IPv4 设置。对于以 IPv6 族作为主地址族的集群,请先指定 IPv6 设置。

machineNetwork:
- cidr: {{ extcidrnet }}
- cidr: {{ extcidrnet6 }}
clusterNetwork:
- cidr: 10.128.0.0/14
  hostPrefix: 23
- cidr: fd02::/48
  hostPrefix: 64
serviceNetwork:
- 172.30.0.0/16
- fd03::/112

在裸机平台上,如果您在install-config.yaml文件的networkConfig部分中指定了 NMState 配置,请将interfaces.wait-ip: ipv4+ipv6添加到 NMState YAML 文件中,以解决阻止您的集群在双栈网络上部署的问题。

包含wait-ip参数的示例 NMState YAML 配置文件
networkConfig:
  nmstate:
    interfaces:
    - name: <interface_name>
# ...
      wait-ip: ipv4+ipv6
# ...

要为使用 IPv4 和 IPv6 地址的应用程序提供集群接口,请为 Ingress VIP 和 API VIP 服务配置 IPv4 和 IPv6 虚拟 IP (VIP) 地址端点。要配置 IPv4 和 IPv6 地址端点,请编辑install-config.yaml文件中的apiVIPsingressVIPs配置设置。apiVIPsingressVIPs配置设置使用列表格式。列表的顺序指示每项服务的 primary 和 secondary VIP 地址。

platform:
  baremetal:
    apiVIPs:
      - <api_ipv4>
      - <api_ipv6>
    ingressVIPs:
      - <wildcard_ipv4>
      - <wildcard_ipv6>

对于具有双栈网络配置的集群,必须将 IPv4 和 IPv6 地址都分配给同一个接口。

配置主机网络接口

安装前,您可以设置install-config.yaml文件中的networkConfig配置设置,以使用 NMState 配置主机网络接口。

此功能最常见的用例是在裸机网络上指定静态 IP 地址,但您也可以配置其他网络,例如存储网络。此功能支持其他 NMState 功能,例如 VLAN、VXLAN、桥接、绑定、路由、MTU 和 DNS 解析器设置。

先决条件
  • 为每个具有静态 IP 地址的节点配置具有有效主机名的PTR DNS 记录。

  • 安装 NMState CLI (nmstate)。

步骤
  1. 可选:在将其包含在install-config.yaml文件中之前,请考虑使用nmstatectl gc测试 NMState 语法,因为安装程序不会检查 NMState YAML 语法。

    YAML 语法中的错误可能导致网络配置应用失败。此外,在部署后使用 Kubernetes NMState 应用更改或扩展集群时,维护经过验证的 YAML 语法非常有用。

    1. 创建一个 NMState YAML 文件

      interfaces:
      - name: <nic1_name> (1)
        type: ethernet
        state: up
        ipv4:
          address:
          - ip: <ip_address> (1)
            prefix-length: 24
          enabled: true
      dns-resolver:
        config:
          server:
          - <dns_ip_address> (1)
      routes:
        config:
        - destination: 0.0.0.0/0
          next-hop-address: <next_hop_ip_address> (1)
          next-hop-interface: <next_hop_nic1_name> (1)
      1 <nic1_name><ip_address><dns_ip_address><next_hop_ip_address><next_hop_nic1_name>替换为适当的值。
    2. 运行以下命令测试配置文件

      $ nmstatectl gc <nmstate_yaml_file>

      <nmstate_yaml_file>替换为配置文件名。

  2. 通过将 NMState 配置添加到install-config.yaml文件中的主机来使用networkConfig配置设置

        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: redfish+http://<out_of_band_ip>/redfish/v1/Systems/
              username: <user>
              password: <password>
              disableCertificateVerification: null
            bootMACAddress: <NIC1_mac_address>
            bootMode: UEFI
            rootDeviceHints:
              deviceName: "/dev/sda"
            networkConfig: (1)
              interfaces:
              - name: <nic1_name> (2)
                type: ethernet
                state: up
                ipv4:
                  address:
                  - ip: <ip_address> (2)
                    prefix-length: 24
                  enabled: true
              dns-resolver:
                config:
                  server:
                  - <dns_ip_address> (2)
              routes:
                config:
                - destination: 0.0.0.0/0
                  next-hop-address: <next_hop_ip_address> (2)
                  next-hop-interface: <next_hop_nic1_name> (2)
    1 添加 NMState YAML 语法以配置主机接口。
    2 <nic1_name><ip_address><dns_ip_address><next_hop_ip_address><next_hop_nic1_name>替换为适当的值。

    部署集群后,无法修改install-config.yaml文件的networkConfig配置设置来更改主机网络接口。部署后,请使用 Kubernetes NMState 运算符来更改主机网络接口。

为子网配置主机网络接口

对于边缘计算场景,将计算节点放置在更靠近边缘的位置可能是有益的。要定位子网中的远程节点,您可能使用与控制平面子网和本地计算节点不同的网络段或子网来容纳远程节点。通过为边缘计算场景设置子网,您可以减少延迟并提高可扩展性。

当使用默认负载均衡器OpenShiftManagedDefault并将远程节点添加到 OpenShift Container Platform 集群时,所有控制平面节点都必须运行在同一子网中。当使用多个子网时,您也可以通过使用清单来配置 Ingress VIP 在控制平面节点上运行。有关详细信息,请参阅“配置在控制平面上运行的网络组件”。

如果您已为远程节点建立了不同的网络段或子网(如“建立子网之间的通信”部分所述),则如果工作节点使用静态 IP 地址、绑定或其他高级网络,则必须在machineNetwork配置设置中指定这些子网。当使用静态 IP 地址在每个远程节点的networkConfig参数中设置节点 IP 地址时,还必须指定包含控制平面的子网的网关和 DNS 服务器。这确保远程节点可以访问包含控制平面的子网,并且可以接收来自控制平面的网络流量。

部署具有多个子网的集群需要使用虚拟介质,例如redfish-virtualmediaidrac-virtualmedia,因为远程节点无法访问本地预配网络。

步骤
  1. 当使用静态 IP 地址时,请将子网添加到install-config.yaml文件中的machineNetwork

    networking:
      machineNetwork:
      - cidr: 10.0.0.0/24
      - cidr: 192.168.0.0/24
      networkType: OVNKubernetes
  2. 当使用静态 IP 地址或高级网络(如绑定)时,请使用 NMState 语法将网关和 DNS 配置添加到每个边缘计算节点的networkConfig参数中

    networkConfig:
      interfaces:
      - name: <interface_name> (1)
        type: ethernet
        state: up
        ipv4:
          enabled: true
          dhcp: false
          address:
          - ip: <node_ip> (2)
            prefix-length: 24
          gateway: <gateway_ip> (3)
      dns-resolver:
        config:
          server:
          - <dns_ip> (4)
    1 <interface_name>替换为接口名称。
    2 <node_ip>替换为节点的 IP 地址。
    3 <gateway_ip>替换为网关的 IP 地址。
    4 <dns_ip>替换为 DNS 服务器的 IP 地址。

为双栈网络中的 SLAAC 配置地址生成模式

对于使用无状态地址自动配置 (SLAAC) 的双栈集群,必须为ipv6.addr-gen-mode网络设置指定全局值。您可以使用 NMState 设置此值来配置 RAM 磁盘和集群配置文件。如果您未在这些位置配置一致的ipv6.addr-gen-mode,则集群中 CSR 资源和BareMetalHost资源之间可能会出现 IPv6 地址不匹配。

先决条件
  • 安装 NMState CLI (nmstate)。

步骤
  1. 可选:在将 NMState YAML 语法包含到 `install-config.yaml` 文件中之前,请考虑使用 `nmstatectl gc` 命令测试该语法,因为安装程序不会检查 NMState YAML 语法。

    1. 创建一个 NMState YAML 文件

      interfaces:
      - name: eth0
        ipv6:
          addr-gen-mode: <address_mode> (1)
      1 将 `<address_mode>` 替换为集群中 IPv6 地址所需的地址生成模式类型。有效值为 `eui64`、`stable-privacy` 或 `random`。
    2. 运行以下命令测试配置文件

      $ nmstatectl gc <nmstate_yaml_file> (1)
      1 将 `<nmstate_yaml_file>` 替换为测试配置文件的名称。
  2. 将 NMState 配置添加到 `install-config.yaml` 文件中 `hosts.networkConfig` 部分。

        hosts:
          - name: openshift-master-0
            role: master
            bmc:
              address: redfish+http://<out_of_band_ip>/redfish/v1/Systems/
              username: <user>
              password: <password>
              disableCertificateVerification: null
            bootMACAddress: <NIC1_mac_address>
            bootMode: UEFI
            rootDeviceHints:
              deviceName: "/dev/sda"
            networkConfig:
              interfaces:
              - name: eth0
                ipv6:
                  addr-gen-mode: <address_mode> (1)
    ...
    1 将 `<address_mode>` 替换为集群中 IPv6 地址所需的地址生成模式类型。有效值为 `eui64`、`stable-privacy` 或 `random`。

为双端口网卡配置主机网络接口

安装前,您可以使用 NMState 设置 `install-config.yaml` 文件中的 `networkConfig` 配置设置来配置主机网络接口,以支持双端口网卡。

OpenShift Virtualization 只支持以下绑定模式:

  • mode=1 active-backup

  • mode=2 balance-xor

  • mode=4 802.3ad

先决条件
  • 为每个具有静态 IP 地址的节点配置具有有效主机名的PTR DNS 记录。

  • 安装 NMState CLI (nmstate)。

YAML 语法错误可能导致网络配置应用失败。此外,在部署后使用 Kubernetes NMState 应用更改或扩展集群时,维护经过验证的 YAML 语法非常有用。

步骤
  1. 将 NMState 配置添加到 `install-config.yaml` 文件中 `hosts` 内的 `networkConfig` 字段。

        hosts:
          - name: worker-0
            role: worker
            bmc:
              address: redfish+http://<out_of_band_ip>/redfish/v1/Systems/
              username: <user>
              password: <password>
              disableCertificateVerification: false
            bootMACAddress: <NIC1_mac_address>
            bootMode: UEFI
            networkConfig: (1)
              interfaces: (2)
               - name: eno1 (3)
                 type: ethernet (4)
                 state: up
                 mac-address: 0c:42:a1:55:f3:06
                 ipv4:
                   enabled: true
                   dhcp: false (5)
                 ethernet:
                   sr-iov:
                     total-vfs: 2 (6)
                 ipv6:
                   enabled: false
                   dhcp: false
               - name: sriov:eno1:0
                 type: ethernet
                 state: up (7)
                 ipv4:
                   enabled: false (8)
                 ipv6:
                   enabled: false
               - name: sriov:eno1:1
                 type: ethernet
                 state: down
               - name: eno2
                 type: ethernet
                 state: up
                 mac-address: 0c:42:a1:55:f3:07
                 ipv4:
                   enabled: true
                 ethernet:
                   sr-iov:
                     total-vfs: 2
                 ipv6:
                   enabled: false
               - name: sriov:eno2:0
                 type: ethernet
                 state: up
                 ipv4:
                   enabled: false
                 ipv6:
                   enabled: false
               - name: sriov:eno2:1
                 type: ethernet
                 state: down
               - name: bond0
                 type: bond
                 state: up
                 min-tx-rate: 100 (9)
                 max-tx-rate: 200 (10)
                 link-aggregation:
                   mode: active-backup (11)
                   options:
                     primary: sriov:eno1:0 (12)
                   port:
                     - sriov:eno1:0
                     - sriov:eno2:0
                 ipv4:
                   address:
                     - ip: 10.19.16.57 (13)
                       prefix-length: 23
                   dhcp: false
                   enabled: true
                 ipv6:
                   enabled: false
              dns-resolver:
                config:
                  server:
                    - 10.11.5.160
                    - 10.2.70.215
              routes:
                config:
                  - destination: 0.0.0.0/0
                    next-hop-address: 10.19.17.254
                    next-hop-interface: bond0 (14)
                    table-id: 254
    1 `networkConfig` 字段包含有关主机网络配置的信息,其子字段包括 `interfaces`、`dns-resolver` 和 `routes`。
    2 `interfaces` 字段是为主机定义的网络接口数组。
    3 接口名称。
    4 接口类型。此示例创建一个以太网接口。
    5 如果不需要,将其设置为 `false` 以禁用物理功能 (PF) 的 DHCP。
    6 设置为要实例化的 SR-IOV 虚拟功能 (VF) 的数量。
    7 将其设置为 `up`。
    8 将其设置为 `false` 以禁用附加到绑定的 VF 的 IPv4 地址。
    9 设置 VF 的最小传输速率(以 Mbps 为单位)。此示例值设置 100 Mbps 的速率。
    • 此值必须小于或等于最大传输速率。

    • 英特尔网卡不支持 `min-tx-rate` 参数。有关更多信息,请参见 BZ#1772847

    10 设置 VF 的最大传输速率(以 Mbps 为单位)。此示例值设置 200 Mbps 的速率。
    11 设置所需的绑定模式。
    12 设置绑定接口的首选端口。绑定使用主设备作为绑定接口的第一个设备。除非主设备接口发生故障,否则绑定不会放弃主设备接口。当绑定接口中的一个网卡速度更快,因此能够处理更大的负载时,此设置特别有用。此设置仅在绑定接口处于 active-backup 模式 (mode 1) 和 balance-tlb (mode 5) 时有效。
    13 为绑定接口设置静态 IP 地址。这是节点 IP 地址。
    14 将 `bond0` 设置为默认路由的网关。

    部署集群后,您无法更改 `install-config.yaml` 文件的 `networkConfig` 配置设置来更改主机网络接口。部署后,请使用 Kubernetes NMState 运算符来更改主机网络接口。

其他资源

配置多个集群节点

您可以同时使用相同的设置配置 OpenShift Container Platform 集群节点。配置多个集群节点避免为 `install-config.yaml` 文件中的每个节点添加冗余信息。此文件包含将相同配置应用于集群中多个节点的特定参数。

计算节点与控制器节点的配置方式不同。但是,两种节点类型的配置都使用 `install-config.yaml` 文件中突出显示的参数来启用多节点配置。将 `networkConfig` 参数设置为 `BOND`,如下例所示

hosts:
- name: ostest-master-0
 [...]
 networkConfig: &BOND
   interfaces:
   - name: bond0
     type: bond
     state: up
     ipv4:
       dhcp: true
       enabled: true
     link-aggregation:
       mode: active-backup
       port:
       - enp2s0
       - enp3s0
- name: ostest-master-1
 [...]
 networkConfig: *BOND
- name: ostest-master-2
 [...]
 networkConfig: *BOND

仅在安装程序预配的基础架构上的初始部署中才可以使用多个集群节点的配置。

配置受管理的安全启动

使用 Redfish BMC寻址(例如 `redfish`、`redfish-virtualmedia` 或 `idrac-virtualmedia`)部署安装程序预配的集群时,您可以启用受管理的安全启动。要启用受管理的安全启动,请将 `bootMode` 配置设置添加到每个节点

示例
hosts:
  - name: openshift-master-0
    role: master
    bmc:
      address: redfish://<out_of_band_ip> (1)
      username: <username>
      password: <password>
    bootMACAddress: <NIC1_mac_address>
    rootDeviceHints:
     deviceName: "/dev/sda"
    bootMode: UEFISecureBoot (2)
1 确保 `bmc.address` 设置使用 `redfish`、`redfish-virtualmedia` 或 `idrac-virtualmedia` 作为协议。有关更多详细信息,请参阅“HPE iLO 的 BMC 寻址”或“Dell iDRAC 的 BMC 寻址”。
2 `bootMode` 设置默认为 `UEFI`。将其更改为 `UEFISecureBoot` 以启用受管理的安全启动。

请参阅“先决条件”中的“配置节点”,以确保节点可以支持受管理的安全启动。如果节点不支持受管理的安全启动,请参阅“配置节点”部分中的“手动配置节点以进行安全启动”。手动配置安全启动需要 Redfish 虚拟媒体。

Red Hat 不支持使用 IPMI 进行安全启动,因为 IPMI 不提供安全启动管理功能。

清单配置文件

创建 OpenShift Container Platform 清单

  1. 创建 OpenShift Container Platform 清单。

    $ ./openshift-baremetal-install --dir ~/clusterconfigs create manifests
    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

为断开连接的集群配置 NTP

OpenShift Container Platform 在集群节点上安装 `chrony` 网络时间协议 (NTP) 服务。

Configuring NTP for disconnected clusters

OpenShift Container Platform 节点必须就日期和时间达成一致才能正常运行。当计算节点从控制平面节点上的 NTP 服务器检索日期和时间时,它可以启用未连接到可路由网络且因此无法访问更高层 NTP 服务器的集群的安装和操作。

步骤
  1. 使用以下命令在安装主机上安装 Butane

    $ sudo dnf -y install butane
  2. 创建一个 Butane 配置文件 `99-master-chrony-conf-override.bu`,其中包含控制平面节点 `chrony.conf` 文件的内容。

    有关 Butane 的信息,请参阅“使用 Butane 创建机器配置”。

    Butane 配置示例
    variant: openshift
    version: 4.17.0
    metadata:
      name: 99-master-chrony-conf-override
      labels:
        machineconfiguration.openshift.io/role: master
    storage:
      files:
        - path: /etc/chrony.conf
          mode: 0644
          overwrite: true
          contents:
            inline: |
              # Use public servers from the pool.ntp.org project.
              # Please consider joining the pool (https://www.pool.ntp.org/join.html).
    
              # The Machine Config Operator manages this file
              server openshift-master-0.<cluster-name>.<domain> iburst (1)
              server openshift-master-1.<cluster-name>.<domain> iburst
              server openshift-master-2.<cluster-name>.<domain> iburst
    
              stratumweight 0
              driftfile /var/lib/chrony/drift
              rtcsync
              makestep 10 3
              bindcmdaddress 127.0.0.1
              bindcmdaddress ::1
              keyfile /etc/chrony.keys
              commandkey 1
              generatecommandkey
              noclientlog
              logchange 0.5
              logdir /var/log/chrony
    
              # Configure the control plane nodes to serve as local NTP servers
              # for all compute nodes, even if they are not in sync with an
              # upstream NTP server.
    
              # Allow NTP client access from the local network.
              allow all
              # Serve time even if not synchronized to a time source.
              local stratum 3 orphan
    1 您必须将 `<cluster-name>` 替换为集群的名称,并将 `<domain>` 替换为完全限定域名。
  3. 使用 Butane 生成一个 `MachineConfig` 对象文件 `99-master-chrony-conf-override.yaml`,其中包含要传递给控制平面节点的配置。

    $ butane 99-master-chrony-conf-override.bu -o 99-master-chrony-conf-override.yaml
  4. 创建一个 Butane 配置文件 `99-worker-chrony-conf-override.bu`,其中包含引用控制平面节点上 NTP 服务器的计算节点 `chrony.conf` 文件的内容。

    Butane 配置示例
    variant: openshift
    version: 4.17.0
    metadata:
      name: 99-worker-chrony-conf-override
      labels:
        machineconfiguration.openshift.io/role: worker
    storage:
      files:
        - path: /etc/chrony.conf
          mode: 0644
          overwrite: true
          contents:
            inline: |
              # The Machine Config Operator manages this file.
              server openshift-master-0.<cluster-name>.<domain> iburst (1)
              server openshift-master-1.<cluster-name>.<domain> iburst
              server openshift-master-2.<cluster-name>.<domain> iburst
    
              stratumweight 0
              driftfile /var/lib/chrony/drift
              rtcsync
              makestep 10 3
              bindcmdaddress 127.0.0.1
              bindcmdaddress ::1
              keyfile /etc/chrony.keys
              commandkey 1
              generatecommandkey
              noclientlog
              logchange 0.5
              logdir /var/log/chrony
    1 您必须将 `<cluster-name>` 替换为集群的名称,并将 `<domain>` 替换为完全限定域名。
  5. 使用 Butane 生成一个 `MachineConfig` 对象文件 `99-worker-chrony-conf-override.yaml`,其中包含要传递给工作节点的配置。

    $ butane 99-worker-chrony-conf-override.bu -o 99-worker-chrony-conf-override.yaml

配置在控制平面运行的网络组件

您可以配置网络组件以仅在控制平面节点上运行。默认情况下,OpenShift Container Platform 允许机器配置池中的任何节点托管 `ingressVIP` 虚拟 IP 地址。但是,某些环境会在与控制平面节点不同的子网上部署计算节点,这需要将 `ingressVIP` 虚拟 IP 地址配置为在控制平面节点上运行。

在不同的子网上部署远程节点时,必须将 `ingressVIP` 虚拟 IP 地址专门放置在控制平面节点上。

Installer-provisioned networking
步骤
  1. 更改到存储 `install-config.yaml` 文件的目录

    $ cd ~/clusterconfigs
  2. 切换到 `manifests` 子目录

    $ cd manifests
  3. 创建一个名为cluster-network-avoid-workers-99-config.yaml的文件。

    $ touch cluster-network-avoid-workers-99-config.yaml
  4. 在编辑器中打开cluster-network-avoid-workers-99-config.yaml文件,并输入描述 Operator 配置的自定义资源 (CR)。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      name: 50-worker-fix-ipi-rwn
      labels:
        machineconfiguration.openshift.io/role: worker
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          files:
            - path: /etc/kubernetes/manifests/keepalived.yaml
              mode: 0644
              contents:
                source: data:,

    此清单将ingressVIP虚拟 IP 地址放置在控制平面节点上。此外,此清单仅在控制平面节点上部署以下进程:

    • openshift-ingress-operator

    • keepalived

  5. 保存cluster-network-avoid-workers-99-config.yaml文件。

  6. 创建一个manifests/cluster-ingress-default-ingresscontroller.yaml文件。

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: default
      namespace: openshift-ingress-operator
    spec:
      nodePlacement:
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/master: ""
  7. 建议备份manifests目录。安装程序在创建集群时会删除manifests/目录。

  8. 修改cluster-scheduler-02-config.yml清单,通过将mastersSchedulable字段设置为true来使控制平面节点可调度。默认情况下,控制平面节点不可调度。例如:

    $ sed -i "s;mastersSchedulable: false;mastersSchedulable: true;g" clusterconfigs/manifests/cluster-scheduler-02-config.yml

    如果完成此过程后控制平面节点仍然不可调度,则集群部署将失败。

在计算节点上部署路由器

安装过程中,安装程序会在计算节点上部署路由器 pod。默认情况下,安装程序会安装两个路由器 pod。如果已部署的集群需要额外的路由器来处理目标为 OpenShift Container Platform 集群内服务的外部流量负载,您可以创建一个yaml文件来设置适当数量的路由器副本。

不支持仅使用一个计算节点部署集群。虽然修改路由器副本可以解决使用一个计算节点部署时出现的degraded状态问题,但集群会失去 Ingress API 的高可用性,这对于生产环境来说并不适用。

默认情况下,安装程序会部署两个路由器。如果集群没有计算节点,安装程序默认会在控制平面节点上部署这两个路由器。

步骤
  1. 创建一个router-replicas.yaml文件。

    apiVersion: operator.openshift.io/v1
    kind: IngressController
    metadata:
      name: default
      namespace: openshift-ingress-operator
    spec:
      replicas: <num-of-router-pods>
      endpointPublishingStrategy:
        type: HostNetwork
      nodePlacement:
        nodeSelector:
          matchLabels:
            node-role.kubernetes.io/worker: ""

    <num-of-router-pods>替换为适当的值。如果只使用一个计算节点,请将replicas:设置为1。如果使用超过 3 个计算节点,您可以根据需要从默认值2增加replicas:

  2. 保存并将router-replicas.yaml文件复制到clusterconfigs/openshift目录。

    $ cp ~/router-replicas.yaml clusterconfigs/openshift/99_router-replicas.yaml

配置 BIOS

以下过程在安装过程中配置 BIOS。

步骤
  1. 创建清单。

  2. 修改与节点对应的BareMetalHost资源文件。

    $ vim clusterconfigs/openshift/99_openshift-cluster-api_hosts-*.yaml
  3. 将 BIOS 配置添加到BareMetalHost资源的spec部分。

    spec:
      firmware:
        simultaneousMultithreadingEnabled: true
        sriovEnabled: true
        virtualizationEnabled: true

    Red Hat 支持三种 BIOS 配置。目前仅支持 BMC 类型为irmc的服务器。其他类型的服务器目前不支持。

  4. 创建集群。

配置 RAID

以下过程在安装过程中使用基板管理控制器 (BMC) 配置冗余独立磁盘阵列 (RAID)。

如果您想为节点配置硬件 RAID,请验证节点是否具有受支持的 RAID 控制器。OpenShift Container Platform 4.17 不支持软件 RAID。

表 8. 按供应商划分的硬件 RAID 支持
供应商 BMC 和协议 固件版本 RAID 级别

富士通

iRMC

N/A

0、1、5、6 和 10

戴尔

具有 Redfish 的 iDRAC

6.10.30.20 版或更高版本

0、1 和 5

步骤
  1. 创建清单。

  2. 修改与节点对应的BareMetalHost资源。

    $ vim clusterconfigs/openshift/99_openshift-cluster-api_hosts-*.yaml

    以下示例使用硬件 RAID 配置,因为 OpenShift Container Platform 4.17 不支持软件 RAID。

    1. 如果您在spec部分添加了特定的 RAID 配置,这会导致节点在preparing阶段删除原始 RAID 配置,并在 RAID 上执行指定的配置。例如:

      spec:
        raid:
          hardwareRAIDVolumes:
          - level: "0" (1)
            name: "sda"
            numberOfPhysicalDisks: 1
            rotational: true
            sizeGibibytes: 0
      1 level是必填字段,其他字段是可选字段。
    2. 如果您在spec部分添加了空的 RAID 配置,则空配置会导致节点在preparing阶段删除原始 RAID 配置,但不执行新的配置。例如:

      spec:
        raid:
          hardwareRAIDVolumes: []
    3. 如果您没有在spec部分添加raid字段,则不会删除原始 RAID 配置,也不会执行新的配置。

  3. 创建集群。

配置节点上的存储

您可以通过创建由 Machine Config Operator (MCO) 管理的MachineConfig对象来更改 OpenShift Container Platform 节点上的操作系统。

MachineConfig规范包括一个用于在第一次启动时配置机器的 ignition 配置。此配置对象可用于修改文件、systemd 服务以及在 OpenShift Container Platform 机器上运行的其他操作系统功能。

步骤

使用 ignition 配置来配置节点上的存储。以下MachineSet清单示例演示了如何在主节点上的设备上添加分区。在此示例中,请在安装之前应用清单,以便在主节点上拥有一个名为recovery、大小为 16 GiB 的分区。

  1. 创建一个custom-partitions.yaml文件,并包含一个包含分区布局的MachineConfig对象。

    apiVersion: machineconfiguration.openshift.io/v1
    kind: MachineConfig
    metadata:
      labels:
        machineconfiguration.openshift.io/role: primary
      name: 10_primary_storage_config
    spec:
      config:
        ignition:
          version: 3.2.0
        storage:
          disks:
            - device: </dev/xxyN>
              partitions:
                - label: recovery
                  startMiB: 32768
                  sizeMiB: 16384
          filesystems:
            - device: /dev/disk/by-partlabel/recovery
              label: recovery
              format: xfs
  2. 保存并将custom-partitions.yaml文件复制到clusterconfigs/openshift目录。

    $ cp ~/<MachineConfig_manifest> ~/clusterconfigs/openshift

创建脱机注册表

在某些情况下,您可能希望使用安装注册表的本地副本安装 OpenShift Container Platform 集群。这可能是为了提高网络效率,因为集群节点位于无法访问互联网的网络上。

注册表的本地副本(或镜像副本)需要以下内容:

  • 注册表节点的证书。这可以是自签名证书。

  • 系统上的容器将使用的 Web 服务器。

  • 包含证书和本地存储库信息的更新后的拉取密钥。

在注册表节点上创建脱机注册表是可选的。如果您需要在注册表节点上创建脱机注册表,则必须完成以下所有子部分。

先决条件

准备注册表节点以托管镜像注册表

在裸机上搭建镜像注册中心之前,必须完成以下步骤。

步骤
  1. 打开注册中心节点上的防火墙端口

    $ sudo firewall-cmd --add-port=5000/tcp --zone=libvirt  --permanent
    $ sudo firewall-cmd --add-port=5000/tcp --zone=public   --permanent
    $ sudo firewall-cmd --reload
  2. 安装注册中心节点所需的软件包

    $ sudo yum -y install python3 podman httpd httpd-tools jq
  3. 创建存储仓库信息的目录结构

    $ sudo mkdir -p /opt/registry/{auth,certs,data}

为断开连接的注册中心镜像OpenShift Container Platform镜像仓库

完成以下步骤以镜像OpenShift Container Platform镜像仓库到断开连接的注册中心。

先决条件
  • 您的镜像主机可以访问互联网。

  • 您已配置了一个在受限网络中使用的镜像注册中心,并且可以访问您配置的证书和凭据。

  • 您已从Red Hat OpenShift集群管理器下载了拉取密钥,并对其进行了修改,使其包含对镜像仓库的认证。

步骤
  1. 查看OpenShift Container Platform下载页面以确定要安装的OpenShift Container Platform版本,并在仓库标签页面上确定相应的标签。

  2. 设置所需的環境變量

    1. 导出发行版本

      $ OCP_RELEASE=<release_version>

      对于<release_version>,指定与要安装的OpenShift Container Platform版本相对应的标签,例如4.5.4

    2. 导出本地注册中心名称和主机端口

      $ LOCAL_REGISTRY='<local_registry_host_name>:<local_registry_host_port>'

      对于<local_registry_host_name>,指定镜像仓库的注册中心域名;对于<local_registry_host_port>,指定其提供内容的端口。

    3. 导出本地仓库名称

      $ LOCAL_REPOSITORY='<local_repository_name>'

      对于<local_repository_name>,指定要在注册中心中创建的仓库名称,例如ocp4/openshift4

    4. 导出要镜像的仓库名称

      $ PRODUCT_REPO='openshift-release-dev'

      对于生产版本,必须指定openshift-release-dev

    5. 导出注册中心拉取密钥的路径

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'

      对于<path_to_pull_secret>,指定您创建的镜像注册中心拉取密钥的绝对路径和文件名。

    6. 导出发行版镜像

      $ RELEASE_NAME="ocp-release"

      对于生产版本,必须指定ocp-release

    7. 导出集群的架构类型

      $ ARCHITECTURE=<cluster_architecture> (1)
      1 指定集群的架构,例如x86_64aarch64s390xppc64le
    8. 导出托管镜像的目录路径

      $ REMOVABLE_MEDIA_PATH=<path> (1)
      1 指定完整路径,包括初始正斜杠 (/) 字符。
  3. 将版本镜像镜像到镜像注册中心

    • 如果您的镜像主机无法访问互联网,请执行以下操作

      1. 将可移动介质连接到已连接到互联网的系统。

      2. 查看要镜像的镜像和配置清单

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON}  \
             --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \
             --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
             --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE} --dry-run
      3. 记录前面命令输出中的整个imageContentSources部分。关于镜像的信息对于您的镜像仓库是唯一的,您必须在安装过程中将imageContentSources部分添加到install-config.yaml文件中。

      4. 将镜像镜像到可移动介质上的目录

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON} --to-dir=${REMOVABLE_MEDIA_PATH}/mirror quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE}
      5. 将介质带到受限网络环境,并将镜像上传到本地容器注册中心。

        $ oc image mirror -a ${LOCAL_SECRET_JSON} --from-dir=${REMOVABLE_MEDIA_PATH}/mirror "file://openshift/release:${OCP_RELEASE}*" ${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} (1)
        1 对于REMOVABLE_MEDIA_PATH,您必须使用镜像镜像时指定的相同路径。
    • 如果本地容器注册中心已连接到镜像主机,请执行以下操作

      1. 使用以下命令直接将发行版镜像推送到本地注册中心

        $ oc adm release mirror -a ${LOCAL_SECRET_JSON}  \
             --from=quay.io/${PRODUCT_REPO}/${RELEASE_NAME}:${OCP_RELEASE}-${ARCHITECTURE} \
             --to=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY} \
             --to-release-image=${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}

        此命令将发行版信息作为摘要拉取,其输出包含安装集群时所需的imageContentSources数据。

      2. 记录前面命令输出中的整个imageContentSources部分。关于镜像的信息对于您的镜像仓库是唯一的,您必须在安装过程中将imageContentSources部分添加到install-config.yaml文件中。

        在镜像过程中,镜像名称会被修补到 Quay.io,并且 podman 镜像将在引导虚拟机上的注册中心中显示 Quay.io。

  4. 要创建基于您镜像的内容的安装程序,请将其解压缩并固定到发行版

    • 如果您的镜像主机无法访问互联网,请运行以下命令

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-baremetal-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}"
    • 如果本地容器注册中心已连接到镜像主机,请运行以下命令

      $ oc adm release extract -a ${LOCAL_SECRET_JSON} --command=openshift-baremetal-install "${LOCAL_REGISTRY}/${LOCAL_REPOSITORY}:${OCP_RELEASE}-${ARCHITECTURE}"

      为确保您使用的是为所选OpenShift Container Platform版本选择的正确镜像,必须从镜像内容中提取安装程序。

      必须在具有活动互联网连接的机器上执行此步骤。

      如果处于断开连接的环境中,请使用--image标志作为must-gather的一部分,并指向有效负载镜像。

  5. 对于使用安装程序预配基础设施的集群,请运行以下命令

    $ openshift-baremetal-install

修改install-config.yaml文件以使用断开连接的注册中心

在供应程序节点上,install-config.yaml文件应使用pull-secret-update.txt文件中新创建的拉取密钥。install-config.yaml文件还必须包含断开连接的注册中心节点的证书和注册中心信息。

步骤
  1. 将断开连接的注册中心节点的证书添加到install-config.yaml文件中

    $ echo "additionalTrustBundle: |" >> install-config.yaml

    证书应位于"additionalTrustBundle: |"行之后,并正确缩进,通常缩进两个空格。

    $ sed -e 's/^/  /' /opt/registry/certs/domain.crt >> install-config.yaml
  2. 将注册中心的镜像信息添加到install-config.yaml文件中

    $ echo "imageContentSources:" >> install-config.yaml
    $ echo "- mirrors:" >> install-config.yaml
    $ echo "  - registry.example.com:5000/ocp4/openshift4" >> install-config.yaml

    registry.example.com替换为注册中心的完全限定域名。

    $ echo "  source: quay.io/openshift-release-dev/ocp-release" >> install-config.yaml
    $ echo "- mirrors:" >> install-config.yaml
    $ echo "  - registry.example.com:5000/ocp4/openshift4" >> install-config.yaml

    registry.example.com替换为注册中心的完全限定域名。

    $ echo "  source: quay.io/openshift-release-dev/ocp-v4.0-art-dev" >> install-config.yaml

安装验证清单

  • 已检索OpenShift Container Platform安装程序。

  • 已解压缩OpenShift Container Platform安装程序。

  • 已配置install-config.yaml所需的參數。

  • 已配置install-config.yamlhosts参数。

  • 已配置install-config.yamlbmc参数。

  • 已应用bmc address字段中配置值的约定。

  • 已创建OpenShift Container Platform清单。

  • (可选) 在计算节点上部署路由器。

  • (可选) 创建断开连接的注册中心。

  • (可选) 如果正在使用,请验证断开连接的注册中心设置。