×

基础设施先决条件

关于 AWS Local Zones 和边缘计算池

阅读以下章节,了解 AWS Local Zones 环境中的基础设施行为和集群限制。

AWS Local Zones 中的集群限制

尝试使用默认安装配置在 Amazon Web Services (AWS) Local Zone 部署集群时,存在一些限制。

以下列表详细说明在预配置的 AWS Zone 部署集群时的限制。

  • Zone 中的 Amazon EC2 实例和区域中的 Amazon EC2 实例之间的最大传输单元 (MTU) 为1300。这会导致集群范围的网络 MTU 根据与部署一起使用的网络插件而变化。

  • 网络资源(例如网络负载均衡器 (NLB)、经典负载均衡器和网络地址转换 (NAT) 网关)不受全局支持。

  • 对于 AWS 上的 OpenShift Container Platform 集群,AWS Elastic Block Storage (EBS) gp3 类型卷是节点卷的默认卷,也是存储类的默认卷。此卷类型在 Zone 位置不可全局使用。默认情况下,在 Zone 中运行的节点使用gp2 EBS 卷部署。在 Zone 节点上创建工作负载时,必须设置gp2-csi StorageClass 参数。

如果希望安装程序自动为 OpenShift Container Platform 集群创建 Local Zone 子网,则此方法适用特定配置限制。

当您将安装程序设置为自动为 OpenShift Container Platform 集群创建子网时,将应用以下配置限制。

  • 当安装程序在 AWS Local Zones 创建私有子网时,程序会将每个子网与父 Zone 的路由表关联。此操作确保每个私有子网可以通过 AWS 区域中的 NAT 网关将出站流量路由到互联网。

  • 如果父 Zone 路由表在集群安装期间不存在,则安装程序会将任何私有子网与 Amazon Virtual Private Cloud (VPC) 中第一个可用的私有路由表关联。此方法仅适用于 OpenShift Container Platform 集群中的 AWS Local Zones 子网。

关于边缘计算池

边缘计算节点是在 AWS Local Zones 位置运行的受污染的计算节点。

部署使用 Local Zones 的集群时,请考虑以下几点。

  • Local Zones 中的 Amazon EC2 实例比可用区中的 Amazon EC2 实例更昂贵。

  • AWS Local Zones 中运行的应用程序与最终用户之间的延迟更低。如果例如入口流量在 Local Zones 和可用区之间混合,则某些工作负载会存在延迟影响。

通常,Local Zones 中的 Amazon EC2 实例和区域中的 Amazon EC2 实例之间的最大传输单元 (MTU) 为 1300。集群网络 MTU 必须始终小于 EC2 MTU,以考虑开销。具体的开销由网络插件决定。例如:OVN-Kubernetes 的开销为100 字节

网络插件可以提供其他功能,例如 IPsec,这些功能也会影响 MTU 大小。

有关更多信息,请参阅 AWS 文档中的Local Zones 的工作原理

OpenShift Container Platform 4.12 引入了一个新的计算池“边缘”,专为在远程 Zone 中使用而设计。边缘计算池配置在 AWS Local Zones 位置之间是通用的。由于 Local Zones 资源上的 EC2 和 EBS 等资源的类型和大小限制,默认实例类型可能与传统的计算池不同。

Local Zones 位置的默认弹性块存储 (EBS) 为gp2,这与非边缘计算池不同。边缘计算池上每个 Local Zones 使用的实例类型也可能与其他计算池不同,具体取决于 Zone 上的实例产品。

边缘计算池创建了开发人员可以使用的新标签,以将应用程序部署到 AWS Local Zones 节点。新的标签是:

  • node-role.kubernetes.io/edge=''

  • machine.openshift.io/zone-type=local-zone

  • machine.openshift.io/zone-group=$ZONE_GROUP_NAME

默认情况下,边缘计算池的机器集定义了NoSchedule污染,以防止其他工作负载在 Local Zones 实例上扩散。只有在 pod 规范中定义容差时,用户才能运行用户工作负载。

安装先决条件

在 AWS Local Zones 环境中安装集群之前,必须配置基础设施以便它能够采用 Local Zone 功能。

加入 AWS Local Zones

如果计划在 AWS Local Zones 中创建子网,则必须分别加入每个 Zone 组。

先决条件
  • 您已安装 AWS CLI。

  • 您已确定要部署 OpenShift Container Platform 集群的 AWS 区域。

  • 您已将允许的 IAM 策略附加到加入 Zone 组的用户或角色帐户。

步骤
  1. 通过运行以下命令列出 AWS 区域中可用的 Zone:

    列出 AWS 区域中可用的 AWS Local Zones 的示例命令:
    $ aws --region "<value_of_AWS_Region>" ec2 describe-availability-zones \
        --query 'AvailabilityZones[].[{ZoneName: ZoneName, GroupName: GroupName, Status: OptInStatus}]' \
        --filters Name=zone-type,Values=local-zone \
        --all-availability-zones

    根据 AWS 区域的不同,可用 Zone 的列表可能很长。该命令返回以下字段:

    ZoneName

    Local Zones 的名称。

    GroupName

    包含 Zone 的组。要加入区域,请保存名称。

    Status

    Local Zones 组的状态。如果状态为not-opted-in,则必须按照下一步说明加入GroupName

  2. 通过运行以下命令加入 AWS 帐户上的 Zone 组:

    $ aws ec2 modify-availability-zone-group \
        --group-name "<value_of_GroupName>" \(1)
        --opt-in-status opted-in
    1 <value_of_GroupName>替换为要在其中创建子网的 Local Zones 组的名称。例如,指定us-east-1-nyc-1 以使用 Zoneus-east-1-nyc-1a(美国东部纽约)。

获取 AWS Marketplace 镜像

如果使用 AWS Marketplace 镜像部署 OpenShift Container Platform 集群,则必须首先通过 AWS 订阅。订阅产品将为您提供安装程序用于部署计算节点的 AMI ID。

