136 lines
5.3 KiB
Plaintext
136 lines
5.3 KiB
Plaintext
---
|
||
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-<id>-windows-ap-southeast-<zone>
|
||
namespace: openshift-machine-api
|
||
labels:
|
||
machine.openshift.io/cluster-api-cluster: cluster-<id>
|
||
spec:
|
||
replicas: 1
|
||
selector:
|
||
matchLabels:
|
||
machine.openshift.io/cluster-api-cluster: cluster-<id>
|
||
machine.openshift.io/cluster-api-machineset: cluster-<id>-worker-ap-southeast-<zone>
|
||
template:
|
||
metadata:
|
||
labels:
|
||
machine.openshift.io/cluster-api-cluster: cluster-<id>
|
||
machine.openshift.io/cluster-api-machine-role: worker
|
||
machine.openshift.io/cluster-api-machine-type: worker
|
||
machine.openshift.io/cluster-api-machineset: cluster-<id>-worker-ap-southeast-<zone>
|
||
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-<zone>
|
||
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-<id>-worker-sg
|
||
kind: AWSMachineProviderConfig
|
||
metadataServiceOptions: {}
|
||
tags:
|
||
- name: kubernetes.io/cluster/cluster-<id>
|
||
value: owned
|
||
deviceIndex: 0
|
||
ami:
|
||
id: ami-0e76083a67107f741
|
||
subnet:
|
||
filters:
|
||
- name: 'tag:Name'
|
||
values:
|
||
- cluster-<id>-private-ap-southeast-<zone>
|
||
apiVersion: awsproviderconfig.openshift.io/v1beta1
|
||
iamInstanceProfile:
|
||
id: cluster-<id>-worker-profile
|
||
```
|
||
|
||
There are ten references to `<id>` 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 `<zone>` 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**.
|
||
|
||
<Zoom>
|
||
| |
|
||
|:-----------------------------------------------------------------------------:|
|
||
| *Create a windows machineset* |
|
||
</Zoom>
|
||
|
||
|
||
## 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`.
|
||
|
||
<Zoom>
|
||
| |
|
||
|:-----------------------------------------------------------------------------:|
|
||
| *Create the status of the new windows machine* |
|
||
</Zoom>
|
||
|
||
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.
|
||
|