HPA全名Horizontal Pod Autoscaling,既Pod水平自动伸缩。其基本原理的监控分析RC或者Deployment控制的所有的Pod的负载情况来确定是否需要调整Pod的副本数。
HPA在kubernetes集群中被设计成了一个controller,我们可以直接通过kubectl autoscale命令来创建一个HPA对象,HPA controller默认15s轮询一次,查询指定的资源中的Pod的使用率,并于创建时设定的指标做对比,从而实现自动伸缩的功能。
目前HPA可以从两个地方获取数据:
--horizontal-pod-autoscaler-sync-period
进行设置)的调整对应的rc, deployment中的replicas数量,使得指定的metrics value能匹配用户指定的target utilization value。
HPA Controller有两种方式获取metrics:
--horizontal-pod-autoscaler-use-rest-clients
flag为true。从最基本的角度来看,pod 水平自动缩放控制器跟据当前指标和期望指标来计算缩放比例。
期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]
例如,当前指标为200m
,目标设定值为100m
,那么由于200.0 / 100.0 == 2.0
, 副本数量将会翻倍。 如果当前指标为50m
,副本数量将会减半,因为50.0 / 100.0 == 0.5
。 如果计算出的缩放比例接近1.0(跟据--horizontal-pod-autoscaler-tolerance
参数全局配置的容忍值,默认为0.1), 将会放弃本次缩放。
例子:创建一个Deployment的Pod,然后利用HPA来实现自动扩缩容。
1、创建一个Deployment的YAML文件
apiVersion: apps/v1beta2 kind: Deployment metadata: name: nginx-deploy-hpa labels: app: nginx-demo spec: revisionHistoryLimit: 15 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: my-nginx image: nginx:1.7.9 imagePullPolicy: IfNotPresent ports: - containerPort: 80
2、创建Deployment
kubectl apply -f nginx-deplo.yaml
3、创建HPA,用kubectl autoscale命令创建
kubectl autoscale deployment nginx-deploy-hpa --cpu-percent=10 --max=10 horizontalpodautoscaler.autoscaling/nginx-deploy-hpa autoscaled kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE nginx-deploy-hpa Deployment/nginx-deploy-hpa <unknown>/10% 1 10 1 27s
YAML文件格式如下:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: hpa-demo spec: maxReplicas: 10 minReplicas: 1 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx-deploy targetCPUUtilizationPercentage: 55
原文:https://www.cnblogs.com/liang-io/p/14096455.html