×

部署用户配置的基础架构集群后,您可以使用裸机操作符 (BMO) 和其他metal3组件来扩展集群中的裸机主机。这种方法有助于您以更自动化的方式扩展用户配置的集群。

关于使用裸机操作符扩展用户配置的集群

您可以使用裸机操作符 (BMO) 和其他metal3组件来扩展用户配置的基础架构集群。用户配置的基础架构安装不包含机器API操作符。机器API操作符通常管理集群中裸机节点的生命周期。但是,可以使用BMO和其他metal3组件来扩展用户配置集群中的节点,而无需机器API操作符。

扩展用户配置集群的先决条件

  • 您已在裸机上安装了用户配置的基础架构集群。

  • 您可以访问主机的底板管理控制器 (BMC)。

扩展用户配置集群的限制

  • 您不能使用预配网络来使用裸机操作符 (BMO) 扩展用户配置的基础架构集群。

    • 因此,您只能使用支持虚拟媒体网络引导的裸机主机驱动程序,例如redfish-virtualmediaidrac-virtualmedia

  • 您不能使用BMO来扩展用户配置的基础架构集群中的MachineSet对象。

配置预配资源以扩展用户配置的集群

创建一个Provisioning自定义资源 (CR) 以在用户配置的基础架构集群上启用Metal平台组件。

先决条件
  • 您已在裸机上安装了用户配置的基础架构集群。

步骤
  1. 创建一个Provisioning CR。

    1. 将以下YAML保存到provisioning.yaml文件中

      apiVersion: metal3.io/v1alpha1
      kind: Provisioning
      metadata:
        name: provisioning-configuration
      spec:
        provisioningNetwork: "Disabled"
        watchAllNamespaces: false

      OpenShift Container Platform 4.17 不支持在使用裸机操作符扩展用户配置的集群时启用预配网络。

  2. 运行以下命令创建Provisioning CR

    $ oc create -f provisioning.yaml
    示例输出
    provisioning.metal3.io/provisioning-configuration created
验证
  • 运行以下命令验证预配服务是否正在运行

    $ oc get pods -n openshift-machine-api
    示例输出
    NAME                                                  READY   STATUS    RESTARTS        AGE
    cluster-autoscaler-operator-678c476f4c-jjdn5          2/2     Running   0               5d21h
    cluster-baremetal-operator-6866f7b976-gmvgh           2/2     Running   0               5d21h
    control-plane-machine-set-operator-7d8566696c-bh4jz   1/1     Running   0               5d21h
    ironic-proxy-64bdw                                    1/1     Running   0               5d21h
    ironic-proxy-rbggf                                    1/1     Running   0               5d21h
    ironic-proxy-vj54c                                    1/1     Running   0               5d21h
    machine-api-controllers-544d6849d5-tgj9l              7/7     Running   1 (5d21h ago)   5d21h
    machine-api-operator-5c4ff4b86d-6fjmq                 2/2     Running   0               5d21h
    metal3-6d98f84cc8-zn2mx                               5/5     Running   0               5d21h
    metal3-image-customization-59d745768d-bhrp7           1/1     Running   0               5d21h

使用BMO在用户配置的集群中预配新主机

您可以使用裸机操作符 (BMO) 通过创建BareMetalHost自定义资源 (CR) 来在用户配置的集群中预配裸机主机。

使用 BMO 将裸金属主机预配到集群时,默认情况下会在 BareMetalHost 自定义资源中将 spec.externallyProvisioned 规范设置为 false。请勿将 spec.externallyProvisioned 规范设置为 true,因为此设置会导致意外行为。

先决条件
  • 您创建了一个用户预配的裸金属集群。

  • 您可以访问主机的底板管理控制器 (BMC)。

  • 您通过创建 Provisioning CR 在集群中部署了预配服务。

