×

配置 Amazon Web Services 集群的示例 YAML

以下示例 YAML 代码段显示了 AWS 集群的提供程序规范和故障域配置。

示例 AWS 提供程序规范

为现有集群创建控制平面机器集时,提供程序规范必须与安装程序创建的控制平面机器自定义资源 (CR) 中的providerSpec配置匹配。您可以省略在 CR 的故障域部分中设置的任何字段。

在以下示例中,<cluster_id>是基于您在预配集群时设置的集群 ID 的基础架构 ID。如果您已安装 OpenShift CLI,则可以通过运行以下命令获取基础架构 ID

$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster
示例 AWS providerSpec
apiVersion: machine.openshift.io/v1
kind: ControlPlaneMachineSet
metadata:
  name: cluster
  namespace: openshift-machine-api
spec:
# ...
  template:
# ...
      spec:
        providerSpec:
          value:
            ami:
              id: ami-<ami_id_string> (1)
            apiVersion: machine.openshift.io/v1beta1
            blockDevices:
            - ebs: (2)
                encrypted: true
                iops: 0
                kmsKey:
                  arn: ""
                volumeSize: 120
                volumeType: gp3
            credentialsSecret:
              name: aws-cloud-credentials (3)
            deviceIndex: 0
            iamInstanceProfile:
              id: <cluster_id>-master-profile (4)
            instanceType: m6i.xlarge (5)
            kind: AWSMachineProviderConfig (6)
            loadBalancers: (7)
            - name: <cluster_id>-int
              type: network
            - name: <cluster_id>-ext
              type: network
            metadata:
              creationTimestamp: null
            metadataServiceOptions: {}
            placement: (8)
              region: <region> (9)
              availabilityZone: "" (10)
              tenancy: (11)
            securityGroups:
            - filters:
              - name: tag:Name
                values:
                - <cluster_id>-master-sg (12)
            subnet: {} (13)
            userDataSecret:
              name: master-user-data (14)
1 指定集群的 Red Hat Enterprise Linux CoreOS (RHCOS) Amazon 机器镜像 (AMI) ID。AMI 必须属于与集群相同的区域。如果您想使用 AWS Marketplace 镜像,则必须完成来自AWS Marketplace的 OpenShift Container Platform 订阅以获取您区域的 AMI ID。
2 指定已加密 EBS 卷的配置。
3 指定集群的密钥名称。请勿更改此值。
4 指定 AWS Identity and Access Management (IAM) 实例配置文件。请勿更改此值。
5 指定控制平面的 AWS 实例类型。
6 指定云提供商平台类型。请勿更改此值。
7 指定集群的内部 (int) 和外部 (ext) 负载均衡器。

在私有 OpenShift Container Platform 集群中,您可以省略外部 (ext) 负载均衡器参数。

8 指定在 AWS 中创建控制平面实例的位置。
9 指定集群的 AWS 区域。
10 此参数在故障域中配置,此处显示为空值。如果为此参数指定的值与故障域中的值不同,则控制平面机器集操作符会将其覆盖为故障域中的值。
11 指定控制平面的 AWS 专用实例配置。有关更多信息,请参阅 AWS 关于专用实例的文档。有效值为:
  • default:专用实例运行在共享硬件上。

  • dedicated:专用实例运行在单租户硬件上。

  • host:专用实例运行在专用主机上,专用主机是您可以控制配置的隔离服务器。

12 指定控制平面机器安全组。
13 此参数在故障域中配置,此处显示为空值。如果为此参数指定的值与故障域中的值不同,则控制平面机器集操作符会将其覆盖为故障域中的值。

如果故障域配置未指定值,则使用提供程序规范中的值。在故障域中配置子网将覆盖提供程序规范中的子网值。

14 指定控制平面用户数据密钥。请勿更改此值。

AWS 故障域配置示例

控制平面机器集的故障域概念类似于现有的 AWS 可用区 (AZ) 概念。ControlPlaneMachineSet CR 会尽可能地将控制平面机器分布到多个故障域。

在控制平面机器集中配置 AWS 故障域时,必须指定可用区名称和要使用的子网。

AWS 故障域值示例
apiVersion: machine.openshift.io/v1
kind: ControlPlaneMachineSet
metadata:
  name: cluster
  namespace: openshift-machine-api
spec:
# ...
  template:
# ...
    machines_v1beta1_machine_openshift_io:
      failureDomains:
        aws:
        - placement:
            availabilityZone: <aws_zone_a> (1)
          subnet: (2)
            filters:
            - name: tag:Name
              values:
              - <cluster_id>-private-<aws_zone_a> (3)
            type: Filters (4)
        - placement:
            availabilityZone: <aws_zone_b> (5)
          subnet:
            filters:
            - name: tag:Name
              values:
              - <cluster_id>-private-<aws_zone_b> (6)
            type: Filters
        platform: AWS (7)
