阿里云实现CA节点自动扩缩容

阿里云实现CA节点自动扩缩容

🚀 一、在阿里云上实现 Cluster Autoscaler 的自动扩容

你有两种方式部署:

方式 说明
✅ 官方 ACK 控制台开启 最简单,适用于 ACK 托管集群
🛠️ 自定义集群手动部署 CA 适用于你用 ECS 自建的 K8s(如二进制部署)

✅ 方式一:ACK 托管集群控制台配置(推荐)

如果你是用的阿里云 ACK 集群(标准托管版 / 托管版):

📦 开启步骤:

  1. 打开阿里云控制台 → ACK 容器服务
  2. 找到你的集群 → 节点池
  3. 选择节点池 → 点击【编辑】
  4. 勾选 开启自动伸缩
  5. 配置参数(最小、最大节点数等)

✅ 自动帮你部署 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(不推荐,安全性差)


🧪 验证:

  1. 创建一个资源大于现有节点容量的 Deployment
  2. 查看 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 会占用所有节点资源 可影响判断节点是否空闲,谨慎使用
posted @ 2025-04-09 21:49  逃离这世界~  阅读(129)  评论(0)    收藏  举报