--- title: Provisioning a windows worker node exercise: 3 date: '2024-05-26' tags: ['openshift','windows','kubernetes','containers'] draft: false authors: ['default'] summary: "Auto scaling nodes with machine sets!" --- Now that our cluster is ready to support Windows nodes lets provision one through the Machine API. The Machine API is a combination of primary resources that are based on the upstream [Cluster API](https://github.com/kubernetes-sigs/cluster-api) project and custom OpenShift Container Platform resources. The two primary resources are: **1. Machines** > A fundamental unit that describes the host for a Node. A machine has a providerSpec, which describes the types of compute nodes that are offered for different cloud platforms. For example, a machine type for a worker node on Amazon Web Services (AWS) might define a specific machine type and required metadata. **2. MachineSets** > Groups of machines. MachineSets are to machines as ReplicaSets are to Pods. If you need more machines or must scale them down, you change the **replicas** field on the MachineSet to meet your compute need. ## 3.1 Create a single replica machineset In this exercise we will create a `MachineSet`. Once created this will automatically begin provisoning a Windows machine and adding it to our cluster as a worker node. Below is a YAML snippet we will use as base to create our `MachineSet`: ```yaml apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: name: cluster--windows-ap-southeast- namespace: openshift-machine-api labels: machine.openshift.io/cluster-api-cluster: cluster- spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: cluster- machine.openshift.io/cluster-api-machineset: cluster--worker-ap-southeast- template: metadata: labels: machine.openshift.io/cluster-api-cluster: cluster- machine.openshift.io/cluster-api-machine-role: worker machine.openshift.io/cluster-api-machine-type: worker machine.openshift.io/cluster-api-machineset: cluster--worker-ap-southeast- machine.openshift.io/os-id: Windows spec: lifecycleHooks: {} metadata: labels: node-role.kubernetes.io/worker: '' providerSpec: value: userDataSecret: name: windows-user-data placement: availabilityZone: ap-southeast- region: ap-southeast-1 credentialsSecret: name: aws-cloud-credentials instanceType: m5a.4xlarge metadata: creationTimestamp: null blockDevices: - ebs: iops: 0 kmsKey: {} volumeSize: 120 volumeType: gp2 securityGroups: - filters: - name: 'tag:Name' values: - cluster--worker-sg kind: AWSMachineProviderConfig metadataServiceOptions: {} tags: - name: kubernetes.io/cluster/cluster- value: owned deviceIndex: 0 ami: id: ami-0e76083a67107f741 subnet: filters: - name: 'tag:Name' values: - cluster--private-ap-southeast- apiVersion: awsproviderconfig.openshift.io/v1beta1 iamInstanceProfile: id: cluster--worker-profile ``` There are ten references to `` in the sample that we need to find & replace with the actual cluster id for the cluster we have been allocated for the workshop and five references to the availability `` for our cluster nodes that we also need to update with our actual zone in use. Run the following command in your bastion host terminal session to find your cluster id and zone: ```bash name=$(oc get machineset -A -o jsonpath={.items[0].metadata.name}) echo "Cluster id is: ${name:8:11}" echo "Cluster availability zone is: ${name:40:2}" ``` After retrieving your cluster id and zone update the sample `MachineSet` using your preferred text editor, then select and copy all of the text to clipboard. Within OpenShift you can then click the ➕ button in the top right hand corner, paste in your yaml and click **Create**. |![workshop](/static/images/windows/create-machineset.gif) | |:-----------------------------------------------------------------------------:| | *Create a windows machineset* | ## 3.2 Verify windows machine status After creating the `MachineSet` a new Windows machine will be automatically provisioned and added to our OpenShift cluster, as we set our desired replicas in the YAML to `1`. |![workshop](/static/images/windows/check-machine.gif) | |:-----------------------------------------------------------------------------:| | *Check the status of the new windows machine* | Creating, provisioning and configuring a new Windows host can be a lengthy process taking 15-30 minutes so now is a good time to take a break ☕. You can keep an eye on the status of your Machine in the OpenShift web console. Once it reaches the **✅ Provisioned as node** status you are ready to proceed to the next exercise.