将 Ingress 资源隔离到边缘工作节点
为了确保 ALB pod 始终被调度到边缘工作器节点(如果存在),而不是被调度到非边缘工作器节点,您必须创建或使用每个区域至少有两个边缘工作器节点的现有工作器池。
在 ALB pod 更新期间,会推出新的 ALB pod 来替换现有的 ALB pod。 为了确保 ALB 在更新期间可用,滚动更新可确保至少有一个 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命令。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命令。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 字段。
kubectl describe node <worker_node_private_IP>
- 要检查工作池,请使用
-
检索集群中的所有现有 ALB。 查看命令输出。 对于每个具有地位的已启用,注意白细胞介素和建造。
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 ingress:1.1.1_1949_iks/ingress-auth: enabled public-crc81nk5l10gfhdql4i3qg-alb1 true enabled public 38daf55c-us-south.lb.appdomain.cloud us-south-3 ingress:1.1.1_1949_iks/ingress-auth: healthy -
使用上一步的输出,运行
ibmcloud ks ingress alb update每个启用的 ALB 的命令。 此命令会将 ALB 重新部署到边缘工作程序节点。当您运行此命令将 ALB 重新部署到边缘工作器节点时,ALB 也会更新到最新版本。 如果您不想将 ALB 更新到最新版本,请包含
--version选项并指定下面列出的版本建造在上一步的输出中。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 '1.1.1_1949_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 也都将部署到边缘工作器池中的边缘节点。 接下来你可以阻止其他 在边缘工作节点上运行的工作负载。