16.6. 在边缘和基于云的 AWS 计算资源上调度工作负载
当您将 AWS VPC 集群扩展到 Outpost 时,Outpost 使用边缘计算节点,并且 VPC 使用基于云的计算节点。以下负载均衡器注意事项适用于扩展到 Outpost 中的 AWS VPC 集群:
- Outposts 无法运行 AWS Network Load Balancers 或 AWS Classic Load Balancers,但扩展到 Outpost 的 VPC 集群的 Classic Load Balancer 可以附加到 Outpost 边缘计算节点。如需更多信息,请参阅在 AWS VPC 集群中使用 AWS Classic Load Balancers 扩展到 Outpost。
- 要在 Outpost 实例上运行负载均衡器,您必须使用 AWS Application Load Balancer。您可以使用 AWS Load Balancer Operator 部署 AWS Load Balancer Controller 的实例。控制器为 Kubernetes Ingress 资源置备 AWS Application Load Balancers。如需更多信息,请参阅在 AWS VPC 集群中使用 AWS Load Balancer Operator 扩展到 Outpost。
AWS Outposts 基础架构无法运行 AWS Classic Load Balancers,但 AWS VPC 集群中的 Classic Load Balancers 可以在 Outpost 中目标边缘计算节点(如果边缘和基于云的子网位于同一可用区中)。因此,VPC 集群上的 Classic Load Balancers 可能会在其中一个节点类型上调度 pod。
在边缘计算节点和基于云的计算节点上调度工作负载可能会带来延迟。如果要防止 VPC 集群中的 Classic Load Balancer 针对 Outpost 边缘计算节点,您可以将标签应用到基于云的计算节点,并将 Classic Load Balancer 配置为仅在带有应用的标签的节点上调度。
如果您不需要防止 VPC 集群中的 Classic Load Balancer 以 Outpost 边缘计算节点为目标,则不需要完成这些步骤。
先决条件
- 您已将 AWS VPC 集群扩展到 Outpost。
-
您可以使用具有
cluster-admin权限的账户访问集群。 -
已安装 OpenShift CLI(
oc)。 - 您已在 Outpost 中创建用户工作负载,其容限与边缘计算机器的污点匹配。
流程
可选:运行以下命令来验证边缘计算节点是否具有
location=outposts标签,并验证输出是否只包含 Outpost 中的边缘计算节点:oc get nodes -l location=outposts
$ oc get nodes -l location=outpostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,使用键值对标记 VPC 集群中的基于云的计算节点:
for NODE in $(oc get node -l node-role.kubernetes.io/worker --no-headers | grep -v outposts | awk '{print$1}'); do oc label node $NODE <key_name>=<value>; done$ for NODE in $(oc get node -l node-role.kubernetes.io/worker --no-headers | grep -v outposts | awk '{print$1}'); do oc label node $NODE <key_name>=<value>; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
<key_name>=<value>是您要用来区分基于云的计算节点的标签。输出示例
node1.example.com labeled node2.example.com labeled node3.example.com labeled
node1.example.com labeled node2.example.com labeled node3.example.com labeledCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:运行以下命令来验证基于云的计算节点是否具有指定的标签,并确认输出是否包含 VPC 集群中的所有基于云的计算节点:
oc get nodes -l <key_name>=<value>
$ oc get nodes -l <key_name>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION node1.example.com Ready worker 7h v1.28.5 node2.example.com Ready worker 7h v1.28.5 node3.example.com Ready worker 7h v1.28.5
NAME STATUS ROLES AGE VERSION node1.example.com Ready worker 7h v1.28.5 node2.example.com Ready worker 7h v1.28.5 node3.example.com Ready worker 7h v1.28.5Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在
Service清单的annotations字段中添加基于云的子网信息来配置 Classic Load Balancer 服务:服务配置示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来创建
ServiceCR:oc create -f <file_name>.yaml
$ oc create -f <file_name>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
运行以下命令,验证
service资源的状态,以显示置备的 AWS Load Balancer(ALB)的主机:HOST=$(oc get service <application_name> -n <application_namespace> --template='{{(index .status.loadBalancer.ingress 0).hostname}}')$ HOST=$(oc get service <application_name> -n <application_namespace> --template='{{(index .status.loadBalancer.ingress 0).hostname}}')Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令,验证置备的 Classic Load Balancer 主机的状态:
curl $HOST
$ curl $HOSTCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 AWS 控制台中,验证是否只有标记的实例显示为负载均衡器的目标实例。
您可以配置 AWS Load Balancer Operator,以便在 AWS VPC 集群中置备 AWS Application Load Balancer。AWS Outposts 不支持 AWS Network Load Balancers。因此,AWS Load Balancer Operator 无法在 Outpost 中置备 Network Load Balancers。
您可以在云子网或 Outpost 子网中创建 AWS Application Load Balancer。云中的 Application Load Balancer 可以附加到基于云的计算节点,而 Outpost 中的 Application Load Balancer 可以附加到边缘计算节点。您必须使用 Outpost 子网或 VPC 子网来注解 Ingress 资源,但不能同时注解两者。
先决条件
- 您已将 AWS VPC 集群扩展到 Outpost。
-
已安装 OpenShift CLI(
oc)。 - 已安装 AWS Load Balancer Operator 并创建了 AWS Load Balancer Controller。
流程
将
Ingress资源配置为使用指定的子网:Ingress资源配置示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定要使用的子网。
- 要在 Outpost 中使用 Application Load Balancer,请指定 Outpost 子网 ID。
- 要在云中使用 Application Load Balancer,您必须在不同的可用区中指定至少两个子网。