# ...
1 为第一个故障域指定 AWS 可用区。
2 指定子网配置。在此示例中,子网类型为Filters,因此存在filters 部分。
3 使用基础设施 ID 和 AWS 可用区指定第一个故障域的子网名称。
4 指定子网类型。允许的值为:ARNFiltersID。默认值为Filters
5 使用基础设施 ID 和 AWS 可用区指定附加故障域的子网名称。
6 为附加故障域指定集群的基础设施 ID 和 AWS 可用区。
7 指定云提供商平台名称。请勿更改此值。

为控制平面机器启用 Amazon Web Services 功能

您可以通过更新控制平面机器集中的值来启用功能。

将 API 服务器限制为私有

将集群部署到 Amazon Web Services (AWS) 后,您可以重新配置 API 服务器以仅使用私有区域。

先决条件
  • 安装 OpenShift CLI (oc)。

  • 拥有作为具有admin权限的用户访问 Web 控制台的权限。

步骤
  1. 在云提供商的 Web 门户或控制台中,执行以下操作

    1. 找到并删除相应的负载均衡器组件

      • 对于 AWS,请删除外部负载均衡器。私有区域中的 API DNS 条目已指向内部负载均衡器,后者使用相同的配置,因此您无需修改内部负载均衡器。

    2. 删除公共区域中的api.$clustername.$yourdomain DNS 条目。

  2. 通过删除控制平面机器集自定义资源中指示的以下行来删除外部负载均衡器

    # ...
    providerSpec:
      value:
    # ...
        loadBalancers:
        - name: lk4pj-ext (1)
          type: network (2)
        - name: lk4pj-int
          type: network
    # ...
    1 删除外部负载均衡器的name值(以-ext结尾)。
    2 删除外部负载均衡器的type值。

使用控制平面机器集更改 Amazon Web Services 实例类型

您可以通过更新控制平面机器集自定义资源 (CR) 中的规范来更改控制平面机器使用的 Amazon Web Services (AWS) 实例类型。

先决条件
  • 您的 AWS 集群使用控制平面机器集。

步骤
  1. 编辑providerSpec字段下的以下行

    providerSpec:
      value:
        ...
        instanceType: <compatible_aws_instance_type> (1)
    1 指定与之前的选择具有相同基础的更大的 AWS 实例类型。例如,您可以将m6i.xlarge更改为m6i.2xlargem6i.4xlarge
  2. 保存您的更改。

使用机器集将机器分配到弹性结构适配器实例的放置组

您可以配置机器集以在现有 AWS 放置组中的弹性结构适配器 (EFA) 实例上部署机器。

EFA 实例不需要放置组,您可以将放置组用于配置 EFA 以外的目的。此示例同时使用两者来演示可以提高指定放置组中机器网络性能的配置。

先决条件
  • 您已在 AWS 控制台中创建了一个放置组。

    确保您创建的放置组类型的规则和限制与您的预期用例兼容。控制平面机器集会尽可能地将控制平面机器分布到多个故障域。要将放置组用于控制平面,您必须使用可以跨多个可用区扩展的放置组类型。

步骤
  1. 在文本编辑器中,打开现有机器集的 YAML 文件或创建一个新的 YAML 文件。

  2. 编辑providerSpec字段下的以下行

    apiVersion: machine.openshift.io/v1
    kind: ControlPlaneMachineSet
    # ...
    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 实例元数据服务的机器集选项

您可以使用机器集创建使用特定版本的 Amazon EC2 实例元数据服务 (IMDS) 的机器。机器集可以创建允许同时使用 IMDSv1 和IMDSv2的机器,或者创建需要使用 IMDSv2 的机器。

仅在使用 OpenShift Container Platform 4.7 或更高版本创建的 AWS 集群上支持使用 IMDSv2。

在配置机器集以创建需要 IMDSv2 的机器之前,请确保与 AWS 元数据服务交互的任何工作负载都支持 IMDSv2。

使用机器集配置 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。

将机器部署为专用实例的机器集

您可以创建一个在 AWS 上运行的机器集,该机器集将机器部署为专用实例。专用实例在专用于单个客户的硬件上的虚拟专用云 (VPC) 中运行。这些 Amazon EC2 实例在主机硬件级别上进行了物理隔离。即使实例属于链接到单个付费账户的不同 AWS 账户,专用实例的隔离仍然存在。但是,如果不是专用实例的其他实例,如果属于同一个 AWS 账户,则可以与专用实例共享硬件。

机器 API 支持具有公共或专用租用类型的实例。具有公共租用类型的实例在共享硬件上运行。公共租用类型是默认租用类型。具有专用租用类型的实例在单租户硬件上运行。

使用机器集创建专用实例

您可以使用机器 API 集成运行由专用实例支持的机器。在您的机器集 YAML 文件中设置tenancy字段以在 AWS 上启动专用实例。

步骤
  • providerSpec字段下指定专用租用类型

    providerSpec:
      placement:
        tenancy: dedicated