之前的k8s版本是1.23.3 前几天升级到了1.28.2
在处理代码部署过程中,出现了一个问题,就是自动伸缩出现了unknow,然后找GPT问了下,给的建议如下
根据你提供的这两个 HorizontalPodAutoscaler(HPA)的 YAML 定义来看,manage-api-hpa-c App 用于处理 CPU 的自动扩缩,而 manage-api-hpa-m App 用于处理内存的自动扩缩,但两者都定向到相同的 Deployment(manage-api)。这就是我们在前面的描述输出中看到的问题原因。
在 Kubernetes 中,同一个 Deployment 在一个命名空间只能由一个 HPA 控制。你应该只有一个配置了多个资源(这里是 CPU 和 内存)的 HPA 而不是为每个资源(即 CPU,内存)设一个HPA。
解决办法是将这两个 HPA 合并为一个,让它同时对 CPU 和 Memory 进行 autoscaling,你可以按照以下的方式定义你的 HPA 配置(对应的版本为1.28.2):
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: manage-api-hpa
namespace: mirror
labels:
app: manage-api-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: manage-api
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 80
type: Utilization
- type: Resource
resource:
name: memory
target:
averageUtilization: 80
type: Utilization
原本的是分开写的,现在二合一了
原本的脚本我展示下(对应的k8s版本为1.23.3):
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: manage-api-hpa-c
namespace: mirror
labels:
app: manage-api-hpa-c
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: manage-api
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 80
---
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: manage-api-hpa-m
namespace: mirror
labels:
app: manage-api-hpa-m
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: manage-api
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: memory
targetAverageUtilization: 80