实现服务的动态扩缩容是提升系统弹性和资源利用率的关键手段。阿里云容器服务 ACK(Alibaba Cloud Container Service for Kubernetes)结合水平自动扩缩容(HPA,Horizontal Pod Autoscaler)与智能托管节点池,为用户提供了一套高效、智能的弹性伸缩解决方案。通过 HPA 根据应用负载自动调整 Pod 副本数,配合智能托管节点池自动管理底层计算资源,ACK 集群能够实现从应用层到基础设施层的全链路动态扩缩容,确保服务在负载波动时平稳运行,既满足业务需求,又优化了成本效益。本文将深入解析基于阿里云 ACK 集群的 HPA 与智能托管节点池的协同工作机制。
主要作用:
- 使用 Horizontal Pod Autoscaler (HPA) 进行 Pod 的自动扩缩容,并结合扩缩容节点池(Managed Node Pool)来动态调整集群的计算资源,以应对突发流量波动或大量的HTTP短连接请求。
前置条件
- 拥有有效的阿里云账号,并具备创建和管理容器服务、弹性伸缩及云服务器相关资源的权限。
- 一个稳定运行的阿里云 ACK 集群,版本建议为支持 HPA 和智能托管节点池功能的较新版本(如 1.33 及以上)
- ACK 集群中已启用并配置智能托管节点池,节点池具备自动弹性伸缩能力,并可根据负载自动调整节点数量。
1. 配置容缩池污点和标签
- 污点(Taints) 1. 名称:node.demo.com/os 2. Effect:NoSchedule 3. 值: containeros
- 节点标签(Labels) 1. 名称:alibabacloud.com/os 2. 值: containeros
2. 配置服务的HPA容缩策略
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
namespace: default
spec:
minReplicas: 1
maxReplicas: 2 # 测试2/生产5-6
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageUtilization: 100 # 所需资源达到100%
behavior: # 扩缩策略
scaleUp:
stabilizationWindowSeconds: 60 # 扩容前观察 30 秒,避免抖动
policies:
- type: Percent
value: 50
periodSeconds: 30 # 每 60 秒执行一次
- type: Pods
value: 1 # 或者每次最多扩容 1 个 Pod
periodSeconds: 30
selectPolicy: Min # 选择扩容数量最少的策略
scaleDown: # 缩容策略
stabilizationWindowSeconds: 60
policies:
- type: Pods
value: 1
periodSeconds: 30
selectPolicy: Min
3. 配置节点软亲和度和反亲和度
spec:
affinity:
nodeAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- preference:
matchExpressions:
- key: alibabacloud.com/os
operator: NotIn
values:
- containeros
weight: 100
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchExpressions:
- key: app
operator: In
values:
- nginx
topologyKey: kubernetes.io/hostname
4. 配置容忍度
tolerations:
- key: node.demo.com/os
operator: Equal
value: containeros
effect: NoSchedule
5. 扩容阐述
- 当前使用率 > 目标使用率 时,服务会先监听30s看阈值是否一直占用(stabilizationWindowSeconds: 30),之后会自动进行扩容,默认为:1
- 当前使用率 < 目标使用率 时,根据 期望副本数 = [当前副本数 × (当前指标值 / 目标指标值)] 进行自动缩容

- 当前使用率 < 目标使用率 时,根据 期望副本数 = [当前副本数 × (当前指标值 / 目标指标值)] 进行自动缩容
- 当默认节点池的资源不足以创建新的pod时,缩容节点池会自动创建新节点。

- 当默认节点池的资源不足以创建新的pod时,缩容节点池会自动创建新节点。

- 当前使用率 < 目标使用率 时,副本数会自动缩减小副本数并且优先将pod转移到旧节点池,然后把扩容节点自动释放

- 当前使用率 < 目标使用率 时,副本数会自动缩减小副本数并且优先将pod转移到旧节点池,然后把扩容节点自动释放
6. 参数指标
- 所需资源,根据具体服务使用量定,默认750M
- 期望副本数 = [当前副本数 × (当前使用率 / 目标使用率)]
- 当前使用率 = ( 所有 Pod 实际资源使用量之和 / 所有 Pod 的 Request 之和 ) × 100%
- 目标平均用量(M)= Request(M) × ( 目标使用率% / 100 )
- 目标使用率 = ( 希望的平均用量 / 所需资源 ) x 100%
Comments & discussion
The first comment in each thread opens a topic. Signed-in readers can keep the conversation going under that topic.
No comments yet. Sign in to start a topic.
Start a new topic
Sign in to start a topic or join the discussion.