k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)

文章目录

  • 一、HPA简介及工作原理
    • 1.简介
    • 2.HPA 的工作原理
  • 二、单一量度指标
    • 1.上传镜像
    • 2.部署
    • 3.压测:增加负载
    • 4.pod负载上升
    • 5.触发hpa扩容pod
  • 三、多项量度指标
    • 1.生成文件并修改
    • 2.测试


一、HPA简介及工作原理

官方:https://kubernetes.io/zh-cn/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

1.简介

HPA的全称为(Horizontal Pod Autoscaling)它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。
当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。
k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第1张图片

2.HPA 的工作原理

  • k8s中的某个Metrics Server(Heapster或自定义Metrics Server)持续采集所有Pod副本的指标数据。
  • HPA控制器通过Metrics Server的API(Heapster的API或聚合API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标Pod副本数量。
  • 当目标Pod副本数量与当前副本数量不同时,HPA控制器就访问Pod的副本控制器(Deployment 、RC或者ReplicaSet)发起scale操作,调整Pod的副本数量,完成扩缩容操作。
    k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第2张图片

k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第3张图片

二、单一量度指标

1.上传镜像

k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第4张图片

2.部署

k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第5张图片

[root@k8s2 ~]# mkdir hpa
[root@k8s2 ~]# cd hpa
[root@k8s2 hpa]# vim hpa.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: hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m                     ##200m的50%是100m,也就是超过100m进行动态拉伸
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache
[root@k8s2 hpa]# kubectl apply -f hpa.yaml
hpa控制器:
[root@k8s2 hpa]# kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

[root@k8s2 hpa]# kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        1          73s

3.压测:增加负载

增加CPU负载,压svc
[root@k8s2 hpa]# kubectl run -i --tty load-generator --rm --image=busybox --restart=Never – /bin/sh -c “while sleep 0.01; do wget -q -O- http://php-apache; done”

注:http://php-apache访问到svc,也可以改为地址http://10.110.200.191
在这里插入图片描述

4.pod负载上升

[root@k8s2 ~]# kubectl  top pod
NAME                          CPU(cores)   MEMORY(bytes)
load-generator                24m          3Mi
php-apache-6496844877-d7gfz   409m         14Mi

5.触发hpa扩容pod

k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第6张图片

k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第7张图片
结束压测后,默认等待5分钟冷却时间,pod会被自动回收

三、多项量度指标

1.生成文件并修改

[root@k8s2 hpa]# kubectl get hpa php-apache -o yaml > hpa-v2.yaml

修改hpa-v2.yaml文件,增加内存指标

  • resource:
    name: memory
    target:
    averageValue: 50Mi
    type: AverageValue
    type: Resource
    k8s--kubernetes资源监控--HPA实例(水平pod自动扩缩容)_第8张图片

2.测试

[root@k8s2 hpa]# kubectl apply -f hpa-v2.yaml


[root@k8s2 hpa]# kubectl get hpa
NAME         REFERENCE               TARGETS                 MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   15835136/50Mi, 0%/50%   1         10        1          20m

在这里插入图片描述


你可能感兴趣的:(k8s,kubernetes,docker,容器)