管理 ALB
管理集群中的 Ingress ALB,确保流量不间断地流动。
更新 ALB
IBM Cloud Kubernetes Service 定期发布 ALB 版本以提供新功能并解决安全漏洞。 使用 ibmcloud ks ingress alb versions
命令列出可用版本,或者查看版本历史记录的 Ingress ALB 版本更改日志。
ALB 版本遵循 <ingress_nginx_version>_<ibm_build>_iks
格式,其中 <ingress_nginx_version>
表示 Kubernetes Ingress NGINX Controller 的版本,<ibm_build>
编号表示 IBM Cloud Kubernetes Service 构建版本。
可以自动将 ALB 更新为缺省版本,也可以选择手动禁用自动更新和管理 ALB 版本。
启用自动更新
启用自动更新时,ALB 将更新为标记为缺省值的版本。 当较新版本成为缺省版本时,ALB 将自动更新为该版本。
如果集群中的专区中仅存在一个工作程序节点,并且您将 ALB 副本数设置为 1,那么将删除此单个 ALB pod,并在应用更新时创建新 pod。 此过程可能会导致流量中断,即使您在其他区域中具有工作程序节点和 ALB 副本也是如此。 要防止流量中断,请确保每个专区中至少存在两个工作程序节点,并且 每个 ALB 都存在两个副本。 请注意,在更新过程中,只有新连接会路由到第二个 ALB pod; 更新 ALB pod 上的现有连接会安全终止。 对于在更新期间终止的现有连接,请在客户机应用程序中启动重试。
调度自动更新的维护窗口
您可以通过创建自定义的 ConfigMap 来控制和管理 ALB 自动更新,其中指定了您希望更新的时间。
要设置自动更新的时间,可在部署 ConfigMap 中设置 updateStartTime
和 updateEndTime
键。 每个键表示 24 小时格式 (HH:MM) 的分配时间。 请注意,此时间以协调通用时间 (UTC) 而不是本地时间指定。
-
为ConfigMap 创建一个 YAML 文件。 在
data
字段中指定updateStartTime
和updateEndTime
字段为键值对。以下示例 ConfigMap 设置自动更新功能,以在 20:34 到 23:59 UTC 之间更新集群中 35% 的 ALB pod。
apiVersion: v1 kind: ConfigMap metadata: name: ibm-ingress-deploy-config namespace: kube-system data: "updateStartTime": "20:34" "updateEndTime": "23:59"
-
在集群中部署 ConfigMap。 新规则将在下次执行更新时应用。
kubectl apply -f <filename>.yaml
禁用自动更新
要接收错误修订和安全更新,请保持启用自动更新。 禁用自动更新后,您将负责手动更新 ALB。
您可以通过运行 ibmcloud ks ingress alb autoupdate disable -c <cluster_name_or_ID>
来禁用 ALB 的自动更新。
要检查是否为集群启用了自动更新,请使用 ibmcloud ks ingress alb autoupdate get -c <cluster_name_or_ID>
命令。 如果您决定再次启用自动更新,那么可以运行
ibmcloud ks ingress alb autoupdate enable -c <cluster_name_or_ID>
。
应用手动更新
您可以使用 ibmcloud ks ingress alb update
命令手动应用 Ingress ALB pod 的一次性更新。 此命令将应用缺省 ALB 映像版本,但您可以通过包含 --version
选项来应用其他版本。 有关更多信息或命令选项,请参阅 CLI 参考。
要使用 --version
选项将 ALB 映像更新到特定版本,必须 禁用自动 ALB 更新,然后使其处于禁用状态 (只要您想要运行指定的版本)。 自动更新始终应用缺省版本,并覆盖您应用的任何手动更新。 如果要使用其他版本,那么无法启用自动更新。
-
要列出可用的 ALB 版本,请运行以下命令。
ibmcloud ks ingress alb version ls --region <region>
-
要更新集群中的所有 ALB pod,请运行以下命令。
ibmcloud ks ingress alb update -c <cluster_name_or_ID> --version <image_version>
-
要更新特定 ALB 的 ALB,请运行以下命令。
ibmcloud ks ingress alb update -c <cluster_name_or_ID> --version <image_version> --alb <ALB_ID> [--alb <ALB_2_ID> ...]
选择受支持的映像版本
IBM Cloud Kubernetes Service 仅支持集群中 Ingress 应用程序负载均衡器 (ALB) 的 Kubernetes Ingress 映像。 Kubernetes Ingress 映像是基于社区 Kubernetes 项目的 NGINX Ingress 控制器实现而构建的。 先前支持的 IBM Cloud Kubernetes Service Ingress 映像 (在 NGINX Ingress 控制器的定制实现上构建) 不受支持。
在 2020 年 12 月 01 日或之后创建的集群: 缺省应用程序负载均衡器 (ALB) 在所有新的 IBM Cloud Kubernetes Service 集群中运行 Kubernetes Ingress 映像。
2020 年 12 月 1 日前创建的集群:
- 具有运行定制 IBM Ingress 映像的 ALB 的现有集群继续按现状运行。
- 对定制 IBM Ingress 映像的支持已于 2021 年 6 月 2 日结束。
- 必须通过迁移任何现有 Ingress 设置来移至新的 Kubernetes Ingress。 现有 ALB 和其他 Ingress 资源不会自动迁移到新的 Kubernetes Ingress 映像。
- 具有不受支持的映像的任何 ALB 都将继续运行,但 IBM不支持这些 ALB。
当您 创建新的 ALB,启用先前已禁用的 ALB 或 [手动更新 (#update-alb) ALB]时,可以使用 --version
选项为 ALB 指定映像版本。 如果在启用或更新现有 ALB 时省略 --version
选项,那么 ALB 将运行与 ALB 先前运行的映像相同的缺省版本; Kubernetes Ingress 映像或 IBM Cloud Kubernetes Service Ingress 映像。
自动更新仅应用缺省版本。 要指定非缺省版本,必须通过运行 ibmcloud ks ingress alb autoupdate disable
命令来 禁用自动更新。
查看受支持的映像版本
要列出每种类型的映像支持的最新三个版本,请运行以下命令。
ibmcloud ks ingress alb versions
示例输出
Kubernetes Ingress versions
1.1.2_2507_iks (default)
1.2.1_2506_iks
0.35.0_1374_iks
Kubernetes Ingress 版本遵循格式 <community_version>_<ibm_build>_iks
。 IBM 构建号指示 IBM Cloud Kubernetes Service 发布的 Kubernetes Ingress NGINX 发行版的最新构建。 例如,版本 1.1.2_2507_iks
指示 0.47.0
Ingress NGINX 版本的最新构建。IBM
Cloud Kubernetes Service 可能会发布社区映像版本的构建以解决漏洞。
有关每个 Ingress 映像版本中的更改,请参阅 Ingress 版本更改日志。
恢复到早期版本
如果最近更新了 ALB pod,但 ALB 的定制配置受最新映像版本构建的影响,那么可以使用带有 --version
选项的 ibmcloud ks ingress alb update
命令将 ALB pod 回滚到受支持的较早版本。 将 ALB 更改为的映像版本必须是 ibmcloud ks ingress alb versions
输出中列出的受支持映像版本。
请注意,如果还原到较低版本,那么必须 禁用自动 ALB 更新,然后保持禁用状态,只要您想要运行较低版本。 自动更新始终应用最新版本并覆盖您应用的任何手动更新。 如果要使用较早版本,那么无法启用自动更新。
手动缩放 ALB
每个 ALB 每秒可处理约 20,000 个连接。 如果需要处理其他连接,可以在区域中创建更多 ALB 或增加 ALB pod 副本数。
在区域中创建更多 ALB
区域中的每个 ALB 都作为两个 pod 部署在不同的工作程序节点上。 要扩展 ALB 处理功能并处理更多连接,可以在区域中创建其他 ALB。 新 ALB 的 IP 地址将自动添加到 Ingress 子域。
创建多区域群集时,会在每个有工作者节点的区域创建一个默认的公共 ALB。 如果您稍后除去这三个原始专区中的一个,并在另一专区中添加工作程序,那么不会在该新专区中创建缺省公共 ALB。 您可以手动创建 ALB 以处理该新专区中的连接。
使用 Ingress 资源验证时,所有 ALB 都会验证每个创建和更新请求。 如果没有针对特定 ALB 实例运行任何 pod,那么您可能无法在集群上应用 Ingress 资源。 确保每个处于已启用状态的 ALB 至少有一个正在运行的 pod。 有关更多信息,请参阅 Ingress 部署定制参考。
-
在具有工作程序节点的每个区域中,创建 ALB。
以下命令适用于 经典集群。 有关更多信息和命令选项,请参阅 CLI 参考。
ibmcloud ks ingress alb create --cluster <cluster_name_or_ID> --type <public_or_private> --zone <zone> --vlan <VLAN_ID> [--ip <IP_address>] [--version image_version]
以下命令适用于 VPC 集群。 有关更多信息和命令选项,请参阅 CLI 参考。
ibmcloud ks ingress alb create vpc-gen2 --cluster <cluster_name_or_ID> --type <public_or_private> --zone <vpc_zone> [--version image_version]
-
验证您在每个区域中创建的 ALB 的 状态 是否为
enabled
。 对于经典集群,请检查是否已分配 ALB IP。 对于 VPC 集群,请检查是否已分配 负载均衡器主机名。ibmcloud ks ingress alb ls --cluster <cluster_name_or_ID>
经典集群的示例输出。
ALB ID Enabled Status Type ALB IP Zone Build ALB VLAN ID NLB Version private-crdf253b6025d64944ab99ed63bb4567b6-alb1 false disabled private - dal12 ingress:1.1.2_2507_iks 2294021 - private-crdf253b6025d64944ab99ed63bb4567b6-alb2 false disabled private - dal10 ingress:1.1.2_2507_iks 2234947 - public-crdf253b6025d64944ab99ed63bb4567b6-alb1 true enabled public 169.48.228.78 dal12 ingress:1.1.2_2507_iks 2294019 - public-crdf253b6025d64944ab99ed63bb4567b6-alb2 true enabled public 169.46.17.6 dal10 ingress:1.1.2_2507_iks 2234945 -
VPC 集群的示例输出。
ALB ID Enabled Status Type Load Balancer Hostname Zone Build private-crdf253b6025d64944ab99ed63bb4567b6-alb1 false disabled private - us-south-2 ingress:1.1.2_2507_iks private-crdf253b6025d64944ab99ed63bb4567b6-alb2 false disabled private - us-south-1 ingress:1.1.2_2507_iks public-crdf253b6025d64944ab99ed63bb4567b6-alb1 true enabled public 23f2dfb1-us-south.lb.appdomain.cloud us-south-2 ingress:1.1.2_2507_iks public-crdf253b6025d64944ab99ed63bb4567b6-alb2 true enabled public 23f2dfb1-us-south.lb.appdomain.cloud us-south-1 ingress:1.1.2_2507_iks
更改 ALB pod 副本数
缺省情况下,每个 ALB 都有 2 个副本。 您可以通过手动更改 ALB pod 的数量或通过启用动态自动缩放来定制 ALB 处理功能。
单个 ALB pod 可以处理大量请求。 如果迂到超时,响应缓慢或其他超负荷迹象,请检查后端应用程序的状态。 在缩放 ALB pod 之前,请确保 ALB 是应用程序的瓶颈,否则它可能无法提供预期结果。
对于经典集群: 如果 ALB 的负载均衡器服务配置将 externalTrafficPolicy
设置为 Local
,请不要超过 2 个副本。 经典负载均衡器使用 2 副本的固定配置运行,并且只能将流量转发到与负载均衡器 pod 位于同一节点上的 ALB pod。
缺省情况下,定期 Ingress 版本更新会自动推广到 ALB。 如果集群中的专区中仅存在一个工作程序节点,并且您将 ALB 副本数设置为 1,那么将删除此单个 ALB pod,并在应用更新时创建新 pod。 此过程可能会导致流量中断,即使您在其他区域中具有工作程序节点和 ALB 副本也是如此。 要防止流量中断,请确保每个专区中至少存在两个工作程序节点,并且每个 ALB 都存在两个副本。 请注意,在更新过程中,只有新连接会路由到第二个 ALB pod; 更新 ALB pod 上的现有连接会安全终止。 建议客户机应用程序对更新期间终止的现有连接启动重试。
通过创建 ConfigMap来手动更改 ALB 副本数。 请注意,如果 已将 ALB 配置为使用动态缩放,那么无法手动缩放 ALB 副本。
-
获取 ALB 的标识。
ibmcloud ks ingress alb ls -c <cluster_name_or_ID>
-
为
ibm-ingress-deploy-config
ConfigMap创建 YAML 文件。 对于每个 ALB,添加'{"replicas":<number_of_replicas>}'
。 此示例将 ALB pod 的数量增加到 4 个副本。apiVersion: v1 kind: ConfigMap metadata: name: ibm-ingress-deploy-config namespace: kube-system data: <alb1-id>: '{"replicas":4}' <alb2-id>: '{"replicas":4}' ...
-
在集群中创建
ibm-ingress-deploy-config
ConfigMap。kubectl create -f ibm-ingress-deploy-config.yaml
-
要应用更改,请更新 ALB。 请注意,可能需要最多 5 分钟才能应用更改。
ibmcloud ks ingress alb update -c <cluster_name_or_ID>
-
验证
Ready
的 ALB pod 数是否增加到您指定的副本数。kubectl get pods -n kube-system | grep alb
使用自动缩放器动态缩放 ALB
通过动态缩放,将根据实际负载自动更改 ALB 副本数。 当实际负载较低时副本数会减少,当负载较高时副本数会增加,从而节省计算容量,同时保持在高峰期间处理流量的能力。 您可以配置 ALB 自动缩放器,以根据 CPU 利用率或您定义的定制度量来实现缩放。
要设置自动扩展,请运行以下命令。 您可以通过包含 --cpu-average-utilization
选项来根据 CPU 利用率进行缩放。 或者,可以通过包含 --custom-metrics-file
选项并指定配置文件路径来根据定制度量进行缩放。
ibmcloud ks ingress alb autoscale set --alb ALB --cluster CLUSTER --max-replicas NUM_REPLICAS --min-replicas NUM_REPLICAS [--output OUTPUT] [-q] (--cpu-average-utilization PERCENT | --custom-metrics-file FILE)
--cluster, -c CLUSTER
- 必须填写:群集的名称或 ID。
--alb ALB
- ALB 标识。 要查看可用的 ALB 标识,请运行
ibmcloud ks ingress alb ls
。 --max-replicas REPLICAS
:- ALB 的最大副本数量。 指定整数。 最大 ALB 副本数限制为集群上的工作程序节点数。 要将更多工作程序节点添加到集群,请参阅 将工作程序节点添加到经典集群 或 将工作程序节点添加到 VPC 集群。
--min-replicas REPLICAS
- ALB 的最少副本数量。 指定至少为
2
的整数。 --cpu-average-utilization PERCENT
- 使用平均 CPU 利用率自动缩放: 自动缩放器的目标 CPU 利用率百分比。 平均值表示所有 ALB pod 的已用 CPU 占所请求 CPU 的百分比。 要检查 ALB pod 的当前 CPU 使用率,请运行
kubectl top pods -n kube-system -l app=<alb-id>
。 要检查为 ALB pod 请求的 CPU 数量,请运行kubectl get deployment -n kube-system <alb-id> -o=jsonpath='{.spec.template.spec.containers[0].resources.requests.cpu}
。 该选项不能与--custom-metrics-file
选项一起使用。 --custom-metrics-file FILE
- 使用定制度量值自动缩放: 指定用于定义自动缩放的定制度量值和目标值的配置文件的名称。 请注意,您负责安装和配置度量值提供程序,例如 Prometheus。 该选项不能与
--cpu-average-utilization
选项一起使用。
定制度量值 YAML 文件示例。 在 YAML 文件中配置定制度量。 保存文件并使用 --custom-metrics-file
命令选项指定文件名。 有关编写定制度量标准规范文件的更多信息,请参阅 Kubernetes 文档 (有关 水平 pod 自动缩放 或 MetricSpec API 文档)。
- type: Object
object:
metric:
name: example_metrics
describedObject:
apiVersion: networking.k8s.io/v1
kind: Ingress
name: example-ingress
target:
type: Value
value: 2k
用于配置动态 ALB 自动缩放的示例命令
用于基于平均 CPU 利用率 60% 的动态缩放的示例命令。
ibmcloud ks ingress alb autoscale set -c <cluster_name_or_ID> --alb <alb-id> --min-replicas 2 --max-replicas 5 --cpu-average-utilization 60
用于基于存储在名为 my-custom-metrics.yaml
的文件中的定制度量的动态缩放的示例命令。
ibmcloud ks ingress alb autoscale set -c <cluster_name_or_ID> --alb <alb-id> --min-replicas 2 --max-replicas 5 --custom-metrics-file my-custom-metrics.yaml
计算平均 CPU 利用率
下图显示了用于在规划自动缩放配置时确定 CPU 使用率的示例方案。
假定您有一个空闲集群,其中有两个正在运行的 ALB 副本没有入局流量。 在这种情况下,总 CPU 请求数为 2*20m=40m
。 其中一个副本可能使用 5m
CPU 和另一个 7m
CPU。 我们可以使用以下公式计算 CPU 利用率。
禁用 ALB 自动缩放
运行该命令以禁用 ALB 的自动缩放。
ibmcloud ks ingress alb autoscale unset --alb ALB --cluster CLUSTER
禁用 ALB
要缩减 ALB,您可以禁用 ALB,以使其不再路由集群中的流量。
ibmcloud ks ingress alb disable --alb <ALB_ID> -c <cluster_name_or_ID>
您可以随时通过对经典集群或 ibmcloud ks ingress alb enable vpc-gen2 --alb <ALB_ID> -c <cluster_name_or_ID>
运行 ibmcloud ks ingress alb enable classic --alb <ALB_ID> -c <cluster_name_or_ID>
来重新启用 ALB。
在经典集群中的 VLAN 之间移动 ALB
本主题中的信息仅特定于经典集群。
当您 更改工作程序节点 VLAN 连接 时,工作程序节点将连接到新的 VLAN 并分配新的公共或专用 IP 地址。 但是,ALB 无法自动迁移到新 VLAN,因为已从属于旧 VLAN 的子网为其分配稳定,可移植的公共或专用 IP 地址。 当工作程序节点和 ALB 连接到不同的 VLAN 时,ALB 无法将入局网络流量转发到应用程序 pod 到工作程序节点。 要将 ALB 移至其他 VLAN,必须在新 VLAN 上创建 ALB,并在旧 VLAN 上禁用 ALB。 请注意,集群中的所有公共 ALB 共享同一 IBM分配的 Ingress 子域。 创建新的 ALB 时,无需更改 Ingress 资源文件。
从 VLAN 中除去所有工作程序将除去 VLAN 区域中 ALB 的 IP 地址。
-
获取在每个专区中更改工作程序节点连接的新的公用或专用 VLAN。
-
列出专区中工作程序的详细信息。
ibmcloud ks worker get --cluster <cluster_name_or_ID> --worker <worker_id>
-
在输出中,记下公用或专用 VLAN 的 标识。
- 要创建公共 ALB,请记下公用 VLAN 标识。
- 要创建专用 ALB,请记下专用 VLAN 标识。
-
对每个专区中的工作程序重复这些步骤,以便在每个专区中具有新的公用或专用 VLAN 的标识。
-
-
在每个专区中,在新 VLAN 上创建 ALB。 有关此命令的参数的更多信息,请参阅 CLI 参考。
ibmcloud ks ingress alb create --cluster <cluster_name_or_ID> --type <public_or_private> --zone <zone> --vlan <VLAN_ID> [--ip <IP_address>] [--version image_version]
-
验证您在每个专区中的新 VLAN 上创建的 ALB 的 状态 是否为
enabled
,以及是否分配了 ALB IP 地址。ibmcloud ks ingress alb ls --cluster <cluster_name_or_ID>
在其中在
dal12
中的 VLAN2294030
和dal10
中的2234940
上创建新的公共 ALB 的集群的示例输出。ALB ID Enabled Status Type ALB IP Zone Build ALB VLAN ID NLB Version private-crdf253b6025d64944ab99ed63bb4567b6-alb1 false disabled private - dal12 ingress:1.1.2_2507_iks 2294021 private-crdf253b6025d64944ab99ed63bb4567b6-alb2 false disabled private - dal10 ingress:1.1.2_2507_iks 2234947 public-crdf253b6025d64944ab99ed63bb4567b6-alb1 true enabled public 169.48.228.78 dal12 ingress:1.1.2_2507_iks 2294019 public-crdf253b6025d64944ab99ed63bb4567b6-alb2 true enabled public 169.46.17.6 dal10 ingress:1.1.2_2507_iks 2234945 public-crdf253b6025d64944ab99ed63bb4567b6-alb3 true enabled public 169.49.28.09 dal12 ingress:1.1.2_2507_iks 2294030 public-crdf253b6025d64944ab99ed63bb4567b6-alb4 true enabled public 169.50.35.62 dal10 ingress:1.1.2_2507_iks 2234940
-
禁用连接到旧 VLAN 的每个 ALB。
ibmcloud ks ingress alb disable --alb <old_ALB_ID> -c <cluster_name_or_ID>
-
验证连接到旧 VLAN 的每个 ALB 的 状态 是否为
disabled
。 只有连接到新 VLAN 的 ALB 才会接收入局网络流量并与应用程序 pod 进行通信。ibmcloud ks ingress alb ls --cluster <cluster_name_or_ID>
在其中禁用了
dal12
中的 VLAN2294019
和dal10
中的2234945
上的缺省公共 ALB 的集群的示例输出。ALB ID Enabled Status Type ALB IP Zone Build private-crdf253b6025d64944ab99ed63bb4567b6-alb1 false disabled private - dal12 ingress:1.1.2_2507_iks 2294021 private-crdf253b6025d64944ab99ed63bb4567b6-alb2 false disabled private - dal10 ingress:1.1.2_2507_iks 2234947 public-crdf253b6025d64944ab99ed63bb4567b6-alb1 false disabled public 169.48.228.78 dal12 ingress:1.1.2_2507_iks 2294019 public-crdf253b6025d64944ab99ed63bb4567b6-alb2 false disabled public 169.46.17.6 dal10 ingress:1.1.2_2507_iks 2234945 public-crdf253b6025d64944ab99ed63bb4567b6-alb3 true enabled public 169.49.28.09 dal12 ingress:1.1.2_2507_iks 2294030 public-crdf253b6025d64944ab99ed63bb4567b6-alb4 true enabled public 169.50.35.62 dal10 ingress:1.1.2_2507_iks 2234940
-
对于公共 ALB 可选: 验证新 ALB 的 IP 地址是否列示在集群的 IBM提供的 Ingress 子域下。 您可以通过运行
ibmcloud ks cluster get --cluster <cluster_name_or_ID>
.nslookup <Ingress_subdomain>
示例输出
Non-authoritative answer: Name: mycluster-<hash>-0000.us-south.containers.appdomain.cloud Addresses: 169.49.28.09 169.50.35.62
-
可选:如果不再需要旧 VLAN 上的子网,那么可以除去子网。