10.5. 扩展集群
部署安装程序置备的 OpenShift Container Platform 集群后,您可以使用以下步骤扩展 worker 节点的数量。确保每个 worker 节点都满足先决条件。
使用 RedFish Virtual Media 扩展集群需要满足最低固件要求。有关使用 RedFish Virtual Media 扩展集群的详情,请参阅先决条件部分中的使用虚拟介质安装的固件要求。
10.5.1. 准备裸机节点
扩展集群需要 DHCP 服务器。每个节点都必须有 DHCP 保留。
有些管理员更喜欢使用静态 IP 地址,以便在没有 DHCP 服务器时每个节点的 IP 地址保持恒定状态。要在 OpenShift Container Platform 集群中使用静态 IP 地址,请在 DHCP 服务器中保留 IP 地址,且租期无限。安装程序成功置备节点后,分配程序脚本将检查节点的网络配置。如果分配程序脚本发现网络配置包含 DHCP 无限租期,它将使用 DHCP 无限租期中的 IP 地址重新创建连接作为静态 IP 连接。没有 DHCP 无限租期的 NIC 将保持不变。
使用无限租期设置 IP 地址与使用 Machine Config Operator 部署的网络配置不兼容。
准备裸机节点需要从 provisioner 节点执行以下步骤。
流程
如果需要,获取
oc
二进制文件。它应该已经存在在 provisioner 节点上。$ 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
- 使用基板管理控制器关闭裸机节点,并确保它已关闭。
检索裸机节点基板管理控制器的用户名和密码。然后,从用户名和密码创建
base64
字符串:$ echo -ne "root" | base64
$ echo -ne "password" | base64
为裸机节点创建配置文件。
$ vim bmh.yaml
--- apiVersion: v1 kind: Secret metadata: name: openshift-worker-<num>-bmc-secret type: Opaque data: username: <base64-of-uid> password: <base64-of-pwd> --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: openshift-worker-<num> spec: online: true bootMACAddress: <NIC1-mac-address> bmc: address: <protocol>://<bmc-ip> credentialsName: openshift-worker-<num>-bmc-secret
在
name
字段和credentialsName
字段中,使用裸机节点的 worker 数量替换 <num>
;。将<base64-of-uid>
替换为用户名的base64
字符串。将<base64-of-pwd>
替换为密码的base64
字符串。将<NIC1-mac-address>
替换为裸机节点第一个 NIC 的 MAC 地址。如需了解更多 BMC 配置选项,请参阅 BMC 寻址部分。将
<protocol>
替换为 BMC 协议,如 IPMI、RedFish 或其他协议。将<bmc-ip>
替换为裸机节点基板管理控制器的 IP 地址。注意如果现有裸机节点的 MAC 地址与您试图置备的裸机主机的 MAC 地址匹配,则 Ironic 安装将失败。如果主机注册、检查、清理或其他 Ironic 步骤失败,Bare Metal Operator 会持续重试安装。如需更多信息,请参阅诊断主机重复的 MAC 地址。
创建裸机节点。
$ oc -n openshift-machine-api create -f bmh.yaml
secret/openshift-worker-<num>-bmc-secret created baremetalhost.metal3.io/openshift-worker-<num> created
其中
<num> 是
worker 号。启动并检查裸机节点。
$ oc -n openshift-machine-api get bmh openshift-worker-<num>
其中
<num>
是 worker 节点号。NAME STATE CONSUMER ONLINE ERROR openshift-worker-<num> ready true
10.5.2. 替换裸机 control plane 节点
使用以下步骤替换安装程序置备的 OpenShift Container Platform control plane 节点。
如果您从现有 control plane 主机重复使用 BareMetalHost
对象定义,请不要将 externallyProvisioned
字段保留为 true
。
如果 OpenShift Container Platform 安装程序置备,现有 control plane BareMetalHost
对象可能会将 externallyProvisioned
标记设为 true
。
先决条件
-
您可以使用具有
cluster-admin
角色的用户访问集群。 已进行 etcd 备份。
重要执行此流程前进行 etcd 备份,以便在遇到任何问题时可以恢复集群。有关获取 etcd 备份的更多信息,请参阅附加资源部分。
流程
确保 Bare Metal Operator 可用:
$ oc get clusteroperator baremetal
输出示例
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE baremetal 4.9.0 True False False 3d15h
删除旧的
BareMetalHost
和Machine
对象:$ oc delete bmh -n openshift-machine-api <host_name> $ oc delete machine -n openshift-machine-api <machine_name>
将
<host_name>
替换为主机名,<machine_name>
替换为机器的名称。机器名称会出现在CONSUMER
字段下。删除
BareMetalHost
和Machine
对象后,机器控制器会自动删除Node
对象。创建新的
BareMetalHost
对象和 secret,以存储 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> 4 namespace: openshift-machine-api spec: automatedCleaningMode: disabled bmc: address: <protocol>://<bmc_ip> 5 credentialsName: control-plane-<num>-bmc-secret 6 bootMACAddress: <NIC1_mac_address> 7 bootMode: UEFI externallyProvisioned: false hardwareProfile: unknown online: true EOF
- 1 4 6
- 在
name
字段和credentialsName
字段中,使用裸机节点的 control plane 数量替换<num>
。 - 2
- 将
<base64_of_uid>
替换为用户名的base64
格式的字符串。 - 3
- 将
<base64_of_pwd>
替换为密码的base64
格式的字符串。 - 5
- 将
<protocol>
替换为 BMC 协议,如redfish
、redfish-virtualmedia
、idrac-virtualmedia
或其他。将<bmc_ip>
替换为裸机节点基板管理控制器的 IP 地址。如需了解更多 BMC 配置选项,请参阅附加资源部分中的 "BMC 寻址"。 - 7
- 将
<NIC1_mac_address>
替换为裸机节点第一个 NIC 的 MAC 地址。
检查完成后,
BareMetalHost
对象会被创建并可用置备。查看可用的
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
control plane 节点没有
MachineSet
对象,因此您必须创建Machine
对象。您可以从另一个 control planeMachine
对象复制providerSpec
。创建
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> 2 machine.openshift.io/cluster-api-machine-role: master machine.openshift.io/cluster-api-machine-type: master name: control-plane-<num> 3 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
要查看
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
在 RHCOS 安装后,验证
BareMetalHost
是否已添加到集群中:$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION control-plane-1.example.com available master 4m2s v1.18.2 control-plane-2.example.com available master 141m v1.18.2 control-plane-3.example.com available master 141m v1.18.2 compute-1.example.com available worker 87m v1.18.2 compute-2.example.com available worker 87m v1.18.2
注意替换新的 control plane 节点后,在新节点上运行的 etcd pod 处于
crashloopback
状态。如需更多信息,请参阅附加资源部分中的 "替换不健康的 etcd 成员"。
其他资源
10.5.3. 准备在 baremetal 网络中使用 Virtual Media 进行部署
如果启用了 provisioning
网络,且您要使用 baremetal
网络中的 Virtual Media 扩展集群,请使用以下步骤。
先决条件
-
有一个带有 a
baremetal 网络和
provisioning
网络的现有集群。
流程
编辑
置备
自定义资源(CR),以在baremetal
网络中使用 Virtual Media 启用部署: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: preProvisioningOSDownloadURLs: {} provisioningDHCPRange: 172.22.0.10,172.22.0.254 provisioningIP: 172.22.0.3 provisioningInterface: enp1s0 provisioningNetwork: Managed provisioningNetworkCIDR: 172.22.0.0/24 provisioningOSDownloadURL: http://192.168.111.1/images/rhcos-<version>.x86_64.qcow2.gz?sha256=<sha256> 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。
编辑 machineset 以使用 API VIP 地址:
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>.x86_64.qcow2.<md5sum> 1 url: http://172.22.0.3:6181/images/rhcos-<version>.x86_64.qcow2 2 kind: BareMetalMachineProviderSpec metadata: creationTimestamp: null userData: name: worker-user-data status: availableReplicas: 2 fullyLabeledReplicas: 2 observedGeneration: 11 readyReplicas: 2 replicas: 2
10.5.4. 在集群中置备新主机时诊断重复的 MAC 地址
如果集群中现有裸机节点的 MAC 地址与您试图添加到集群的裸机主机的 MAC 地址匹配,Bare Metal Operator 将主机与现有节点关联。如果主机注册、检查、清理或其他 Ironic 步骤失败,Bare Metal Operator 会持续重试安装。失败的裸机主机会显示注册错误。
您可以通过检查在 openshift-machine-api
命名空间中运行的裸机主机来诊断重复的 MAC 地址。
先决条件
- 在裸机上安装 OpenShift Container Platform 集群。
-
安装 OpenShift Container Platform CLI
oc
。 -
以具有
cluster-admin
权限的用户身份登录。
流程
要确定置备失败的裸机主机是否具有与现有节点相同的 MAC 地址,请执行以下操作:
获取在
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
要查看失败主机状态的更多详细信息,请运行以下命令将
<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 ...
10.5.5. 置备裸机节点
置备裸机节点需要从 provisioner 节点执行以下步骤。
流程
在置备裸机节点前,请确保
STATE
为ready
。$ oc -n openshift-machine-api get bmh openshift-worker-<num>
其中
<num>
是 worker 节点号。NAME STATE CONSUMER ONLINE ERROR openshift-worker-<num> ready true
获取 worker 节点数量。
$ oc get nodes
NAME STATUS ROLES AGE VERSION provisioner.openshift.example.com Ready master 30h v1.22.1 openshift-master-1.openshift.example.com Ready master 30h v1.22.1 openshift-master-2.openshift.example.com Ready master 30h v1.22.1 openshift-master-3.openshift.example.com Ready master 30h v1.22.1 openshift-worker-0.openshift.example.com Ready master 30h v1.22.1 openshift-worker-1.openshift.example.com Ready master 30h v1.22.1
获取机器集。
$ 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
将 worker 节点数量增加一个。
$ oc scale --replicas=<num> machineset <machineset> -n openshift-machine-api
将
<num>
替换为新的 worker 节点数。将<machineset> 替换为
上一步中机器集的名称。检查裸机节点的状态。
$ oc -n openshift-machine-api get bmh openshift-worker-<num>
其中
<num>
是 worker 节点号。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> provisioning openshift-worker-<num>-65tjz true
在置备完成后,确保裸机节点就绪。
$ oc get nodes
NAME STATUS ROLES AGE VERSION provisioner.openshift.example.com Ready master 30h v1.22.1 openshift-master-1.openshift.example.com Ready master 30h v1.22.1 openshift-master-2.openshift.example.com Ready master 30h v1.22.1 openshift-master-3.openshift.example.com Ready master 30h v1.22.1 openshift-worker-0.openshift.example.com Ready master 30h v1.22.1 openshift-worker-1.openshift.example.com Ready master 30h v1.22.1 openshift-worker-<num>.openshift.example.com Ready worker 3m27s v1.22.1
您还可以检查 kubelet。
$ ssh openshift-worker-<num>
[kni@openshift-worker-<num>]$ journalctl -fu kubelet