先决条件
  • 您拥有一个用于购买产品的 AWS 帐户。此帐户不必与用于安装集群的帐户相同。

步骤
  1. AWS Marketplace完成 OpenShift Container Platform 订阅。

  2. 记录特定 AWS 区域的 AMI ID。作为安装过程的一部分,在部署集群之前,必须使用此值更新install-config.yaml文件。

    包含 AWS Marketplace 计算节点的示例install-config.yaml文件:
    apiVersion: v1
    baseDomain: example.com
    compute:
    - hyperthreading: Enabled
      name: worker
      platform:
        aws:
          amiID: ami-06c4d345f7c207239 (1)
          type: m5.4xlarge
      replicas: 3
    metadata:
      name: test-cluster
    platform:
      aws:
        region: us-east-2 (2)
    sshKey: ssh-ed25519 AAAA...
    pullSecret: '{"auths": ...}'
    1 来自 AWS Marketplace 订阅的 AMI ID。
    2 您的 AMI ID 与特定的 AWS 区域相关联。创建安装配置文件时,请确保选择配置订阅时指定的相同 AWS 区域。

安装准备

在将节点扩展到本地区域之前,必须为集群安装环境准备某些资源。

集群安装的最低资源要求

每台集群机器都必须满足以下最低要求

表 1. 最低资源要求
机器 操作系统 vCPU [1] 虚拟内存 存储 每秒输入/输出 (IOPS)[2]

引导程序

RHCOS

4

16 GB

100 GB

300

控制平面

RHCOS

4

16 GB

100 GB

300

计算

RHCOS、RHEL 8.6 及更高版本 [3]

2

8 GB

100 GB

300

  1. 当未启用同时多线程 (SMT) 或超线程时,一个 vCPU 等于一个物理核心。启用时,使用以下公式计算相应的比率:(每个核心的线程数 × 核心数) × 插槽数 = vCPU 数。

  2. OpenShift Container Platform 和 Kubernetes 对磁盘性能敏感,建议使用更快的存储,特别是对于需要 10 毫秒 p99 fsync 持续时间的控制平面节点上的 etcd。请注意,在许多云平台上,存储大小和 IOPS 共同扩展,因此您可能需要过度分配存储卷才能获得足够的性能。

  3. 与所有用户预配的安装一样,如果您选择在集群中使用 RHEL 计算机器,则您将负责所有操作系统生命周期管理和维护,包括执行系统更新、应用补丁和完成所有其他所需的任务。RHEL 7 计算机器的使用已弃用,并在 OpenShift Container Platform 4.10 及更高版本中已移除。

从 OpenShift Container Platform 4.13 版本开始,RHCOS 基于 RHEL 9.2 版本,更新了微架构要求。以下列表包含每种架构所需的最低指令集架构 (ISA):

  • x86-64 架构需要 x86-64-v2 ISA

  • ARM64 架构需要 ARMv8.0-A ISA

  • IBM Power 架构需要 Power 9 ISA

  • s390x 架构需要 z14 ISA

更多信息,请参见 RHEL 架构

如果平台的实例类型满足集群机器的最低要求,则支持在 OpenShift Container Platform 中使用。

AWS 测试的实例类型

以下 Amazon Web Services (AWS) 实例类型已通过 OpenShift Container Platform 测试,可用于 AWS 本地区域。

将图表中包含的机器类型用于您的 AWS 实例。如果您使用图表中未列出的实例类型,请确保您使用的实例大小与“集群安装的最低资源要求”部分中列出的最低资源要求相符。

基于 64 位 x86 架构的 AWS 本地区域机器类型
  • c5.*

  • c5d.*

  • m6i.*

  • m5.*

  • r5.*

  • t3.*

其他资源

创建安装配置文件

生成并自定义安装程序部署集群所需的安装配置文件。

先决条件
  • 您已获得用于用户预配基础设施的 OpenShift Container Platform 安装程序和集群的拉取密钥。

  • 您已检查您是否正在将集群部署到具有 Red Hat 发布的 Red Hat Enterprise Linux CoreOS (RHCOS) AMI 的 AWS 区域。如果您部署到需要自定义 AMI 的 AWS 区域(例如 AWS GovCloud 区域),则必须手动创建 install-config.yaml 文件。

步骤
  1. 创建 install-config.yaml 文件。

    1. 更改到包含安装程序的目录并运行以下命令:

      $ ./openshift-install create install-config --dir <installation_directory> (1)
      1 对于 <installation_directory>,指定用于存储安装程序创建的文件的目录名称。

      指定一个空目录。某些安装资源(例如引导程序 X.509 证书)的有效期很短,因此您不能重复使用安装目录。如果您想重复使用来自另一个集群安装的单个文件,可以将它们复制到您的目录中。但是,安装资源的文件名可能会在不同版本之间发生变化。从早期 OpenShift Container Platform 版本复制安装文件时,请谨慎操作。

    2. 在提示符下,提供云的配置详细信息。

      1. 可选:选择用于访问集群机器的 SSH 密钥。

        对于要执行安装调试或灾难恢复的生产 OpenShift Container Platform 集群,请指定 ssh-agent 进程使用的 SSH 密钥。

      2. 选择 **aws** 作为目标平台。

      3. 如果您的计算机上没有存储 AWS 配置文件,请输入您配置为运行安装程序的用户 的 AWS 访问密钥 ID 和密钥。

        AWS 访问密钥 ID 和密钥存储在安装主机当前用户的 home 目录中的 ~/.aws/credentials 中。如果导出的配置文件的凭据不存在于文件中,则安装程序会提示您输入凭据。您提供给安装程序的任何凭据都将存储在文件中。

      4. 选择要将集群部署到的 AWS 区域。

      5. 选择为集群配置的 Route 53 服务的基本域名。

      6. 输入集群的描述性名称。

      7. 粘贴 来自 Red Hat OpenShift 集群管理器 的拉取密钥

  2. 可选:备份 install-config.yaml 文件。

    install-config.yaml 文件在安装过程中会被使用。如果您想重复使用该文件,则现在必须对其进行备份。

