This section describes the Machine
resource used in Mirantis
Container Cloud API for bare metal provider.
The Machine
resource describes the machine-level parameters.
For demonstration purposes, the Container Cloud Machine
custom resource (CR) is split into the following major sections:
The Container Cloud Machine
CR contains the following fields:
apiVersion
API version of the object that is cluster.k8s.io/v1alpha1
.
kind
Object type that is Machine
.
The metadata
object field of the Machine
resource contains
the following fields:
name
Name of the Machine
object.
namespace
Project in which the Machine
object is created.
annotations
Key-value pair to attach arbitrary metadata to the object:
metal3.io/BareMetalHost
Annotation attached to the Machine
object to reference
the corresponding BareMetalHost
object in the
<BareMetalHostProjectName/BareMetalHostName>
format.
labels
Key-value pairs that are attached to the object:
kaas.mirantis.com/provider
Provider type that matches the provider type in the Cluster
object
and must be baremetal
.
kaas.mirantis.com/region
Region name that matches the region name in the Cluster
object.
cluster.sigs.k8s.io/cluster-name
Cluster name that the Machine
object is linked to.
cluster.sigs.k8s.io/control-plane
For the control plane role of a machine, this label contains any value,
for example, "true"
.
For the worker role, this label is absent or does not contain any value.
Configuration example:
apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
metadata:
name: example-control-plane
namespace: example-ns
annotations:
metal3.io/BareMetalHost: default/master-0
labels:
kaas.mirantis.com/provider: baremetal
kaas.mirantis.com/region: region-one
cluster.sigs.k8s.io/cluster-name: example-cluster
cluster.sigs.k8s.io/control-plane: "true" # remove for worker
The spec
object field of the Machine
object represents
the BareMetalMachineProviderSpec
subresource with all required
details to create a bare metal instance. It contains the following fields:
apiVersion
API version of the object that is baremetal.k8s.io/v1alpha1
.
kind
Object type that is BareMetalMachineProviderSpec
.
bareMetalHostProfile
Configuration profile of a bare metal host:
name
Name of a bare metal host profile
namespace
Project in which the bare metal host profile is created.
l2TemplateIfMappingOverride
If specified, overrides the interface mapping value for the corresponding
L2Template
object.
l2TemplateSelector
If specified, contains the name
(first priority) or label
of the L2 template that will be applied during a machine creation.
The l2TemplateSelector
field is copied from the Machine
providerSpec
object to the IpamHost
object only once,
during a machine creation. To modify l2TemplateSelector
after creation
of a Machine
CR, edit the IpamHost
object.
hostSelector
Specifies the matching criteria for labels on the bare metal hosts.
Limits the set of the BareMetalHost
objects considered for
claiming for the Machine
object. The following selector labels
can be added when creating a machine using the Container Cloud web UI:
hostlabel.bm.kaas.mirantis.com/controlplane
hostlabel.bm.kaas.mirantis.com/worker
hostlabel.bm.kaas.mirantis.com/storage
Any custom label that is assigned to one or more bare metal hosts using API
can be used as a host selector. If the BareMetalHost
objects
with the specified label are missing, the Machine
object will not
be deployed until at least one bare metal host with the specified label
is available.
nodeLabels
List of node labels to be attached to the corresponding node. Enables
running of certain components on separate cluster nodes.
The list of allowed node labels is defined in the
providerStatus.releaseRef.current.allowedNodeLabels
cluster status.
Addition of any unsupported node label not from this list is restricted.
Configuration example:
spec:
...
providerSpec:
value:
apiVersion: baremetal.k8s.io/v1alpha1
kind: BareMetalMachineProviderSpec
bareMetalHostProfile:
name: default
namespace: default
l2TemplateIfMappingOverride:
- eno1
- enp0s0
l2TemplateSelector:
label: l2-template1-label-1
hostSelector:
matchLabels:
baremetal: hw-master-0
kind: BareMetalMachineProviderSpec
nodeLabels:
- key: stacklight
value: enabled
The status
object field of the Machine
object represents the
BareMetalMachineProviderStatus
subresource that describes the current
bare metal instance state and contains the following fields:
apiVersion
API version of the object that is cluster.k8s.io/v1alpha1
.
kind
Object type that is BareMetalMachineProviderStatus
.
hardware
Provides a machine hardware information:
cpu
Number of CPUs.
ram
RAM capacity in GB.
storage
List of hard drives mounted on the machine. Contains the disk name and size in GB.
status
Represents the current status of a machine:
Provision
Machine is yet to obtain a status.
Uninitialized
Machine is yet to obtain a node IP address and hostname.
Pending
Machine is yet to receive the deployment instructions. It is either not booted yet or waits for the LCM controller to be deployed.
Prepare
Machine is running the Prepare
phase when mostly Docker images
and packages are being predownloaded.
Deploy
Machine is processing the LCM controller instructions.
Reconfigure
Some configurations are being updated on a machine.
Ready
Machine is deployed and the supported Mirantis Kubernetes Engine (MKE) version is set.
Configuration example:
status:
providerStatus:
apiVersion: baremetal.k8s.io/v1alpha1
kind: BareMetalMachineProviderStatus
hardware:
cpu: 11
ram: 16
storage:
- name: /dev/vda
size: 61
- name: /dev/vdb
size: 32
- name: /dev/vdc
size: 32
status: Ready