13.5. 使用 Bare Metal Operator 扩展用户置备的集群
部署用户置备的基础架构集群后,您可以使用 Bare Metal Operator (BMO) 和其他 metal3 组件来扩展集群中的裸机主机。这种方法可帮助您以更自动化的方式扩展用户置备的集群。
13.5.1. 关于使用 Bare Metal Operator 扩展用户置备的集群
您可以使用 Bare Metal Operator (BMO) 和其他 metal3 组件扩展用户置备的基础架构集群。用户置备的基础架构安装不支持 Machine API Operator。Machine API Operator 通常管理集群中的裸机主机的生命周期。但是,可以使用 BMO 和其他 metal3 组件在用户置备的集群中扩展节点,而无需 Machine API Operator。
13.5.1.1. 扩展用户置备的集群的先决条件
- 您在裸机上安装了用户置备的基础架构集群。
- 您有到主机的基板管理控制器 (BMC) 访问权限。
13.5.1.2. 扩展用户置备的集群的限制
您不能使用 provisioning 网络来扩展用户置备的基础架构集群,使用 Bare Metal Operator (BMO)。
-
因此,您只能使用支持虚拟介质网络的裸机主机驱动程序,如
redfish-virtualmedia
和idrac-virtualmedia
。
-
因此,您只能使用支持虚拟介质网络的裸机主机驱动程序,如
-
您不能使用 BMO 在用户置备的基础架构集群中扩展
MachineSet
对象。
13.5.2. 配置置备资源以扩展用户置备的集群
创建 Provisioning
自定义资源 (CR),以便在用户置备的基础架构集群中启用裸机平台组件。
先决条件
- 您在裸机上安装了用户置备的基础架构集群。
流程
创建
Provisioning
CR。将以下 YAML 保存到
provisioning.yaml
文件中:apiVersion: metal3.io/v1alpha1 kind: Provisioning metadata: name: provisioning-configuration spec: provisioningNetwork: "Disabled" watchAllNamespaces: false
注意在使用 Bare Metal Operator 扩展用户置备的集群时,OpenShift Container Platform 4.16 不支持启用 provisioning 网络。
运行以下命令来创建
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
13.5.3. 使用 BMO 在用户置备的集群中置备新主机
您可以通过创建一个 BareMetalHost
自定义资源 (CR),使用 Bare Metal Operator (BMO) 在用户置备的集群中置备裸机主机。
要使用 BMO 为集群置备裸机主机,您必须将 BareMetalHost
自定义资源中的 spec.externallyProvisioned
规格设置为 false
。
先决条件
- 您创建了用户置备的裸机集群。
- 您有到主机的基板管理控制器 (BMC) 访问权限。
-
通过创建一个
Provisioning
CR,在集群中部署了置备服务。
流程
创建
Secret
CR 和BareMetalHost
CR。将以下 YAML 保存到
bmh.yaml
文件中:--- apiVersion: v1 kind: Secret metadata: name: worker1-bmc namespace: openshift-machine-api type: Opaque data: username: <base64_of_uid> password: <base64_of_pwd> --- apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: name: worker1 namespace: openshift-machine-api spec: bmc: address: <protocol>://<bmc_url> 1 credentialsName: "worker1-bmc" bootMACAddress: <nic1_mac_address> externallyProvisioned: false 2 customDeploy: method: install_coreos online: true userData: name: worker-user-data-managed namespace: openshift-machine-api
运行以下命令来创建裸机主机对象:
$ oc create -f bmh.yaml
输出示例
secret/worker1-bmc created baremetalhost.metal3.io/worker1 created
批准所有证书签名请求 (CSR)。
运行以下命令验证主机的置备状态是否为
provisioned
:$ oc get bmh -A
输出示例
NAMESPACE NAME STATE CONSUMER ONLINE ERROR AGE openshift-machine-api controller1 externally provisioned true 5m25s openshift-machine-api worker1 provisioned true 4m45s
运行以下命令,获取待处理的 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
运行以下命令来批准 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
13.5.4. 可选:使用 BMO 管理用户置备的集群中的现有主机
另外,您可以通过为现有主机创建一个 BareMetalHost
对象来管理用户置备的集群中的现有裸机控制器主机,来使用 Bare Metal Operator (BMO) 来管理用户置备集群中的现有裸机控制器主机。它不是必须的来管理现有用户置备的主机;但是,您可以将它们注册为外部置备主机,以实现清单目的。
要使用 BMO 管理现有主机,您必须将 BareMetalHost
自定义资源中的 spec.externallyProvisioned
规格设置为 true
,以防止 BMO 重新置备主机。
先决条件
- 您创建了用户置备的裸机集群。
- 您有到主机的基板管理控制器 (BMC) 访问权限。
-
通过创建一个
Provisioning
CR,在集群中部署了置备服务。
流程
创建
Secret
CR 和BareMetalHost
CR。将以下 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
运行以下命令来创建裸机主机对象:
$ 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
13.5.5. 使用 BMO 从用户置备的集群中删除主机
您可以使用 Bare Metal Operator (BMO)从用户置备的集群中删除裸机主机。
先决条件
- 您创建了用户置备的裸机集群。
- 您有到主机的基板管理控制器 (BMC) 访问权限。
-
通过创建一个
Provisioning
CR,在集群中部署了置备服务。
流程
运行以下命令进行 cordon 和 drain 主机:
$ 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
从
BareMetalHost
CR 中删除customDeploy
规格。运行以下命令,为主机编辑
BareMetalHost
CR:$ oc edit bmh -n openshift-machine-api <host_name>
删除
spec.customDeploy
和spec.customDeploy.method
行:... customDeploy: method: install_coreos
运行以下命令,验证主机的置备状态是否更改为
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
运行以下命令来删除节点:
$ oc delete node <node_name>
验证
运行以下命令验证节点是否已删除:
$ oc get nodes
输出示例
NAME STATUS ROLES AGE VERSION controller1 Ready master,worker 2d23h v1.24.0+dc5a2fd