Creating a Windows machine set on AWS¶
You can use a MachineSet custom resource (CR) to add a Windows compute node to your Amazon Web Services cluster, where you can run Windows container workloads.
For example, you might create infrastructure Windows machine sets and related machines so that you can move supporting Windows workloads to the new Windows machines. For more information about machine sets, see "Overview of machine management" in the Additional resources section.
Prerequisites¶
-
You installed the Windows Machine Config Operator (WMCO) using Operator Lifecycle Manager (OLM).
-
You are using a supported Windows Server as the operating system image.
Use one of the following
awscommands, as appropriate for your Windows Server release, to query valid AMI images:Example Windows Server 2025 command$ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2025*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output tableExample Windows Server 2022 command$ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2022*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output tableExample Windows Server 2019 command$ aws ec2 describe-images --region <aws_region_name> --filters "Name=name,Values=Windows_Server-2019*English*Core*Base*" "Name=is-public,Values=true" --query "reverse(sort_by(Images, &CreationDate))[*].{name: Name, id: ImageId}" --output tablewhere:
- <aws_region_name>
- Specifies the name of your AWS region.
-
For disconnected clusters, the Windows AMI must have the EC2LaunchV2 agent version 2.0.2107 or later installed. For more information, see "Install the latest version of EC2Launch v2 (AWS documentation)" in the Additional references section.
Sample YAML for a Windows MachineSet object on AWS¶
You can add Windows nodes to an Amazon Web Services (AWS) cluster by defining a Windows MachineSet object that the Windows Machine Config Operator (WMCO) can react upon.
The following example is a YAML file for creating a MachineSet object for AWS.
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
name: <infrastructure_id>-windows-worker-<zone>
namespace: openshift-machine-api
spec:
replicas: 1
selector:
matchLabels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: worker
machine.openshift.io/cluster-api-machine-type: worker
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone>
machine.openshift.io/os-id: Windows
spec:
metadata:
labels:
node-role.kubernetes.io/worker: ""
providerSpec:
value:
ami:
id: <windows_container_ami>
apiVersion: awsproviderconfig.openshift.io/v1beta1
blockDevices:
- ebs:
iops: 0
volumeSize: 120
volumeType: gp2
credentialsSecret:
name: aws-cloud-credentials
deviceIndex: 0
iamInstanceProfile:
id: <infrastructure_id>-worker-profile
instanceType: m5a.large
kind: AWSMachineProviderConfig
placement:
availabilityZone: <zone>
region: <region>
securityGroups:
- filters:
- name: tag:Name
values:
- <infrastructure_id>-node
- filters:
- name: tag:Name
values:
- <infrastructure_id>-lb
subnet:
filters:
- name: tag:Name
values:
- <infrastructure_id>-subnet-private-<zone>
tags:
- name: kubernetes.io/cluster/<infrastructure_id>
value: owned
userDataSecret:
name: windows-user-data
namespace: openshift-machine-api
where:
metadata.labels-
For the
machine.openshift.io/cluster-api-clusterlabel, replace<infrastructure_id>with the infrastructure ID that is based on the cluster ID that you set when you provisioned the cluster. You can obtain the infrastructure ID by running the following command: metadata.name- Replace the infrastructure ID, worker label, and zone.
spec.selector.matchLabels-
Replace the parameters for the following labels:
machine.openshift.io/cluster-api-cluster. Replace the infrastructure ID.machine.openshift.io/cluster-api-machineset. Replace the infrastructure ID, worker label, and zone.
spec.template.metadata.labels-
Replace the parameters for the following labels:
machine.openshift.io/cluster-api-cluster. Replace the infrastructure ID.machine.openshift.io/cluster-api-machineset. Replace the infrastructure ID, worker label, and zone.machine.openshift.io/os-id: Windows. When set toWindows, configures the compute machine set as a Windows machine.
spec.template.spec.metadata.labels- When set to
node-role.kubernetes.io/worker, configures the node as a compute machine. spec.template.spec.providerSpec-
Specify the following parameters:
value.ami.id. Specify the AMI ID of a supported Windows image with a container runtime installed.
Note
For disconnected clusters, the Windows AMI must have the EC2LaunchV2 agent version 2.0.2107 or later installed. For more information, see the Install the latest version of EC2Launch v2 (AWS documentation).
value.iamInstanceProfile.id. Replace the infrastructure ID.value.placement.availabilityZone. Specifies the AWS zone, such asus-east-1a.value.placement.region. Specifies the AWS region, such asus-east-1.value.securityGroups.filters.values. Replace the infrastructure ID.value.subnet.filters.values. Replace the infrastructure ID and zone.value.tags.name. Replace the infrastructure ID.value.userDataSecret.name. Specifies the name of the secret in the user data YAML file that is in theopenshift-machine-apinamespace. Use the value that installation program populates in the default compute machine set.
Create a compute machine set¶
To dynamically manage machine compute resources, you can create your own compute machine sets in addition to the compute machine sets created by the installation program. Use the OpenShift Container Platform CLI to automate node provisioning.
Prerequisites
- Deploy an OpenShift Container Platform cluster.
- Install the OpenShift CLI (
oc). - Log in to
ocas a user withcluster-adminpermission. - In disconnected environments, the image specified in the
MachineSetcustom resource (CR) must have the OpenSSH server v0.0.1.0 installed.
Procedure
-
Create a new YAML file that contains the compute machine set custom resource (CR) sample and is named
<file_name>.yaml.Ensure that you set the
<clusterID>and<role>parameter values. -
Optional: If you are not sure which value to set for a specific field, you can check an existing compute machine set from your cluster.
-
To list the compute machine sets in your cluster, run the following command:
The following is example output:
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55m -
To view values of a specific compute machine set custom resource (CR), run the following command:
The following is example output:
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> name: <infrastructure_id>-<role> namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> machine.openshift.io/cluster-api-machine-role: <role> machine.openshift.io/cluster-api-machine-type: <role> machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role> spec: providerSpec: ...where:
metadata.labels.machine.openshift.io/cluster-api-cluster- Specifies the cluster infrastructure ID.
metadata.labels.name- Specifies a default node label.
Note
For clusters that have user-provisioned infrastructure, a compute machine set can only create
workerandinfratype machines.spec.template.metadata.spec.providerSpec- Specifies the values of the compute machine set CR. The values are platform-specific. For more information about
<providerSpec>parameters in the CR, see the sample compute machine set CR configuration for your provider.
-
-
Create a
MachineSetCR by running the following command:
Verification
-
View the list of compute machine sets by running the following command:
The following is example output:
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-windows-worker-us-east-1a 1 1 1 1 11m agl030519-vplxk-worker-us-east-1a 1 1 1 1 55m agl030519-vplxk-worker-us-east-1b 1 1 1 1 55m agl030519-vplxk-worker-us-east-1c 1 1 1 1 55m agl030519-vplxk-worker-us-east-1d 0 0 55m agl030519-vplxk-worker-us-east-1e 0 0 55m agl030519-vplxk-worker-us-east-1f 0 0 55mWhen the new compute machine set is available, the
DESIREDandCURRENTvalues match. If the compute machine set is not available, wait a few minutes and run the command again.
Additional resources