阿里云实现CA节点自动扩缩容
阿里云实现CA节点自动扩缩容
🚀 一、在阿里云上实现 Cluster Autoscaler 的自动扩容
你有两种方式部署:
| 方式 | 说明 |
|---|---|
| ✅ 官方 ACK 控制台开启 | 最简单,适用于 ACK 托管集群 |
| 🛠️ 自定义集群手动部署 CA | 适用于你用 ECS 自建的 K8s(如二进制部署) |
✅ 方式一:ACK 托管集群控制台配置(推荐)
如果你是用的阿里云 ACK 集群(标准托管版 / 托管版):
📦 开启步骤:
- 打开阿里云控制台 → ACK 容器服务
- 找到你的集群 → 节点池
- 选择节点池 → 点击【编辑】
- 勾选 开启自动伸缩
- 配置参数(最小、最大节点数等)
✅ 自动帮你部署 Cluster Autoscaler,不需要手动部署 YAML
🛠️ 方式二:自建 Kubernetes + 手动部署 Cluster Autoscaler
适合你用 ECS 搭的二进制 K8s。
📌 步骤如下:
✅ 1. 创建阿里云伸缩组(Auto Scaling Group)
- 登录阿里云 → 弹性伸缩控制台
- 创建:
- 伸缩组(Node Group)
- 配置最小/最大节点数
- 配好启动配置(ECS 实例规格、镜像、加入集群脚本等)
- 启用健康检查
你可以创建多个节点组,比如 spot + 普通实例混合。
✅ 2. 节点加入 K8s 集群
建议你 ECS 启动后使用 cloud-init 或自定义脚本,自动安装 kubelet 并加入集群。加入方式可使用 token 或 CA 证书加入。
✅ 3. 在现有集群中部署 Cluster Autoscaler
创建一个 cluster-autoscaler.yaml,如下示例:
apiVersion: apps/v1
kind: Deployment
metadata:
name: cluster-autoscaler
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: cluster-autoscaler
template:
metadata:
labels:
app: cluster-autoscaler
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: cluster-autoscaler
image: registry.cn-hangzhou.aliyuncs.com/acs/cluster-autoscaler:v1.22.0
command:
- ./cluster-autoscaler
- --cloud-provider=alicloud
- --v=4
- --stderrthreshold=info
- --nodes=1:5:asg-abc1234567890 # 替换为你的伸缩组ID
resources:
limits:
cpu: 100m
memory: 300Mi
requests:
cpu: 100m
memory: 300Mi
✅
--nodes=最小:最大:伸缩组ID表示该 CA 负责的节点组
✅ 4. 授权 CA 访问阿里云 API
CA 需要访问阿里云伸缩 API:
方法一:使用阿里云 RAM 角色 + Pod Identity(推荐)
- 给节点绑定权限角色;
- Pod 自动继承节点权限。
方法二:配置 AccessKey(不推荐,安全性差)
🧪 验证:
- 创建一个资源大于现有节点容量的 Deployment
- 查看 CA 日志:
kubectl logs -n kube-system deploy/cluster-autoscaler
你会看到类似:
No nodes are available: insufficient memory
Triggering scale-up: adding 1 node to group asg-abc123...
🔔 提醒:
| 注意点 | 说明 |
|---|---|
Pod 必须配置 resources.requests |
CA 只根据 requests 来判断需不需要扩容 |
| 不建议把 CA 调度到容易被驱逐的节点 | 可用 nodeSelector 或 taint 配置 |
| DaemonSet 会占用所有节点资源 | 可影响判断节点是否空闲,谨慎使用 |
浙公网安备 33010602011771号