横向伸缩
创建 HPA
kubectl autoscale deployment kubia --cpu-percent=30 --min=1 --max=5apiVersion: autoscaling/v2beta2 # 注意版本
kind: HorizontalPodAutoscaler # 资源类型
metadata:
name: kubia # HPA 资源对象名
namespace: default # 所在命名空间
spec:
maxReplicas: 5 # 目标资源对象中 replicas 可调成的最大值
minReplicas: 1 # 目标资源对象中 replicas 可调成的最小值
scaleTargetRef: # 需要调整的目标资源对象(!)
apiVersion: apps/v1 # 目标资源所在 API 版本
kind: Deployment # 目标资源类型
name: kubia # 目标资源对象名
metrics: # 度量(重点!!决定了以什么为标准决定是否伸缩、如何伸缩)
- resource: # Resource 类型度量对应的就是该字段
name: cpu # 参考的资源类型(如果是内存,就是 memory)
target:
averageUtilization: 30 # 调整目标对象的 Pod 副本数直至其中所有 Pod 的 CPU 实际平均利用率应该接近申请量的 30%
type: Utilization # 根据利用率伸缩
type: Resource # Resource 类型度量(还有 Pod 和 Object 两种)
- pods: # Pods 类型度量对应的就是该字段
metric:
name: packets-per-second # 参考的资源类型,这里是包的 QPS,该字段是通过其他手段添加至 API 服务器提供的 /metrics 下的度量类型
target:
averageValue: 1k # 调整目标对象的 Pod 副本数直至其中所有 Pod 的平均 QPS 接近 1K
type: Pods # Pods 类型度量
- object: # Object 类型度量对应的就是该字段
metric:
name: requests-per-second # 参考的资源类型,这里是请求 main-route 这个 Ingress 中的 Pod 的 QPS,该字段是通过其他手段添加至 API 服务器提供的 /metrics 下的度量类型
describedObject: # 度量对象
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
name: main-route
target:
type: Value
value: 2k # 调整目标对象的 Pod 副本数直至度量对象(main-route)中所有 Pod 的总 QPS 接近 2K
type: Object # Object 类型度量伸缩过程

获取度量
计算所需 Pod 数量
多个度量时
更新目标对象的副本数

Last updated