2.8 K8s控制器资源对象之 Hpa
HPA可作为KubernetesAPI资源的控制实现,它基于采集到得资源指标数据来调整控制器的行为,可以实现pod的自动扩缩容。HPA获取资源指标数据是通过metrics-server和REST客户端接口获取,所以要想使用HPA,前提是必须部署好metric-server组件。目前HPA有两个版本分别是HPA和HPA v1。
如果部署了prometheus监控,由于其包含了metric-server组件,可以不用再单独部署metric-server。
例如对deployment/cc-main进行基于cpu使用率的HPA:
kubectl autoscale deployment cc-main --min=2 --max=10 --cpu-percent=80
或:yaml方式
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: cc-main
spec:
maxReplicas: 10
minReplicas: 2
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: cc-main
targetCPUUtilizationPercentage: 80
HPA(v1)只能基于cpu实现自动弹性伸缩,HPA(v2)控制器基支持基于核心指标CPU和内存资源及基于任意自定义指标metric资源占用状态实现规模的弹性伸缩,它从metrics-service中请求查看核心指标。
定义一个基于内存和cpu的hpa控制器资源配置清单如下:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: mynginx
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: mynginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
targetAverageUtilization: 50
- type: Resource
resource:
name: memory
targetAverageValue: 50Mi
spec中嵌套的个字段的说明如下:
(1)minReplicas:自动伸缩pod副本数下限
(2)maxReplicas:自动伸缩可扩展至Pod副本数的上限
(3)scaleTargetRef:要伸缩的目标资源
(4)metrics:用于计算所需的Pod副本数量的指标列表
(5)external:用于应用非附属于任何对象的全局指标
(6)object:应用描述集群中某单一对象的特定指标
(7)pods:应用被弹性伸缩的pod对象的特定指标
(8)resource:应用资源指标,即当前被弹性伸缩的pod对象中容器的requests和limits中定义的指标。
(9)type:标识指标源的类型