使用自动扩缩容配置 Istio HA

通过自动扩缩容为 Istio 控制平面启用高可用性(HA),这样即使某个 istiod pod 发生故障,mesh 仍可继续运行。

NOTE

使用自动扩缩容时,你可以指定任意时刻允许运行的 Istio 控制平面 pod 的最小值和最大值。随后,Alauda Container Platform 会根据资源消耗情况(例如 CPU 或内存使用率)在这些边界之间调整实际副本数,从而使控制平面能够吸收 mesh 内工作负载规模和流量模式的变化。

先决条件

  • 你已使用 cluster-admin 角色的用户登录 Alauda Container Platform Web 控制台,或者你已作为集群管理员拥有一个活动的 ACP CLI (kubectl) 会话。
  • 已安装 Alauda Service Mesh v2 Operator。
  • 已部署 Istio 资源。

通过 Web 控制台配置

操作步骤

  1. 在 Alauda Container Platform Web 控制台中,导航到 管理员

  2. 选择 Marketplace > OperatorHub

  3. 搜索 Alauda Service Mesh v2

  4. 找到 Alauda Service Mesh v2 并单击进行选择。

  5. 单击 所有实例 选项卡。

  6. 按实例类型筛选 下拉列表中,选择 Istio

  7. 单击 Istio 安装项的名称,例如 default

  8. 单击 YAML 选项卡。

  9. 更新 Istio 自定义资源(CR),使其类似于以下示例:

    apiVersion: sailoperator.io/v1
    kind: Istio
    metadata:
      name: default
    spec:
      namespace: istio-system
      values:
        pilot:
          autoscaleMin: 2
          autoscaleMax: 5
          cpu:
            targetAverageUtilization: 80
          memory:
            targetAverageUtilization: 80
    1. spec.values.pilot.autoscaleMin 用于设置始终运行的 Istio 控制平面副本最小数量。要满足 HA 要求,该值必须至少为 2
    2. spec.values.pilot.autoscaleMax 用于设置自动扩缩容器在负载增加时可扩展到的 Istio 控制平面副本最大数量。
    3. spec.values.pilot.cpu.targetAverageUtilization 用于将目标平均 CPU 使用率设置为百分比。当观测到的 CPU 使用率高于该目标时,Horizontal Pod Autoscaler (HPA) 会添加副本。
    4. spec.values.pilot.memory.targetAverageUtilization 用于将目标平均内存使用率设置为百分比。当观测到的内存使用率高于该目标时,HPA 会添加副本。

通过 CLI 配置

操作步骤

  1. 获取 Istio 资源的名称:

    kubectl get istio -n istio-system

    示例输出

    NAME      NAMESPACE      PROFILE   REVISIONS   READY   IN USE   ACTIVE REVISION   STATUS    VERSION   AGE
    default   istio-system             1           1       1        default           Healthy   v1.28.6   24m

    Istio 资源名为 default

  2. patch Istio 自定义资源(CR),为控制平面启用自动扩缩容:

    kubectl patch istio default -n istio-system --type merge -p '
    spec:
      values:
        pilot:
          autoscaleMin: 2
          autoscaleMax: 5
          cpu:
            targetAverageUtilization: 80
          memory:
            targetAverageUtilization: 80
    '

    有关这些设置的字段说明,请参见通过 Web 控制台配置

验证

检查 Istio 控制平面 pod 的状态:

kubectl get pods -n istio-system -l app=istiod

示例输出

NAME                      READY   STATUS    RESTARTS   AGE
istiod-6b8d64c946-2dq2k   1/1     Running   0          28m
istiod-6b8d64c946-skg4v   1/1     Running   0          35s

有两个 istiod pod 正在运行。对于 HA Istio 控制平面而言,两个 pod 是所需的最小数量,这表明基本的 HA 配置已到位。