16.6. 在边缘和基于云的 AWS 计算资源上调度工作负载


当您将 AWS VPC 集群扩展到 Outpost 时,Outpost 使用边缘计算节点,并且 VPC 使用基于云的计算节点。以下负载均衡器注意事项适用于扩展到 Outpost 中的 AWS VPC 集群:

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 中创建用户工作负载,其容限与边缘计算机器的污点匹配。

流程

  1. 可选:运行以下命令来验证边缘计算节点是否具有 location=outposts 标签,并验证输出是否只包含 Outpost 中的边缘计算节点:

    $ oc get nodes -l location=outposts
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,使用键值对标记 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
    Copy to Clipboard Toggle word wrap

    其中 <key_name>=<value> 是您要用来区分基于云的计算节点的标签。

    输出示例

    node1.example.com labeled
    node2.example.com labeled
    node3.example.com labeled
    Copy to Clipboard Toggle word wrap

  3. 可选:运行以下命令来验证基于云的计算节点是否具有指定的标签,并确认输出是否包含 VPC 集群中的所有基于云的计算节点:

    $ oc get nodes -l <key_name>=<value>
    Copy to Clipboard Toggle word wrap

    输出示例

    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
    Copy to Clipboard Toggle word wrap

  4. 通过在 Service 清单的 annotations 字段中添加基于云的子网信息来配置 Classic Load Balancer 服务:

    服务配置示例

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: <application_name>
      name: <application_name>
      namespace: <application_namespace>
      annotations:
        service.beta.kubernetes.io/aws-load-balancer-subnets: <aws_subnet> 
    1
    
        service.beta.kubernetes.io/aws-load-balancer-target-node-labels: <key_name>=<value> 
    2
    
    spec:
      ports:
      - name: http
        port: 80
        protocol: TCP
        targetPort: 8080
      selector:
        app: <application_name>
      type: LoadBalancer
    Copy to Clipboard Toggle word wrap

    1
    指定 AWS VPC 集群的子网 ID。
    2
    在节点标签中指定与密钥对匹配的键值对。
  5. 运行以下命令来创建 Service CR:

    $ oc create -f <file_name>.yaml
    Copy to Clipboard Toggle word wrap

验证

  1. 运行以下命令,验证 service 资源的状态,以显示置备的 AWS Load Balancer(ALB)的主机:

    $ HOST=$(oc get service <application_name> -n <application_namespace> --template='{{(index .status.loadBalancer.ingress 0).hostname}}')
    Copy to Clipboard Toggle word wrap
  2. 运行以下命令,验证置备的 Classic Load Balancer 主机的状态:

    $ curl $HOST
    Copy to Clipboard Toggle word wrap
  3. 在 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 资源配置示例

    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: <application_name>
      annotations:
        alb.ingress.kubernetes.io/subnets: <subnet_id> 
    1
    
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: <application_name>
                    port:
                      number: 80
    Copy to Clipboard Toggle word wrap

    1
    指定要使用的子网。
    • 要在 Outpost 中使用 Application Load Balancer,请指定 Outpost 子网 ID。
    • 要在云中使用 Application Load Balancer,您必须在不同的可用区中指定至少两个子网。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat