一、HPA控制器介绍
当系统资源过高的时候,我们可以使用命令来实现 Pod 的扩缩容功能,但是这个过程是手动操作的。在实际项目中,我们需要做到是的是一个自动化感知并自动扩容的操作。Kubernetes 也为提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA;基于CPU、内存、自定义数据(此章不实现,基于监控数据实现)进行Deployment或RC所管理的POD资源进行扩容与收缩。 HPA实现的有两个版本:
- autoscaling/v1,只包含了根据CPU指标的检测,稳定版本
- autoscaling/v2beta1,支持根据memory或者用户自定义指标进行伸缩
二、Metric Server的原理
1、作用
Metrics Server 作为标准的 Kubernetes API 把监控数据暴露出来的服务,比如获取某一Pod的监控数据;无论是 heapster还是 metric-server,都只是数据的中转和聚合,两者都是调用的 kubelet 的 api 接口获取的数据,而 kubelet 代码中实际采集指标的是 cadvisor 模块;cadvisor获取指标时实际调用的是 runc/libcontainer库,而libcontainer是对 cgroup文件 的封装,即 cadvsior也只是个转发者,它的数据来自于cgroup文件。 cgroup文件中的值是监控数据的最终来源,如 mem usage的值, 对于docker容器来讲,来源于/sys/fs/cgroup/memory/docker/[containerId]/memory.usage_in_bytes 对于pod来讲,/sys/fs/cgroup/memory/kubepods/besteffort/pod[podId]/memory.usage_in_bytes
2、Meteric 的数据流
三、Meteric Server安装
1、下载地址
$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml
2、修改相关的内容
84 containers:
85 - name: metrics-server
86 image: registry.aliyuncs.com/google_containers/metrics-server-amd64:v0.3.6 #修改镜像
87 imagePullPolicy: IfNotPresent
88 args:
89 - --cert-dir=/tmp
90 - --secure-port=4443
91 - --kubelet-insecure-tls #增加内容
92 - --kubelet-preferred-address-types=InternalIP #增加内容
3、安装
$ kubectl create -f components.yaml
4、验证安装结果
5、curl展示获取某个pod的CPU与内存使用数据
四、建立基于myblog项目的CPU的HPA
1、基于CPU的动态扩缩容
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-myblog-cpu
namespace: kang #必须与该deployment相同的命名空间
spec:
maxReplicas: 3 #最大3个pod
minReplicas: 1 #最小1个pod
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment #hpa接管的资源类型,可以是RC等等等
name: app #必须与kind资源的名称匹配
targetCPUUtilizationPercentage: 10 #超过10%时进行扩容
2、创建与查看
3、模拟压测
备注:如压测完成后,CPU使用率下降后,系统会自动进行缩容(每5分钟为间隔)
五、建立基于myblog项目的memory的HPA
1、yaml文件
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: hpa-demo-mem
namespace: kang
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: app
minReplicas: 1
maxReplicas: 3
metrics:
- type: Resource
resource:
name: memory
targetAverageUtilization: 30
2、创建与查看