如何让k8scpu和内存HPA协同工作?
How to make k8s cpu and memory HPA work together?
我正在为 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}}
有两个不同的 HPA 会导致任何新的 pods 启动以触发内存 HPA 限制立即被 CPU HPA 作为 pods' CPU 用法终止低于 CPU 的缩小触发器。
它总是会终止最新的 pod 旋转起来,这会保留较旧的 pods 并再次触发内存 HPA,从而导致无限循环。
有没有办法指示 CPU HPA 以更高的使用率终止 pods 而不是每次都使用新生的 pods?
根据评论中的建议,使用单个 HPA 解决了我的问题。我只需要将 CPU HPA 移动到与内存 HPA 相同的 apiVersion。
我正在为 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}}
有两个不同的 HPA 会导致任何新的 pods 启动以触发内存 HPA 限制立即被 CPU HPA 作为 pods' CPU 用法终止低于 CPU 的缩小触发器。 它总是会终止最新的 pod 旋转起来,这会保留较旧的 pods 并再次触发内存 HPA,从而导致无限循环。 有没有办法指示 CPU HPA 以更高的使用率终止 pods 而不是每次都使用新生的 pods?
根据评论中的建议,使用单个 HPA 解决了我的问题。我只需要将 CPU HPA 移动到与内存 HPA 相同的 apiVersion。