步骤
  1. 为裸金属节点创建配置文件。根据您使用静态配置还是 DHCP 服务器,选择以下示例 bmh.yaml 文件之一,并通过替换 YAML 中的值以匹配您的环境来进行配置。

    • 要使用静态配置进行部署,请创建以下 bmh.yaml 文件:

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

      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: openshift-worker-<num>-network-config-secret
        namespace: openshift-machine-api
       # ...
      interfaces:
        - name: <nic_name>
          type: ethernet
          state: up
          ipv4:
            enabled: false
          ipv6:
            enabled: false
      # ...
    • 要使用 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>
      ---
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: openshift-worker-<num>
        namespace: openshift-machine-api
      spec:
        online: true
        bootMACAddress: <nic1_mac_address> (3)
        bmc:
          address: <protocol>://<bmc_url> (4)
          credentialsName: openshift-worker-<num>-bmc
          disableCertificateVerification: false
        customDeploy:
          method: install_coreos
        userData:
          name: worker-user-data-managed
          namespace: openshift-machine-api
        rootDeviceHints:
          deviceName: <root_device_hint> (5)
      1 <num> 替换为 namecredentialsName 字段中裸金属节点的唯一计算节点编号。
      2 <base64_of_uid><base64_of_pwd> 替换为用户名和密码的 base64 字符串。
      3 <nic1_mac_address> 替换为裸金属节点的第一个 NIC 的 MAC 地址。有关其他 BMC 配置选项,请参阅“BMC 地址”部分。
      4 <protocol> 替换为 BMC 协议,例如 IPMI、Redfish 或其他协议。将 <bmc_url> 替换为裸金属节点的基板管理控制器 (BMC) 的 URL。
      5 可选:在指定根设备提示时,将 <root_device_hint> 替换为设备路径。有关更多详细信息,请参阅“根设备提示”。

      如果现有裸金属节点的 MAC 地址与您尝试预配的裸金属主机的 MAC 地址匹配,则安装将失败。如果主机注册、检查、清理或其他步骤失败,则裸金属操作符将连续重试安装。有关更多详细信息,请参阅“诊断在集群中预配新主机时的重复 MAC 地址”。

  2. 运行以下命令来创建裸金属节点:

    $ oc 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
  3. 运行以下命令来检查裸金属节点:

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

    其中

    <num>

    指定计算节点编号。

    示例输出
    NAME                    STATE       CONSUMER   ONLINE   ERROR
    openshift-worker-<num>  provisioned true
  4. 批准所有证书签名请求 (CSR)。

    1. 运行以下命令获取挂起的 CSR 列表:

      $ oc get csr
      示例输出
      NAME        AGE   SIGNERNAME                                    REQUESTOR                                         REQUESTEDDURATION CONDITION
      csr-gfm9f   33s   kubernetes.io/kube-apiserver-client-kubelet   system:serviceaccount:openshift-machine-config-o
      perator:node-bootstrapper   <none>              Pending
    2. 运行以下命令批准 CSR:

      $ oc adm certificate approve <csr_name>
      示例输出
      certificatesigningrequest.certificates.k8s.io/<csr_name> approved
验证
  • 运行以下命令验证节点是否已准备好:

    $ oc get nodes
    示例输出
    NAME        STATUS   ROLES           AGE     VERSION
    app1        Ready    worker          47s     v1.24.0+dc5a2fd
    controller1 Ready    master,worker   2d22h   v1.24.0+dc5a2fd

可选:使用 BMO 管理用户预配集群中的现有主机

您可以选择使用裸金属操作符 (BMO) 来管理用户预配集群中现有的裸金属控制器主机,方法是为现有主机创建 BareMetalHost 对象。管理现有的用户预配主机并非强制要求;但是,您可以将它们注册为外部预配的主机,以用于清单目的。

要使用 BMO 管理现有主机,必须将 BareMetalHost 自定义资源中的 spec.externallyProvisioned 规范设置为 true,以防止 BMO 重新预配主机。

先决条件
  • 您创建了一个用户预配的裸金属集群。

  • 您可以访问主机的底板管理控制器 (BMC)。

  • 您通过创建 Provisioning CR 在集群中部署了预配服务。

