2.2. 在 AWS 上创建机器集
您可以在 Amazon Web Services (AWS) 上的 OpenShift Container Platform 集群中创建不同的机器集来满足特定目的。例如,您可以创建基础架构机器集和相关的机器,以便将支持型工作负载转移到新机器上。
您只能在 Machine API 操作的集群中使用高级机器管理和扩展功能。具有用户置备的基础架构的集群需要额外的验证和配置才能使用 Machine API。
具有基础架构平台类型 none
的集群无法使用 Machine API。即使附加到集群的计算机器安装在支持该功能的平台上,也会应用这个限制。在安装后无法更改此参数。
要查看集群的平台类型,请运行以下命令:
$ oc get infrastructure cluster -o jsonpath='{.status.platform}'
2.2.1. AWS 上机器设置自定义资源的 YAML 示例
此 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> 3 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone> 4 template: metadata: labels: machine.openshift.io/cluster-api-cluster: <infrastructure_id> 5 machine.openshift.io/cluster-api-machine-role: <role> 6 machine.openshift.io/cluster-api-machine-type: <role> 7 machine.openshift.io/cluster-api-machineset: <infrastructure_id>-<role>-<zone> 8 spec: metadata: labels: node-role.kubernetes.io/<role>: "" 9 providerSpec: value: ami: id: ami-046fe691f52a953f9 10 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 11 instanceType: m6i.large kind: AWSMachineProviderConfig placement: availabilityZone: <zone> 12 region: <region> 13 securityGroups: - filters: - name: tag:Name values: - <infrastructure_id>-worker-sg 14 subnet: filters: - name: tag:Name values: - <infrastructure_id>-private-<zone> 15 tags: - name: kubernetes.io/cluster/<infrastructure_id> 16 value: owned userDataSecret: name: worker-user-data
- 1 3 5 11 14 16
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI,您可以通过运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
- 2 4 8
- 指定基础架构 ID、节点标签和区域。
- 6 7 9
- 指定要添加的节点标签。
- 10
- 为您的 OpenShift Container Platform 节点的 AWS 区域指定有效的 Red Hat Enterprise Linux CoreOS (RHCOS) AMI。如果要使用 AWS Marketplace 镜像,则必须从 AWS Marketplace 完成 OpenShift Container Platform 订阅来获取您所在地区的 AMI ID。
- 12
- 指定区域,如
us-east-1a
。 - 13
- 指定区域,如
us-east-1
。 - 15
- 指定基础架构 ID 和区域。
2.2.2. 创建机器集
除了安装程序创建的计算机器集外,您还可以创建自己的来动态管理您选择的特定工作负载的机器计算资源。
先决条件
- 部署一个 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-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
的值会匹配。如果机器集不可用,请等待几分钟,然后再次运行命令。
2.2.3. Amazon EC2 实例元数据服务的机器集选项
您可以使用机器集创建使用 Amazon EC2 实例元数据服务 (IMDS) 的特定版本的计算机器。机器集可以创建允许使用 IMDSv1 和 IMDSv2 的计算机器或需要使用 IMDSv2 的计算机器。
只有在 OpenShift Container Platform 版本 4.7 或更高版本中创建的 AWS 集群上才支持使用 IMDSv2。
要更改现有计算机器的 IMDS 配置,请编辑管理这些机器的机器设置 YAML 文件。要使用首选 IMDS 配置部署新计算机器,请使用适当的值创建一个机器设置 YAML 文件。
控制平面机器的 IMDS 配置在集群安装过程中设置。要更改控制平面机器 IMDS 配置,您必须使用 AWS CLI。如需更多信息,请参阅 AWS 文档,了解如何修改现有实例的实例元数据选项。
在配置机器集来创建需要 IMDSv2 的计算机器前,请确保与 AWS 元数据服务交互的工作负载都支持 IMDSv2。
2.2.3.1. 使用机器集配置 IMDS
您可以通过在计算机器的机器集 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。
2.2.4. 将机器部署为 Dedicated 实例的机器集
您可以创建在 AWS 上运行的机器集,该机器将机器部署为 Dedicated 实例。专用实例在专用于单一客户的硬件上运行虚拟私有云(VPC)。这些 Amazon EC2 实例在主机硬件级别被物理隔离。Dedicated 实例的隔离也会存在,即使实例属于链接到一个 Forer 帐户的不同 AWS 帐户。但是,其他未专用实例如果属于同一 AWS 帐户,则可以与 Dedicated 实例共享硬件。
Machine API 支持具有公共或专用租期的实例。具有公共租期的实例在共享硬件上运行。公共租期是默认租期。具有专用租期的实例在单租户硬件上运行。
2.2.4.1. 使用机器集创建 Dedicated 实例
您可以使用 Machine API 集成来运行由 Dedicated 实例支持的机器。设置机器设置 YAML 文件中的 tenancy
字段,以便在 AWS 上启动 Dedicated 实例。
流程
在
providerSpec
字段中指定专用租户:providerSpec: placement: tenancy: dedicated
2.2.5. 将机器部署为 Spot 实例的机器集
您可以通过创建一个在 AWS 上运行的机器集来把机器部署为非保障的 Spot 实例来节约成本。Spo 实例使用未使用的 AWS EC2 容量,且比按需(On-Demand)实例的成本要低。您可以将 Spot 实例用于可容许中断的工作负载,如批处理或无状态工作负载、横向可扩展工作负载。
AWS EC2 可随时终止 Spot 实例。当发生中断时,AWS 会向用户发出两分钟警告信息。当 AWS 发出终止警告时,OpenShift Container Platform 开始从受影响的实例中删除工作负载。
使用 Spot 实例时可能会因为以下原因造成中断:
- 实例价格超过您的最大价格
- Spot 实例的需求增加
- Spot 实例的提供减少
当 AWS 终止实例时,Spot 实例节点上运行的终止处理器会删除机器资源。为了满足机器集 replicas
数量, 机器集会创建一个请求 Spot 实例的机器。
2.2.5.1. 使用机器集创建 Spot 实例
您可以通过在机器集 YAML 文件中添加 spotMarketOptions
,在 AWS 上启动 Spot 实例。
流程
在
providerSpec
字段中添加以下行:providerSpec: value: spotMarketOptions: {}
您可以选择设置
spotMarketOptions.maxPrice
字段来限制 Spot 实例的成本。例如,您可以设置maxPrice: '2.50'
。如果设置了
maxPrice
,则将此值用作每小时最大即时价格。如果没有设置,则默认使用最大价格收费,以达到按需处理的实例价格。注意强烈建议您使用默认的 On-Demand 价格作为
maxPrice
值,不要为 Spot 实例设置最大价格。