
Horizontal Pod Autoscaler (HPA) Pod动态扩容
HPA简介
我们都知道通过手工执行
kubectl scale
命令可以手工实现Pod的扩容于缩容。
而后谷歌又发布了一个动态扩容与缩容的功能就是(HPA)
检测方式
- CPUUtilizationPercentage 通过运算Pod的平均值来进行动态
- 通过应用自定义的度量来进行,比如Service在每秒内的相应请求数(TPS或QPS)
HAP define Yaml(v1)
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
kind: Deployment
name: php-apache
targetCPUUtilizationPercentage: 90
等同于
kubectl autoscale deployment php-apache --cpu-percent=90 --min=1 --max=10
解释一下
名称 | 定义 |
---|---|
scaleTargetRef | 监控目标 |
scaleTargetRef->kind | 监控类型 |
scaleTargetRef->name | 监控名称 |
maxReplicas | 控制Pod最大副本数量 |
targetCPUUtilizationPercentage | 当CPU的值超过 90% 将自动进行扩容 |
简单一句话:监控名为php-apache的Deployment控制器,当控制器中的 Pod CPU值超过 90% 将进行扩容 Pod 的副本数量,扩容数量范围在 1~10 之间。
注意:请提前预装Heapster组件或Metrics Server
Pod简单实现水平扩容方式
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-demo
namespace: netcore
labels:
name: k8s-demo
spec:
replicas: 2
selector:
matchLabels:
name: k8s-demo
template:
metadata:
labels:
name: k8s-demo
spec:
containers:
- name: k8s-demo
image: aidasi/k8sdemoapi:v2
resources:
requests:
cpu: 200m
memory: 200Mi
limits:
cpu: 1
memory: 500Mi
ports:
- containerPort: 80
imagePullPolicy: Always
livenessProbe:
httpGet:
path: /WeatherForecast/1
port: 80
timeoutSeconds: 5
readinessProbe:
httpGet:
path: /WeatherForecast/1
port: 80
timeoutSeconds: 5
---
kind: Service
apiVersion: v1
metadata:
name: k8s-demo
namespace: netcore
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
selector:
name: k8s-demo
HAP define Yaml(v2)
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
namespace: default
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
名称 | 定义 |
---|---|
metrics | 目标指标值。(当系统超过目标值时,自动进行扩缩操作) |
metrics—>type | 指标类型。 1. Resource: 可以设置CPU(Utilization)与内存(AverageValue)(都是通过平均值进行计算)。 2. Pods:通过Pod副本的标志值进行平均值计算 . 3. Object:通过应用系统自定义指标值进行运算(如:ingress) 注意:都需要预先启动 Metrics Server 服务 |
Pod类型的用法
设置Pod的标志名为packets-per-second ,在目标 Pod 内存平均值为 1000 时,进行扩缩容操作。
metrics:
- type: Pods
pod:
name: packets-per-second
target:
type: AverageValue
averageValue: 1k
Object类型的用法
设置标志名为packets-per-second ,其值来源于 Ingress “main-route”,将目标值(value)设置为2000,即在 Ingress 的每秒请求数量高达 2000 个时进行扩缩操作。
metrics:
- type: Object
object:
metric:
name: requests-per-second
describedObject:
apiVersion: extensions/v1beta1
kind: Ingress
name: main-route
target:
type: Value
averageValue: 2k
Example Two:
设置标志名为
http_requests
,并且该资源对象具有标签verb=GET
,在指定平均值达到500时触发扩缩容操作
metrics:
- type: Object
object:
metric:
name: 'http_requests'
selector: 'verb=GET'
target:
type: AverageValue
averageValue: 500
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
642
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术