2 分钟阅读
Kubernetes 用户希望使用 HPA 来实现按需使用,提示资源利用率。但是往往不知道哪些应用适合弹性也不知道如何配置HPA的参数。通过 HPA 推荐的算法分析应用的真实用量推荐合适的水平弹性的配置,您可以参考并采纳它提升应用资源利用率。
HPA 推荐还处于 Alpha 阶段,欢迎对功能提供意见。
在 Kubernetes 中,HPA(HorizontalPodAutoscaler) 自动更新工作负载资源 (例如 Deployment 或者 StatefulSet), 目的是自动扩缩工作负载以满足需求。但是在实际使用过程中我们观察到以下使用问题:
HPA 推荐通过应用的历史数据结合算法分析给出建议:哪些应用适合配置 HPA 以及 HPA 的配置。
一个简单的弹性推荐 yaml 文件如下:
apiVersion: analysis.crane.io/v1alpha1
kind: Recommendation
metadata:
labels:
analysis.crane.io/recommendation-rule-name: workload-hpa
analysis.crane.io/recommendation-rule-recommender: HPA
analysis.crane.io/recommendation-rule-uid: 0214c84b-8b39-499b-a7c6-559ac460695d
analysis.crane.io/recommendation-target-kind: Rollout
analysis.crane.io/recommendation-target-name: eshop
analysis.crane.io/recommendation-target-version: v1alpha1
name: workload-hpa-hpa-blr4r
namespace: zytms
ownerReferences:
- apiVersion: analysis.crane.io/v1alpha1
blockOwnerDeletion: false
controller: false
kind: RecommendationRule
name: workload-hpa
uid: 0214c84b-8b39-499b-a7c6-559ac460695d
spec:
adoptionType: StatusAndAnnotation
completionStrategy:
completionStrategyType: Once
targetRef:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
name: eshop
namespace: eshop
type: HPA
status:
action: Create
lastUpdateTime: "2022-12-05T06:12:54Z"
recommendedInfo: '{"kind":"EffectiveHorizontalPodAutoscaler","apiVersion":"autoscaling.crane.io/v1alpha1","metadata":{"name":"eshop","namespace":"eshop","creationTimestamp":null},"spec":{"scaleTargetRef":{"kind":"Rollout","name":"eshop","apiVersion":"argoproj.io/v1alpha1"},"minReplicas":1,"maxReplicas":1,"scaleStrategy":"Preview","metrics":[{"type":"Resource","resource":{"name":"cpu","target":{"type":"Utilization","averageUtilization":58}}},{"type":"Pods","pods":{"metric":{"name":"k8s_pod_cpu_core_used"},"target":{"type":"AverageValue","averageValue":"500m"}}}]},"status":{}}'
recommendedValue: |
effectiveHPA:
maxReplicas: 1
metrics:
- resource:
name: cpu
target:
averageUtilization: 58
type: Utilization
type: Resource
- pods:
metric:
name: k8s_pod_cpu_core_used
target:
averageValue: 500m
type: AverageValue
type: Pods
minReplicas: 1
在该示例中:
HPA 推荐按以下步骤完成一次推荐过程:
适合使用 HPA 的 Workload 需要满足以下条件:
以下是一个典型的存在波峰波谷规律的 Workload 的历史资源用量
方法和副本推荐中计算副本算法一致,请参考:副本推荐
默认支持 StatefulSet 和 Deployment,但是支持所有实现了 Scale SubResource 的 Workload。
配置项 | 默认值 | 描述 |
---|---|---|
workload-min-replicas | 1 | 小于该值的工作负载不做弹性推荐 |
pod-min-ready-seconds | 30 | 定义了 Pod 是否 Ready 的秒数 |
pod-available-ratio | 0.5 | Ready Pod 比例小于该值的工作负载不做弹性推荐 |
default-min-replicas | 1 | 最小 minReplicas |
cpu-percentile | 0.95 | 历史 CPU 用量的 Percentile |
mem-percentile | 0.95 | 历史内存用量的 Percentile |
cpu-target-utilization | 0.5 | CPU 目标峰值利用率 |
mem-target-utilization | 0.5 | 内存目标峰值利用率 |
predictable | false | 当设置成 true 时,如果 CPU 历史用量无法预测,则不进行推荐 |
reference-hpa | true | 推荐配置会参考现有 HPA 的配置,继承比如自定义指标等信息到 EHPA |
min-cpu-usage-threshold | 1 | Workload CPU 最小用量,如果历史用量小于该配置,则不进行推荐 |
fluctuation-threshold | 1.5 | Workload CPU 的波动率,小于该配置,则不进行推荐 |
min-cpu-target-utilization | 30 | CPU 的 TargetUtilization 最小值 |
max-cpu-target-utilization | 75 | CPU 的 TargetUtilization 最大值 |
max-replicas-factor | 3 | 在计算 maxReplicas 时的放大系数 |
如何更新推荐的配置请参考:推荐框架