×

部署安装程序预配置的 OpenShift Container Platform 集群后,您可以使用以下步骤来扩展工作节点的数量。确保每个预期的工作节点都满足先决条件。

使用 RedFish 虚拟介质扩展集群需要满足最低固件要求。有关使用 RedFish 虚拟介质扩展集群时的更多详细信息,请参阅“先决条件”部分中的“使用虚拟介质安装的固件要求”。

准备裸机节点

要扩展集群,必须为节点提供相关的 IP 地址。这可以通过静态配置或 DHCP(动态主机配置协议)服务器来完成。使用 DHCP 服务器扩展集群时,每个节点都必须具有 DHCP 预留。

预留 IP 地址以使其成为静态 IP 地址

一些管理员更喜欢使用静态 IP 地址,以便在没有 DHCP 服务器的情况下每个节点的 IP 地址保持不变。要使用 NMState 配置静态 IP 地址,请参阅“设置 OpenShift 安装的环境”部分中的“可选:在 install-config.yaml 文件中配置主机网络接口”以获取更多详细信息。

准备裸机节点需要从供应程序节点执行以下过程。

步骤
  1. 获取 oc 二进制文件

    $ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux-$VERSION.tar.gz | tar zxvf - oc
    $ sudo cp oc /usr/local/bin
  2. 使用基板管理控制器 (BMC) 关闭裸机节点,并确保其已关闭。

  3. 检索裸机节点基板管理控制器的用户名和密码。然后,从用户名和密码创建 base64 字符串

    $ echo -ne "root" | base64
    $ echo -ne "password" | base64
  4. 为裸机节点创建一个配置文件。根据您是使用静态配置还是 DHCP 服务器,使用以下示例 bmh.yaml 文件之一,将 YAML 中的值替换为您环境中的值

    $ vim bmh.yaml
    • **静态配置** bmh.yaml

      ---
      apiVersion: v1 (1)
      kind: Secret
      metadata:
       name: openshift-worker-<num>-network-config-secret (2)
       namespace: openshift-machine-api
      type: Opaque
      stringData:
       nmstate: | (3)
        interfaces: (4)
        - name: <nic1_name> (5)
          type: ethernet
          state: up
          ipv4:
            address:
            - ip: <ip_address> (5)
              prefix-length: 24
            enabled: true
        dns-resolver:
          config:
            server:
            - <dns_ip_address> (5)
        routes:
          config:
          - destination: 0.0.0.0/0
            next-hop-address: <next_hop_ip_address> (5)
            next-hop-interface: <next_hop_nic1_name> (5)
      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: openshift-worker-<num>-bmc-secret (2)
        namespace: openshift-machine-api
      type: Opaque
      data:
        username: <base64_of_uid> (6)
        password: <base64_of_pwd> (6)
      ---
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: openshift-worker-<num> (2)
        namespace: openshift-machine-api
      spec:
        online: True
        bootMACAddress: <nic1_mac_address> (7)
        bmc:
          address: <protocol>://<bmc_url> (8)
          credentialsName: openshift-worker-<num>-bmc-secret (2)
          disableCertificateVerification: True (9)
          username: <bmc_username> (10)
          password: <bmc_password> (10)
        rootDeviceHints:
          deviceName: <root_device_hint> (11)
        preprovisioningNetworkDataName: openshift-worker-<num>-network-config-secret (12)
      1 要为新创建的节点配置网络接口,请指定包含网络配置的密钥名称。请遵循nmstate语法来定义节点的网络配置。有关配置 NMState 语法的详细信息,请参阅“可选:在 install-config.yaml 文件中配置主机网络接口”。
      2 name字段、credentialsName字段和preprovisioningNetworkDataName字段中,将<num>替换为裸机节点的worker编号。
      3 添加 NMState YAML 语法来配置主机接口。
      4 可选:如果您已使用nmstate配置网络接口,并且想要禁用某个接口,请将state: up与设置为enabled: false的IP地址一起设置,如所示。
      ---
         interfaces:
         - name: <nic_name>
           type: ethernet
           state: up
           ipv4:
             enabled: false
           ipv6:
             enabled: false
      5 <nic1_name><ip_address><dns_ip_address><next_hop_ip_address><next_hop_nic1_name>替换为适当的值。
      6 <base64_of_uid><base64_of_pwd>替换为用户名和密码的base64字符串。
      7 <nic1_mac_address>替换为裸机节点第一个网卡的MAC地址。有关其他BMC配置选项,请参阅“BMC寻址”部分。
      8 <protocol>替换为BMC协议,例如IPMI、RedFish或其他协议。将<bmc_url>替换为裸机节点基板管理控制器的URL。
      9 要跳过证书验证,请将disableCertificateVerification设置为true。
      10 <bmc_username><bmc_password>替换为BMC用户名和密码的字符串。
      11 可选:如果您指定了根设备提示,请将<root_device_hint>替换为设备路径。
      12 可选:如果您已为新创建的节点配置了网络接口,请在BareMetalHost CR的preprovisioningNetworkDataName中提供网络配置密钥名称。
    • DHCP配置 bmh.yaml

      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: openshift-worker-<num>-bmc-secret (1)
        namespace: openshift-machine-api
      type: Opaque
      data:
        username: <base64_of_uid> (2)
        password: <base64_of_pwd> (2)
      ---
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: openshift-worker-<num> (1)
        namespace: openshift-machine-api
      spec:
        online: True
        bootMACAddress: <nic1_mac_address> (3)
        bmc:
          address: <protocol>://<bmc_url> (4)
          credentialsName: openshift-worker-<num>-bmc-secret (1)
          disableCertificateVerification: True (5)
          username: <bmc_username> (6)
          password: <bmc_password> (6)
        rootDeviceHints:
          deviceName: <root_device_hint> (7)
        preprovisioningNetworkDataName: openshift-worker-<num>-network-config-secret (8)
      1 name字段、credentialsName字段和preprovisioningNetworkDataName字段中,将<num>替换为裸机节点的worker编号。
      2 <base64_of_uid><base64_of_pwd>替换为用户名和密码的base64字符串。
      3 <nic1_mac_address>替换为裸机节点第一个网卡的MAC地址。有关其他BMC配置选项,请参阅“BMC寻址”部分。
      4 <protocol>替换为BMC协议,例如IPMI、RedFish或其他协议。将<bmc_url>替换为裸机节点基板管理控制器的URL。
      5 要跳过证书验证,请将disableCertificateVerification设置为true。
      6 <bmc_username><bmc_password>替换为BMC用户名和密码的字符串。
      7 可选:如果您指定了根设备提示,请将<root_device_hint>替换为设备路径。
      8 可选:如果您已为新创建的节点配置了网络接口,请在BareMetalHost CR的preprovisioningNetworkDataName中提供网络配置密钥名称。

    如果现有裸机节点的MAC地址与您尝试配置的裸机主机的MAC地址匹配,则Ironic安装将失败。如果主机注册、检查、清理或其他Ironic步骤失败,则Bare Metal Operator将持续重试安装。有关更多信息,请参阅“诊断主机MAC地址重复”部分。

  5. 创建裸机节点

    $ oc -n openshift-machine-api create -f bmh.yaml
    示例输出
    secret/openshift-worker-<num>-network-config-secret created
    secret/openshift-worker-<num>-bmc-secret created
    baremetalhost.metal3.io/openshift-worker-<num> created

    其中<num>将是worker编号。

  6. 启动并检查裸机节点

    $ oc -n openshift-machine-api get bmh openshift-worker-<num>

    其中<num>是worker节点编号。

    示例输出
    NAME                    STATE       CONSUMER   ONLINE   ERROR
    openshift-worker-<num>  available              true

    要允许worker节点加入集群,请将machineset对象的规模调整到BareMetalHost对象的数量。您可以手动或自动扩展节点。要自动扩展节点,请使用machinesetmetal3.io/autoscale-to-hosts注解。

