【发布时间】:2021-06-23 02:09:41
【问题描述】:
我正在为 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}}
由于 pod 的 CPU 使用率低于 CPU 的缩减触发器,因此拥有两个不同的 HPA 会导致任何新的 pod 启动以触发内存 HPA 限制,从而立即被 CPU HPA 终止。 它总是会终止最新启动的 pod,这会保留旧的 pod 并再次触发内存 HPA,从而导致无限循环。 有没有办法指示 CPU HPA 每次都终止使用率较高的 pod 而不是新生的 pod?
【问题讨论】:
-
我看到您的两个 HPA 都在进行相同的部署。为什么不使用单个 HPA 来衡量 CPU 和内存?
-
内存和 CPU 自动缩放 HPA 有不同的 apiVersions @rock'nrolla
-
@rock'nrolla 感谢您的建议,我之前没有想到也将自动缩放 apiVersion v2beta2 用于 cpu。它解决了我的问题。
标签: kubernetes hpa horizontal-pod-autoscaling