包含边缘计算池的安装配置文件示例

以下示例显示包含边缘机器池配置的 install-config.yaml 文件。

使用具有自定义实例类型的边缘池的配置
apiVersion: v1
baseDomain: devcluster.openshift.com
metadata:
  name: ipi-edgezone
compute:
- name: edge
  platform:
    aws:
      type: r5.2xlarge
platform:
  aws:
    region: us-west-2
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...

实例类型因位置而异。要验证集群运行的本地区域中的可用性,请参见 AWS 文档。

使用具有自定义 Amazon Elastic Block Store (EBS) 类型的边缘池的配置
apiVersion: v1
baseDomain: devcluster.openshift.com
metadata:
  name: ipi-edgezone
compute:
- name: edge
  platform:
    aws:
      zones:
      - us-west-2-lax-1a
      - us-west-2-lax-1b
      - us-west-2-phx-2a
      rootVolume:
        type: gp3
        size: 120
platform:
  aws:
    region: us-west-2
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...

Elastic Block Storage (EBS) 类型因位置而异。请检查 AWS 文档以验证集群运行的本地区域中的可用性。

使用具有自定义安全组的边缘池的配置
apiVersion: v1
baseDomain: devcluster.openshift.com
metadata:
  name: ipi-edgezone
compute:
- name: edge
  platform:
    aws:
      additionalSecurityGroupIDs:
        - sg-1 (1)
        - sg-2
platform:
  aws:
    region: us-west-2
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...
1 指定安全组的名称,如同在 Amazon EC2 控制台中显示的那样。确保包含sg前缀。

自定义集群网络 MTU

在 AWS 上部署集群之前,您可以自定义集群网络的最大传输单元 (MTU),以满足您的基础设施需求。

默认情况下,当您安装具有受支持的本地区域功能的集群时,集群网络的 MTU 值会自动调整为网络插件接受的最低值。

为在本地区域基础设施中运行的 EC2 实例设置不受支持的 MTU 值可能会导致您的 OpenShift Container Platform 集群出现问题。

如果本地区域支持 EC2 实例之间以及本地区域和 AWS 区域之间更高的 MTU 值,您可以手动配置更高的值以提高集群网络的性能。

您可以通过在install-config.yaml配置文件中指定networking.clusterNetworkMTU参数来自定义集群的 MTU。

本地区域中的所有子网都必须支持更高的 MTU 值,以便该区域中的每个节点都能成功与 AWS 区域中的服务通信并部署您的工作负载。

覆盖默认 MTU 值的示例
apiVersion: v1
baseDomain: devcluster.openshift.com
metadata:
  name: edge-zone
networking:
  clusterNetworkMTU: 8901
compute:
- name: edge
  platform:
    aws:
      zones:
      - us-west-2-lax-1a
      - us-west-2-lax-1b
platform:
  aws:
    region: us-west-2
pullSecret: '{"auths": ...}'
sshKey: ssh-ed25519 AAAA...
其他资源

AWS 本地区域环境的集群安装选项

选择以下安装选项之一,在 AWS 上安装 OpenShift Container Platform 集群,其中边缘计算节点在本地区域中定义

  • 完全自动选项:安装集群以快速将计算节点扩展到边缘计算池,安装程序会自动为 OpenShift Container Platform 集群创建基础设施资源。

  • 现有 VPC 选项:将集群安装到 AWS 中的现有 VPC,您需要将本地区域子网提供给install-config.yaml文件。

后续步骤

选择以下选项之一,在 AWS 本地区域环境中安装 OpenShift Container Platform 集群

在 AWS 本地区域快速安装集群

对于 OpenShift Container Platform 4.17,您可以快速在 Amazon Web Services (AWS) 上安装集群,以将计算节点扩展到本地区域位置。通过使用此安装路径,安装程序会自动为在配置文件中定义的每个区域创建网络资源和本地区域子网。要自定义安装,您必须在部署集群之前修改install-config.yaml文件中的参数。

修改安装配置文件以使用 AWS 本地区域

修改install-config.yaml文件以包含 AWS 本地区域。

先决条件
  • 您已配置 AWS 账户。

  • 通过运行aws configure,您已将 AWS 密钥和 AWS 区域添加到本地 AWS 配置文件中。

  • 您熟悉在指定安装程序自动为 OpenShift Container Platform 集群创建子网时适用的配置限制。

  • 您已加入每个区域的本地区域组。

  • 您已使用“创建安装配置文件”过程创建install-config.yaml文件。

步骤
  1. 通过在边缘计算池的platform.aws.zones属性中指定本地区域名称来修改install-config.yaml文件。

    # ...
    platform:
      aws:
        region: <region_name> (1)
    compute:
    - name: edge
      platform:
        aws:
          zones: (2)
          - <local_zone_name>
    #...
    1 AWS 区域名称。
    2 您使用的本地区域名称列表必须存在于platform.aws.region字段中指定的同一 AWS 区域中。
    us-west-2 AWS 区域中安装集群的配置示例,该集群将边缘节点扩展到洛杉矶拉斯维加斯位置的本地区域
    apiVersion: v1
    baseDomain: example.com
    metadata:
      name: cluster-name
    platform:
      aws:
        region: us-west-2
    compute:
    - name: edge
      platform:
        aws:
          zones:
          - us-west-2-lax-1a
          - us-west-2-lax-1b
          - us-west-2-las-1a
    pullSecret: '{"auths": ...}'
    sshKey: 'ssh-ed25519 AAAA...'
    #...
  2. 部署您的集群。

后续步骤

在具有本地区域子网的现有 VPC 中安装集群

您可以在 Amazon Web Services (AWS) 上将集群安装到现有的 Amazon Virtual Private Cloud (VPC) 中。安装程序将预配其余所需的基础设施,您可以进一步自定义它。要自定义安装,请在安装集群之前修改install-config.yaml文件中的参数。