其他资源

替换裸机控制平面节点

使用以下步骤替换安装程序配置的OpenShift Container Platform控制平面节点。

如果您重用现有控制平面主机的BareMetalHost对象定义,请不要将externallyProvisioned字段设置为true

如果现有控制平面BareMetalHost对象是由OpenShift Container Platform安装程序配置的,则其externallyProvisioned标志可能设置为true

先决条件
  • 您可以作为具有cluster-admin角色的用户访问集群。

  • 您已备份etcd。

    在执行此过程之前,请备份etcd,以便在遇到任何问题时可以恢复集群。有关备份etcd的更多信息,请参阅“其他资源”部分。

步骤
  1. 确保Bare Metal Operator可用

    $ oc get clusteroperator baremetal
    示例输出
    NAME        VERSION   AVAILABLE   PROGRESSING   DEGRADED   SINCE   MESSAGE
    baremetal   4.17   True        False         False      3d15h
  2. 删除旧的BareMetalHostMachine对象

    $ oc delete bmh -n openshift-machine-api <host_name>
    $ oc delete machine -n openshift-machine-api <machine_name>

    <host_name>替换为主机名称,将<machine_name>替换为机器名称。机器名称显示在CONSUMER字段下。

    删除BareMetalHostMachine对象后,机器控制器将自动删除Node对象。

  3. 创建新的BareMetalHost对象和用于存储BMC凭据的密钥

    $ cat <<EOF | oc apply -f -
    apiVersion: v1
    kind: Secret
    metadata:
      name: control-plane-<num>-bmc-secret (1)
      namespace: openshift-machine-api
    data:
      username: <base64_of_uid> (2)
      password: <base64_of_pwd> (3)
    type: Opaque
    ---
    apiVersion: metal3.io/v1alpha1
    kind: BareMetalHost
    metadata:
      name: control-plane-<num> (1)
      namespace: openshift-machine-api
    spec:
      automatedCleaningMode: disabled
      bmc:
        address: <protocol>://<bmc_ip> (4)
        credentialsName: control-plane-<num>-bmc-secret (1)
      bootMACAddress: <NIC1_mac_address> (5)
      bootMode: UEFI
      externallyProvisioned: false
      online: true
    EOF
    1 name字段和credentialsName字段中,将<num>替换为裸机节点的控制平面编号。
    2 <base64_of_uid>替换为用户名的base64字符串。
    3 <base64_of_pwd>替换为密码的base64字符串。
    4 <protocol>替换为BMC协议,例如redfishredfish-virtualmediaidrac-virtualmedia或其他协议。将<bmc_ip>替换为裸机节点基板管理控制器的IP地址。有关其他BMC配置选项,请参阅“其他资源”部分中的“BMC寻址”。
    5 <NIC1_mac_address>替换为裸机节点第一个网卡的MAC地址。

    检查完成后,将创建BareMetalHost对象,并可供配置。

  4. 查看可用的BareMetalHost对象

    $ oc get bmh -n openshift-machine-api
    示例输出
    NAME                          STATE                    CONSUMER                   ONLINE   ERROR   AGE
    control-plane-1.example.com   available                control-plane-1            true             1h10m
    control-plane-2.example.com   externally provisioned   control-plane-2            true             4h53m
    control-plane-3.example.com   externally provisioned   control-plane-3            true             4h53m
    compute-1.example.com         provisioned              compute-1-ktmmx            true             4h53m
    compute-1.example.com         provisioned              compute-2-l2zmb            true             4h53m

    控制平面节点没有MachineSet对象,因此您必须创建一个Machine对象。您可以从另一个控制平面Machine对象复制providerSpec

  5. 创建一个Machine对象

    $ cat <<EOF | oc apply -f -
    apiVersion: machine.openshift.io/v1beta1
    kind: Machine
    metadata:
      annotations:
        metal3.io/BareMetalHost: openshift-machine-api/control-plane-<num> (1)
      labels:
        machine.openshift.io/cluster-api-cluster: control-plane-<num> (1)
        machine.openshift.io/cluster-api-machine-role: master
        machine.openshift.io/cluster-api-machine-type: master
      name: control-plane-<num> (1)
      namespace: openshift-machine-api
    spec:
      metadata: {}
      providerSpec:
        value:
          apiVersion: baremetal.cluster.k8s.io/v1alpha1
          customDeploy:
            method: install_coreos
          hostSelector: {}
          image:
            checksum: ""
            url: ""
          kind: BareMetalMachineProviderSpec
          metadata:
            creationTimestamp: null
          userData:
            name: master-user-data-managed
    EOF
    1 namelabelsannotations字段中,将<num>替换为裸机节点的控制平面编号。
  6. 要查看BareMetalHost对象,请运行以下命令

    $ oc get bmh -A
    示例输出
    NAME                          STATE                    CONSUMER                   ONLINE   ERROR   AGE
    control-plane-1.example.com   provisioned              control-plane-1            true             2h53m
    control-plane-2.example.com   externally provisioned   control-plane-2            true             5h53m
    control-plane-3.example.com   externally provisioned   control-plane-3            true             5h53m
    compute-1.example.com         provisioned              compute-1-ktmmx            true             5h53m
    compute-2.example.com         provisioned              compute-2-l2zmb            true             5h53m
  7. RHCOS安装完成后,验证BareMetalHost是否已添加到集群中

    $ oc get nodes
    示例输出
    NAME                           STATUS      ROLES     AGE   VERSION
    control-plane-1.example.com    available   master    4m2s  v1.30.3
    control-plane-2.example.com    available   master    141m  v1.30.3
    control-plane-3.example.com    available   master    141m  v1.30.3
    compute-1.example.com          available   worker    87m   v1.30.3
    compute-2.example.com          available   worker    87m   v1.30.3

    替换新的控制平面节点后,在新节点中运行的etcd pod处于crashloopback状态。有关更多信息,请参阅“其他资源”部分中的“替换不健康的etcd成员”。

