$ curl -s https://mirror.openshift.com/pub/openshift-v4/clients/ocp/$VERSION/openshift-client-linux-$VERSION.tar.gz | tar zxvf - oc
部署安装程序预配置的 OpenShift Container Platform 集群后,您可以使用以下步骤来扩展工作节点的数量。确保每个预期的工作节点都满足先决条件。
使用 RedFish 虚拟介质扩展集群需要满足最低固件要求。有关使用 RedFish 虚拟介质扩展集群时的更多详细信息,请参阅“先决条件”部分中的“使用虚拟介质安装的固件要求”。 |
要扩展集群,必须为节点提供相关的 IP 地址。这可以通过静态配置或 DHCP(动态主机配置协议)服务器来完成。使用 DHCP 服务器扩展集群时,每个节点都必须具有 DHCP 预留。
预留 IP 地址以使其成为静态 IP 地址
一些管理员更喜欢使用静态 IP 地址,以便在没有 DHCP 服务器的情况下每个节点的 IP 地址保持不变。要使用 NMState 配置静态 IP 地址,请参阅“设置 OpenShift 安装的环境”部分中的“可选:在 install-config.yaml 文件中配置主机网络接口”以获取更多详细信息。 |
准备裸机节点需要从供应程序节点执行以下过程。
获取 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
使用基板管理控制器 (BMC) 关闭裸机节点,并确保其已关闭。
检索裸机节点基板管理控制器的用户名和密码。然后,从用户名和密码创建 base64
字符串
$ echo -ne "root" | base64
$ echo -ne "password" | base64
为裸机节点创建一个配置文件。根据您是使用静态配置还是 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地址一起设置,如所示。
|
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地址重复”部分。 |
创建裸机节点
$ 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编号。
启动并检查裸机节点
$ oc -n openshift-machine-api get bmh openshift-worker-<num>
其中<num>
是worker节点编号。
NAME STATE CONSUMER ONLINE ERROR
openshift-worker-<num> available true
要允许worker节点加入集群,请将 |
有关配置NMState语法的详细信息,请参阅可选:在install-config.yaml文件中配置主机网络接口。
有关自动扩展机器的详细信息,请参阅自动将机器扩展到可用裸机主机的数量。
使用以下步骤替换安装程序配置的OpenShift Container Platform控制平面节点。
如果您重用现有控制平面主机的 如果现有控制平面 |
您可以作为具有cluster-admin
角色的用户访问集群。
您已备份etcd。
在执行此过程之前,请备份etcd,以便在遇到任何问题时可以恢复集群。有关备份etcd的更多信息,请参阅“其他资源”部分。 |
确保Bare Metal Operator可用
$ oc get clusteroperator baremetal
NAME VERSION AVAILABLE PROGRESSING DEGRADED SINCE MESSAGE
baremetal 4.17 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
对象和用于存储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协议,例如redfish 、redfish-virtualmedia 、idrac-virtualmedia 或其他协议。将<bmc_ip> 替换为裸机节点基板管理控制器的IP地址。有关其他BMC配置选项,请参阅“其他资源”部分中的“BMC寻址”。 |
5 | 将<NIC1_mac_address> 替换为裸机节点第一个网卡的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
控制平面节点没有MachineSet
对象,因此您必须创建一个Machine
对象。您可以从另一个控制平面Machine
对象复制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> (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 | 在name 、labels 和annotations 字段中,将<num> 替换为裸机节点的控制平面编号。 |
要查看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.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处于 |
如果启用了provisioning
网络,并且想要在baremetal
网络上使用虚拟介质扩展集群,请使用以下步骤。
存在具有baremetal
网络和provisioning
网络的现有集群。
编辑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。 |
如果映像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地址匹配,则裸机操作符会将该主机与现有节点关联。如果主机注册、检查、清理或其他Ironic步骤失败,则裸机操作符将持续重试安装。失败的裸机主机将显示注册错误。
您可以通过检查在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
...
配置裸机节点需要从供应节点执行以下过程。
在配置裸机节点之前,请确保STATE
为available
。
$ oc -n openshift-machine-api get bmh openshift-worker-<num>
其中<num>
是worker节点编号。
NAME STATE ONLINE ERROR AGE
openshift-worker available true 34h
获取工作节点的数量。
$ 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
获取计算机器集。
$ 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
将工作节点数量增加一个。
$ oc scale --replicas=<num> machineset <machineset> -n openshift-machine-api
将<num>
替换为新的工作节点数量。将<machineset>
替换为上一步中计算机器集的名称。
检查裸机节点的状态。
$ 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
配置完成后,请确保裸机节点已准备好。
$ 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