HorizontalPodAutoscaler의 behavior 필드 중 stabilizationWindowSeconds 값이 Kubernetes 코드에서 어떻게 사용되는지 분석
코드 분석
코드 분석 보고서
Last updated
Last updated
func computeDesiredReplicas(
currentReplicas int32,
scaleUpBehavior *autoscalingv2.HPAScalingRules,
scaleDownBehavior *autoscalingv2.HPAScalingRules,
...
) (int32, string, error) {
...
// Stabilize the recommendation if needed
if stabilizationWindowSeconds := behavior.ScaleDown.StabilizationWindowSeconds; stabilizationWindowSeconds != nil {
// stabilizeRecommendation 함수 호출
proposedReplicas, timestamp = stabilizeRecommendation(
*stabilizationWindowSeconds, // stabilizationWindowSeconds 값 전달
timestamp,
recommendations,
proposedReplicas,
)
}
...
}func stabilizeRecommendation(
stabilizationWindowSeconds int32,
timestamp time.Time,
recommendations []timestampedRecommendation,
proposedReplicas int32,
) (int32, time.Time) {
stableTimestamp := timestamp
stableReplicas := proposedReplicas
for _, rec := range recommendations {
// stabilizationWindowSeconds 값을 기준으로 안정화 기간을 비교
if rec.timestamp.Add(time.Duration(stabilizationWindowSeconds) * time.Second).After(timestamp) {
if rec.replicas < stableReplicas {
stableReplicas = rec.replicas
stableTimestamp = rec.timestamp
}
}
}
return stableReplicas, stableTimestamp
}apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: my-app-hpa
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-app
minReplicas: 1
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
behavior:
scaleDown:
stabilizationWindowSeconds: 300 # 안정화 기간 300초
policies:
- type: Percent
value: 100
periodSeconds: 15
scaleUp:
stabilizationWindowSeconds: 0
policies:
- type: Percent
value: 100
periodSeconds: 15
- type: Pods
value: 4
periodSeconds: 15
selectPolicy: Max