Cluster Proportional Autoscaler
Cluster Proportional Autoscaler(CPA) 是 Kubernetes 集群中的一种自动扩展机制,旨在根据集群中运行的 Pod 数量动态调整特定类型的资源(如 DaemonSet 或 StatefulSet)的副本数。CPA 主要用于确保这些资源能够根据集群的负载情况进行适当的扩展和收缩,从而优化资源利用率和性能。
工作原理
CPA 通过监控集群中的节点数量或可调度的核心数,根据预定义的线性或阶梯式配置来调整目标资源的副本数。主要特点:
- 线性模式(Linear):根据节点数量或核心数按照线性比例计算副本数
- 阶梯模式(Ladder):根据不同的阈值范围设置不同的副本数
- 适用场景:适合 CoreDNS、Metrics Server 等系统组件的自动扩缩容
Helm 安装
添加 Helm 仓库
helm repo add cluster-proportional-autoscaler https://kubernetes-sigs.github.io/cluster-proportional-autoscaler
helm repo update
安装 CPA
helm install cluster-proportional-autoscaler \
cluster-proportional-autoscaler/cluster-proportional-autoscaler \
--namespace kube-system \
--create-namespace \
-f values.yaml
快速安装示例
为 CoreDNS 配置自动扩缩容:
helm install coredns-autoscaler \
cluster-proportional-autoscaler/cluster-proportional-autoscaler \
--namespace kube-system \
--set config.linear.coresPerReplica=256 \
--set config.linear.nodesPerReplica=16 \
--set config.linear.min=2 \
--set config.linear.max=10 \
--set options.target="deployment/coredns"
配置说明
Values.yaml 配置示例
# 镜像配置
image:
repository: registry.k8s.io/cpa/cluster-proportional-autoscaler
tag: v1.8.9
pullPolicy: IfNotPresent
# 资源限制
resources:
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 20m
memory: 32Mi
# 配置模式:linear(线性)或 ladder(阶梯)
config:
# 线性模式配置
linear:
coresPerReplica: 256 # 每个副本对应的 CPU 核心数
nodesPerReplica: 16 # 每个副本对应的节点数
min: 2 # 最小副本数
max: 10 # 最大副本数
preventSinglePointFailure: true # 防止单点故障,至少保持 2 个副本
includeUnschedulableNodes: true # 是否包含不可调度的节点
# CPA 运行选项
options:
namespace: kube-system # 目标资源所在的命名空间
target: "deployment/coredns" # 目标资源(deployment/xxx 或 replicationcontroller/xxx)
pollPeriodSeconds: 10 # 轮询周期(秒)
logtostderr: true # 日志输出到 stderr
v: 2 # 日志级别(0-4)
# ServiceAccount 配置
serviceAccount:
create: true
name: cluster-proportional-autoscaler
annotations: { }
# 节点选择器和容忍度
nodeSelector: { }
tolerations: [ ]
affinity: { }
阶梯模式配置
config:
ladder:
nodesToReplicas:
- [ 1, 1 ] # 1 个节点时,1 个副本
- [ 2, 2 ] # 2-4 个节点时,2 个副本
- [ 5, 3 ] # 5-9 个节点时,3 个副本
- [ 10, 5 ] # 10+ 个节点时,5 个副本
coresToReplicas:
- [ 1, 1 ]
- [ 64, 3 ]
- [ 128, 5 ]
- [ 256, 7 ]