Add a bare metal host using CLI¶
This section describes how to add bare metal hosts using the Container Cloud CLI during a managed cluster creation.
To add a bare metal host using API:
Verify that you configured each bare metal host as follows:
Enable the boot NIC support for UEFI load. Usually, at least the built-in network interfaces support it.
Enable the UEFI-LAN-OPROM support in BIOS -> Advanced -> PCIPCIe.
Enable the IPv4-PXE stack.
Set the following boot order:
UEFI-DISK
UEFI-PXE
If your PXE network is not configured to use the first network interface, fix the UEFI-PXE boot order to speed up node discovering by selecting only one required network interface.
Power off all bare metal hosts.
Warning
Only one Ethernet port on a host must be connected to the PXE network at any given time. The physical address (MAC) of this interface must be noted and used to configure the
BareMetalHost
object describing the host.Optional. Create a custom bare metal host profile depending on your needs as described in Create a custom bare metal host profile.
Log in to the host where your management cluster
kubeconfig
is located and where kubectl is installed.Create a secret YAML file that describes the unique credentials of the new bare metal host.
Example of the bare metal host secret:
apiVersion: v1 data: password: <credentialsPassword> username: <credentialsUserName> kind: Secret metadata: labels: kaas.mirantis.com/credentials: "true" kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one name: <credentialsName> namespace: <managedClusterProjectName> type: Opaque
In the
data
section, add the IPMI user name and password in the base64 encoding to access the BMC. To obtain the base64-encoded credentials, you can use the following command in your Linux console:echo -n <username|password> | base64
Caution
Each bare metal host must have a unique
Secret
.In the
metadata
section, add the uniquename
of credentials and the name of the non-default
project (namespace
) dedicated for the managed cluster being created. To create a project, refer to Create a project for managed clusters.
Apply the created secret YAML file to your deployment:
kubectl create -n <managedClusterProjectName> -f ${<BareMetalHostCredsFileName>}.yaml
Create a YAML file that contains a description of the new bare metal host.
Example of the bare metal host configuration file with the
worker
role:apiVersion: metal3.io/v1alpha1 kind: BareMetalHost metadata: labels: kaas.mirantis.com/baremetalhost-id: <uniqueBareMetalHostHardwareNodeId> hostlabel.bm.kaas.mirantis.com/worker: "true" kaas.mirantis.com/provider: baremetal kaas.mirantis.com/region: region-one name: <BareMetalHostUniqueName> namespace: <managedClusterProjectName> spec: bmc: address: <ipAddressForBmcAccess> credentialsName: <credentialsName> bootMACAddress: <BareMetalHostBootMacAddress> online: true
For a detailed fields description, see BareMetalHost.
Apply this configuration YAML file to your deployment:
kubectl create -n <managedClusterProjectName> -f ${<BareMetalHostConfigFileName>}.yaml
During provisioning,
baremetal-operator
inspects the bare metal host and moves it to thePreparing
state. The host becomes ready to be linked to a bare metal machine.Verify the new
BareMetalHost
object status:kubectl create -n <managedClusterProjectName> get bmh -o wide <BareMetalHostUniqueName>
Example of system response:
NAMESPACE NAME STATUS STATE CONSUMER BMC BOOTMODE ONLINE ERROR REGION my-project bmh1 OK preparing ip_address_for-bmc-access legacy true region-one
During provisioning, the status changes as follows:
registering
inspecting
preparing
After
BareMetalHost
switches to thepreparing
stage, theinspecting
phase finishes and you can verify hardware information available in the object status. For example:Verify the status of hardware NICs:
kubectl -n <managedClusterProjectName> get bmh -o yaml <BareMetalHostUniqueName> -o json | jq -r '[.status.hardware.nics]'
Example of system response:
[ [ { "ip": "172.18.171.32", "mac": "ac:1f:6b:02:81:1a", "model": "0x8086 0x1521", "name": "eno1", "pxe": true }, { "ip": "fe80::225:90ff:fe33:d5ac%ens1f0", "mac": "00:25:90:33:d5:ac", "model": "0x8086 0x10fb", "name": "ens1f0" }, ...
Verify the status of RAM:
kubectl -n <managedClusterProjectName> get bmh -o yaml <BareMetalHostUniqueName> -o json | jq -r '[.status.hardware.ramMebibytes]'
Example of system response:
[ 98304 ]
See also