SuperAPI AI 工具集

gke-scaling

部署与运维

查看项目

更新于 10-15 14:37

技能介绍

用途

gke-scaling 是 Google 官方技能库(google/skills)中的一个参考技能,用于在 Google Kubernetes Engine(GKE)上配置工作负载的扩缩容。它面向需要配置 GKE 自动扩缩容(包括 HPA、VPA 和节点自动预配 NAP)的场景。

主要能力

该技能覆盖以下扩缩容机制:

  1. 手动扩缩容:仅通过 kubectl 完成,没有对应的 MCP 工具。示例命令: kubectl scale deployment <DEPLOYMENT> --replicas=<N> -n <NAMESPACE>

  2. 水平 Pod 自动扩缩容(HPA):根据指标调整 Pod 数量。快速设置仅支持 kubectl: kubectl autoscale deployment <DEPLOYMENT> --cpu-percent=50 --min=1 --max=10 推荐使用清单方式,通过 MCP 的 apply_k8s_manifest 应用,模板见 assets/hpa-example.yaml。清单示例:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: <DEPLOYMENT>-hpa
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: <DEPLOYMENT>
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
    
  3. 垂直 Pod 自动扩缩容(VPA):调整 CPU 和内存请求以匹配实际用量,金路径默认启用。更新模式包括:Off(仅推荐,最安全,建议从这里开始)、Initial(仅在 Pod 创建时设置资源)、Auto(重启 Pod 以应用新资源值)、InPlaceOrRecreate(在可能的情况下无需重启更新资源,GKE 1.34+)。 以推荐模式创建 VPA 的示例:

    apiVersion: autoscaling.k8s.io/v1
    kind: VerticalPodAutoscaler
    metadata:
      name: <DEPLOYMENT>-vpa
    spec:
      targetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: <DEPLOYMENT>
      updatePolicy:
        updateMode: "Off"
    

    读取推荐值优先使用 MCP: describe_k8s_resource(parent="...", resourceType="verticalpodautoscaler", name="<DEPLOYMENT>-vpa", namespace="<NAMESPACE>") kubectl 备用命令: kubectl get vpa <DEPLOYMENT>-vpa -o jsonpath='{.status.recommendation}' 完整模板见 assets/vpa-example.yaml。

  4. 集群自动扩缩容 / 节点自动预配(NAP):在 Autopilot(金路径)上,节点扩缩容完全托管,NAP 根据工作负载需求自动创建和调整节点池大小。对于 Standard 集群:

    # 在节点池上启用集群自动扩缩容
    

gcloud container clusters update <CLUSTER_NAME> --region <REGION>
--enable-autoscaling --node-pool <POOL_NAME>
--min-nodes <MIN> --max-nodes <MAX>
--quiet

启用 NAP

gcloud container clusters update <CLUSTER_NAME> --region <REGION>
--enable-autoprovisioning
--min-cpu <MIN_CPU> --max-cpu <MAX_CPU>
--min-memory <MIN_MEM> --max-memory <MAX_MEM>
--quiet


## 金路径默认配置

| 设置 | 金路径值 | 说明 |
| --- | --- | --- |
| autoscaling.autoscalingProfile | OPTIMIZE_UTILIZATION | 激进缩容以节省成本 |
| verticalPodAutoscaling.enabled | true | 提供 VPA 推荐值 |
| autoscaling.enableNodeAutoprovisioning | true | NAP 按需创建节点池 |
| GPU 资源限制(T4、A100) | 各 1000000000 | NAP 可预配 GPU 节点 |

自动扩缩容配置文件对比:

| 配置文件 | 行为 | 是否金路径 |
| --- | --- | --- |
| BALANCED | GKE 默认;保守缩容 | 否 |
| OPTIMIZE_UTILIZATION | 激进缩容;降低空闲资源 | 是 |

## 使用方式

该技能提供 MCP 工具:get_k8s_resource、describe_k8s_resource、apply_k8s_manifest、patch_k8s_resource、get_cluster、update_cluster、update_node_pool。部分操作(如 kubectl scale、kubectl autoscale)没有 MCP 等价工具,需直接使用 kubectl。

## 最佳实践

- **定义资源请求**:HPA 和 VPA 依赖准确的请求值,务必设置。
- **避免指标冲突**:不要在同一指标上同时使用 HPA 和 VPA。典型模式:HPA 用于 CPU,VPA 用于内存。
- **Pod 中断预算**:为所有生产工作负载定义 PDB,确保扩缩容事件期间的可用性。
- **HPA 稳定化**:HPA 默认有 5 分钟稳定窗口,如需更快响应可调整行为。
- **VPA "Auto" 注意事项**:Auto 模式会重启 Pod,确保应用能优雅处理 SIGTERM。VPA 默认要求至少 2 个副本才能进行驱逐。
- **使用 ComputeClasses**:针对特定工作负载的节点定位(Spot 回退、GPU、特定机器系列),使用 ComputeClasses 而非节点选择器。

## 资源合理配置工作流

1. 以 Off 模式部署 VPA 24 小时以上
2. 读取推荐值:`kubectl describe vpa <NAME>`
3. 将目标值与当前请求值对比
4. 应用时留 20% 缓冲:new_request = target * 1.2
5. 使用 patch 格式更新 Deployment

风险参考:

| 条件 | 建议 | 风险 |
| --- | --- | --- |
| CPU 请求 > P95 实际值的 5 倍 | 降至 P95 * 1.2 | 中 |
| 内存请求 > P95 实际值的 3 倍 | 降至 P95 * 1.2 | 中 |
| CPU 请求 > P95 实际值的 2 倍 | 留 20% 缓冲进行合理配置 | 低 |
| 未设置资源限制 | 添加限制以防止吵闹邻居 | 低 |

## 适用场景与限制

适用于在 GKE 上配置工作负载扩缩容、设置 HPA/VPA、启用 NAP 以及进行资源合理配置的场景。部分操作仅支持 kubectl 或 gcloud,没有 MCP 等价工具。VPA 的 InPlaceOrRecreate 模式需要 GKE 1.34+。关于收费、价格、平台支持范围等更多信息,资料中暂未提供。