当系统资源太高的时候,咱们能够使用命令来实现 Pod 的扩缩容功能,可是这个过程是手动操做的。在实际项目中,咱们须要作到是的是一个自动化感知并自动扩容的操做。Kubernetes 也为提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA;基于CPU、内存、自定义数据(此章不实现,基于监控数据实现)进行Deployment或RC所管理的POD资源进行扩容与收缩。
HPA实现的有两个版本:git
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_bytesgithub
一、下载地址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
四、验证安装结果curl
五、curl展现获取某个pod的CPU与内存使用数据ide
一、基于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%时进行扩容
二、建立与查看url
三、模拟压测spa
一、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
二、建立与查看