将Ingress资源隔离到边缘工作节点

如果您想将 ALB Pod 调度到边缘工作节点,则必须创建或使用一个现有的工作节点池,该池在每个区域中至少包含两个边缘工作节点。 这可确保始终存在边缘节点,以便将 ALB Pod 调度到这些节点上。

更新 ALB Pod 时,系统会部署一个新的 Pod 来替换现有的 Pod。 为了确保 ALB 在更新期间保持可用,滚动更新会每次替换一个 Pod,从而确保始终至少有一个 ALB Pod 处于活动状态。 不过,ALB Pod 设有反亲和性规则,可防止两个 ALB Pod 在同一台工作节点上运行。 如果一个区域中至少有两个边缘节点,则可以在其中一个节点上替换新的 ALB Pod,而另一个节点则继续运行。

为了确保 ALB 的高可用性,当每个区域中的边缘节点数量不足时,系统将忽略边缘节点标签,并将 ALB Pod 调度到非边缘节点上。

将 ALB 工作负载隔离到边缘节点的步骤,在经典基础设施和 VPC 基础设施中都是相同的。 不过,不同类型的 ALB 外部 IP 的命名规则各不相同。 对于部署在经典基础设施上的 ALB,其外部 IP 是一个标准 IP 地址,例如 169.46.17.2。 对于部署在 VPC 基础设施上的 ALB,其外部 IP 是一个主机名,例如 f3bee8b5-us-south.lb.appdomain.cloud

准备工作

将工作负载隔离到边缘工作节点

要将您的工作负载隔离到边缘工作节点上:

  1. 创建一个标签为“dedicated=edge”的工作者池,或将该标签添加到您现有的某个工作者池中。

    • 要创建一个经典工作池,可以使用 worker-pool create classic 命令
        ibmcloud oc worker-pool create classic --name POOL_NAME --cluster CLUSTER --flavor FLAVOR --size-per-zone WORKERS_PER_ZONE --hardware ISOLATION --label dedicated=edge
        ```
    * 要创建一个 VPC 工作池,可以使用 ` `worker-pool create vpc-gen2` ` [命令](/docs/containers?topic=containers-kubernetes-service-cli#worker-pool-create-vpc-gen2-cli)。
    ```sh {: pre}
        ibmcloud oc worker-pool create vpc-gen2 --name POOL_NAME --cluster CLUSTER --flavor FLAVOR --size-per-zone WORKERS_PER_ZONE --hardware ISOLATION --label dedicated=edge
        ```
    * 要为现有的工作池添加标签,可以使用 `worker-pool label set` [命令](/docs/containers?topic=containers-kubernetes-service-cli#worker-pool-label-set-cli)。
    ```sh {: pre}
        ibmcloud oc worker-pool label set --cluster CLUSTER --worker-pool POOL --label dedicated=edge
        ```
    
  2. 验证工作程序池和工作程序节点是否具有 dedicated=edge 标签。

    • 要检查工作进程池,请使用 get 命令。
        ibmcloud ks worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID
        ```
    * 要检查单个工作程序节点,请查看以下命令输出中的 **Labels** 字段。
    ```sh {: pre}
        kubectl describe node <worker_node_private_IP>
        ```
    
    
    
  3. 检索集群中的所有现有 ALB。 查看该命令的输出结果。 对于每个 “状态” 设置为 “已启用”的 ALB,请记录其 ALB ID构建版本

    ibmcloud ks ingress alb ls --cluster CLUSTER_NAME_OR_ID
    

    示例输出

    ALB ID                                Enabled   State     Type      Load Balancer Hostname                      Zone         Build                                  Status
    private-crc81nk5l10gfhdql4i3qg-alb1   true      enabled   private   e9dd35e6-us-south.lb.appdomain.cloud   us-south-3   3.7.4_348800920_iks   enabled
    public-crc81nk5l10gfhdql4i3qg-alb1    true      enabled   public    38daf55c-us-south.lb.appdomain.cloud   us-south-3   3.7.4_348800920_iks   healthy
    
  4. 使用上一步的输出结果,针对每个已启用的 ALB 运行 ibmcloud ks ingress alb update 命令。 此命令会将 ALB 重新部署到边缘工作程序节点。

    当您运行此命令将 ALB 重新部署到边缘工作节点时,ALB 也会更新到最新版本。 如果您不想将 ALB 更新到最新版本,请包含 --version 选项,并指定上一步输出中 “Build”下所列的版本。

    ibmcloud ks ingress alb update -c <cluster_name_or_ID> --alb <ALB_ID> [--version <build_version>]
    

    示例输出

    Updating ALB pods for private-crc81nk5l10gfhdql4i3qg-alb1 to version '3.7.4_348800920_iks' in cluster crc81nk5l10gfhdql4i3qg...
    OK
    
  5. 确认是否将所有 ALB pod 都部署到了边缘节点。 集群中启用的每个公共和专用 ALB 都有两个 pod。

    kubectl describe nodes -l dedicated=edge | grep alb
    

    示例输出

    kube-system                private-crc81nk5l10gfhdql4i3qg-alb1-d5dd478db-27pv4    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    kube-system                private-crc81nk5l10gfhdql4i3qg-alb1-d5dd478db-7p9q6    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    kube-system                public-crc81nk5l10gfhdql4i3qg-alb1-5ff8cdff89-s77z6    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    kube-system                public-crc81nk5l10gfhdql4i3qg-alb1-5ff8cdff89-kvs9f    0 (0%)        0 (0%)      0 (0%)           0 (0%)
    
  6. 确认是否没有任何 ALB pod 部署到非边缘节点。

    kubectl describe nodes -l dedicated!=edge | grep alb
    

    如果 ALB pod 正确部署到了边缘节点,那么不会返回任何 ALB pod。 这意味着您的 ALB 已成功重新调度至仅位于边缘工作节点上。

后续步骤

既然您已使用 dedicated=edge 为工作节点池中的工作节点添加了标签,并将所有现有ALB重新部署到了边缘节点上,那么此后添加到集群中的所有ALB也将部署到边缘工作节点池中的某个边缘节点上。 接下来,您可以阻止其他 工作负载在边缘工作节点上运行