14.3. 为 OpenShift 安装设置环境


14.3.1. 在置备程序节点上安装 RHEL

完成先决条件后,下一步是在置备程序节点上安装 RHEL 9.x。安装 OpenShift Container Platform 集群时,安装程序使用 provisioner 节点作为编配器。在本文档中,在 provisioner 节点上安装 RHEL 超出了范围。但是,选项包括但不限于使用 RHEL Satellite 服务器、PXE 或安装介质。

14.3.2. 为 OpenShift Container Platform 安装准备 provisioner 节点

执行以下步骤准备环境。

流程

  1. 通过 ssh 登录到 provisioner 节点。
  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. 以新用户身份登录到 provisioner 节点:

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

    $ 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. 创建 默认 存储池并启动它:

    $ 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

    在 Web 浏览器中,进入 Install OpenShift on Bare Metal with installer-provisioned infrastructure。点 Copy pull secret。将内容粘贴到 pull-secret.txt 文件中,并将内容保存到 kni 用户的主目录中。

14.3.3. 检查 NTP 服务器同步

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

对于断开连接的集群,您必须在 control plane 节点上配置 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
    ...

14.3.4. 配置网络

在安装前,您必须在 provisioner 节点上配置网络。安装程序置备的集群使用裸机网桥和网络部署,以及可选的 provisioning 网桥和网络。

配置网络
注意

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

流程

  1. 导出裸机网络 NIC 名称:

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

    注意

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

    $ 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
        nmcli con add type bridge-slave ifname \"$PUB_CONN\" master baremetal
        pkill dhclient;dhclient baremetal
    "
  3. 可选:如果您使用 provisioning 网络部署,请导出 provisioning 网络 NIC 名称:

    $ export PROV_CONN=<prov_nic_name>
  4. 可选: 如果要使用 provisioning 网络部署,请配置 provisioning 网络:

    $ 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 连接可能会断开。

    只要无法通过 bare-meta 网络路由,IPv6 地址可以是任何地址。

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

  5. 可选:如果您使用 provisioning 网络部署,请在 provisioning 网络连接中配置 IPv4 地址:

    $ nmcli connection modify provisioning ipv4.addresses 172.22.0.254/24 ipv4.method manual
  6. sshprovisioner 节点(如果需要)。

    # 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

14.3.4.1. 可选:创建包含一个自定义 br-ex 网桥的清单对象

除了使用 configure-ovs.sh shell 脚本在裸机平台上设置自定义 br-ex 网桥,一个替代的选择是创建一个包括自定义 br-ex 网桥网络配置的 MachineConfig 对象。

重要

创建包含一个自定义 br-ex 网桥的 MachineConfig 对象只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

请考虑以下用例:创建包含自定义 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. 为您的自定义 br-ex 网桥网络创建一个使用 base64 信息的 NMState 配置文件:

    自定义 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 信息写入指定路径。

14.3.4.2. 可选:将每个机器集扩展到计算节点

要将自定义 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 secret 应用到集群中的每个节点。此步骤提供每个计算节点对 Ignition 配置文件的访问权限。

    $ oc apply -f ./extraworker-secret.yaml
  5. 创建 BareMetalHost 资源并在 preprovisioningNetworkDataName 参数中指定网络 secret:

    带有附加网络 secret 的 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> 是计算节点的数量。

14.3.5. 在子网间建立通信

在典型的 OpenShift Container Platform 集群设置中,所有节点(包括 control plane 和计算节点)都驻留在同一网络中。但是,对于边缘计算场景,定位接近边缘的计算节点会很有用。这通常涉及将不同的网络段或子网用于与 control plane 和本地计算节点使用的子网不同的网络段或子网。此类设置可以降低边缘的延迟并允许增强的可扩展性。

在安装 OpenShift Container Platform 前,您必须正确配置网络,以确保包含远程节点的边缘子网可以访问包含 control plane 节点的子网,并从 control plane 接收流量。

您可以通过配置用户管理的负载均衡器来代替默认负载均衡器,在同一子网或多个子网中运行 control plane 节点。使用多个子网环境,您可以降低 OpenShift Container Platform 集群因为硬件故障或网络中断而失败的问题。如需更多信息,请参阅"配置用户管理的负载均衡器"和"配置用户管理的负载均衡器"。

在多个子网环境中运行 control plane 节点需要完成以下关键任务:

  • 通过在 install-config.yaml 文件的 loadBalancer.type 参数中指定 UserManaged 来配置用户管理的负载均衡器,而不是默认的负载均衡器。
  • install-config.yaml 文件的 ingressVIPsapiVIPs 参数中配置用户管理的负载均衡器地址。
  • 将多个子网无类别域间路由 (CIDR) 和用户管理的负载均衡器 IP 地址添加到 install-config.yaml 文件中的 networking.machineNetworks 参数。
注意

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

此流程详细介绍了允许第二个子网中的远程计算节点与第一个子网中的 control plane 节点有效通信所需的网络配置,并允许第一个子网中的 control plane 节点与第二个子网中的远程 worker 节点有效通信。

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

  • 第一个子网 (10.0.0.0) 包含 control plane 和本地计算节点。
  • 第二个子网 (192.168.0.0) 包含边缘计算节点。

流程

  1. 配置第一个子网与第二个子网通信:

    1. 运行以下命令,以 root 用户身份登录 control plane 节点:

      $ 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> 替换为接口名称。使用实际网关的 IP 地址替换 <gateway>

      示例

      # 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. 对第一个子网中的每个 control plane 节点重复前面的步骤。

      注意

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

  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> 替换为接口名称。使用实际网关的 IP 地址替换 <gateway>

      示例

      # 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. 配置网络后,测试连接以确保远程节点可以访问 control plane 节点,control plane 节点可以访问远程节点。

    1. 从第一个子网中的 control plane 节点,运行以下命令来 ping 第二个子网中的远程节点:

      $ ping <remote_node_ip_address>

      如果 ping 成功,则意味着第一个子网中的 control plane 节点可以访问第二个子网中的远程节点。如果您没有收到响应,请检查网络配置并重复该节点的步骤。

    2. 在第二个子网中的远程节点中,运行以下命令来 ping 第一个子网中的 control plane 节点:

      $ ping <control_plane_node_ip_address>

      如果 ping 成功,则意味着第二个子网中的远程计算节点可以访问第一个子网中的 control plane。如果您没有收到响应,请检查网络配置并重复该节点的步骤。

14.3.6. 检索 OpenShift Container Platform 安装程序

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

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

14.3.7. 提取 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

14.3.8. 可选:创建 RHCOS 镜像缓存

要使用镜像缓存,您必须下载 bootstrap 虚拟机使用的 Red Hat Enterprise Linux CoreOS(RHCOS)镜像,以置备集群节点。镜像缓存是可选的,但在有限带宽的网络中运行安装程序时特别有用。

注意

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

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

警告