准备在裸机网络上使用虚拟介质进行部署

如果启用了provisioning网络,并且想要在baremetal网络上使用虚拟介质扩展集群,请使用以下步骤。

先决条件
  • 存在具有baremetal网络和provisioning网络的现有集群。

步骤
  1. 编辑provisioning自定义资源 (CR) 以启用在baremetal网络上使用虚拟介质进行部署

    oc edit provisioning
      apiVersion: metal3.io/v1alpha1
      kind: Provisioning
      metadata:
        creationTimestamp: "2021-08-05T18:51:50Z"
        finalizers:
        - provisioning.metal3.io
        generation: 8
        name: provisioning-configuration
        resourceVersion: "551591"
        uid: f76e956f-24c6-4361-aa5b-feaf72c5b526
      spec:
        provisioningDHCPRange: 172.22.0.10,172.22.0.254
        provisioningIP: 172.22.0.3
        provisioningInterface: enp1s0
        provisioningNetwork: Managed
        provisioningNetworkCIDR: 172.22.0.0/24
        virtualMediaViaExternalNetwork: true (1)
      status:
        generations:
        - group: apps
          hash: ""
          lastGeneration: 7
          name: metal3
          namespace: openshift-machine-api
          resource: deployments
        - group: apps
          hash: ""
          lastGeneration: 1
          name: metal3-image-cache
          namespace: openshift-machine-api
          resource: daemonsets
        observedGeneration: 8
        readyReplicas: 0
    1 virtualMediaViaExternalNetwork: true添加到provisioning CR。
  2. 如果映像URL存在,请编辑machineset以使用API VIP地址。此步骤仅适用于在4.9版或更早版本中安装的集群。

    oc edit machineset
      apiVersion: machine.openshift.io/v1beta1
      kind: MachineSet
      metadata:
        creationTimestamp: "2021-08-05T18:51:52Z"
        generation: 11
        labels:
          machine.openshift.io/cluster-api-cluster: ostest-hwmdt
          machine.openshift.io/cluster-api-machine-role: worker
          machine.openshift.io/cluster-api-machine-type: worker
        name: ostest-hwmdt-worker-0
        namespace: openshift-machine-api
        resourceVersion: "551513"
        uid: fad1c6e0-b9da-4d4a-8d73-286f78788931
      spec:
        replicas: 2
        selector:
          matchLabels:
            machine.openshift.io/cluster-api-cluster: ostest-hwmdt
            machine.openshift.io/cluster-api-machineset: ostest-hwmdt-worker-0
        template:
          metadata:
            labels:
              machine.openshift.io/cluster-api-cluster: ostest-hwmdt
              machine.openshift.io/cluster-api-machine-role: worker
              machine.openshift.io/cluster-api-machine-type: worker
              machine.openshift.io/cluster-api-machineset: ostest-hwmdt-worker-0
          spec:
            metadata: {}
            providerSpec:
              value:
                apiVersion: baremetal.cluster.k8s.io/v1alpha1
                hostSelector: {}
                image:
                  checksum: http:/172.22.0.3:6181/images/rhcos-<version>.<architecture>.qcow2.<md5sum> (1)
                  url: http://172.22.0.3:6181/images/rhcos-<version>.<architecture>.qcow2 (2)
                kind: BareMetalMachineProviderSpec
                metadata:
                  creationTimestamp: null
                userData:
                  name: worker-user-data
      status:
        availableReplicas: 2
        fullyLabeledReplicas: 2
        observedGeneration: 11
        readyReplicas: 2
        replicas: 2
    1 编辑checksum URL 以使用API VIP地址。
    2 编辑url URL 以使用API VIP地址。

