K8S进阶实践 之 经过HPA实现业务应用的动态扩缩容

1、HPA控制器介绍

当系统资源太高的时候,咱们能够使用命令来实现 Pod 的扩缩容功能,可是这个过程是手动操做的。在实际项目中,咱们须要作到是的是一个自动化感知并自动扩容的操做。Kubernetes 也为提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA;基于CPU、内存、自定义数据(此章不实现,基于监控数据实现)进行Deployment或RC所管理的POD资源进行扩容与收缩。
HPA实现的有两个版本:git

  • autoscaling/v1,只包含了根据CPU指标的检测,稳定版本
  • autoscaling/v2beta1,支持根据memory或者用户自定义指标进行伸缩

K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容

2、Metric Server的原理

一、做用

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
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容github

二、Meteric 的数据流

K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容

3、Meteric Server安装

一、下载地址docker

$ wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml

二、修改相关的内容api

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     #增长内容

三、安装app

$ kubectl create -f components.yaml

四、验证安装结果
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容curl

五、curl展现获取某个pod的CPU与内存使用数据
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容ide

4、创建基于myblog项目的CPU的HPA

一、基于CPU的动态扩缩容google

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%时进行扩容

二、建立与查看
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容url

三、模拟压测
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容spa

备注:如压测完成后,CPU使用率降低后,系统会自动进行缩容(每5分钟为间隔)

5、创建基于myblog项目的memory的HPA

一、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

二、建立与查看
K8S进阶实践  之  经过HPA实现业务应用的动态扩缩容

相关文章
相关标签/搜索