如果为 HTTPD 服务器启用 TLS,您必须确认 root 证书由客户端信任的颁发机构签名,并验证 OpenShift Container Platform hub 和 spoke 集群和 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. 获取安装程序要在 bootstrap 虚拟机上部署的 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. 获取安装程序要在 bootstrap 虚拟机上部署的镜像名称:

    $ export RHCOS_QEMU_NAME=${RHCOS_QEMU_URI##*/}
  7. 获取要在 bootstrap 虚拟机上部署的 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 的缓存 webserver。此 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. 在 platform. baremetal 下将所需的配置添加到 install-config.yaml 文件中:

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

    如需了解更多详细信息,请参阅"配置 install-config.yaml 文件"部分。

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

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

重要

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

本节中的信息和示例仅用于指导目的。有关供应商负载均衡器的更多信息,请参阅供应商文档。

红帽支持用户管理的负载均衡器的以下服务:

  • Ingress Controller
  • OpenShift API
  • OpenShift MachineConfig API

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

图 14.1. 显示 OpenShift Container Platform 环境中运行的 Ingress Controller 的网络工作流示例

显示 OpenShift Container Platform 环境中运行 Ingress Controller 的示例网络工作流的镜像。

图 14.2. 显示 OpenShift Container Platform 环境中运行的 OpenShift API 的网络工作流示例

显示 OpenShift Container Platform 环境中操作的 OpenShift API 网络工作流示例镜像。

图 14.3. 显示 OpenShift Container Platform 环境中运行的 OpenShift MachineConfig API 的网络工作流示例

显示 OpenShift Container Platform 环境中操作的 OpenShift MachineConfig API 示例网络工作流的镜像。

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

  • 使用节点选择器将 Ingress Controller 映射到一组特定的节点。您必须为这个集合中的每个节点分配一个静态 IP 地址,或者将每个节点配置为从动态主机配置协议(DHCP)接收相同的 IP 地址。基础架构节点通常接收这种类型的配置。
  • 以子网上的所有 IP 地址为目标。此配置可减少维护开销,因为您可以在这些网络中创建和销毁节点,而无需重新配置负载均衡器目标。如果您使用较小的网络上的机器集来部署入口 pod,如 /27/28,您可以简化负载均衡器目标。

    提示

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

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

  • 对于前端 IP 地址,您可以对前端 IP 地址、Ingress Controller 的负载均衡器和 API 负载均衡器使用相同的 IP 地址。查看厂商的文档以获取此功能的相关信息。
  • 对于后端 IP 地址,请确保 OpenShift Container Platform control plane 节点的 IP 地址在用户管理的负载均衡器生命周期内不会改变。您可以通过完成以下操作之一来实现此目的:

    • 为每个 control plane 节点分配一个静态 IP 地址。
    • 将每个节点配置为在每次节点请求 DHCP 租期时从 DHCP 接收相同的 IP 地址。根据供应商,DHCP 租期可能采用 IP 保留或静态 DHCP 分配的形式。
  • 在 Ingress Controller 后端服务的用户管理的负载均衡器中手动定义运行 Ingress Controller 的每个节点。例如,如果 Ingress Controller 移到未定义节点,则可能会出现连接中断。

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

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

重要

在配置用户管理的负载均衡器前,请确保阅读用户管理的负载均衡器部分。

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

注意

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

OpenShift API 的先决条件

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

    • 端口 6443 提供对 OpenShift API 服务的访问。
    • 端口 22623 可以为节点提供 ignition 启动配置。
  • 前端 IP 地址和端口 6443 可以被您的系统的所有用户访问,其位置为 OpenShift Container Platform 集群外部。
  • 前端 IP 地址和端口 22623 只能被 OpenShift Container Platform 节点访问。
  • 负载均衡器后端可以在端口 6443 和 22623 上与 OpenShift Container Platform control plane 节点通信。

Ingress Controller 的先决条件

  • 您定义了前端 IP 地址。
  • TCP 端口 443 和 80 在负载均衡器的前端 IP 地址上公开。
  • 前端 IP 地址、端口 80 和端口 443 可以被您的系统所有用户访问,以及 OpenShift Container Platform 集群外部的位置。
  • 前端 IP 地址、端口 80 和端口 443 可被 OpenShift Container Platform 集群中运行的所有节点访问。
  • 负载均衡器后端可以在端口 80、443 和 1936 上与运行 Ingress Controller 的 OpenShift Container Platform 节点通信。

健康检查 URL 规格的先决条件

您可以通过设置健康检查 URL 来配置大多数负载均衡器,以确定服务是否可用或不可用。OpenShift Container Platform 为 OpenShift API、Machine Configuration API 和 Ingress Controller 后端服务提供这些健康检查。

以下示例显示了之前列出的后端服务的健康检查规格:

Kubernetes API 健康检查规格示例

Path: HTTPS:6443/readyz
Healthy threshold: 2
Unhealthy threshold: 2
Timeout: 10
Interval: 10

Machine Config 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. 运行以下命令并查看响应,验证集群机器配置 API 是否可以被 Kubernetes 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 是否可以被 Machine 配置服务器资源访问:

      $ 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 记录。在验证每个记录前,请确保每个 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

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

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

  • 如果 DHCP 不提供主机名
  • 如果您使用内核参数设置主机名
  • 如果您使用其它方法设置主机名

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

提示

您可以使用 DHCP 为每个集群节点提供主机名,以避免在分配主机名时避免此延迟。另外,通过 DHCP 设置主机名可以绕过实施 DNS split-horizon 的环境中的手动 DNS 记录名称配置错误。

14.3.11. 配置 install-config.yaml 文件

14.3.11.1. 配置 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 以部署一个三节点集群,该集群仅包含三个 control plane 机器。三节点集群是一个较小的、效率更高的集群,可用于测试、开发和生产。您不能只使用一个计算节点安装集群。
    2
    当使用静态 IP 地址部署集群时,您必须设置 bootstrapExternalStaticIP 配置设置,以便在裸机网络上没有 DHCP 服务器时可以指定 bootstrap 虚拟机的静态 IP 地址。
    3
    当使用静态 IP 地址部署集群时,您必须设置 bootstrapExternalStaticGateway 配置设置,以便当裸机网络上没有 DHCP 服务器时可以为 bootstrap 虚拟机指定网关 IP 地址。
    4
    当使用静态 IP 地址部署集群时,您必须设置 bootstrapExternalStaticDNS 配置设置,以便在裸机网络上没有 DHCP 服务器时指定 bootstrap 虚拟机的 DNS 地址。
    5
    如需了解更多选项,请参阅 BMC 寻址部分。
    6
    要设置安装磁盘驱动器的路径,请输入磁盘的内核名称。例如:/dev/sda
    重要

    由于磁盘发现顺序无法保证,因此磁盘的内核名称可以在具有多个磁盘的机器的引导选项之间更改。例如: /dev/sda 变为 /dev/sdb,反之亦然。要避免这个问题,您必须使用持久性磁盘属性,如 disk World Wide Name (WWN) 或 /dev/disk/by-path/。建议您使用 /dev/disk/by-path/<device_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. 如果以前的部署尝试中保留了旧的 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

14.3.11.2. 其他 install-config 参数

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

表 14.7. 所需的参数
参数default描述

baseDomain

 

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

bootMode

UEFI

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

bootstrapExternalStaticDNS

 

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

bootstrapExternalStaticIP

 

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

bootstrapExternalStaticGateway

 

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

sshKey

 

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

pullSecret

 

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

metadata:
    name:
 

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

networking:
    machineNetwork:
    - cidr:
 

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

compute:
  - name: worker
 

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

compute:
    replicas: 2
 

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

controlPlane:
    name: master
 

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

controlPlane:
    replicas: 3
 

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

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 地址格式。

表 14.8. 可选参数
参数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 参数是用于构建集群的独立裸机资产列表。

表 14.9. 主机
名称default描述

名称

 

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

role

 

裸机节点的角色。master (control plane 节点) 或 worker (计算节点)。

bmc

 

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

bootMACAddress

 

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

注意

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

networkConfig

 

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

14.3.11.3. BMC 地址

大多数供应商支持使用智能平台管理接口(IPMI)寻址的基板管理控制器(BMC)。IPMI 不加密通信。它适用于通过安全或专用管理网络在数据中心内使用。检查您的供应商,了解它们是否支持 Redfish 网络引导。RedFish 为融合、混合型 IT 和软件定义型数据中心(SDDC)提供简单而安全的管理。RedFish 是人类可读的,能够使用通用的互联网和 Web 服务标准将信息直接公开给现代工具链。如果您的硬件不支持 Redfish 网络引导,请使用 IPMI。

如果节点处于 Registering 状态,则可以在安装过程中修改 BMC 地址。当节点已不再为 Registering 状态时,如果需要修改 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>
重要

当 PXE 引导使用 IPMI 进行 BMC 寻址时,需要 provisioning 网络。没有 provisioning 网络,就无法 PXE 引导主机。如果您在没有 provisioning 网络的情况下部署,则必须使用虚拟介质 BMC 寻址选项,如 redfish-virtualmediaidrac-virtualmedia。详情请查看 "Redfish 虚拟介质 for HPE iLO" 部分的"适用于 HPE iLO 的 BMC 寻址"部分或"适用于戴尔 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/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

14.3.11.4. 验证对 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. 运行以下命令检查 power on 支持:

    $ 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. 运行以下命令检查 power off 支持:

    $ 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 唯一支持的参数类型。

14.3.11.5. 适用于 Dell iDRAC 的 BMC 寻址

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

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

对于 Dell 硬件,红帽支持集成 Dell Remote Access Controller(iDRAC)虚拟介质、Redfish 网络引导和 IPMI。

Dell iDRAC 的 BMC 地址格式
协议地址格式

iDRAC 虚拟介质

idrac-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/System.Embedded.1

RedFish 网络引导

redfish://<out-of-band-ip>/redfish/v1/Systems/System.Embedded.1

IPMI

ipmi://<out-of-band-ip>

重要

使用 idrac-virtualmedia 作为 Redfish 虚拟介质的协议。RedFish-virtualmedia 无法在 Dell 硬件上运行。Dell 的 idrac-virtualmedia 使用带 Dell OEM 扩展的 Redfish 标准。

详情请查看以下部分。

Dell iDRAC 的 RedFish 虚拟介质

对于 Dell 服务器上的 Redfish 虚拟介质,在 address 设置中使用 idrac-virtualmedia://。使用 redfish-virtualmedia:// 无法正常工作。

注意

使用 idrac-virtualmedia:// 作为 Redfish 虚拟介质的协议。使用 redfish-virtualmedia:// 无法在 Dell 硬件中工作,因为 idrac-virtualmedia:// 协议与 Ironic 中的 idrac 硬件类型和 Redfish 协议对应。Dell 的 idrac-virtualmedia:// 协议使用带有 Dell OEM 扩展的 Redfish 标准。Ironic 还支持带有 WSMAN 协议的 idrac 类型。因此,您必须指定 idrac-virtualmedia://,以避免在 Dell 硬件上选择使用 Redfish 和虚拟介质时出现意外行为。

以下示例演示了在 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

注意

通过 iDRAC 控制台,确保 OpenShift Container Platform 集群节点启用了 AutoAttach。菜单路径为: Configuration Virtual Media Attach Mode 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
注意

Dell iDRAC 9 中存在一个已知问题,带有固件版本 04.40.00.00,所有版本都包括 5xx 系列,用于裸机部署中的安装程序置备安装。虚拟控制台插件默认为 eHTML5,它是 HTML5 的增强版本,这会导致 InsertVirtualMedia 工作流出现问题。将插件设置为使用 HTML5 以避免出现这个问题。菜单路径为 Configuration Virtual console Plug-in Type HTML5

通过 iDRAC 控制台,确保 OpenShift Container Platform 集群节点启用了 AutoAttach。菜单路径为: Configuration Virtual Media Attach Mode AutoAttach

14.3.11.6. HPE iLO 的 BMC 寻址

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

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

对于 HPE 集成 Lights Out(iLO),红帽支持红帽虚拟媒体、Redfish 网络引导和 IPMI。

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

RedFish 虚拟介质

redfish-virtualmedia://<out-of-band-ip>/redfish/v1/Systems/1

RedFish 网络引导

redfish://<out-of-band-ip>/redfish/v1/Systems/1

IPMI

ipmi://<out-of-band-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 的 9 代系统上不支持 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

14.3.11.7. Fujitsu iRMC 的 BMC 寻址

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

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

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

表 14.11. Fujitsu iRMC 的 BMC 地址格式
协议地址格式

iRMC

irmc://<out-of-band-ip>

IPMI

ipmi://<out-of-band-ip>

iRMC

Fujitsu 节点可以使用 irmc://<out-of-band-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>
注意

目前,Fujitsu 支持 iRMC S5 固件版本 3.05 及更高版本用于裸机上的安装程序置备安装。

14.3.11.8. Cisco CIMC 的 BMC 地址

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

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

对于 Cisco UCSX-210C-M6 硬件,红帽支持 Cisco Integrated Management Controller (CIMC)。

表 14.12. Cisco CIMC 的 BMC 地址格式
协议地址格式

RedFish 虚拟介质

redfish-virtualmedia://<server_kvm_ip>/redfish/v1/Systems/<serial_number>

要为 Cisco UCS UCSX-210C-M6 硬件启用 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

14.3.11.9. Root 设备提示

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

表 14.13. 子字段
子字段描述

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"

14.3.11.10. 可选:设置代理设置

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

apiVersion: v1
baseDomain: <domain>
proxy:
  httpProxy: http://USERNAME:PASSWORD@proxy.example.com:PORT
  httpsProxy: https://USERNAME:PASSWORD@proxy.example.com: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

启用代理后,在对应的键/值对中设置代理的适当值。

主要考虑:

  • 如果代理没有 HTTPS 代理,请将 httpsProxy 的值从 https :// 改为 http://
  • 如果使用 provisioning 网络,将其包含在 noProxy 设置中,否则安装程序将失败。
  • 将所有代理设置设置为 provisioner 节点中的环境变量。例如: HTTP_PROXYHTTPS_PROXYNO_PROXY
注意

使用 IPv6 置备时,您无法在 noProxy 设置中定义 CIDR 地址块。您必须单独定义每个地址。

14.3.11.11. 可选:在没有 provisioning 网络的情况下进行部署

要在没有 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。详情请查看 "Redfish 虚拟介质 for HPE iLO" 部分的"适用于 HPE iLO 的 BMC 寻址"部分或"适用于戴尔 iDRAC 的"红帽虚拟媒体"部分中的"红帽虚拟介质"。

14.3.11.12. 可选:使用双栈网络部署

对于 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 配置设置使用列表格式。列表的顺序决定了每个服务的主 VIP 地址和次 VIP 地址。

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

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

14.3.11.13. 可选:配置主机网络接口

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

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

先决条件

  • 使用静态 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> 2
            prefix-length: 24
          enabled: true
      dns-resolver:
        config:
          server:
          - <dns_ip_address> 3
      routes:
        config:
        - destination: 0.0.0.0/0
          next-hop-address: <next_hop_ip_address> 4
          next-hop-interface: <next_hop_nic1_name> 5
      1 2 3 4 5
      使用适当的值替换 <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. 通过在 install-config.yaml 文件中的主机中添加 NMState 配置,使用 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> 3
                    prefix-length: 24
                  enabled: true
              dns-resolver:
                config:
                  server:
                  - <dns_ip_address> 4
              routes:
                config:
                - destination: 0.0.0.0/0
                  next-hop-address: <next_hop_ip_address> 5
                  next-hop-interface: <next_hop_nic1_name> 6
    1
    添加 NMState YAML 语法来配置主机接口。
    2 3 4 5 6
    使用适当的值替换 <nic1_name>, <ip_address>, <dns_ip_address>, <next_hop_ip_address><next_hop_nic1_name>
    重要

    部署集群后,您无法修改 install-config.yaml 文件的 networkConfig 配置设置,以更改主机网络接口。在部署后,使用 Kubernetes NMState Operator 更改主机网络接口。

14.3.11.14. 为子网配置主机网络接口

对于边缘计算场景,定位接近边缘的计算节点会很有用。要在子网中定位远程节点,您可以对远程节点使用不同的网络片段或子网,而不是用于 control plane 子网和本地计算节点。您可以通过为边缘计算场景设置子网来减少边缘延迟并允许增强可扩展性。

重要

当使用默认负载均衡器时,OpenShiftManagedDefault 并将远程节点添加到 OpenShift Container Platform 集群中,所有 control plane 节点必须在同一子网中运行。当使用多个子网时,您还可以使用清单将 Ingress VIP 配置为在 control plane 节点上运行。详情请参阅"配置要在 control plane 上运行的网络组件"。

如果您为远程节点创建了不同的网络段或子网,如 "Establishing communication" 部分所述,如果 worker 使用静态 IP 地址、绑定或其他高级网络,您必须在 machineNetwork 配置设置中指定子网。当为每个远程节点在 networkConfig 参数中设置节点 IP 地址时,还必须在使用静态 IP 地址时为包含 control plane 节点的子网指定网关和 DNS 服务器。这样可确保远程节点可以访问包含 control plane 的子网,并可从 control plane 接收网络流量。

注意

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

流程

  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
    使用网关的 IP 地址替换 <gateway_ip>
    4
    <dns_ip> 替换为 DNS 服务器的 IP 地址。

14.3.11.15. 可选:在双栈网络中为 SLAAC 配置地址生成模式

对于使用 Stateless Address AutoConfiguration (SLAAC)的双栈集群,您必须为 ipv6.addr-gen-mode 网络设置指定一个全局值。您可以使用 NMState 设置这个值来配置 RAM 磁盘和集群配置文件。如果您没有在这些位置配置一致的 ipv6.addr-gen-mode,则集群中的 CSR 资源和 BareMetalHost 资源之间可能会发生 IPv6 地址不匹配。

先决条件

  • 安装 NMState CLI (nmstate)。

流程

  1. 可选:在 install-config.yaml 文件中包括 nmstatectl gc 命令前使用 nmstatectl gc 命令测试 NMState YAML 语法,因为安装程序不会检查 NMState YAML 语法。

    1. 创建 NMState YAML 文件:

      interfaces:
      - name: eth0
        ipv6:
          addr-gen-mode: <address_mode> 1
      1
      <address_mode> 替换为集群中 IPv6 地址所需的地址生成模式类型。有效值为 eui64stable-privacyrandom
    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 地址所需的地址生成模式类型。有效值为 eui64stable-privacyrandom

14.3.11.16. 可选:为双端口 NIC 配置主机网络接口

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

重要

支持与为 SR-IOV 设备启用 NIC 分区关联的第 1 天操作只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。

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

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 文件中的 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 字段包含主机的网络配置的信息,子字段包括 接口dns-resolverroutes
    2
    interfaces 字段是为主机定义的网络接口数组。
    3
    接口的名称。
    4
    接口的类型。这个示例创建了一个以太网接口。
    5
    如果物理功能 (PF) 没有被严格要求,则将其设置为 'false 以禁用 DHCP。
    6
    设置为要实例化的 SR-IOV 虚拟功能 (VF) 的数量。
    7
    把它设置为 up
    8
    把它设置为 false,以禁用附加到绑定的 VF 的 IPv4 寻址。
    9
    为 VF 设置最小传输率(以 Mbps 为单位)。这个示例值设置 100 Mbps 的速度。
    • 这个值必须小于或等于最大传输率。
    • Intel NIC 不支持 min-tx-rate 参数。如需更多信息,请参阅 BZ#1772847
    10
    为 VF 设置最大传输率(以 Mbps 为单位)。此示例值设置 200 Mbps 的速度。
    11
    设置所需的绑定模式。
    12
    设置绑定接口的首选端口。该绑定使用主设备作为绑定接口的第一个设备。这个绑定不会取消主设备接口,除非失败。当绑定接口中的一个 NIC 速度更快时,此设置特别有用,因此可以处理较大的负载。只有在绑定接口处于 active-backup 模式(模式 1)和 balance-tlb (模式 5)时,此设置才有效。
    13
    为绑定接口设置静态 IP 地址。这是节点 IP 地址。
    14
    bond0 设置为默认路由的网关。
    重要

    部署集群后,您无法更改 install-config.yaml 文件的 networkConfig 配置设置,以更改主机网络接口。在部署后,使用 Kubernetes NMState Operator 更改主机网络接口。

其他资源

14.3.11.17. 配置多个集群节点

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

Compute 节点与控制器节点独立配置。但是,两个节点类型的配置都使用 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
注意

配置多个集群节点仅适用于安装程序置备的基础架构上的初始部署。

14.3.11.18. 可选:配置管理的安全引导

在使用 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 设置使用 redfishredfish-virtualmediaidrac-virtualmedia 作为协议。如需了解更多详细信息,请参阅"HPE iLO"或"BMC 寻址用于 Dell iDRAC"的"BMC 寻址"。
2
bootMode 设置默认为 UEFI。将它更改为 UEFISecureBoot 以启用受管安全引导。
注意

请参阅"先决条件"中的"配置节点",以确保节点能够支持受管安全引导。如果节点不支持受管安全引导,请参阅"配置节点"部分中的"手动配置安全引导节点"。手动配置安全引导机制需要 Redfish 虚拟介质。

注意

红帽不支持使用 IPMI 进行安全引导,因为 IPMI 不提供安全引导管理功能。

14.3.12. 清单配置文件

14.3.12.1. 创建 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

14.3.12.2. 可选:为断开连接的集群配置 NTP

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

为断开连接的集群配置 NTP

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

流程

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

    $ sudo dnf -y install butane
  2. 为 control plane 节点创建一个 Butane 配置 99-master-chrony-conf-override.bu,包括 chrony.conf 文件的内容。

    注意

    如需有关 Butane 的信息,请参阅"使用 Butane 创建机器配置"。

    但ane 配置示例

    variant: openshift
    version: 4.16.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,其中包含要发送到 control plane 节点的配置:

    $ butane 99-master-chrony-conf-override.bu -o 99-master-chrony-conf-override.yaml
  4. 为引用 control plane 节点上的 NTP 服务器的计算节点创建 Butane 配置 99-worker-chrony-conf-override.bu,包括 chrony.conf 文件的内容。

    但ane 配置示例

    variant: openshift
    version: 4.16.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,其中包含要交付至 worker 节点的配置:

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

14.3.12.3. 配置要在 control plane 上运行的网络组件

您可以配置网络组件,使其仅在 control plane 节点上运行。默认情况下,OpenShift Container Platform 允许机器配置池中的任何节点托管 ingressVIP 虚拟 IP 地址。但是,有些环境在与 control plane 节点独立的子网中部署计算节点,这需要将 ingressVIP 虚拟 IP 地址配置为在 control plane 节点上运行。

重要

在单独的子网中部署远程节点时,您必须将 ingressVIP 虚拟 IP 地址专门用于 control plane 节点。

安装程序置备的网络

流程

  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 地址放在 control plane 节点上。另外,此清单仅在 control plane 节点上部署以下进程:

    • 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. 通过将 mastersSchedulable 字段设置为 true 来修改 cluster-scheduler-02-config.yml 清单,使 control plane 节点可以调度。默认情况下,control plane 节点不可调度。例如:

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

    如果在完成此步骤后 control plane 节点不可调度,则部署集群将失败。

14.3.12.4. 可选:在计算节点上部署路由器

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

重要

不支持只使用一个计算节点部署集群。虽然在使用一个计算节点时修改路由器副本数量会解决降级状态的问题,但集群丢失了入口 API 的高可用性,它不适用于生产环境。

注意

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

流程

  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 个计算节点,您可以根据情况增加 replicas: 的值(默认值为 2)。

  2. router-replicas.yaml 文件复制到 clusterconfigs/openshift 目录中:

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

14.3.12.5. 可选:配置 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
    注意

    红帽支持三种 BIOS 配置:仅支持 BMC 类型 irmc 的服务器。目前不支持其他类型的服务器。

  4. 创建集群。

其他资源

14.3.12.6. 可选:配置 RAID

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

注意

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

表 14.14. 厂商的硬件 RAID 支持
VendorBMC 和协议固件版本RAID 级别

Fujitsu

iRMC

N/A

0、1、5、6 和 10

Dell

使用 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.16 不支持软件 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. 创建集群。

14.3.12.7. 可选:在节点上配置存储

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

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

流程

使用 ignition 配置在节点上配置存储。以下 MachineSet 清单示例演示了如何将分区添加到主节点上的设备中。在本例中,在安装前应用清单,其名为 restore 的分区,大小为 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

14.3.13. 创建断开连接的 registry

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

一个本地的或被镜像的 registry 副本需要以下内容:

  • registry 节点的证书。这可以是自签名证书。
  • 系统中的容器将服务的 Web 服务器。
  • 包含证书和本地存储库信息的更新的 pull secret。
注意

在 registry 节点上创建断开连接的 registry 是可选的。如果需要在 registry 节点上创建断开连接的 registry,您必须完成以下所有子章节。

先决条件

14.3.13.1. 准备 registry 节点以托管已镜像的 registry

在裸机上托管镜像的 registry 之前,必须完成以下步骤。

流程

  1. 打开 registry 节点上的防火墙端口:

    $ 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. 为 registry 节点安装所需的软件包:

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

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

14.3.13.2. 为断开连接的 registry 镜像 OpenShift Container Platform 镜像存储库

完成以下步骤,为断开连接的 registry 镜像 OpenShift Container Platform 镜像存储库。

先决条件

流程

  1. 查看 OpenShift Container Platform 下载页面,以确定您要安装的 OpenShift Container Platform 版本,并决定 Repository Tags 页中的相应标签(tag)。
  2. 设置所需的环境变量:

    1. 导出发行版本信息:

      $ OCP_RELEASE=<release_version>

      对于 <release_version>,请指定与 OpenShift Container Platform 版本对应的标签,用于您的架构,如 4.5.4

    2. 导出本地 registry 名称和主机端口:

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

      对于 <local_registry_host_name>,请指定镜像存储库的 registry 域名;对于 <local_registry_host_port>,请指定用于提供内容的端口。

    3. 导出本地存储库名称:

      $ LOCAL_REPOSITORY='<local_repository_name>'

      对于 <local_repository_name>,请指定要在 registry 中创建的仓库名称,如 ocp4/openshift4

    4. 导出要进行镜像的存储库名称:

      $ PRODUCT_REPO='openshift-release-dev'

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

    5. 导出 registry pull secret 的路径:

      $ LOCAL_SECRET_JSON='<path_to_pull_secret>'

      对于 <path_to_pull_secret>,请指定您创建的镜像 registry 的 pull secret 的绝对路径和文件名。

    6. 导出发行版本镜像:

      $ RELEASE_NAME="ocp-release"

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

    7. 为您的集群导出构架类型:

      $ ARCHITECTURE=<cluster_architecture> 1
      1
      指定集群的构架,如 x86_64, aarch64, s390x, 获 ppc64le
    8. 导出托管镜像的目录的路径:

      $ REMOVABLE_MEDIA_PATH=<path> 1
      1
      指定完整路径,包括开始的前斜杠(/)字符。
  3. 将版本镜像(mirror)到镜像 registry:

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

      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. 将介质上传到受限网络环境中,并将镜像上传到本地容器 registry。

        $ 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,您必须使用与镜像镜像时指定的同一路径。
    • 如果本地容器 registry 连接到镜像主机,请执行以下操作:

      1. 使用以下命令直接将发行版镜像推送到本地 registry:

        $ 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 镜像将在 bootstrap 虚拟机的 registry 中显示 Quay.io。

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

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

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

      $ 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

14.3.13.3. 修改 install-config.yaml 文件以使用断开连接的 registry

在 provisioner 节点上,install -config.yaml 文件应该使用从 pull-secret- update.txt 文件中新创建的 pull-secretinstall-config.yaml 文件还必须包含断开连接的 registry 节点的证书和 registry 信息。

流程

  1. 将断开连接的 registry 节点的证书添加到 install-config.yaml 文件中:

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

    证书应跟在 "additionalTrustBundle: |" 行后面,并正确缩进(通常为两个空格)。

    $ sed -e 's/^/  /' /opt/registry/certs/domain.crt >> install-config.yaml
  2. 将 registry 的镜像信息添加到 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 替换为 registry 的完全限定域名。

    $ 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 替换为 registry 的完全限定域名。

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

14.3.14. 安装的验证清单

  • ❏ 已检索到 OpenShift Container Platform 安装程序。
  • ❏ 已提取 OpenShift Container Platform 安装程序。
  • ❏ 已配置了 install-config.yaml 的必要参数。
  • ❏ 已配置了 install-config.yamlhosts 参数。
  • ❏ 已配置了 install-config.yamlbmc 参数。
  • ❏ 在 bmc address 字段中配置的值已被应用。
  • ❏ 创建 OpenShift Container Platform 清单。
  • ❏ (Optional) 可选)在计算节点上部署路由器。
  • ❏ (可选)创建断开连接的 registry。
  • ❏ (可选)如果使用,验证断开连接的 registry 设置。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.