1
0
mirror of https://github.com/openshift/installer.git synced 2026-02-05 15:47:14 +01:00
Files
installer/docs/user/openstack/affinity.md
2021-03-04 09:20:35 +01:00

4.7 KiB

How to set affinity rules for workers at install-time

The Installer automatically creates Control plane nodes with a "soft-anti-affinity" policy. This means that each server will be created on a separate host, if enough hosts are available.

The Installer does not set any affinity policy on Compute nodes; the choice is left to the user.

We are going to create an OpenStack server group with an anti-affinity policy. Then we are going to modify the MachineSet definitions during the installation process, so that when openshift-install create cluster is run, the Compute nodes will directly be created with the given policy.

Step 1: create the Server group

In OpenStack Compute (Nova), scheduler policies are set using Server groups.

The first step is then to create the Server group.

Depending on the OpenStack configuration, there are a maximum of four possible policies:

  • affinity
  • soft-affinity
  • anti-affinity
  • soft-anti-affinity

These options are best described in the OpenStack API reference.

Here we set anti-affinity:

openstack \
	--os-compute-api-version=2.15 \
	server group create \
	--policy anti-affinity \
	my-openshift-worker-group

Note that setting the Nova microversion ("os-compute-api-version") is only mandatory when dealing with the "soft" policies, but does not hurt in any case.

Take note of the resulting Server group id.

Step 2: generate the OpenShift manifests

openshift-install create manifests

This command will interactively prompt for the required information, if an install-config.yaml file is not present in the current working directory.

Step 3: Edit the MachineSet manifests

The "create manifests" command creates several files, among which the worker MachineSet definition in openshift/99_openshift-cluster-api_worker-machineset-0.yaml.

We must add a new property to the MachineSet: serverGroupID. That property lives under spec.template.spec.providerSpec.value.

Use the Server group id from step 1.

I have used the example UUID aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee in the template below.

apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
  labels:
    machine.openshift.io/cluster-api-cluster: <infrastructure_ID>
    machine.openshift.io/cluster-api-machine-role: <node_role>
    machine.openshift.io/cluster-api-machine-type: <node_role>
  name: <infrastructure_ID>-<node_role>
  namespace: openshift-machine-api
spec:
  replicas: <number_of_replicas>
  selector:
    matchLabels:
      machine.openshift.io/cluster-api-cluster: <infrastructure_ID>
      machine.openshift.io/cluster-api-machineset: <infrastructure_ID>-<node_role>
  template:
    metadata:
      labels:
        machine.openshift.io/cluster-api-cluster: <infrastructure_ID>
        machine.openshift.io/cluster-api-machine-role: <node_role>
        machine.openshift.io/cluster-api-machine-type: <node_role>
        machine.openshift.io/cluster-api-machineset: <infrastructure_ID>-<node_role>
    spec:
      providerSpec:
        value:
          apiVersion: openstackproviderconfig.openshift.io/v1alpha1
          cloudName: openstack
          cloudsSecret:
            name: openstack-cloud-credentials
            namespace: openshift-machine-api
          flavor: <nova_flavor>
          image: <glance_image_name_or_location>
          serverGroupID: aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
          kind: OpenstackProviderSpec
          networks:
          - filter: {}
            subnets:
            - filter:
                name: <subnet_name>
                tags: openshiftClusterID=<infrastructure_ID>
          securityGroups:
          - filter: {}
            name: <infrastructure_ID>-<node_role>
          serverMetadata:
            Name: <infrastructure_ID>-<node_role>
            openshiftClusterID: <infrastructure_ID>
          tags:
          - openshiftClusterID=<infrastructure_ID>
          trunk: true
          userDataSecret:
            name: <node_role>-user-data
          availabilityZone: <optional_openstack_availability_zone>

Step 4: Complete the installation

After saving the MachineSet file in place, use openshift-install to complete the installation.

Note: running the following command has the side effect of deleting both openshift and manifests directories from the current working directory.

openshift-install create cluster

The modified MachineSet will be used by the Installer to create the Compute nodes; the serverGroupID property make OpenShift create the Compute nodes within that OpenStack Server Group.