在 AWS 中的现有 VPC 上安装集群需要使用 AWS 本地区域将计算节点扩展到云基础设施的边缘。

本地区域子网将常规计算节点扩展到边缘网络。每个边缘计算节点都运行用户工作负载。创建 Amazon Web Service (AWS) 本地区域环境并部署集群后,您可以使用边缘计算节点在本地区域子网中创建用户工作负载。

如果要创建私有子网,则必须修改提供的 CloudFormation 模板或创建您自己的模板。

您可以使用提供的 CloudFormation 模板创建网络资源。此外,您可以修改模板以自定义您的基础设施,或使用其中包含的信息根据您公司的策略创建 AWS 资源。

执行安装程序预配的基础设施安装的步骤仅供示例使用。在现有 VPC 中安装集群需要您了解云提供商和 OpenShift Container Platform 的安装过程。您可以使用 CloudFormation 模板来帮助您完成这些步骤或帮助您模拟您自己的集群安装。您可以选择使用其他方法来生成这些资源,而不是使用 CloudFormation 模板来创建资源。

在 AWS 中创建 VPC

您可以在 Amazon Web Services (AWS) 中为 OpenShift Container Platform 集群创建虚拟私有云 (VPC) 和所有本地区域位置的子网,以将计算节点扩展到边缘位置。您可以进一步自定义您的 VPC 以满足您的需求,包括 VPN 和路由表。您还可以添加初始部署中未包含的新本地区域子网。

您可以使用提供的 CloudFormation 模板和自定义参数文件来创建表示 VPC 的 AWS 资源堆栈。

如果您不使用提供的 CloudFormation 模板来创建 AWS 基础设施,则必须查看提供的信息并手动创建基础设施。如果您的集群未正确初始化,您可能需要联系 Red Hat 支持并提供您的安装日志。

先决条件
  • 您已配置 AWS 账户。

  • 通过运行aws configure,您已将 AWS 密钥和 AWS 区域添加到本地 AWS 配置文件中。

  • 您已在您的 AWS 账户上加入 AWS 本地区域。

步骤
  1. 创建一个 JSON 文件,其中包含 CloudFormation 模板所需的 parameter 值。

    [
      {
        "ParameterKey": "VpcCidr", (1)
        "ParameterValue": "10.0.0.0/16" (2)
      },
      {
        "ParameterKey": "AvailabilityZoneCount", (3)
        "ParameterValue": "3" (4)
      },
      {
        "ParameterKey": "SubnetBits", (5)
        "ParameterValue": "12" (6)
      }
    ]
    1 VPC 的 CIDR 块。
    2 请以x.x.x.x/16-24的格式指定一个CIDR块。
    3 要在其中部署VPC的可用区数量。
    4 指定13之间的整数。
    5 每个可用区中每个子网的大小。
    6 指定513之间的整数,其中5代表/2713代表/19
  2. 转到名为“VPC 的 CloudFormation 模板”的文档部分,然后复制模板中提供的语法。将复制的模板语法保存为 YAML 文件到本地系统。此模板描述了集群所需的 VPC。

  3. 运行以下命令启动 CloudFormation 模板以创建表示 VPC 的 AWS 资源堆栈

    您必须在一行中输入命令。

    $ aws cloudformation create-stack --stack-name <name> \(1)
         --template-body file://<template>.yaml \(2)
         --parameters file://<parameters>.json  (3)
    1 <name> 是 CloudFormation 堆栈的名称,例如cluster-vpc。如果您删除集群,则需要此堆栈的名称。
    2 <template> 是您保存的 CloudFormation 模板 YAML 文件的相对路径和名称。
    3 <parameters> 是 CloudFormation 参数 JSON 文件的相对路径和名称。
    示例输出
    arn:aws:cloudformation:us-east-1:123456789012:stack/cluster-vpc/dbedae40-2fd3-11eb-820e-12a48460849f
  4. 运行以下命令确认模板组件是否存在

    $ aws cloudformation describe-stacks --stack-name <name>

    StackStatus 显示CREATE_COMPLETE 后,输出将显示以下参数的值。您必须将这些参数值提供给您运行以创建集群的其他 CloudFormation 模板。

    VpcId

    您的 VPC 的 ID。

    PublicSubnetIds

    新公共子网的 ID。

    PrivateSubnetIds

    新私有子网的 ID。

    PublicRouteTableId

    新的公共路由表 ID。

VPC 的 CloudFormation 模板

您可以使用以下 CloudFormation 模板部署 OpenShift Container Platform 集群所需的 VPC。

VPC 的 CloudFormation 模板
AWSTemplateFormatVersion: 2010-09-09
Description: Template for Best Practice VPC with 1-3 AZs

Parameters:
  VpcCidr:
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24.
    Default: 10.0.0.0/16
    Description: CIDR block for VPC.
    Type: String
  AvailabilityZoneCount:
    ConstraintDescription: "The number of availability zones. (Min: 1, Max: 3)"
    MinValue: 1
    MaxValue: 3
    Default: 1
    Description: "How many AZs to create VPC subnets for. (Min: 1, Max: 3)"
    Type: Number
  SubnetBits:
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/19-27.
    MinValue: 5
    MaxValue: 13
    Default: 12
    Description: "Size of each subnet to create within the availability zones. (Min: 5 = /27, Max: 13 = /19)"
    Type: Number

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
    - Label:
        default: "Network Configuration"
      Parameters:
      - VpcCidr
      - SubnetBits
    - Label:
        default: "Availability Zones"
      Parameters:
      - AvailabilityZoneCount
    ParameterLabels:
      AvailabilityZoneCount:
        default: "Availability Zone Count"
      VpcCidr:
        default: "VPC CIDR"
      SubnetBits:
        default: "Bits Per Subnet"

Conditions:
  DoAz3: !Equals [3, !Ref AvailabilityZoneCount]
  DoAz2: !Or [!Equals [2, !Ref AvailabilityZoneCount], Condition: DoAz3]