诊断在集群中配置新主机时出现的重复MAC地址

如果集群中现有裸机节点的MAC地址与您尝试添加到集群的裸机主机的MAC地址匹配,则裸机操作符会将该主机与现有节点关联。如果主机注册、检查、清理或其他Ironic步骤失败,则裸机操作符将持续重试安装。失败的裸机主机将显示注册错误。

您可以通过检查在openshift-machine-api命名空间中运行的裸机主机来诊断MAC地址重复问题。

先决条件
  • 在裸机上安装OpenShift Container Platform集群。

  • 安装OpenShift Container Platform CLI oc

  • 以具有cluster-admin权限的用户身份登录。

步骤

要确定配置失败的裸机主机是否与现有节点具有相同的MAC地址,请执行以下操作

  1. 获取在openshift-machine-api命名空间中运行的裸机主机

    $ oc get bmh -n openshift-machine-api
    示例输出
    NAME                 STATUS   PROVISIONING STATUS      CONSUMER
    openshift-master-0   OK       externally provisioned   openshift-zpwpq-master-0
    openshift-master-1   OK       externally provisioned   openshift-zpwpq-master-1
    openshift-master-2   OK       externally provisioned   openshift-zpwpq-master-2
    openshift-worker-0   OK       provisioned              openshift-zpwpq-worker-0-lv84n
    openshift-worker-1   OK       provisioned              openshift-zpwpq-worker-0-zd8lm
    openshift-worker-2   error    registering
  2. 要查看有关失败主机状态的更详细信息,请运行以下命令,将<bare_metal_host_name>替换为主机的名称

    $ oc get -n openshift-machine-api bmh <bare_metal_host_name> -o yaml
    示例输出
    ...
    status:
      errorCount: 12
      errorMessage: MAC address b4:96:91:1d:7c:20 conflicts with existing node openshift-worker-1
      errorType: registration error
    ...

