Cluster Autoscaler 企业节点扩缩容

验证:未记录
适用版本
未记录
验证范围
尚未登记验证记录。
本文缩写(英文全称与中文含义)
缩写 英文全称/名称 中文含义
API Application Programming Interface 应用程序编程接口
ARN Amazon Resource Name AWS 资源名称,用于唯一标识资源
AWS Amazon Web Services 亚马逊云服务
AZ Availability Zone 可用区
CA Cluster Autoscaler 集群节点自动扩缩容器
CPU Central Processing Unit 中央处理器
CSI Container Storage Interface 容器存储接口
EC2 Elastic Compute Cloud AWS 云服务器服务
EKS Elastic Kubernetes Service AWS 托管 Kubernetes 服务
GKE Google Kubernetes Engine Google 托管 Kubernetes 服务
HPA Horizontal Pod Autoscaler Pod 水平自动扩缩容器
IaC Infrastructure as Code 基础设施即代码
IAM Identity and Access Management 身份与访问管理
IRSA IAM Roles for Service Accounts 通过 Kubernetes 服务账号关联 AWS IAM 角色
MNG Managed Node Group EKS 托管节点组
PDB Pod Disruption Budget Pod 中断预算,约束自愿驱逐
PV Persistent Volume 持久卷

场景:EKS MNG 到达容量上限后,Pending 的真实业务 Pod 触发节点扩容。前置:基线、IRSA、HPA。CA 根据调度失败判断,不按节点 CPU 百分比直接扩容。

平台差异#

平台 做法
EKS MNG/ASG 自行安装 CA,限定发现的 ASG 与 IAM 写权限
GKE Standard 配置托管 node pool autoscaling;不另装上游 CA
GKE Autopilot / EKS Auto Mode 使用平台管理的容量能力,不重复装 CA
自建裸机 没有能创建机器的 cloud provider/Cluster API,单装 CA 不会产生节点

CA 镜像 minor 对齐 Kubernetes;同组实例调度容量应相近。按 AZ 划分组时考虑卷拓扑、最小容量和 zone 故障;scale-from-zero 需要节点模板的标签/污点信息。AWS CA 规则

Hands-on:EKS 限定节点组#

由 IaC 为目标 ASG 设置 k8s.io/cluster-autoscaler/enabled=true 和 k8s.io/cluster-autoscaler/<cluster>=owned,并配置 min/max/desired。至少保留一个独立按需系统节点组,CA 不依赖待扩容业务组存活。

专属 kube-system/cluster-autoscaler IRSA:查询动作按官方当前策略;SetDesiredCapacity、TerminateInstanceInAutoScalingGroup 写权限限定目标 ASG ARN 或上述精确标签条件。iam:PassRole 等无关权限不授予;IAM 条件和发现标签必须一致。

helm repo add autoscaler https://kubernetes.github.io/autoscaler
helm repo update
helm search repo autoscaler/cluster-autoscaler --versions
export CA_CHART_VERSION='9.54.0' # 本文渲染基线;先核对集群兼容矩阵
helm show values autoscaler/cluster-autoscaler --version "$CA_CHART_VERSION" > ca-defaults.yaml

保存 ca-values.yaml,替换目标版本、区域、集群与角色。系统节点标签 workload=system 必须已设置:

下载完整 ca-values.yaml;替换 REPLACE_ 环境输入后保存到当前目录。配置包含资源预算、双副本、单节点故障分散和中断预算。资源是压测起点,不能替代容量测试。

helm upgrade --install cluster-autoscaler autoscaler/cluster-autoscaler -n kube-system --version "$CA_CHART_VERSION" -f ca-values.yaml --wait --timeout 10m
kubectl -n kube-system logs -l app.kubernetes.io/name=aws-cluster-autoscaler --since=10m
kubectl -n kube-system get configmap cluster-autoscaler-status -o yaml

日志标签以实际 Chart 渲染为准。两副本是 leader/standby,不是两个各自决策的 CA;配置已包含资源、PDB 和跨节点分散;系统池至少两台可调度节点。

业务扩缩容与故障演练#

  1. 使用真实 HPA/订单压力使业务需求超过当前容量,但低于已批准 max;观察 FailedScheduling → CA 决策 → EC2 Ready → Pod Ready,记录完整延迟。
  2. 检查 IRSA/镜像拉取/CSI/DaemonSet 预留量;调度成功后验证订单成功率和数据库预算。
  3. 降载后等待安全缩容,PDB 阻止关键副本同时驱逐;确保没有 local PV/本地缓存被误当可丢弃。
  4. 在演练组达到 max 或设置不匹配的 nodeSelector,确认告警解释“不扩容”原因;不得删除 PDB 解决容量设计错误。

CA 与 Karpenter 可按明确不重叠的容量范围共存,但本演练选一种;避免两者与 IaC 持续争写 desired。缩容暂停可临时设置 scale-down-enabled=false 并走原发布流程;紧急停 CA 后手动扩容必须有配额上限,现有节点不会因控制器停止自动消失。

GKE Standard 的同类演练通过 gcloud container clusters update ... --enable-autoscaling --node-pool=... --min-nodes=... --max-nodes=... 配置,先核对 per-zone 与 total 限额语义,见 GKE autoscaling。

配置复核#

安装前按 配置验收 渲染并检查;节点资源不足导致反亲和性 Pending 时先扩容,不删除保护条件。

搜索文档

输入关键词,搜索所有文档。

↑ ↓ 选择 · Enter 打开 · Esc 关闭