Resources:
  VPC:
    Type: "AWS::EC2::VPC"
    Properties:
      EnableDnsSupport: "true"
      EnableDnsHostnames: "true"
      CidrBlock: !Ref VpcCidr
  PublicSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [0, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 0
      - Fn::GetAZs: !Ref "AWS::Region"
  PublicSubnet2:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz2
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [1, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 1
      - Fn::GetAZs: !Ref "AWS::Region"
  PublicSubnet3:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz3
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [2, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 2
      - Fn::GetAZs: !Ref "AWS::Region"
  InternetGateway:
    Type: "AWS::EC2::InternetGateway"
  GatewayToInternet:
    Type: "AWS::EC2::VPCGatewayAttachment"
    Properties:
      VpcId: !Ref VPC
      InternetGatewayId: !Ref InternetGateway
  PublicRouteTable:
    Type: "AWS::EC2::RouteTable"
    Properties:
      VpcId: !Ref VPC
  PublicRoute:
    Type: "AWS::EC2::Route"
    DependsOn: GatewayToInternet
    Properties:
      RouteTableId: !Ref PublicRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
  PublicSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTable
  PublicSubnetRouteTableAssociation2:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Condition: DoAz2
    Properties:
      SubnetId: !Ref PublicSubnet2
      RouteTableId: !Ref PublicRouteTable
  PublicSubnetRouteTableAssociation3:
    Condition: DoAz3
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PublicSubnet3
      RouteTableId: !Ref PublicRouteTable
  PrivateSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [3, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 0
      - Fn::GetAZs: !Ref "AWS::Region"
  PrivateRouteTable:
    Type: "AWS::EC2::RouteTable"
    Properties:
      VpcId: !Ref VPC
  PrivateSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PrivateSubnet
      RouteTableId: !Ref PrivateRouteTable
  NAT:
    DependsOn:
    - GatewayToInternet
    Type: "AWS::EC2::NatGateway"
    Properties:
      AllocationId:
        "Fn::GetAtt":
        - EIP
        - AllocationId
      SubnetId: !Ref PublicSubnet
  EIP:
    Type: "AWS::EC2::EIP"
    Properties:
      Domain: vpc
  Route:
    Type: "AWS::EC2::Route"
    Properties:
      RouteTableId:
        Ref: PrivateRouteTable
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: NAT
  PrivateSubnet2:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz2
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [4, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 1
      - Fn::GetAZs: !Ref "AWS::Region"
  PrivateRouteTable2:
    Type: "AWS::EC2::RouteTable"
    Condition: DoAz2
    Properties:
      VpcId: !Ref VPC
  PrivateSubnetRouteTableAssociation2:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Condition: DoAz2
    Properties:
      SubnetId: !Ref PrivateSubnet2
      RouteTableId: !Ref PrivateRouteTable2
  NAT2:
    DependsOn:
    - GatewayToInternet
    Type: "AWS::EC2::NatGateway"
    Condition: DoAz2
    Properties:
      AllocationId:
        "Fn::GetAtt":
        - EIP2
        - AllocationId
      SubnetId: !Ref PublicSubnet2
  EIP2:
    Type: "AWS::EC2::EIP"
    Condition: DoAz2
    Properties:
      Domain: vpc
  Route2:
    Type: "AWS::EC2::Route"
    Condition: DoAz2
    Properties:
      RouteTableId:
        Ref: PrivateRouteTable2
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: NAT2
  PrivateSubnet3:
    Type: "AWS::EC2::Subnet"
    Condition: DoAz3
    Properties:
      VpcId: !Ref VPC
      CidrBlock: !Select [5, !Cidr [!Ref VpcCidr, 6, !Ref SubnetBits]]
      AvailabilityZone: !Select
      - 2
      - Fn::GetAZs: !Ref "AWS::Region"
  PrivateRouteTable3:
    Type: "AWS::EC2::RouteTable"
    Condition: DoAz3
    Properties:
      VpcId: !Ref VPC
  PrivateSubnetRouteTableAssociation3:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Condition: DoAz3
    Properties:
      SubnetId: !Ref PrivateSubnet3
      RouteTableId: !Ref PrivateRouteTable3
  NAT3:
    DependsOn:
    - GatewayToInternet
    Type: "AWS::EC2::NatGateway"
    Condition: DoAz3
    Properties:
      AllocationId:
        "Fn::GetAtt":
        - EIP3
        - AllocationId
      SubnetId: !Ref PublicSubnet3
  EIP3:
    Type: "AWS::EC2::EIP"
    Condition: DoAz3
    Properties:
      Domain: vpc
  Route3:
    Type: "AWS::EC2::Route"
    Condition: DoAz3
    Properties:
      RouteTableId:
        Ref: PrivateRouteTable3
      DestinationCidrBlock: 0.0.0.0/0
      NatGatewayId:
        Ref: NAT3
  S3Endpoint:
    Type: AWS::EC2::VPCEndpoint
    Properties:
      PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
          Principal: '*'
          Action:
          - '*'
          Resource:
          - '*'
      RouteTableIds:
      - !Ref PublicRouteTable
      - !Ref PrivateRouteTable
      - !If [DoAz2, !Ref PrivateRouteTable2, !Ref "AWS::NoValue"]
      - !If [DoAz3, !Ref PrivateRouteTable3, !Ref "AWS::NoValue"]
      ServiceName: !Join
      - ''
      - - com.amazonaws.
        - !Ref 'AWS::Region'
        - .s3
      VpcId: !Ref VPC

Outputs:
  VpcId:
    Description: ID of the new VPC.
    Value: !Ref VPC
  PublicSubnetIds:
    Description: Subnet IDs of the public subnets.
    Value:
      !Join [
        ",",
        [!Ref PublicSubnet, !If [DoAz2, !Ref PublicSubnet2, !Ref "AWS::NoValue"], !If [DoAz3, !Ref PublicSubnet3, !Ref "AWS::NoValue"]]
      ]
  PrivateSubnetIds:
    Description: Subnet IDs of the private subnets.
    Value:
      !Join [
        ",",
        [!Ref PrivateSubnet, !If [DoAz2, !Ref PrivateSubnet2, !Ref "AWS::NoValue"], !If [DoAz3, !Ref PrivateSubnet3, !Ref "AWS::NoValue"]]
      ]
  PublicRouteTableId:
    Description: Public Route table ID
    Value: !Ref PublicRouteTable
  PrivateRouteTableIds:
    Description: Private Route table IDs
    Value:
      !Join [
        ",",
        [
          !Join ["=", [
            !Select [0, "Fn::GetAZs": !Ref "AWS::Region"],
            !Ref PrivateRouteTable
          ]],
          !If [DoAz2,
               !Join ["=", [!Select [1, "Fn::GetAZs": !Ref "AWS::Region"], !Ref PrivateRouteTable2]],
               !Ref "AWS::NoValue"
          ],
          !If [DoAz3,
               !Join ["=", [!Select [2, "Fn::GetAZs": !Ref "AWS::Region"], !Ref PrivateRouteTable3]],
               !Ref "AWS::NoValue"
          ]
        ]
      ]

在本地区域创建子网

在为 OpenShift Container Platform 集群中的边缘计算节点配置机器集之前,必须在本地区域中创建子网。对于要向其部署计算节点的每个本地区域,请完成以下步骤。

您可以使用提供的 CloudFormation 模板并创建一个 CloudFormation 堆栈。然后,您可以使用此堆栈自定义配置子网。

如果您不使用提供的 CloudFormation 模板来创建 AWS 基础设施,则必须查看提供的信息并手动创建基础设施。如果您的集群未正确初始化,您可能需要联系 Red Hat 支持并提供您的安装日志。

先决条件
  • 您已配置 AWS 账户。

  • 您通过运行aws configure将 AWS 密钥和区域添加到本地 AWS 配置文件中。

  • 您已加入本地区域组。

步骤
  1. 转到名为“VPC 子网的 CloudFormation 模板”的文档部分,然后复制模板中的语法。将复制的模板语法保存为 YAML 文件到本地系统。此模板描述了集群所需的 VPC。

  2. 运行以下命令部署 CloudFormation 模板,该模板创建一个表示 VPC 的 AWS 资源堆栈

    $ aws cloudformation create-stack --stack-name <stack_name> \(1)
      --region ${CLUSTER_REGION} \
      --template-body file://<template>.yaml \(2)
      --parameters \
        ParameterKey=VpcId,ParameterValue="${VPC_ID}" \(3)
        ParameterKey=ClusterName,ParameterValue="${CLUSTER_NAME}" \(4)
        ParameterKey=ZoneName,ParameterValue="${ZONE_NAME}" \(5)
        ParameterKey=PublicRouteTableId,ParameterValue="${ROUTE_TABLE_PUB}" \(6)
        ParameterKey=PublicSubnetCidr,ParameterValue="${SUBNET_CIDR_PUB}" \(7)
        ParameterKey=PrivateRouteTableId,ParameterValue="${ROUTE_TABLE_PVT}" \(8)
        ParameterKey=PrivateSubnetCidr,ParameterValue="${SUBNET_CIDR_PVT}" (9)
    1 <stack_name> 是 CloudFormation 堆栈的名称,例如cluster-wl-<local_zone_shortname>。如果您删除集群,则需要此堆栈的名称。
    2 <template> 是您保存的 CloudFormation 模板 YAML 文件的相对路径和名称。
    3 ${VPC_ID} 是 VPC ID,它是 VPC 的 CloudFormation 模板输出中的VpcID值。
    4 ${ZONE_NAME} 是用于创建子网的本地区域名称的值。
    5 ${CLUSTER_NAME} 是用作新 AWS 资源名称前缀的**ClusterName**的值。
    6 ${SUBNET_CIDR_PUB} 是用于创建公共子网的有效 CIDR 块。此块必须是 VPC CIDR 块VpcCidr的一部分。
    7 ${ROUTE_TABLE_PVT} 是从 VPC 的 CloudFormation 堆栈输出中提取的**PrivateRouteTableId**。
    8 ${SUBNET_CIDR_PVT} 是用于创建私有子网的有效 CIDR 块。此块必须是 VPC CIDR 块VpcCidr的一部分。
示例输出
arn:aws:cloudformation:us-east-1:123456789012:stack/<stack_name>/dbedae40-820e-11eb-2fd3-12a48460849f
验证
  • 运行以下命令确认模板组件是否存在

    $ aws cloudformation describe-stacks --stack-name <stack_name>

    StackStatus 显示CREATE_COMPLETE 后,输出将显示以下参数的值。请确保将这些参数值提供给您运行以创建集群的其他 CloudFormation 模板。

    PublicSubnetId

    CloudFormation 堆栈创建的公共子网的 ID。

    PrivateSubnetId

    CloudFormation 堆栈创建的私有子网的 ID。

VPC 子网的 CloudFormation 模板

您可以使用以下 CloudFormation 模板在本地区域基础设施上的区域中部署私有和公共子网。

VPC 子网的 CloudFormation 模板
AWSTemplateFormatVersion: 2010-09-09
Description: Template for Best Practice Subnets (Public and Private)

Parameters:
  VpcId:
    Description: VPC ID that comprises all the target subnets.
    Type: String
    AllowedPattern: ^(?:(?:vpc)(?:-[a-zA-Z0-9]+)?\b|(?:[0-9]{1,3}\.){3}[0-9]{1,3})$
    ConstraintDescription: VPC ID must be with valid name, starting with vpc-.*.
  ClusterName:
    Description: Cluster name or prefix name to prepend the Name tag for each subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: ClusterName parameter must be specified.
  ZoneName:
    Description: Zone Name to create the subnets, such as us-west-2-lax-1a.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: ZoneName parameter must be specified.
  PublicRouteTableId:
    Description: Public Route Table ID to associate the public subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: PublicRouteTableId parameter must be specified.
  PublicSubnetCidr:
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24.
    Default: 10.0.128.0/20
    Description: CIDR block for public subnet.
    Type: String
  PrivateRouteTableId:
    Description: Private Route Table ID to associate the private subnet.
    Type: String
    AllowedPattern: ".+"
    ConstraintDescription: PrivateRouteTableId parameter must be specified.
  PrivateSubnetCidr:
    AllowedPattern: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(1[6-9]|2[0-4]))$
    ConstraintDescription: CIDR block parameter must be in the form x.x.x.x/16-24.
    Default: 10.0.128.0/20
    Description: CIDR block for private subnet.
    Type: String


Resources:
  PublicSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VpcId
      CidrBlock: !Ref PublicSubnetCidr
      AvailabilityZone: !Ref ZoneName
      Tags:
      - Key: Name
        Value: !Join ['-', [!Ref ClusterName, "public", !Ref ZoneName]]

  PublicSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PublicSubnet
      RouteTableId: !Ref PublicRouteTableId

  PrivateSubnet:
    Type: "AWS::EC2::Subnet"
    Properties:
      VpcId: !Ref VpcId
      CidrBlock: !Ref PrivateSubnetCidr
      AvailabilityZone: !Ref ZoneName
      Tags:
      - Key: Name
        Value: !Join ['-', [!Ref ClusterName, "private", !Ref ZoneName]]

  PrivateSubnetRouteTableAssociation:
    Type: "AWS::EC2::SubnetRouteTableAssociation"
    Properties:
      SubnetId: !Ref PrivateSubnet
      RouteTableId: !Ref PrivateRouteTableId

Outputs:
  PublicSubnetId:
    Description: Subnet ID of the public subnets.
    Value:
      !Join ["", [!Ref PublicSubnet]]

  PrivateSubnetId:
    Description: Subnet ID of the private subnets.
    Value:
      !Join ["", [!Ref PrivateSubnet]]
其他资源

修改安装配置文件以使用 AWS 本地区域子网

修改您的install-config.yaml文件以包含本地区域子网。

先决条件
  • 您已使用“在本地区域中创建子网”过程创建了子网。

  • 您已使用“创建安装配置文件”过程创建install-config.yaml文件。

步骤
  • 通过在platform.aws.subnets参数中指定本地区域子网来修改install-config.yaml配置文件。

    包含本地区域子网的示例安装配置文件
    # ...
    platform:
      aws:
        region: us-west-2
        subnets: (1)
        - publicSubnetId-1
        - publicSubnetId-2
        - publicSubnetId-3
        - privateSubnetId-1
        - privateSubnetId-2
        - privateSubnetId-3
        - publicSubnetId-LocalZone-1
    # ...
    1 在可用区和本地区域中创建的子网 ID 列表。
其他资源
后续步骤

可选:AWS 安全组

默认情况下,安装程序会创建并附加安全组以控制平面和计算机器。与默认安全组关联的规则无法修改。

但是,您可以应用与现有 VPC 关联的其他现有 AWS 安全组到控制平面和计算机器。应用自定义安全组可以帮助您满足组织的安全需求,在这种情况下,您需要控制这些机器的入站或出站流量。

作为安装过程的一部分,您可以在部署集群之前修改install-config.yaml文件来应用自定义安全组。

有关更多信息,请参见“边缘计算池和 AWS 本地区域”。

可选:为边缘计算节点分配公共 IP 地址

如果您的工作负载需要在本地区域基础设施上的公共子网中部署边缘计算节点,则可以在安装集群时配置机器集清单。

AWS 本地区域基础设施访问指定区域中的网络流量,因此应用程序可以在为更靠近该区域的最终用户提供服务时利用更低的延迟。

在私有子网中部署计算节点的默认设置可能无法满足您的需求,因此当您想要对基础设施进行更多自定义时,请考虑在公共子网中创建边缘计算节点。

默认情况下,OpenShift Container Platform 会在私有子网中部署计算节点。为了获得最佳性能,请考虑将计算节点放置在其公共 IP 地址附加到子网的子网中。

您必须创建额外的安全组,但请确保只有在真正需要时才通过互联网打开这些组的规则。

步骤
  1. 切换到包含安装程序的目录并生成清单文件。确保安装清单在openshiftmanifests目录级别创建。

    $ ./openshift-install create manifests --dir <installation_directory>
  2. 编辑安装程序为本地区域生成的机器集清单,以便在公共子网中部署该清单。为spec.template.spec.providerSpec.value.publicIP参数指定true

    在本地区域快速安装集群的示例机器集清单配置
    spec:
      template:
        spec:
          providerSpec:
            value:
              publicIp: true
              subnet:
                filters:
                  - name: tag:Name
                    values:
                      - ${INFRA_ID}-public-${ZONE_NAME}
    在具有本地区域子网的现有 VPC 中安装集群的示例机器集清单配置
    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    metadata:
      name: <infrastructure_id>-edge-<zone>
      namespace: openshift-machine-api
    spec:
      template:
        spec:
          providerSpec:
            value:
              publicIp: true

部署集群

您可以在兼容的云平台上安装 OpenShift Container Platform。

您只能在初始安装期间运行安装程序的create cluster命令一次。

先决条件
  • 您已配置了一个帐户,该帐户与托管您的集群的云平台相关联。

  • 您拥有 OpenShift Container Platform 安装程序和集群的拉取密钥。

  • 您已验证主机上的云提供商帐户具有部署集群的正确权限。权限不正确的帐户会导致安装过程失败,并显示一条错误消息,其中显示缺少的权限。

步骤
  1. 切换到包含安装程序的目录并初始化集群部署

    $ ./openshift-install create cluster --dir <installation_directory> \ (1)
        --log-level=info (2)
    
    1 对于<installation_directory>,请指定自定义./install-config.yaml文件的路径。
    2 要查看不同的安装详细信息,请指定warndebugerror代替info
  2. 可选:从用于安装集群的 IAM 帐户中删除或禁用AdministratorAccess策略。

    只有在安装期间才需要AdministratorAccess策略提供的提升的权限。

验证

集群部署成功完成后

  • 终端将显示访问集群的指示,包括指向 Web 控制台的链接和kubeadmin用户的凭据。

  • 凭据信息也会输出到<installation_directory>/.openshift_install.log

请勿删除安装程序或安装程序创建的文件。两者都是删除集群所必需的。

示例输出
...
INFO Install complete!
INFO To access the cluster as the system:admin user when using 'oc', run 'export KUBECONFIG=/home/myuser/install_dir/auth/kubeconfig'
INFO Access the OpenShift web-console here: https://console-openshift-console.apps.mycluster.example.com
INFO Login to the console with user: "kubeadmin", and password: "password"
INFO Time elapsed: 36m22s
  • 安装程序生成的 Ignition 配置文件包含在 24 小时后过期的证书,届时将续订这些证书。如果在续订证书之前关闭集群,并且在 24 小时后重新启动集群,则集群会自动恢复过期的证书。例外情况是,您必须手动批准挂起的node-bootstrapper证书签名请求 (CSR) 以恢复 kubelet 证书。有关更多信息,请参阅有关“从过期的控制平面证书中恢复”的文档。

  • 建议您在生成 Ignition 配置文件后 12 小时内使用它们,因为在安装集群后 16 到 22 小时之间会进行 24 小时证书轮换。通过在 12 小时内使用 Ignition 配置文件,如果证书更新在安装期间运行,您可以避免安装失败。

验证已部署集群的状态

验证您的 OpenShift Container Platform 是否已成功部署在 AWS 本地区域。

使用 CLI 登录集群

您可以通过导出集群kubeconfig文件以默认系统用户身份登录到您的集群。kubeconfig文件包含有关集群的信息,CLI 使用这些信息将客户端连接到正确的集群和 API 服务器。该文件特定于某个集群,并在 OpenShift Container Platform 安装期间创建。

先决条件
  • 您已部署了一个 OpenShift Container Platform 集群。

  • 您已安装oc CLI。

步骤
  1. 导出kubeadmin凭据

    $ export KUBECONFIG=<installation_directory>/auth/kubeconfig (1)
    1 对于<installation_directory>,请指定您存储安装文件的目录的路径。
  2. 验证您可以使用导出的配置成功运行oc命令

    $ oc whoami
    示例输出
    system:admin

使用 Web 控制台登录集群

在 OpenShift Container Platform 安装之后,默认情况下存在kubeadmin用户。您可以使用 OpenShift Container Platform Web 控制台以kubeadmin用户身份登录到您的集群。

先决条件
  • 您可以访问安装主机。

  • 您已完成集群安装,并且所有集群运算符都可用。

步骤
  1. 从安装主机上的kubeadmin-password文件中获取kubeadmin用户的密码

    $ cat <installation_directory>/auth/kubeadmin-password

    或者,您可以从安装主机上的<installation_directory>/.openshift_install.log日志文件中获取kubeadmin密码。

  2. 列出 OpenShift Container Platform Web 控制台路由

    $ oc get routes -n openshift-console | grep 'console-openshift'

    或者,您可以从安装主机上的<installation_directory>/.openshift_install.log日志文件中获取 OpenShift Container Platform 路由。

    示例输出
    console     console-openshift-console.apps.<cluster_name>.<base_domain>            console     https   reencrypt/Redirect   None
  3. 在 Web 浏览器中导航到前面命令输出中详细说明的路由,并以kubeadmin用户身份登录。

其他资源

验证使用边缘计算池创建的节点

安装使用 AWS 本地区域基础设施的集群后,请检查安装期间创建的机器集创建的机器的状态。

  1. 要检查从您添加到install-config.yaml文件的子网创建的机器集,请运行以下命令

    $ oc get machineset -n openshift-machine-api
    示例输出
    NAME                                  DESIRED   CURRENT   READY   AVAILABLE   AGE
    cluster-7xw5g-edge-us-east-1-nyc-1a   1         1         1       1           3h4m
    cluster-7xw5g-worker-us-east-1a       1         1         1       1           3h4m
    cluster-7xw5g-worker-us-east-1b       1         1         1       1           3h4m
    cluster-7xw5g-worker-us-east-1c       1         1         1       1           3h4m
  2. 要检查从机器集创建的机器,请运行以下命令

    $ oc get machines -n openshift-machine-api
    示例输出
    NAME                                        PHASE     TYPE          REGION      ZONE               AGE
    cluster-7xw5g-edge-us-east-1-nyc-1a-wbclh   Running   c5d.2xlarge   us-east-1   us-east-1-nyc-1a   3h
    cluster-7xw5g-master-0                      Running   m6i.xlarge    us-east-1   us-east-1a         3h4m
    cluster-7xw5g-master-1                      Running   m6i.xlarge    us-east-1   us-east-1b         3h4m
    cluster-7xw5g-master-2                      Running   m6i.xlarge    us-east-1   us-east-1c         3h4m
    cluster-7xw5g-worker-us-east-1a-rtp45       Running   m6i.xlarge    us-east-1   us-east-1a         3h
    cluster-7xw5g-worker-us-east-1b-glm7c       Running   m6i.xlarge    us-east-1   us-east-1b         3h
    cluster-7xw5g-worker-us-east-1c-qfvz4       Running   m6i.xlarge    us-east-1   us-east-1c         3h
  3. 要检查具有边缘角色的节点,请运行以下命令

    $ oc get nodes -l node-role.kubernetes.io/edge
    示例输出
    NAME                           STATUS   ROLES         AGE    VERSION
    ip-10-0-207-188.ec2.internal   Ready    edge,worker   172m   v1.25.2+d2e245f
后续步骤