Kubernetes(k8s)之HPA
Posted Tuki_a
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kubernetes(k8s)之HPA相关的知识,希望对你有一定的参考价值。
HPA简介
Horizontal Pod Autoscaler 可以根据 CPU 利用率自动扩缩 ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的Pod 数量 (也可以基于其他应用程序提供的度量指标,目前这一功能处于 beta 版本即测试版本)。
官方文档:https://kubernetes.io/zh/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/
HPA伸缩过程
1、收集HPA控制下所有Pod最近的cpu使用情况(CPU utilization)
2、对比在扩容条件里记录的cpu限额(CPUUtilization)
3、调整实例数(必须要满足不超过最大/最小实例数)
4、每隔30s做一次自动扩容的判断
CPU utilization的计算方法是用cpu usage(最近一分钟的平均值,通过metrics可以直接获取到)除以cpu request(这里cpu request就是我们在创建容器时制定的cpu使用核心数)得到一个平均值,这个平均值可以理解为:平均每个Pod CPU核心的使用占比。
HPA进行伸缩算法
计算公式:TargetNumOfPods = ceil(sum(CurrentPodsCPUUtilization) / Target)
ceil()
表示取大于或等于某数的最近一个整数。
每次扩容后冷却3分钟才能再次进行扩容,而缩容则要等5分钟后。
当前Pod Cpu使用率与目标使用率接近时,不会触发扩容或缩容:
触发条件:avg(CurrentPodsConsumption) / Target
>1.1 或 <0.9
演示环境
server1:172.25.38.1 harbor仓库端
server2:172.25.38.2 k8s master端
server3:172.25.38.3 k8s node端
server4:172.25.38.4 k8s node端
单条资源限制
Hpa会根据Pod的CPU使用率动态调节Pod的数量。
先拉取一个镜像为之后做测试用
改标签上传到仓库
创建一个新目录
编写创建控制器和服务的定义文件,使用Deployment生成php-apache,开放端口80。内容如下:
[root@server2 hpa]# vim deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: php-apache
spec:
selector:
matchLabels:
run: php-apache
replicas: 1
template:
metadata:
labels:
run: php-apache
spec:
containers:
- name: php-apache
image: library/hpa-example #刚刚拉取的镜像地址
ports:
- containerPort: 80
resources:
limits:
cpu: 500m
requests:
cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
name: php-apache
labels:
run: php-apache
spec:
ports:
- port: 80
selector:
run: php-apache
应用文件,控制器和服务创建成功
访问IP,效果如下,镜像里有一个php文件,内容就是OK!
现在,php-apache 服务器已经运行,我们将通过 kubectl autoscale 命令创建 Horizontal Pod Autoscaler。 以下命令将创建一个 Horizontal Pod Autoscaler 用于控制我们上一步骤中创建的 Deployment,使 Pod 的副本数量维持在 1 到 10 之间。 大致来说,HPA 将(通过 Deployment)增加或者减少 Pod 副本的数量以保持所有 Pod 的平均 CPU 利用率在 50% 左右(由于每个 Pod 请求 200 毫核的 CPU,这意味着平均 CPU 用量为 100 毫核)
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
可以查看hpa,只有一个pod
现在进行压力测试,不断写入,增大cpu负载
新开一个shell,实时查看pod状态
可以看到CPU占用率上升又下降(建立pod的过程)
超过限定之值,随着负载增大,hpa开始扩容,pod数量增多,用于缓解压力
会慢慢变化,最终趋于50%这个值左右
关闭测试pod,开始冷却,负载下降,单个pod cpu占用降低,但pod数量没有下降,负载最终降至零,pod数量减少。
多条资源限制
文件内容如下:
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: php-apache
spec:
maxReplicas: 10
minReplicas: 1
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: php-apache
metrics:
- type: Resource
resource:
name: cpu
target:
averageUtilization: 60 #cpu占用率cpu:60
type: Utilization
- type: Resource
resource:
name: memory
target:
averageValue: 50Mi #内存占用 mem:50
type: AverageValue
应用文件创建hpa,监控内容为内存和cpu
以上是关于Kubernetes(k8s)之HPA的主要内容,如果未能解决你的问题,请参考以下文章
k8s 读书笔记 - kubernetes 基本概念和术语(下)