$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
您可以创建不同的计算机器集合以在您的Amazon Web Services (AWS)上的OpenShift Container Platform集群中服务于特定目的。例如,您可以创建基础架构机器集合和相关的机器,以便您可以将支持的工作负载移动到新机器。
您只能在Machine API可运行的集群中使用高级机器管理和扩展功能。具有用户预配基础架构的集群需要额外的验证和配置才能使用Machine API。 基础架构平台类型为 要查看集群的平台类型,请运行以下命令
|
示例YAML定义了一个在us-east-1a
Amazon Web Services (AWS)本地区域中运行的计算机器集合,并创建标记为node-role.kubernetes.io/<role>: ""
的节点。
在此示例中,<infrastructure_id>
是基于您在预配集群时设置的集群ID的基础架构ID标签,<role>
是要添加的节点标签。
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id> (1)
name: <infrastructure_id>-<role>-<zone> (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>-<zone>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: <role> (3)
machine.openshift.io/cluster-api-machine-type: <role>
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone>
spec:
metadata:
labels:
node-role.kubernetes.io/<role>: ""
providerSpec:
value:
ami:
id: ami-046fe691f52a953f9 (4)
apiVersion: machine.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: m6i.large
kind: AWSMachineProviderConfig
placement:
availabilityZone: <zone> (6)
region: <region> (7)
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>-private-<zone> (8)
tags:
- name: kubernetes.io/cluster/<infrastructure_id>
value: owned
- name: <custom_tag_name> (5)
value: <custom_tag_value>
userDataSecret:
name: worker-user-data
1 | 指定基于您在预配集群时设置的集群ID的基础架构ID。如果您安装了OpenShift CLI,则可以通过运行以下命令获取基础架构ID
|
||
2 | 指定基于集群ID的基础架构ID、角色节点标签和区域。 | ||
3 | 指定要添加的角色节点标签。 | ||
4 | 为您的AWS区域中的OpenShift Container Platform节点指定有效的Red Hat Enterprise Linux CoreOS (RHCOS) Amazon Machine Image (AMI)。如果您想使用AWS Marketplace镜像,则必须完成来自AWS Marketplace的OpenShift Container Platform订阅以获取您所在区域的AMI ID。
|
||
5 | 可选:为您的集群指定自定义标签数据。例如,您可以通过指定Email:[email protected] 的name:value 对来添加管理员联系电子邮件地址。
|
||
6 | 指定区域,例如us-east-1a 。 |
||
7 | 指定区域,例如us-east-1 。 |
||
8 | 指定基础设施ID和区域。 |
除了安装程序创建的计算机器集之外,您还可以创建自己的机器集,以动态管理您选择的特定工作负载的机器计算资源。
部署OpenShift Container Platform集群。
安装OpenShift CLI (oc
)。
以具有cluster-admin
权限的用户身份登录oc
。
创建一个新的YAML文件,其中包含计算机器集自定义资源 (CR) 示例,并将其命名为<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)
...
1 | 集群基础设施ID。 | ||
2 | 默认节点标签。
|
||
3 | 计算机器集 CR 的<providerSpec> 部分中的值是特定于平台的。有关 CR 中<providerSpec> 参数的更多信息,请参阅您的提供商的计算机器集 CR 配置示例。 |
通过运行以下命令创建MachineSet
CR
$ oc create -f <file_name>.yaml
如果您需要在其他可用区中使用计算机器集,请重复此过程以创建更多计算机器集。
通过运行以下命令查看计算机器集列表
$ oc get machineset -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
agl030519-vplxk-infra-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
值将匹配。如果计算机器集不可用,请等待几分钟,然后再次运行该命令。
您可以使用机器集标签来指示集群自动伸缩器可以使用哪些机器来部署支持 GPU 的节点。
您的集群使用集群自动伸缩器。
在您想要创建机器的机器集上,集群自动伸缩器将使用这些机器来部署支持 GPU 的节点,添加cluster-api/accelerator
标签
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
name: machine-set-name
spec:
template:
spec:
metadata:
labels:
cluster-api/accelerator: nvidia-t4 (1)
1 | 指定您选择的标签,该标签由字母数字字符、- 、_ 或. 组成,并以字母数字字符开头和结尾。例如,您可以使用nvidia-t4 来表示 Nvidia T4 GPU,或使用nvidia-a10g 来表示 A10G GPU。
|
您可以配置机器集以在现有 AWS 放置组中的弹性结构适配器 (EFA) 实例上部署机器。
EFA 实例不需要放置组,您可以将放置组用于配置 EFA 以外的目的。此示例同时使用两者来演示可以提高指定放置组内机器网络性能的配置。
您已在 AWS 控制台中创建了一个放置组。
确保您创建的放置组类型的规则和限制与您的预期用例兼容。 |
在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。
编辑providerSpec
字段下的以下行
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
# ...
spec:
template:
spec:
providerSpec:
value:
instanceType: <supported_instance_type> (1)
networkInterfaceType: EFA (2)
placement:
availabilityZone: <zone> (3)
region: <region> (4)
placementGroupName: <placement_group> (5)
placementGroupPartition: <placement_group_partition_number> (6)
# ...
1 | 指定支持 EFA的实例类型。 |
2 | 指定EFA 网络接口类型。 |
3 | 指定区域,例如us-east-1a 。 |
4 | 指定区域,例如us-east-1 。 |
5 | 指定要在此处部署机器的现有 AWS 放置组的名称。 |
6 | 可选:指定要在此处部署机器的现有 AWS 放置组的分区号。 |
在 AWS 控制台中,查找机器集创建的机器,并验证机器属性中的以下内容:
放置组字段的值与您为机器集中的placementGroupName
参数指定的值相同。
分区号字段的值与您为机器集中的placementGroupPartition
参数指定的值相同。
接口类型字段指示它使用 EFA。
您可以使用机器集创建使用特定版本的 Amazon EC2 实例元数据服务 (IMDS) 的机器。机器集可以创建允许同时使用 IMDSv1 和IMDSv2的机器,或者创建需要使用 IMDSv2 的机器。
仅在使用 OpenShift Container Platform 4.7 或更高版本创建的 AWS 集群上支持使用 IMDSv2。 |
要使用您首选的 IMDS 配置部署新的计算机器,请使用适当的值创建一个计算机器集 YAML 文件。当机器集规模扩大时,您还可以编辑现有机器集以使用您首选的 IMDS 配置创建新机器。
在配置机器集以创建需要 IMDSv2 的机器之前,请确保与 AWS 元数据服务交互的任何工作负载都支持 IMDSv2。 |
您可以通过添加或编辑机器机器集 YAML 文件中metadataServiceOptions.authentication
的值来指定是否需要使用 IMDSv2。
要使用 IMDSv2,您的 AWS 集群必须使用 OpenShift Container Platform 4.7 或更高版本创建。
在providerSpec
字段下添加或编辑以下行
providerSpec:
value:
metadataServiceOptions:
authentication: Required (1)
1 | 要需要 IMDSv2,请将参数值设置为Required 。要允许同时使用 IMDSv1 和 IMDSv2,请将参数值设置为Optional 。如果未指定值,则允许使用 IMDSv1 和 IMDSv2。 |
您可以创建一个在 AWS 上运行的机器集,该机器集将机器部署为专用实例。专用实例在专用于单个客户的硬件上的虚拟私有云 (VPC) 中运行。这些 Amazon EC2 实例在主机硬件级别是物理隔离的。即使实例属于链接到单个付费账户的不同 AWS 账户,专用实例的隔离仍然存在。但是,如果其他非专用实例属于同一 AWS 账户,则它们可以与专用实例共享硬件。
机器 API 支持具有公共或专用租用的实例。具有公共租用的实例运行在共享硬件上。公共租用是默认租用。具有专用租用的实例运行在单租户硬件上。
您可以通过创建在 AWS 上运行的计算机器集来节省成本,该机器集将机器部署为非保证的抢占实例。抢占实例利用未使用的 AWS EC2 容量,并且比按需实例更便宜。您可以将抢占实例用于可以容忍中断的工作负载,例如批处理或无状态的水平可扩展工作负载。
AWS EC2 随时可以终止抢占实例。发生中断时,AWS 会向用户发出两分钟的警告。当 AWS 发出终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。
使用抢占实例时,可能会由于以下原因发生中断:
实例价格超过您的最高价格
对抢占实例的需求增加
抢占实例的供应减少
当 AWS 终止实例时,在抢占实例节点上运行的终止处理程序会删除机器资源。为了满足计算机器集replicas
数量,计算机器集将创建一个请求抢占实例的机器。
您可以通过将spotMarketOptions
添加到您的计算机器集 YAML 文件来在 AWS 上启动抢占实例。
在providerSpec
字段下添加以下行
providerSpec:
value:
spotMarketOptions: {}
您可以选择设置spotMarketOptions.maxPrice
字段来限制抢占实例的成本。例如,您可以设置maxPrice: '2.50'
。
如果设置了maxPrice
,则此值将用作每小时的最高抢占价格。如果未设置,则最高价格默认为按需实例价格。
强烈建议使用默认的按需价格作为 |
您可以复制和修改默认的计算机器集配置,以创建支持 GPU 的机器集和 AWS EC2 云提供商的机器。
有关支持的实例类型的更多信息,请参阅以下 NVIDIA 文档:
通过运行以下命令查看现有节点、机器和机器集。请注意,每个节点都是具有特定 AWS 区域和 OpenShift Container Platform 角色的机器定义的实例。
$ oc get nodes
NAME STATUS ROLES AGE VERSION
ip-10-0-52-50.us-east-2.compute.internal Ready worker 3d17h v1.30.3
ip-10-0-58-24.us-east-2.compute.internal Ready control-plane,master 3d17h v1.30.3
ip-10-0-68-148.us-east-2.compute.internal Ready worker 3d17h v1.30.3
ip-10-0-68-68.us-east-2.compute.internal Ready control-plane,master 3d17h v1.30.3
ip-10-0-72-170.us-east-2.compute.internal Ready control-plane,master 3d17h v1.30.3
ip-10-0-74-50.us-east-2.compute.internal Ready worker 3d17h v1.30.3
通过运行以下命令查看openshift-machine-api
命名空间中存在的机器和机器集。每个计算机器集都与 AWS 区域内的不同可用区相关联。安装程序会自动在可用区之间负载均衡计算机器。
$ oc get machinesets -n openshift-machine-api
NAME DESIRED CURRENT READY AVAILABLE AGE
preserve-dsoc12r4-ktjfc-worker-us-east-2a 1 1 1 1 3d11h
preserve-dsoc12r4-ktjfc-worker-us-east-2b 2 2 2 2 3d11h
通过运行以下命令查看openshift-machine-api
命名空间中存在的机器。目前,每个机器集只有一个计算机器,尽管可以扩展计算机器集以在特定区域和区域中添加节点。
$ oc get machines -n openshift-machine-api | grep worker
preserve-dsoc12r4-ktjfc-worker-us-east-2a-dts8r Running m5.xlarge us-east-2 us-east-2a 3d11h
preserve-dsoc12r4-ktjfc-worker-us-east-2b-dkv7w Running m5.xlarge us-east-2 us-east-2b 3d11h
preserve-dsoc12r4-ktjfc-worker-us-east-2b-k58cw Running m5.xlarge us-east-2 us-east-2b 3d11h
通过运行以下命令复制一个现有的计算MachineSet
定义并将结果输出到 JSON 文件。这将成为支持 GPU 的计算机器集定义的基础。
$ oc get machineset preserve-dsoc12r4-ktjfc-worker-us-east-2a -n openshift-machine-api -o json > <output_file.json>
编辑 JSON 文件,并对新的MachineSet
定义进行以下更改:
将worker
替换为gpu
。这将是新机器集的名称。
将新MachineSet
定义的实例类型更改为g4dn
,其中包括 NVIDIA Tesla T4 GPU。要了解有关 AWS g4dn
实例类型的更多信息,请参阅加速计算。
$ jq .spec.template.spec.providerSpec.value.instanceType preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
"g4dn.xlarge"
<output_file.json>
文件保存为preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
。
更新preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
中的以下字段:
.metadata.name
为包含gpu
的名称。
.spec.selector.matchLabels["machine.openshift.io/cluster-api-machineset"]
以匹配新的.metadata.name
。
.spec.template.metadata.labels["machine.openshift.io/cluster-api-machineset"]
以匹配新的.metadata.name
。
.spec.template.spec.providerSpec.value.instanceType
为g4dn.xlarge
。
要验证您的更改,请运行以下命令执行原始计算定义和新的支持 GPU 的节点定义的diff
:
$ oc -n openshift-machine-api get preserve-dsoc12r4-ktjfc-worker-us-east-2a -o json | diff preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json -
10c10
< "name": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a",
---
> "name": "preserve-dsoc12r4-ktjfc-worker-us-east-2a",
21c21
< "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a"
---
> "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-us-east-2a"
31c31
< "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a"
---
> "machine.openshift.io/cluster-api-machineset": "preserve-dsoc12r4-ktjfc-worker-us-east-2a"
60c60
< "instanceType": "g4dn.xlarge",
---
> "instanceType": "m5.xlarge",
通过运行以下命令创建支持 GPU 的计算机器集:
$ oc create -f preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a.json
machineset.machine.openshift.io/preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a created
通过运行以下命令查看您创建的机器集:
$ oc -n openshift-machine-api get machinesets | grep gpu
MachineSet 副本计数设置为1
,因此会自动创建一个新的Machine
对象。
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a 1 1 1 1 4m21s
通过运行以下命令查看机器集创建的Machine
对象:
$ oc -n openshift-machine-api get machines | grep gpu
preserve-dsoc12r4-ktjfc-worker-gpu-us-east-2a running g4dn.xlarge us-east-2 us-east-2a 4m36s
请注意,无需为节点指定命名空间。节点定义是集群范围的。
创建支持 GPU 的节点后,您需要发现支持 GPU 的节点,以便可以对其进行调度。为此,请安装节点功能发现 (NFD) Operator。NFD Operator 可识别节点中的硬件设备功能。它解决了识别和编目基础架构节点中的硬件资源的普遍问题,以便可以将其提供给 OpenShift Container Platform。
从 OpenShift Container Platform 控制台中的**OperatorHub**安装节点功能发现 Operator。
在**OperatorHub**中安装 NFD Operator 后,从已安装的 Operators 列表中选择**节点功能发现**,然后选择**创建实例**。这将在openshift-nfd
命名空间中安装nfd-master
和nfd-worker
Pod,每个计算节点一个nfd-worker
Pod。
通过运行以下命令验证 Operator 是否已安装并正在运行:
$ oc get pods -n openshift-nfd
NAME READY STATUS RESTARTS AGE
nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 1d
在控制台中浏览到已安装的 Operator,然后选择**创建节点功能发现**。
选择**创建**以构建 NFD 自定义资源。这会在openshift-nfd
命名空间中创建 NFD Pod,这些 Pod 会轮询 OpenShift Container Platform 节点以获取硬件资源并对其进行编目。
成功构建后,通过运行以下命令验证 NFD Pod 是否在每个节点上运行:
$ oc get pods -n openshift-nfd
NAME READY STATUS RESTARTS AGE
nfd-controller-manager-8646fcbb65-x5qgk 2/2 Running 7 (8h ago) 12d
nfd-master-769656c4cb-w9vrv 1/1 Running 0 12d
nfd-worker-qjxb2 1/1 Running 3 (3d14h ago) 12d
nfd-worker-xtz9b 1/1 Running 5 (3d14h ago) 12d
NFD Operator 使用供应商 PCI ID 来识别节点中的硬件。NVIDIA 使用 PCI ID 10de
。
通过运行以下命令查看 NFD Operator 发现的 NVIDIA GPU:
$ oc describe node ip-10-0-132-138.us-east-2.compute.internal | egrep 'Roles|pci'
Roles: worker
feature.node.kubernetes.io/pci-1013.present=true
feature.node.kubernetes.io/pci-10de.present=true
feature.node.kubernetes.io/pci-1d0f.present=true
GPU启用节点的节点特征列表中出现了10de
。这意味着NFD操作符已正确识别出来自GPU启用MachineSet的节点。