---
title: Control plane configuration options for Nutanix
---

# Control plane configuration options for Nutanix {#cpmso-config-options-nutanix}

You can update your control plane machines to reflect changes in your infrastructure or environment by editing values in the control plane machine set specification.

When you save an update to the control plane machine set, the Control Plane Machine Set Operator updates the control plane machines according to your configured update strategy. For more information, see "Updating the control plane configuration".

The following example YAML snippets show provider specification and failure domain configurations for a Nutanix cluster.

## Sample Nutanix provider specification {#cpmso-yaml-provider-spec-nutanix_cpmso-config-options-nutanix}

You can update your control plane machines to reflect changes in your underlying infrastructure by editing values in the control plane machine set provider specification.

The following example YAML illustrates a valid configuration for a Nutanix cluster.

> [!NOTE]
> When you create a control plane machine set for an existing cluster, the provider specification must match the `providerSpec` configuration in the control plane machine custom resource (CR) that the installation program creates.

In the following example, the `<cluster_id>` string is the infrastructure ID. The infrastructure ID matches the cluster ID that the installation program used during cluster provisioning. If you have the OpenShift CLI (`oc`) installed, you can obtain the infrastructure ID by running the following command:

```terminal
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
```

```yaml {title="Sample Nutanix providerSpec values"}
apiVersion: machine.openshift.io/v1
kind: ControlPlaneMachineSet
metadata:
  name: cluster
  namespace: openshift-machine-api
spec:
# ...
  template:
# ...
      spec:
        providerSpec:
          value:
            apiVersion: machine.openshift.io/v1
            bootType: ""
            categories:
            - key: <category_name>
              value: <category_value>
            cluster:
              type: uuid
              uuid: <cluster_uuid>
            credentialsSecret:
              name: nutanix-credentials
            image:
              name: <cluster_id>-rhcos
              type: name
            kind: NutanixMachineProviderConfig
            memorySize: 16Gi
            metadata:
              creationTimestamp: null
            project:
              type: name
              name: <project_name>
            subnets:
            - type: uuid
              uuid: <subnet_uuid>
            systemDiskSize: 120Gi
            userDataSecret:
              name: master-user-data
            vcpuSockets: 8
            vcpusPerSocket: 1
```

where:

`spec.template.spec.providerSpec.value.bootType`
:   Specifies the boot type that the control plane machines use. For more information about boot types, see [Understanding UEFI, Secure Boot, and TPM in the Virtualized Environment (Nutanix documentation)](https://portal.nutanix.com/page/documents/kbs/details?targetId=kA07V000000H3K9SAK).

    Valid values are `Legacy`, `SecureBoot`, or `UEFI`. The default is `Legacy`.

    > [!NOTE]
    > You must use the `Legacy` boot type in OpenShift Container Platform 4.22.

`spec.template.spec.providerSpec.value.categories`
:   Specifies one or more Nutanix Prism categories to apply to control plane machines. This stanza requires `key` and `value` parameters for a category key-value pair that exists in Prism Central. For more information about categories, see [Category management](https://portal.nutanix.com/page/documents/details?targetId=Prism-Central-Guide-vpc_2022_6:ssp-ssp-categories-manage-pc-c.html).

`spec.template.spec.providerSpec.value.cluster`
:   Specifies a Nutanix Prism Element cluster configuration. In this example, the cluster type is `uuid`, so there is a `uuid` stanza.

    > [!NOTE]
    > If the cluster uses a failure domain, configure this parameter in the failure domain. If you specify this value in the provider specification when using a failure domain, the Control Plane Machine Set Operator ignores it and uses the value in the failure domain.

`spec.template.spec.providerSpec.value.credentialsSecret`
:   Specifies the secret name for the cluster. Do not change this value.

`spec.template.spec.providerSpec.value.image`
:   Specifies the path to the source image for the disk.

`spec.template.spec.providerSpec.value.kind`
:   Specifies the cloud provider platform type. Do not change this value.

`spec.template.spec.providerSpec.value.memorySize`
:   Specifies the memory allocated for the control plane machines.

`spec.template.spec.providerSpec.value.project`
:   Specifies the Nutanix project that you use for your cluster. In this example, the project type is `name`, so there is a `name` stanza.

`spec.template.spec.providerSpec.value.subnets`
:   Specify one or more Prism Element subnet objects. In this example, the subnet type is `uuid`, so there is a `uuid` stanza. A maximum of 32 subnets for each Prism Element failure domain in the cluster is supported.

    > [!IMPORTANT]
    > Do not remove the original subnet, which hosts the API server and ingress server, from the cluster.

    The CIDR IP address prefix for one of the specified subnets must contain the virtual IP addresses that the OpenShift Container Platform cluster uses. All subnet UUID values must be unique.

    > [!NOTE]
    > If the cluster uses a failure domain, configure this parameter in the failure domain. If you specify this value in the provider specification when using a failure domain, the Control Plane Machine Set Operator ignores it and uses the value in the failure domain.

`spec.template.spec.providerSpec.value.systemDiskSize`
:   Specifies the VM disk size for the control plane machines.

`spec.template.spec.providerSpec.value.userDataSecret`
:   Specifies the control plane user data secret. Do not change this value.

`spec.template.spec.providerSpec.value.vcpuSockets`
:   Specifies the number of vCPU sockets allocated for the control plane machines.

`spec.template.spec.providerSpec.value.vcpusPerSocket`
:   Specifies the number of vCPUs for each control plane vCPU socket.

## Failure domains for Nutanix clusters {#mapi-failure-domain-nutanix_cpmso-config-options-nutanix}

To modify failure domain configurations on a Nutanix cluster, you must modify the cluster infrastructure, control plane machine set, and compute machine set custom resources (CRs) to apply the new configuration.

To add or update the failure domain configuration on a Nutanix cluster, you must make coordinated changes to several resources. The following actions are required:

1. Modify the cluster infrastructure custom resource (CR).
2. Modify the cluster control plane machine set CR.
3. Modify or replace the compute machine set CRs.

For more information, see "Adding failure domains to an existing Nutanix cluster".

## Improving reliability for multiple subnet configurations on Nutanix {#cpmso-ts-nutanix-multiple-subnet_cpmso-config-options-nutanix}

To improve reliability and avoid common networking problems with multiple subnet configurations on Nutanix, adhere to the configuration practices that minimize networking conflicts.

The following networking configuration and management practices can help your multiple subnet configuration perform more reliably:

- To avoid overlapping IP address assignments, use predefined static IP addresses in the `cloud-init` metadata.
- Tag all VMs, disks, and networks with a unique cluster ID.
- Avoid IP address conflicts by using dedicated subnets for each OpenShift Container Platform cluster:

  Nutanix uses Nutanix Acropolis Hypervisor (AHV) and Nutanix Prism networking to assign IP addresses to virtual machines (VMs). If a single subnet provides IP addresses for more than one OpenShift Container Platform cluster, AHV or Prism might assign the same IP address to a VM or pod in more than one cluster.

  To avoid this issue, use dedicated subnets for each OpenShift Container Platform cluster, even when you have more than one cluster on a single Prism Central instance. You can use the Prism UI or automation tools, such as Terraform or Ansible, to create separate IP address pools for each OpenShift Container Platform cluster.
- Ensure that each OpenShift Container Platform cluster uses distinct DNS zones and virtual IP address ranges.
- Avoid DHCP conflicts by maintaining DHCP allocations:

  If you use Nutanix to manage DHCP allocation, objects in your cluster might have duplicate leases. Duplicate leases can cause DHCP conflicts when you apply changes to the control plane machine set custom resource (CR) specification.

  To avoid this issue, regularly remove stale DHCP leases.
- Use automation tools, such as Terraform or Ansible, to isolate the infrastructure for each OpenShift Container Platform cluster.

**Additional resources**
{._additional-resources}

- [Updating the control plane configuration](/openshift-docs-markdown/machine_management/control_plane_machine_management/cpmso-managing-machines#cpmso-feat-config-update_cpmso-managing-machines)
- [Adding failure domains to an existing Nutanix cluster](/openshift-docs-markdown/installing/installing_nutanix/nutanix-failure-domains#nutanix-failure-domains-adding-to-existing-cluster_nutanix-failure-domains)
