将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。
准备工作
- 请确保您拥有以下 IAM 角色:
- 该集群的任何平台访问角色
- 所有命名空间的 “写入者”或 “管理员”服务访问角色
- 请登录您的账户。 如果适用,请将相应的资源组设定为目标。 设置集群的上下文。
将工作负载隔离到边缘工作节点
要将您的工作负载隔离到边缘工作节点上:
-
创建一个标签为“
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 ``` - 要创建一个经典工作池,可以使用
-
验证工作程序池和工作程序节点是否具有
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> ``` - 要检查工作进程池,请使用
-
检索集群中的所有现有 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 -
使用上一步的输出结果,针对每个已启用的 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 -
确认是否将所有 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%) -
确认是否没有任何 ALB pod 部署到非边缘节点。
kubectl describe nodes -l dedicated!=edge | grep alb如果 ALB pod 正确部署到了边缘节点,那么不会返回任何 ALB pod。 这意味着您的 ALB 已成功重新调度至仅位于边缘工作节点上。
后续步骤
既然您已使用 dedicated=edge 为工作节点池中的工作节点添加了标签,并将所有现有ALB重新部署到了边缘节点上,那么此后添加到集群中的所有ALB也将部署到边缘工作节点池中的某个边缘节点上。 接下来,您可以阻止其他 工作负载在边缘工作节点上运行。