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 和跨节点分散;系统池至少两台可调度节点。
业务扩缩容与故障演练#
- 使用真实 HPA/订单压力使业务需求超过当前容量,但低于已批准 max;观察
FailedScheduling→ CA 决策 → EC2 Ready → Pod Ready,记录完整延迟。 - 检查 IRSA/镜像拉取/CSI/DaemonSet 预留量;调度成功后验证订单成功率和数据库预算。
- 降载后等待安全缩容,PDB 阻止关键副本同时驱逐;确保没有 local PV/本地缓存被误当可丢弃。
- 在演练组达到 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 时先扩容,不删除保护条件。