Configuration recommendations for compute node types

This section contains recommendations for configuration of an OpenStackDeployment custom resource for the compute nodes of the following types:

  • Compute nodes with the default configuration, without local NVMe storage and SR-IOV network interface cards (NICs)

  • Compute nodes with the NVMe local storage

  • Compute nodes with the SR-IOV NICs

  • Compute nodes with both the NVMe local storage and SR-IOV NICs

Note

If the local NVMe storage is enabled, Mirantis recommends using it and enable SR-IOV if possible.

Caution

Before using the NVMe local storage and mount point, define them in BareMetalHostProfile. For example:

apiVersion: metal3.io/v1alpha1
 kind: BareMetalHostProfile
 ...
 spec:
   devices:
     ...
   - device:
       byName: /dev/nvme0n1
       minSizeGiB: 30
       wipe: true
     partitions:
     - name: local-volumes-partition
       sizeGiB: 0
       wipe: true
     ...
   fileSystems:
     ...
   - fileSystem: ext4
     partition: local-volumes-partition
     # mountpoint for Nova images
     mountPoint: /var/lib/nova

Caution

To control the storage type (local NVMe or Ceph) for virtual machines, place a node into the OpenStack aggregate. For details, see OpenStack documentation: Host aggregates.

As defined in Node-specific configuration, each node with a non-default configuration must be configured separately. Each Machine object must have a configuration-specific label. For example, for a compute node with the local NVMe storage:

apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
  ...
  spec:
    providerSpec:
      value:
        nodeLabels:
        - key: node-type
          value: compute-nvme

Caution

The <NODE-LABEL> value must match one of the allowed labels defined in the nodeLabels section of the Cluster object:

nodeLabels:
- key: <NODE-LABEL>
  value: <NODE-LABEL-VALUE>

Mirantis recommends using node-type as the <NODE-LABEL> key. To view the full list of allowed node labels:

kubectl \
  -n <NAMESPACE> \
  get  <CLUSTER-NAME> \
  -o json \
  | jq .status.providerStatus.releaseRefs.current.allowedNodeLabels

The list of node labels is read-only and cannot be modified.

For compute nodes with the SR-IOV NIC, use compute-sriov as the node-type value of nodeLabels:

apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
  ...
  spec:
    providerSpec:
      value:
        nodeLabels:
        - key: node-type
          value: compute-sriov

For compute nodes with the local NVMe storage and SR-IOV NICs, use the compute-nvme-sriov as the node-type value of nodeLabels:

apiVersion: cluster.k8s.io/v1alpha1
kind: Machine
  ...
  spec:
    providerSpec:
      value:
        nodeLabels:
        - key: node-type
          value: compute-nvme-sriov

In the examples above, compute-sriov, compute-nvme-sriov, and compute-nvme are human-readable string identifiers. You can use any unique string value for each type of compute node.

In the OpenStackDeployment object of each node group, define its own section that starts with <NODE-LABEL>::<NODE-LABEL-VALUE>::

apiVersion: lcm.mirantis.com/v1alpha1
kind: OpenStackDeployment
...
spec:
...
nodes:
  node-type::compute-nvme:
    features:
      nova:
        images:
          backend: local
  node-type::compute-sriov:
    features:
      neutron:
        sriov:
          enabled: true
          nics:
          - device: enp10s0f1
            num_vfs: 7
            physnet: tenant
  node-type::compute-nvme-sriov:
    features:
      nova:
        images:
          backend: local
      neutron:
        sriov:
          enabled: true
          nics:
          - device: enp10s0f1
            num_vfs: 7
            physnet: tenant