第 6 章 创建 Windows 机器集
6.1. 在 AWS 上创建 Windows 机器集
您可以在 Amazon Web Services(AWS)上的 OpenShift Container Platform 集群中创建 Windows MachineSet
对象来满足特定目的。例如,您可以创建基础架构 Windows 机器集和相关机器,以便将支持的 Windows 工作负载转移到新的 Windows 机器上。
先决条件
- 已使用 Operator Lifecycle Manager(OLM)安装 Windows Machine Config Operator(WMCO)。
您可以使用受支持的 Windows Server 作为操作系统镜像。
根据您的 Windows Server 发行版本,使用以下
aws
命令之一来查询有效的 AMI 镜像:Windows Server 2022 命令示例
$ 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 table
Windows Server 2019 命令示例
$ 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 table
其中:
- <aws_region_name>
- 指定 AWS 区域的名称。
6.1.1. Machine API 概述
Machine API 将基于上游 Cluster API 项目的主要资源与自定义 OpenShift Container Platform 资源相结合。
对于 OpenShift Container Platform 4.12 集群,Machine API 在集群安装完成后执行所有节点主机置备管理操作。由于此系统的缘故,OpenShift Container Platform 4.12 在公有或私有云基础架构之上提供了一种弹性动态置备方法。
两种主要资源分别是:
- Machines
-
描述节点主机的基本单元。机器具有
providerSpec
规格,用于描述为不同云平台提供的计算节点的类型。例如,计算节点的机器类型可能会定义特定的机器类型和所需的元数据。 - 机器集
MachineSet
资源是计算机器组。计算机器集适用于计算机器,因为副本集是针对 pod。如果需要更多计算机器或必须缩减规模,您可以更改MachineSet
资源的replicas
字段来满足您的计算需求。警告control plane 机器不能由计算机器集管理。
control plane 机器集为 control plane 机器提供管理功能,与为计算机器提供的计算机器集类似。
如需更多信息,请参阅"管理 control plane 机器"。
以下自定义资源可为集群添加更多功能:
- 机器自动扩展
MachineAutoscaler
资源自动扩展云中的计算机器。您可以为指定计算机器集中的节点设置最小和最大扩展界限,机器自动扩展则维护该范围内的节点。ClusterAutoscaler
对象存在后,MachineAutoscaler
对象生效。ClusterAutoscaler
和MachineAutoscaler
资源都由ClusterAutoscalerOperator
对象提供。- 集群自动扩展
此资源基于上游集群自动扩展项目。在 OpenShift Container Platform 实现中,它通过扩展计算机器设置 API 来与 Machine API 集成。您可以使用以下方法使用集群自动扩展来管理集群:
- 为内核、节点、内存和 GPU 等资源设置集群范围的扩展限制
- 设置优先级,以便集群对 pod 和新节点进行优先排序,而在不太重要的 pod 时不会上线
- 设置扩展策略,以便您可以扩展节点,但不会缩减节点
- 机器健康检查
-
MachineHealthCheck
资源可检测机器何时处于不健康状态并将其删除,然后在支持的平台上生成新的机器。
在 OpenShift Container Platform 版本 3.11 中,您无法轻松地推出多区架构,因为集群不负责管理机器置备。自 OpenShift Container Platform 版本 4.1 起,此过程变得更加容易。每个计算机器集限定在一个区,因此安装程序可以代表您的可用区向计算机器集发送。然后,由于您的计算是动态的,因此在面对区域故障时,您始终都有一个区域来应对必须重新平衡机器的情况。在没有多个可用区的全局 Azure 区域,您可以使用可用性集来确保高可用性。自动扩展器在集群生命周期内尽可能提供平衡。
6.1.2. AWS 上 Windows MachineSet 对象的 YAML 示例
此 YAML 示例定义了一个在 Amazon Web Services(AWS)上运行的 Windows MachineSet
对象,它可响应 Windows Machine Config Operator(WMCO)。
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-windows-worker-<zone> 2 namespace: openshift-machine-api spec: replicas: 1 selector: matchLabels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 3 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-windows-worker-<zone> 4 template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 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> 6 machine.openshift.io/os-id: Windows 7 spec: metadata: labels: node-role.kubernetes.io/worker: "" 8 providerSpec: value: ami: id: <windows_container_ami> 9 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 10 instanceType: m5a.large kind: AWSMachineProviderConfig placement: availabilityZone: <zone> 11 region: <region> 12 securityGroups: - filters: - name: tag:Name values: - <infrastructure_id>-worker-sg 13 subnet: filters: - name: tag:Name values: - <infrastructure_id>-private-<zone> 14 tags: - name: kubernetes.io/cluster/<infrastructure_id> 15 value: owned userDataSecret: name: windows-user-data 16 namespace: openshift-machine-api
- 1 3 5 10 13 14 15
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。您可以运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- 2 4 6
- 指定基础架构 ID、worker 标签和区。
- 7
- 将计算机器设置为 Windows 机器。
- 8
- 将 Windows 节点配置为计算机器。
- 9
- 指定安装了容器运行时的受支持的 Windows 镜像的 AMI ID。
- 11
- 指定 AWS 区域,如
us-east-1a
。 - 12
- 指定 AWS 区域,如
us-east-1
。 - 16
- 由 WMCO 配置第一个 Windows 机器时创建的。之后,所有后续计算机器集都可以使用
windows-user-data
。
6.1.3. 创建计算机器集
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 OpenShift Container Platform 集群。
-
安装 OpenShift CLI(
oc
)。 -
以具有
cluster-admin
权限的用户身份登录oc
。
流程
创建一个包含计算机器集自定义资源(CR)示例的新 YAML 文件,并将其命名为
<file_name>.yaml
。确保设置
<clusterID>
和<role>
参数值。可选:如果您不确定要为特定字段设置哪个值,您可以从集群中检查现有计算机器集:
要列出集群中的计算机器集,请运行以下命令:
$ oc get machinesets -n openshift-machine-api
输出示例
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
要查看特定计算机器集自定义资源 (CR) 的值,请运行以下命令:
$ oc get machineset <machineset_name> \ -n openshift-machine-api -o yaml
输出示例
apiVersion: machine.openshift.io/v1beta1 kind: MachineSet metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 1 name: <infrastructure_id>-<role> 2 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: 3 ...
运行以下命令来创建
MachineSet
CR:$ oc create -f <file_name>.yaml
验证
运行以下命令,查看计算机器集列表:
$ oc get machineset -n openshift-machine-api
输出示例
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 55m
当新的计算机器集可用时,
DESIRED
和CURRENT
的值会匹配。如果 compute 机器集不可用,请等待几分钟,然后再次运行命令。