步骤
  1. 创建 Secret CR 和 BareMetalHost CR。

    1. 将以下 YAML 保存到 controller.yaml 文件中:

      ---
      apiVersion: v1
      kind: Secret
      metadata:
        name: controller1-bmc
        namespace: openshift-machine-api
      type: Opaque
      data:
        username: <base64_of_uid>
        password: <base64_of_pwd>
      ---
      apiVersion: metal3.io/v1alpha1
      kind: BareMetalHost
      metadata:
        name: controller1
        namespace: openshift-machine-api
      spec:
        bmc:
          address: <protocol>://<bmc_url> (1)
          credentialsName: "controller1-bmc"
        bootMACAddress: <nic1_mac_address>
        customDeploy:
          method: install_coreos
        externallyProvisioned: true (2)
        online: true
        userData:
          name: controller-user-data-managed
          namespace: openshift-machine-api
      1 您只能使用支持虚拟介质网络引导的裸金属主机驱动程序,例如 redfish-virtualmediaidrac-virtualmedia
      2 必须将该值设置为 true,以防止 BMO 重新预配裸金属控制器主机。
  2. 运行以下命令创建裸金属主机对象:

    $ oc create -f controller.yaml
    示例输出
    secret/controller1-bmc created
    baremetalhost.metal3.io/controller1 created
验证
  • 运行以下命令验证 BMO 是否已创建裸金属主机对象:

    $ oc get bmh -A
    示例输出
    NAMESPACE               NAME          STATE                    CONSUMER   ONLINE   ERROR   AGE
    openshift-machine-api   controller1   externally provisioned              true             13s

使用 BMO 从用户预配集群中删除主机

您可以使用裸金属操作符 (BMO) 从用户预配集群中删除裸金属主机。

先决条件
  • 您创建了一个用户预配的裸金属集群。

  • 您可以访问主机的底板管理控制器 (BMC)。

  • 您通过创建 Provisioning CR 在集群中部署了预配服务。

步骤
  1. 运行以下命令将节点隔离并清空:

    $ oc adm drain app1 --force --ignore-daemonsets=true
    示例输出
    node/app1 cordoned
    WARNING: ignoring DaemonSet-managed Pods: openshift-cluster-node-tuning-operator/tuned-tvthg, openshift-dns/dns-
    default-9q6rz, openshift-dns/node-resolver-zvt42, openshift-image-registry/node-ca-mzxth, openshift-ingress-cana
    ry/ingress-canary-qq5lf, openshift-machine-config-operator/machine-config-daemon-v79dm, openshift-monitoring/nod
    e-exporter-2vn59, openshift-multus/multus-additional-cni-plugins-wssvj, openshift-multus/multus-fn8tg, openshift
    -multus/network-metrics-daemon-5qv55, openshift-network-diagnostics/network-check-target-jqxn2, openshift-ovn-ku
    bernetes/ovnkube-node-rsvqg
    evicting pod openshift-operator-lifecycle-manager/collect-profiles-27766965-258vp
    evicting pod openshift-operator-lifecycle-manager/collect-profiles-27766950-kg5mk
    evicting pod openshift-operator-lifecycle-manager/collect-profiles-27766935-stf4s
    pod/collect-profiles-27766965-258vp evicted
    pod/collect-profiles-27766950-kg5mk evicted
    pod/collect-profiles-27766935-stf4s evicted
    node/app1 drained
  2. BareMetalHost CR 中删除 customDeploy 规范。

    1. 运行以下命令编辑主机的 BareMetalHost CR:

      $ oc edit bmh -n openshift-machine-api <host_name>
    2. 删除 spec.customDeployspec.customDeploy.method 行。

      ...
        customDeploy:
          method: install_coreos
    3. 运行以下命令验证主机的预配状态是否已更改为 deprovisioning

      $ oc get bmh -A
      示例输出
      NAMESPACE               NAME          STATE                    CONSUMER   ONLINE   ERROR   AGE
      openshift-machine-api   controller1   externally provisioned              true             58m
      openshift-machine-api   worker1       deprovisioning                      true             57m
  3. BareMetalHost 状态更改为 available 时,运行以下命令删除主机:

    $ oc delete bmh -n openshift-machine-api <bmh_name>

    您无需编辑 BareMetalHost CR 即可运行此步骤。BareMetalHost 状态从 deprovisioning 更改为 available 可能需要一些时间。

  4. 运行以下命令删除节点:

    $ oc delete node <node_name>
验证
  • 运行以下命令验证您是否已删除节点:

    $ oc get nodes
    示例输出
    NAME          STATUS   ROLES           AGE     VERSION
    controller1   Ready    master,worker   2d23h   v1.24.0+dc5a2fd