以下のように、CPU とメモリに k8s HPA テンプレートを使用しています。
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: {{.Chart.Name}}-cpu
labels:
app: {{.Chart.Name}}
chart: {{.Chart.Name}}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{.Chart.Name}}
minReplicas: {{.Values.hpa.min}}
maxReplicas: {{.Values.hpa.max}}
targetCPUUtilizationPercentage: {{.Values.hpa.cpu}}
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: {{.Chart.Name}}-mem
labels:
app: {{.Chart.Name}}
chart: {{.Chart.Name}}
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: {{.Chart.Name}}
minReplicas: {{.Values.hpa.min}}
maxReplicas: {{.Values.hpa.max}}
metrics:
- type: Resource
resource:
name: memory
target:
type: Utilization
averageValue: {{.Values.hpa.mem}}
2 つの異なる HPA があると、ポッドの CPU 使用率が CPU のスケールダウン トリガーを下回っているため、メモリ HPA 制限をトリガーするためにスピンアップされた新しいポッドが CPU HPA によって即座に終了します。スピンアップされた最新のポッドが常に終了するため、古いポッドが保持され、メモリ HPA が再びトリガーされ、無限ループが発生します。毎回発生中のポッドではなく、使用率の高いポッドを終了するように CPU HPA に指示する方法はありますか?