裸机节点配置

配置裸机节点需要从供应节点执行以下过程。

步骤
  1. 在配置裸机节点之前,请确保STATEavailable

    $  oc -n openshift-machine-api get bmh openshift-worker-<num>

    其中<num>是worker节点编号。

    NAME              STATE     ONLINE ERROR  AGE
    openshift-worker  available true          34h
  2. 获取工作节点的数量。

    $ oc get nodes
    NAME                                                STATUS   ROLES           AGE     VERSION
    openshift-master-1.openshift.example.com            Ready    master          30h     v1.30.3
    openshift-master-2.openshift.example.com            Ready    master          30h     v1.30.3
    openshift-master-3.openshift.example.com            Ready    master          30h     v1.30.3
    openshift-worker-0.openshift.example.com            Ready    worker          30h     v1.30.3
    openshift-worker-1.openshift.example.com            Ready    worker          30h     v1.30.3
  3. 获取计算机器集。

    $ oc get machinesets -n openshift-machine-api
    NAME                                DESIRED   CURRENT   READY   AVAILABLE   AGE
    ...
    openshift-worker-0.example.com      1         1         1       1           55m
    openshift-worker-1.example.com      1         1         1       1           55m
  4. 将工作节点数量增加一个。

    $ oc scale --replicas=<num> machineset <machineset> -n openshift-machine-api

    <num>替换为新的工作节点数量。将<machineset>替换为上一步中计算机器集的名称。

  5. 检查裸机节点的状态。

    $ oc -n openshift-machine-api get bmh openshift-worker-<num>

    其中<num>是工作节点编号。STATE将从ready更改为provisioning

    NAME                    STATE             CONSUMER                          ONLINE   ERROR
    openshift-worker-<num>  provisioning      openshift-worker-<num>-65tjz      true

    provisioning状态将持续到OpenShift Container Platform集群配置节点为止。这可能需要30分钟或更长时间。节点配置完成后,状态将变为provisioned

    NAME                    STATE             CONSUMER                          ONLINE   ERROR
    openshift-worker-<num>  provisioned       openshift-worker-<num>-65tjz      true
  6. 配置完成后,请确保裸机节点已准备好。

    $ oc get nodes
    NAME                                          STATUS   ROLES   AGE     VERSION
    openshift-master-1.openshift.example.com      Ready    master  30h     v1.30.3
    openshift-master-2.openshift.example.com      Ready    master  30h     v1.30.3
    openshift-master-3.openshift.example.com      Ready    master  30h     v1.30.3
    openshift-worker-0.openshift.example.com      Ready    worker  30h     v1.30.3
    openshift-worker-1.openshift.example.com      Ready    worker  30h     v1.30.3
    openshift-worker-<num>.openshift.example.com  Ready    worker  3m27s   v1.30.3

    您还可以检查kubelet。

    $ ssh openshift-worker-<num>
    [kni@openshift-worker-<num>]$ journalctl -fu kubelet