16.3. 为您的 Outpost 配置网络
要将 VPC 集群扩展到 Outpost 中,您必须完成以下网络配置任务:
- 更改集群网络 MTU。
- 在 Outpost 中创建子网。
16.3.1. 更改集群网络 MTU 以支持 AWS Outposts 复制链接链接已复制到粘贴板!
在安装过程中,集群网络的最大传输单元 (MTU) 会根据集群中节点的主网络接口的 MTU 自动检测到。您可能需要减少集群网络的 MTU 值来支持 AWS Outposts 子网。
您无法在 MTU 迁移过程中回滚节点的 MTU 值,但您可以在 MTU 迁移过程完成后回滚值。
当 MTU 更新推出时,集群中的迁移具有破坏性且节点可能会临时不可用。
有关迁移过程的详情,包括重要的服务中断注意事项,请参阅此流程的其他资源中的"为集群网络分配 MTU"。
先决条件
-
已安装 OpenShift CLI(
oc
)。 -
您可以使用具有
cluster-admin
权限的账户访问集群。 已为集群识别目标 MTU。
-
OVN-Kubernetes 网络插件的 MTU 必须设置为比集群中的最低硬件 MTU 值小
100
。 -
OpenShift SDN 网络插件的 MTU 必须设置为比集群中的最低硬件 MTU 值小
50
。
-
OVN-Kubernetes 网络插件的 MTU 必须设置为比集群中的最低硬件 MTU 值小
- 如果您的节点是物理计算机,请确保集群网络和连接的网络交换机支持巨型帧。
- 如果您的节点是虚拟机(VM),请确保虚拟机监控程序和连接的网络交换机支持巨型帧。
流程
要获得集群网络的当前 MTU,请输入以下命令:
oc describe network.config cluster
$ oc describe network.config cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要开始 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> } } } } }'
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": <overlay_from>, "to": <overlay_to> } , "machine": { "to" : <machine_to> } } } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
<overlay_from>
- 指定当前的集群网络 MTU 值。
<overlay_to>
-
指定集群网络的目标 MTU。这个值相对于
<machine_to>
的值设置。对于 OVN-Kubernetes,这个值必须比<machine_to>
的值小100
。对于 OpenShift SDN,这个值必须比<machine_to>
的值小50
。 <machine_to>
- 指定底层主机网络上的主网络接口的 MTU。
减少集群 MTU 的示例
oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 1000 } , "machine": { "to" : 1100} } } } }'
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": { "mtu": { "network": { "from": 1400, "to": 1000 } , "machine": { "to" : 1100} } } } }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当 Machine Config Operator 更新每个机器配置池中的机器时,它会逐一重启每个节点。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
oc get machineconfigpools
$ oc get machineconfigpools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true
、UPDATING=false
、DEGRADED=false
。注意默认情况下,Machine Config Operator 一次更新每个池中的一个机器,从而导致迁移总时间随着集群大小而增加。
确认主机上新机器配置的状态:
要列出机器配置状态和应用的机器配置名称,请输入以下命令:
oc describe node | egrep "hostname|machineconfig"
$ oc describe node | egrep "hostname|machineconfig"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证以下语句是否正确:
-
machineconfiguration.openshift.io/state
字段的值为Done
。 -
machineconfiguration.openshift.io/currentConfig
字段的值等于machineconfiguration.openshift.io/desiredConfig
字段的值。
-
要确认机器配置正确,请输入以下命令:
oc get machineconfig <config_name> -o yaml | grep ExecStart
$ oc get machineconfig <config_name> -o yaml | grep ExecStart
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这里的
<config_name>
是machineconfiguration.openshift.io/currentConfig
字段中机器配置的名称。机器配置必须包括以下对 systemd 配置的更新:
ExecStart=/usr/local/bin/mtu-migration.sh
ExecStart=/usr/local/bin/mtu-migration.sh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
完成插件的 MTU 迁移。在这两个示例命令中,
<mtu>
指定了您使用<overlay_to>
指定的新集群网络 MTU。要完成 MTU 迁移,请为 OVN-Kubernetes 网络插件输入以下命令:
oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "ovnKubernetesConfig": { "mtu": <mtu> }}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要完成 MTU 迁移,请为 OpenShift SDN 网络插件输入以下命令:
oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "openshiftSDNConfig": { "mtu": <mtu> }}}}'
$ oc patch Network.operator.openshift.io cluster --type=merge --patch \ '{"spec": { "migration": null, "defaultNetwork":{ "openshiftSDNConfig": { "mtu": <mtu> }}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
最终调整 MTU 迁移后,每个机器配置池节点都会逐个重启一个。您必须等到所有节点都已更新。输入以下命令检查机器配置池状态:
oc get machineconfigpools
$ oc get machineconfigpools
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 成功更新的节点具有以下状态:
UPDATED=true
、UPDATING=false
、DEGRADED=false
。
验证
输入以下命令验证集群中的节点是否使用您指定的 MTU:
oc describe network.config cluster
$ oc describe network.config cluster
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
16.3.2. 为 AWS 边缘计算服务创建子网 复制链接链接已复制到粘贴板!
在 OpenShift Container Platform 集群中为边缘计算节点配置机器集前,您必须在 AWS Outposts 中创建子网。
您可以使用提供的 CloudFormation 模板并创建 CloudFormation 堆栈。然后,您可以使用此堆栈自定义置备子网。
如果不使用提供的 CloudFormation 模板来创建 AWS 基础架构,您必须检查提供的信息并手动创建基础架构。如果集群没有正确初始化,您可能需要联系红帽支持并提供您的安装日志。
先决条件
- 已配置了一个 AWS 帐户。
-
您可以通过运行
aws configure
,将 AWS 密钥和区域添加到本地 AWS 配置集中。 - 您已从 OpenShift Container Platform 集群、Outpost 和 AWS 帐户获取环境所需的信息。
流程
- 进入名为"CloudFormation template for the VPC 子网"的文档部分,并从模板中复制语法。将复制的模板语法保存为本地系统中的 YAML 文件。此模板描述了集群所需的 VPC。
运行以下命令来部署 CloudFormation 模板,它会创建一个代表 VPC 的 AWS 资源堆栈:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
<stack_name>
是 CloudFormation 堆栈的名称,如cluster-<outpost_name>
。- 2
<template>
是相对路径,以及保存的 CloudFormation 模板 YAML 文件的名称。- 3
${VPC_ID}
是 VPC ID,它是 VPC 模板输出中的VpcID
值。- 4
${CLUSTER_NAME}
是 ClusterName 的值,用作新 AWS 资源名称的前缀。- 5
${ZONE_NAME}
是创建子网的 AWS Outposts 名称的值。- 6
${ROUTE_TABLE_PUB}
是${VPC_ID}
中创建的公共路由表 ID,用于关联 Outposts 上的公共子网。指定用于关联此堆栈创建的 Outpost 子网的公共路由表。- 7
${SUBNET_CIDR_PUB}
是一个有效的 CIDR 块,用于创建公共子网。这个块必须是 VPC CIDR 块VpcCidr
的一部分。- 8
${ROUTE_TABLE_PVT}
是${VPC_ID}
中创建的私有路由表 ID,用于关联 Outposts 上的专用子网。指定用于关联此堆栈创建的 Outpost 子网的专用路由表。- 9
${SUBNET_CIDR_PVT}
是一个有效的 CIDR 块,用于创建专用子网。这个块必须是 VPC CIDR 块VpcCidr
的一部分。- 10
${OUTPOST_ARN}
是 Outpost 的 Amazon 资源名称 (ARN)。
输出示例
arn:aws:cloudformation:us-east-1:123456789012:stack/<stack_name>/dbedae40-820e-11eb-2fd3-12a48460849f
arn:aws:cloudformation:us-east-1:123456789012:stack/<stack_name>/dbedae40-820e-11eb-2fd3-12a48460849f
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令确认模板组件已存在:
aws cloudformation describe-stacks --stack-name <stack_name>
$ aws cloudformation describe-stacks --stack-name <stack_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
StackStatus
显示CREATE_COMPLETE
后,输出会显示以下参数的值:PublicSubnetId
由 CloudFormation 堆栈创建的公共子网的 ID。
PrivateSubnetId
由 CloudFormation 堆栈创建的专用子网的 ID。
确保将这些参数值提供给您为集群创建的其他 CloudFormation 模板。
16.3.3. VPC 子网的 CloudFormation 模板 复制链接链接已复制到粘贴板!
您可以使用以下 CloudFormation 模板来部署 Outpost 子网。