Machine

This section describes the Machine resource used in Mirantis Container Cloud API for the OpenStack-based clusters. The Machine resource describes the machine-level parameters.

For demonstration purposes, the Container Cloud Machine custom resource (CR) can be split into the following major sections:

metadata

The Container Cloud Machine custom resource (CR) contains the following fields:

  • apiVersion

    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

    Container Cloud project in which the Machine object has been created.

  • annotations
    • openstack-floating-ip-address

      Automatically generated floating IP which will be associated with an OpenStack instance.

  • labels

    • kaas.mirantis.com/provider

      Provider type that matches the provider type in the Cluster object and should be openstack for OpenStack machines.

    • kaas.mirantis.com/region

      Region name that matches the region name in the Cluster object.

    • cluster.sigs.k8s.io/cluster-name

      Cluster name that this machine 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:
    openstack-floating-ip-address: 172.16.246.182
  labels:
    kaas.mirantis.com/provider: openstack
    kaas.mirantis.com/region: eu
    cluster.sigs.k8s.io/cluster-name: example-cluster
    cluster.sigs.k8s.io/control-plane: "true" # remove for worker

spec:providerSpec for instance configuration

The spec object field of the Machine object represents the OpenstackMachineProviderSpec subresource with all required details to create an OpenStack instance. It contains the following fields:

  • apiVersion

    openstackproviderconfig.k8s.io/v1alpha.

  • kind

    OpenstackMachineProviderSpec.

  • availabilityZone

    Availability zone to launch the OpenStack instance from.

  • flavor

    Flavor reference to the OpenStack instance flavor.

  • image

    Name of the image to use for the OpenStack instance.

  • securityGroups

    List of the security groups IDs assigned to the OpenStack instance.

  • nodeLabels

    List of node labels to be attached to a node for the user to run certain components on separate cluster nodes. The list of allowed node labels is located in the cluster status providerStatus.releaseRef.current.allowedNodeLabels field. Adding of a node label that is not available in the list of allowed node labels is restricted.

Configuration example:

providerSpec:
  value:
    apiVersion: openstackproviderconfig.k8s.io/v1alpha1
    kind: OpenstackMachineProviderSpec
    availabilityZone: nova
    flavor: kaas.small
    image: bionic-server-cloudimg-amd64-20200724
    securityGroups:
      - kaas-sg-ctrl-abcdefgh-0123-4567-890a-0a1b2c3d4e5f
      - kaas-sg-glob-abcdefgh-0123-4567-890a-0a1b2c3d4e5f
    nodeLabels:
    - key: openstack-control-plane
      value: enabled

status:providerStatus

The status object field of the Machine object represents the OpenstackMachineProviderStatus subresource that describes current state of an OpenStack instance and contains the following fields:

  • apiVersion

    openstackproviderconfig.k8s.io/v1alpha1

  • kind

    OpenstackMachineProviderStatus

  • conditions

    List of the Machine status condition:

    • type

      Object type

    • ready

      Readiness flag

    • message

      Status details

  • providerInstanceState

    Current state of an OpenStack instance:

    • id

      ID of an OpenStack instance

    • ready

      Readiness flag

    • state

      State of an OpenStack instance

  • hardware

    Machine hardware information:

    • cpu

      CPUs number

    • ram

      RAM capacity (in GB)

  • privateIp

    Private IPv4 address assigned to the instance

  • status

    Current state of a machine:

    • Provision

      A machine is yet to obtain a status

    • Uninitialized

      A machine is yet to obtain the node IP address and host name

    • Pending

      A machine is yet to receive the deployment instructions and it is either not booted yet or waits for the LCM controller to be deployed

    • Prepare

      A machine is running the Prepare phase during which Docker images and packages are being predownloaded

    • Deploy

      A machine is processing the LCM controller instructions

    • Reconfigure

      Some configurations are being updated on a machine

    • Ready

      A machine is deployed and the MKE version is set

Configuration example:

status:
  providerStatus:
    apiVersion: openstackproviderconfig.k8s.io/v1alpha1
    kind: OpenstackMachineProviderStatus
    conditions:
     - message: Kubelet's NodeReady condition is True
       ready: true
       type: Kubelet
     - message: Swarm state of the machine is ready
       ready: true
       type: Swarm
     - message: LCM Status of the machine is Ready
       ready: true
       type: LCM
       ...
    providerInstanceState:
      id: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
      ready: true
      state: ACTIVE
    hardware:
      cpu: 8
      ram: 16
    privateIp: 10.10.10.169
    status: Ready