【kubernetes】实战:HPA自动扩/缩容

实现原理

针对Pod 自动扩缩容,主要根据检测 CPU 使用率或自定义指标(metrics) 是否达到预定义限制,从而自动对 Pod 进行扩/缩容。

通常对Deployment,StatefulSet进行扩缩容。不适用于无法扩/缩容的对象(如:DaemonSet)

检测方法

1,控制管理器每隔30s对metrics的资源使用情况进行查询。
(间隔时间30s,可以通过-horizontal-pod-autoscaler-sync-period修改)。

2,支持三种metrics类型:

  • 预定义metrics(bPod的CPU)以利用率的方式计算
  • 自定义的Pod metrics,以始值(raw value)的方式计算
  • 自定义的object metrics

3,支持两种metrics查询方式:

  • Heapster
  • 自定义的REST API

4, 支持多metrics

具体步骤

第1步:定义deploy,指定副本数,设置资源限制

# cat hpa-nginx-deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-nginx-deploy
spec:
  replicas: 2         # 指定副本数
  selector:
    matchLabels:
      app: nginx-hpa
  template:
    metadata:
      labels:
        app: nginx-hpa
    spec:
      containers:
      - name: nginx
        image: nginx
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 80
        resources:
          requests:          # 指定最小限制
            cpu: "30m"
            memory: "128Mi"
          limits:            # 指定最大限制
            cpu: "50m"
            memory: "128Mi"

第2步:创建一个 HPA(主要步骤)

当cpu占用超过20%时,进行扩容,最多增加到5个pod;
当cpu占用低于20%时,进行缩容,最少减少到2个pod;

kubectl autoscale deploy  <deploy名>  --cpu-percent=20  --min=2  --max=5

第3步:安装测试metrics插件

通过kubectl top pod <pod名> 查看pod或node的cpu和内存占用情况。需要安装插件。

# 下载插件文件
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml -O metrics-server-components.yaml

# 替换镜像为阿里云
sed -i 's/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g' metrics-server-components.yaml

# 配置文件增加参数(见下图)
 - --kubelet-insecure-tls

# 安装此文件
kubectl apply -f metrics-server-components.yaml

# 查看是否运行, running为正常
kubectl get pod --all-namespaces | grep metrics

# 查看cpu占用情况
kubectl top pods

在这里插入图片描述
在这里插入图片描述

第4步:验证测试

1,为deploy添加一个servce的四层代理,获取代理的ip和端口

# cat hpa-nginx-service.yaml

apiVersion: v1
kind: Service
metadata:
  name: hpa-nginx-service
  namespace: default
spec:
  selector:
    app: nginx-hpa
  ports:
  - name: web-nginx
    port: 80
    targetPort: 80
  type: NodePort                

在这里插入图片描述
获取ip:10.110.106.116
获取端口:80:31601/TCP

2,在另外两台node集群添加压力测试命令(死循环程序)

# 编写循环测试脚本提升内存与cpu 负载
while true; do wget -q -o- http://<ip:port> > /dev/null ; done

while true; do wget -q -o- http://10.110.106.116 > /dev/null ; done

# 另开终端,动态获取 HPA 信息比例
kubectl get hpa

第5步:结果

开始:
在这里插入图片描述

自动扩容:

在这里插入图片描述

自动缩容:
在这里插入图片描述
在这里插入图片描述
【注意】:自动缩容时间比较长,大概5-6分钟左右!

结束!

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直奔跑在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值