8.2. 更改集群网络 MTU 以支持本地区域或 Wavelength 区域
您可能需要更改集群网络的最大传输单元 (MTU)值,以便集群基础架构可以支持 Local Zones 或 Wavelength 区域子网。
8.2.1. 关于集群 MTU 复制链接链接已复制到粘贴板!
在安装过程中,集群网络 MTU 根据集群节点的主网络接口 MTU 自动设置。您通常不需要覆盖检测到的 MTU。
您可能希望因为以下原因之一更改集群网络的 MTU:
- 集群安装过程中检测到的 MTU 不正确。
- 集群基础架构现在需要不同的 MTU,如添加需要不同 MTU 的节点来获得最佳性能
只有 OVN-Kubernetes 网络插件支持更改 MTU 值。
8.2.1.1. 服务中断注意事项 复制链接链接已复制到粘贴板!
当您为集群启动 MTU 更改时,以下效果可能会影响服务可用性:
- 至少需要两个滚动重启才能完成迁移到新的 MTU。在此过程中,一些节点在重启时不可用。
- 部署到集群的特定应用程序带有较短的超时间隔,超过绝对 TCP 超时间隔可能会在 MTU 更改过程中造成中断。
8.2.1.2. MTU 值选择 复制链接链接已复制到粘贴板!
在规划 MTU 迁移时,需要考虑两个相关但不同的 MTU 值。
- Hardware MTU :此 MTU 值根据您的网络基础架构的具体设置。
-
Cluster network MTU :此 MTU 值始终小于您的硬件 MTU,以考虑集群网络覆盖开销。具体开销由您的网络插件决定。对于 OVN-Kubernetes,开销为
100字节。
如果您的集群为不同的节点需要不同的 MTU 值,则必须从集群中任何节点使用的最低 MTU 值中减去网络插件的开销值。例如,如果集群中的某些节点的 MTU 为 9001,而某些节点的 MTU 为 1500,则必须将此值设置为 1400。
为了避免选择节点无法接受的 MTU 值,请使用 ip -d link 命令验证网络接口接受的最大 MTU 值 (maxmtu)。
8.2.1.3. 迁移过程如何工作 复制链接链接已复制到粘贴板!
下表对迁移过程进行了概述,它分为操作中的用户发起的步骤,以及在响应过程中迁移过程要执行的操作。
| 用户发起的步骤 | OpenShift Container Platform 活动 |
|---|---|
| 在 Cluster Network Operator 配置中设置以下值:
| Cluster Network Operator(CNO) :确认每个字段都设置为有效的值。
如果提供的值有效,CNO 会生成一个新的临时配置,它将集群网络集的 MTU 设置为 Machine Config Operator(MCO) :执行集群中每个节点的滚动重启。 |
| 重新配置集群中节点的主网络接口 MTU。您可以使用以下任一方法完成此操作:
| N/A |
|
在网络插件的 CNO 配置中设置 | Machine Config Operator(MCO) :使用新的 MTU 配置执行集群中每个节点的滚动重启。 |
8.2.2. 更改集群网络 MTU 复制链接链接已复制到粘贴板!
作为集群管理员,您可以增加或减少集群的最大传输单元 (MTU)。
您无法在 MTU 迁移过程中回滚节点的 MTU 值,但您可以在 MTU 迁移过程完成后回滚。
当 MTU 更新推出时,集群中的迁移具有破坏性且节点可能会临时不可用。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您可以使用具有
cluster-admin权限的账户访问集群。 -
已为集群识别目标 MTU。OVN-Kubernetes 网络插件的 MTU 必须设置为比集群中的最低硬件 MTU 值小
100。 - 如果您的节点是物理计算机,请确保集群网络和连接的网络交换机支持巨型帧。
- 如果您的节点是虚拟机(VM),请确保虚拟机监控程序和连接的网络交换机支持巨型帧。
8.2.2.1. 检查当前集群 MTU 值 复制链接链接已复制到粘贴板!
使用以下步骤获取集群网络的当前最大传输单元(MTU)。
流程
要获得集群网络的当前 MTU,请输入以下命令:
$ oc describe network.config cluster输出示例
... Status: Cluster Network: Cidr: 10.217.0.0/22 Host Prefix: 23 Cluster Network MTU: 1400 Network Type: OVNKubernetes Service Network: 10.217.4.0/23 ...
8.2.2.2. 开始 MTU 迁移 复制链接链接已复制到粘贴板!
使用以下步骤启动 MTU 迁移。
流程
要开始 MTU 迁移,请输入以下命令指定迁移配置。Machine Config Operator 在集群中执行节点的滚动重启,以准备 MTU 更改。
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'其中:
<overlay_from>- 指定当前的集群网络 MTU 值。
<overlay_to>-
指定集群网络的目标 MTU。这个值相对于
<machine_to>的值设置。对于 OVN-Kubernetes,这个值必须比<machine_to>的值小100。 <machine_to>- 指定底层主机网络上的主网络接口的 MTU。
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 9000 } , "machine": { "to" : 9100} } } } }'当 Machine Config Operator 更新每个机器配置池中的机器时,Operator 会逐一重启每个节点。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
$ oc get machineconfigpools成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。注意默认情况下,Machine Config Operator 一次更新每个池中的一个机器,从而导致迁移总时间随着集群大小而增加。
8.2.2.3. 验证机器配置 复制链接链接已复制到粘贴板!
使用以下步骤验证机器配置。
流程
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
$ oc describe node | egrep "hostname|machineconfig"输出示例
kubernetes.io/hostname=master-0 machineconfiguration.openshift.io/currentConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/desiredConfig: rendered-master-c53e221d9d24e1c8bb6ee89dd3d8ad7b machineconfiguration.openshift.io/reason: machineconfiguration.openshift.io/state: Done验证以下语句是否正确:
-
machineconfiguration.openshift.io/state字段的值为Done。 -
machineconfiguration.openshift.io/currentConfig字段的值等于machineconfiguration.openshift.io/desiredConfig字段的值。
-
要确认机器配置正确,请输入以下命令:
$ oc get machineconfig <config_name> -o yaml | grep ExecStart其中:
<config_name>-
指定来自
machineconfiguration.openshift.io/currentConfig字段的机器配置名称。
机器配置必须包括以下对 systemd 配置的更新:
ExecStart=/usr/local/bin/mtu-migration.sh
8.2.2.4. 最终完成 MTU 迁移 复制链接链接已复制到粘贴板!
使用以下步骤完成 MTU 迁移。
流程
要完成 MTU 迁移,请为 OVN-Kubernetes 网络插件输入以下命令:
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'其中:
<mtu>-
指定您使用
<overlay_to>指定的新集群网络 MTU。
最终调整 MTU 迁移后,每个机器配置池节点都会逐个重启一个。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
$ oc get machineconfigpools成功更新的节点具有以下状态:
UPDATED=true、UPDATING=false、DEGRADED=false。
验证
输入以下命令验证集群中的节点是否使用您指定的 MTU:
$ oc describe network.config cluster
8.2.3. 选择 AWS 本地区域或 Wavelength 区域 复制链接链接已复制到粘贴板!
如果您计划在 AWS Local Zones 或 Wavelength 区域中创建子网,则必须单独选择每个 zone group。
先决条件
- 已安装 AWS CLI。
- 您已决定要部署 OpenShift Container Platform 集群的 AWS 区域。
- 您已将 permissive IAM 策略附加到选择 zone 组的用户或组帐户。
流程
运行以下命令,列出 AWS 区域中可用的区域:
在 AWS 区域中列出可用 AWS 区域的命令示例
$ 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 区域中列出可用 AWS Wavelength 区域的命令示例
$ aws --region "<value_of_AWS_Region>" ec2 describe-availability-zones \ --query 'AvailabilityZones[].[{ZoneName: ZoneName, GroupName: GroupName, Status: OptInStatus}]' \ --filters Name=zone-type,Values=wavelength-zone \ --all-availability-zones根据 AWS 区域,可用区列表可能比较长。该命令返回以下字段:
ZoneName- 本地区域或 Wavelength 区域的名称。
GroupName- 组成区域的组。要选择 Region,保存名称。
Status-
Local Zones 或 Wavelength Zones 组的状态。如果状态是
not-opted-in,则需要选择GroupName,如下一步所述。
运行以下命令,选择 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 或 Wavelength 区域的名称。
如果您希望 Machine API 在远程区位置创建 Amazon EC2 实例,您必须在 Local Zones 或 Wavelength Zones 位置创建一个子网。您可以使用任何置备工具(如 Ansible 或 Terraform)在现有的 Virtual Private Cloud (VPC) 中创建子网。
您可以配置 CloudFormation 模板以满足您的要求。以下小节包括使用 CloudFormation 模板创建网络要求的步骤,将现有的 VPC 扩展为使用 AWS Local Zones 或 Wavelength 区域。
将节点扩展到 Local Zones 要求您创建以下资源:
- 2 个 VPC 子网:公共和私有。共子网与 Region 中的普通可用域的公共路由表关联。专用子网与提供的路由表 ID 关联。
将节点扩展到 Wavelength 区域需要您创建以下资源:
- 1 个与提供的 VPC ID 关联的 VPC Carrier Gateway。
- 1 个 VPC 路由表用于 Wavelength 区域,带有到 VPC Carrier Gateway 的默认路由条目。
- 2 个 VPC 子网:公共和私有。公共子网与 AWS Wavelength Zone 的公共路由表关联。专用子网与提供的路由表 ID 关联。
考虑 Wavelength 区域中的 NAT 网关限制,提供的 CloudFormation 模板支持仅将专用子网与提供的路由表 ID 关联。路由表 ID 附加到 AWS 区域中的有效 NAT 网关。
8.2.5. 仅限 Wavelength 区域:创建 VPC 载体网关 复制链接链接已复制到粘贴板!
要在 Wavelength 区域上运行的 OpenShift Container Platform 集群中使用公共子网,您必须创建载体网关,并将载体网关关联到 VPC。子网可用于部署负载均衡器或边缘计算节点。
要在 OpenShift Container Platform 集群的 Wavelength 区域位置创建边缘节点或面向互联网的负载均衡器,您必须创建以下所需的网络组件:
- 与现有 VPC 关联的载体网关。
- 列出路由条目的载波路由表。
- 与载体路由表关联的子网。
对于仅包含 Wavelength 区中的子网的 VPC 存在载体网关。
以下列表解释了 AWS Wavelength 区域位置上下文中的载体网关的功能:
- 提供 Wavelength Zone 和 carrier 网络之间的连接,其中包括来自载体网络的任何可用设备。
- 执行网络地址转换(NAT)功能,如将作为网络边框组的公共 IP 地址(从 Wavelength 区域转换为载体 IP 地址)的 IP 地址转换。这些转换功能适用于入站和出站流量。
- 授权来自位于特定位置的载体网络的入站流量。
- 授权到载波网络和互联网的出站流量。
互联网没有入站连接配置,通过载体网关到 Wavelength 区域。
您可以使用提供的 CloudFormation 模板来创建以下 AWS 资源堆栈:
- 一个载体网关,与模板中的 VPC ID 关联。
-
一个用于 Wavelength Zone 的公共路由表,名为
<ClusterName>-public-carrier。 - 以载体网关为目标的新路由表中的默认 IPv4 路由条目。
- AWS Simple Storage Service (S3) 的 VPC 网关端点。
如果不使用提供的 CloudFormation 模板来创建 AWS 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
先决条件
- 已配置了一个 AWS 帐户。
-
您可以通过运行
aws configure,将 AWS 密钥和区域添加到本地 AWS 配置集中。
流程
- 进入名为"CloudFormation template for the VPC Carrier Gateway"的文档的下一部分,然后复制 VPC Carrier Gateway 模板的 CloudFormation 模板的语法。将复制的模板语法保存为本地系统中的 YAML 文件。此模板描述了集群所需的 VPC。
运行以下命令来部署 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="${VpcId}" \3 ParameterKey=ClusterName,ParameterValue="${ClusterName}"4 - 1
<stack_name>是 CloudFormation 堆栈的名称,如clusterName-vpc-carrier-gw。如果您删除集群,则需要此堆栈的名称。- 2
<template>是相对路径,以及保存的 CloudFormation 模板 YAML 文件的名称。- 3
<VpcId>是从名为"Creating a VPC in AWS"部分创建的 CloudFormation 堆栈输出中提取的 VPC ID。- 4
<clusterName>是一个自定义值,前缀为 CloudFormation 堆栈创建的资源的前缀。您可以使用install-config.yaml配置文件的metadata.name部分中定义的相同名称。
输出示例
arn:aws:cloudformation:us-east-1:123456789012:stack/<stack_name>/dbedae40-2fd3-11eb-820e-12a48460849f
验证
运行以下命令确认 CloudFormation 模板组件已存在:
$ aws cloudformation describe-stacks --stack-name <stack_name>在
StackStatus显示CREATE_COMPLETE后,输出显示以下参数的值:确保为集群运行的其他 CloudFormation 模板提供参数值。PublicRouteTableIdCarrier 基础架构中路由表 ID。
您可以使用以下 CloudFormation 模板,在 AWS Wavelength 基础架构上部署 Carrier Gateway。
例 8.1. VPC Carrier Gateway 的 CloudFormation 模板
AWSTemplateFormatVersion: 2010-09-09
Description: Template for Creating Wavelength Zone Gateway (Carrier Gateway).
Parameters:
VpcId:
Description: VPC ID to associate the Carrier Gateway.
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 tag Name for each subnet.
Type: String
AllowedPattern: ".+"
ConstraintDescription: ClusterName parameter must be specified.
Resources:
CarrierGateway:
Type: "AWS::EC2::CarrierGateway"
Properties:
VpcId: !Ref VpcId
Tags:
- Key: Name
Value: !Join ['-', [!Ref ClusterName, "cagw"]]
PublicRouteTable:
Type: "AWS::EC2::RouteTable"
Properties:
VpcId: !Ref VpcId
Tags:
- Key: Name
Value: !Join ['-', [!Ref ClusterName, "public-carrier"]]
PublicRoute:
Type: "AWS::EC2::Route"
DependsOn: CarrierGateway
Properties:
RouteTableId: !Ref PublicRouteTable
DestinationCidrBlock: 0.0.0.0/0
CarrierGatewayId: !Ref CarrierGateway
S3Endpoint:
Type: AWS::EC2::VPCEndpoint
Properties:
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal: '*'
Action:
- '*'
Resource:
- '*'
RouteTableIds:
- !Ref PublicRouteTable
ServiceName: !Join
- ''
- - com.amazonaws.
- !Ref 'AWS::Region'
- .s3
VpcId: !Ref VpcId
Outputs:
PublicRouteTableId:
Description: Public Route table ID
Value: !Ref PublicRouteTable
8.2.7. 为 AWS 边缘计算服务创建子网 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中为边缘计算节点配置机器集前,您必须在 Local Zones 或 Wavelength Zones 中创建子网。对您要将计算节点部署到的每个 Wavelength 区完成以下步骤。
您可以使用提供的 CloudFormation 模板并创建 CloudFormation 堆栈。然后,您可以使用此堆栈自定义置备子网。
如果不使用提供的 CloudFormation 模板来创建 AWS 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
先决条件
- 已配置了一个 AWS 帐户。
-
您可以通过运行
aws configure,将 AWS 密钥和区域添加到本地 AWS 配置集中。 - 您可以选择 Local Zones 或 Wavelength Zones 组。
流程
- 进入名为"CloudFormation template for the VPC 子网"的文档部分,并从模板中复制语法。将复制的模板语法保存为本地系统中的 YAML 文件。此模板描述了集群所需的 VPC。
运行以下命令来部署 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 堆栈的名称,如用于 Local Zones 的cluster-wl-<local_zone_shortname>,用于 Wavelength Zones 的cluster-wl-<wavelength_zone_shortname>。如果您删除集群,则需要此堆栈的名称。- 2
<template>是相对路径,以及保存的 CloudFormation 模板 YAML 文件的名称。- 3
${VPC_ID}是 VPC ID,它是 VPC 模板输出中的VpcID值。- 4
${CLUSTER_NAME}是 ClusterName 的值,用作新 AWS 资源名称的前缀。- 5
${ZONE_NAME}是创建子网的 Local Zones 或 Wavelength 区域名称的值。- 6
${ROUTE_TABLE_PUB}是从 CloudFormation 模板中提取的公共路由表 Id。对于 Local Zones,从 VPC CloudFormation 堆栈中提取公共路由表。对于 Wavelength Zones,值必须从 VPC 的载体网关 CloudFormation 堆栈的输出中提取。- 7
${SUBNET_CIDR_PUB}是一个有效的 CIDR 块,用于创建公共子网。这个块必须是 VPC CIDR 块VpcCidr的一部分。- 8
${ROUTE_TABLE_PVT}是从 VPC 的 CloudFormation 堆栈的输出中提取的 PrivateRouteTableId。- 9
${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后,输出会显示以下参数的值:PublicSubnetId由 CloudFormation 堆栈创建的公共子网的 ID。
PrivateSubnetId由 CloudFormation 堆栈创建的专用子网的 ID。
确保将这些参数值提供给您为集群创建的其他 CloudFormation 模板。
8.2.8. VPC 子网的 CloudFormation 模板 复制链接链接已复制到粘贴板!
您可以使用以下 CloudFormation 模板,在 Local Zones 或 Wavelength 区域基础架构上部署私有和公共子网。
例 8.2. 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]]
8.2.9. 为 AWS Local Zones 或 Wavelength 区域节点创建机器集清单 复制链接链接已复制到粘贴板!
在 AWS Local Zones 或 Wavelength 区域中创建子网后,您可以创建机器集清单。
安装程序在集群安装过程中为 edge 机器池设置以下标签:
-
machine.openshift.io/parent-zone-name: <value_of_ParentZoneName> -
machine.openshift.io/zone-group: <value_of_ZoneGroup> -
machine.openshift.io/zone-type: <value_of_ZoneType>
以下过程详细介绍了如何创建与 edge 计算池 配置匹配的机器集 configuraton。
先决条件
- 您已在 AWS Local Zones 或 Wavelength 区域中创建子网。
流程
通过收集 AWS API 创建机器集清单时,手动保留
edge机器池标签。要完成此操作,请在命令行界面(CLI)中输入以下命令:$ aws ec2 describe-availability-zones --region <value_of_Region> \1 --query 'AvailabilityZones[].{ ZoneName: ZoneName, ParentZoneName: ParentZoneName, GroupName: GroupName, ZoneType: ZoneType}' \ --filters Name=zone-name,Values=<value_of_ZoneName> \2 --all-availability-zonesLocal Zone
us-east-1-nyc-1a的输出示例[ { "ZoneName": "us-east-1-nyc-1a", "ParentZoneName": "us-east-1f", "GroupName": "us-east-1-nyc-1", "ZoneType": "local-zone" } ]Wavelength Zone
us-east-1-wl1的输出示例[ { "ZoneName": "us-east-1-wl1-bos-wlz-1", "ParentZoneName": "us-east-1a", "GroupName": "us-east-1-wl1", "ZoneType": "wavelength-zone" } ]
8.2.9.1. AWS 上计算机器设置自定义资源的 YAML 示例 复制链接链接已复制到粘贴板!
此 YAML 示例定义了一个在 us-east-1-nyc-1a Amazon Web Services (AWS)区域中运行的计算机器集,并创建带有 node-role.kubernetes.io/edge: "" 标记的节点。
如果要在 Wavelength 区域上下文中引用示例 YAML 文件,请确保将 AWS Region 和 zone 信息替换为支持的 Wavelength Zone 值。
在本例中,<infrastructure_id> 是基础架构 ID 标签,该标签基于您在置备集群时设定的集群 ID,而 <edge> 则是要添加的节点标签。
apiVersion: machine.openshift.io/v1beta1
kind: MachineSet
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
name: <infrastructure_id>-edge-<zone>
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>-edge-<zone>
template:
metadata:
labels:
machine.openshift.io/cluster-api-cluster: <infrastructure_id>
machine.openshift.io/cluster-api-machine-role: edge
machine.openshift.io/cluster-api-machine-type: edge
machine.openshift.io/cluster-api-machineset: <infrastructure_id>-edge-<zone>
spec:
metadata:
labels:
machine.openshift.io/parent-zone-name: <value_of_ParentZoneName>
machine.openshift.io/zone-group: <value_of_GroupName>
machine.openshift.io/zone-type: <value_of_ZoneType>
node-role.kubernetes.io/edge: ""
providerSpec:
value:
ami:
id: ami-046fe691f52a953f9
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>
region: <region>
securityGroups:
- filters:
- name: tag:Name
values:
- <infrastructure_id>-node
- filters:
- name: tag:Name
values:
- <infrastructure_id>-lb
subnet:
id: <value_of_PublicSubnetIds>
publicIp: true
tags:
- name: kubernetes.io/cluster/<infrastructure_id>
value: owned
- name: <custom_tag_name>
value: <custom_tag_value>
userDataSecret:
name: worker-user-data
taints:
- key: node-role.kubernetes.io/edge
effect: NoSchedule
- 1
- 指定基于置备集群时所设置的集群 ID 的基础架构 ID。如果已安装 OpenShift CLI,您可以通过运行以下命令来获取基础架构 ID:
$ oc get -o jsonpath='{.status.infrastructureName}{"\n"}' infrastructure cluster - 2
- 指定基础架构 ID、
edge角色节点标签和区域名称。 - 3
- 指定
edge角色节点标签。 - 4
- 为 OpenShift Container Platform 节点的 AWS 区域指定有效的 Red Hat Enterprise Linux CoreOS (RHCOS) Amazon Machine Image (AMI)。如果要使用 AWS Marketplace 镜像,则必须从 AWS Marketplace 完成 OpenShift Container Platform 订阅来获取您所在地区的 AMI ID。
$ oc -n openshift-machine-api \ -o jsonpath='{.spec.template.spec.providerSpec.value.ami.id}{"\n"}' \ get machineset/<infrastructure_id>-<role>-<zone> - 5
- 指定区域名称,如
us-east-1-nyc-1a。 - 6
- 指定区域,如
us-east-1。 - 7
- 您在 AWS Local Zones 或 Wavelength 区域中创建的公共子网的 ID。完成"在 AWS 区域中创建子网"的步骤后,创建了此公共子网 ID。
- 8
- 可选:为集群指定自定义标签数据。例如,您可以通过指定
Email:admin-email@example.com的name:value对来添加管理员的电子邮件地址。注意也可以在
install-config.yml文件中在安装过程中指定自定义标签。如果install-config.yml文件和机器集包含具有相同name数据的标签,则机器集的标签值优先于install-config.yml文件中的标签值。 - 9
- 指定污点,以防止将用户工作负载调度到
edge节点上。注意在基础架构节点上添加
NoSchedule污点后,在该节点上运行的现有 DNS pod 被标记为misscheduled。您必须删除或在misscheduledDNS pod 中添加容限。
8.2.9.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 ...
运行以下命令来创建
MachineSetCR:$ oc create -f <file_name>.yaml
验证
运行以下命令,查看计算机器集列表:
$ oc get machineset -n openshift-machine-api输出示例
NAME DESIRED CURRENT READY AVAILABLE AGE agl030519-vplxk-edge-us-east-1-nyc-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 机器集不可用,请等待几分钟,然后再次运行命令。可选: 要检查边缘机器创建的节点,请运行以下命令:
$ 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