1.什么是HPA?

在 Kubernetes 中,HorizontalPodAutoscaler 自动更新工作负载资源 (例如 Deployment 或者 StatefulSet), 目的是自动扩缩工作负载以满足需求。

水平扩缩意味着对增加的负载的响应是部署更多的 Pods。 这与 “垂直(Vertical)” 扩缩不同,对于 Kubernetes, 垂直扩缩意味着将更多资源(例如:内存或 CPU)分配给已经为工作负载运行的 Pod。

如果负载减少,并且 Pod 的数量高于配置的最小值, HorizontalPodAutoscaler 会指示工作负载资源( Deployment、StatefulSet 或其他类似资源)缩减。

水平 Pod 自动扩缩不适用于无法扩缩的对象(例如:DaemonSet。)

HorizontalPodAutoscaler 被实现为 Kubernetes API 资源和控制器。

资源决定了控制器的行为。在 Kubernetes 控制平面内运行的水平 Pod 自动扩缩控制器会定期调整其目标(例如:Deployment)的所需规模,以匹配观察到的指标, 例如,平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标。

官方是这样给出的。

2.下载metrics

GitHUB地址

https://github.com/kubernetes-sigs/metrics-server

3.测试是否metrics是否正常运行,metrics正常运行。

kubectl top node

NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%

kubernetes-master01 183m 4% 1279Mi 21%

kubernetes-node01 49m 1% 1111Mi 18%

kubernetes-node02 39m 0% 369Mi 6%

4.创建测试应用

vim web.yaml

apiVersion: apps/v1

kind: Deployment

metadata:

labels:

app: web-nginx-hpa

name: web-deployment-nginx-test

namespace: default

spec:

replicas: 1

selector:

matchLabels:

app: web-nginx-hpa

template:

metadata:

labels:

app: web-nginx-hpa

spec:

containers:

- image: nginx

name: web-deployment-nginx-test

resources:

limits:

cpu: "50m"

memory: 20Mi

requests:

cpu: "50m"

memory: 20Mi

5.创建Serivce,这一步可以为前端提供一个访问入口。方便我们测试使用。

cat service-hpa.yaml

apiVersion: v1

kind: Service

metadata:

name: hpa-service

spec:

selector:

run: php-apache

ports:

  • name: http

    port: 80

    targetPort: 80

6.创建hpa资源

cat web.hpa.yaml

apiVersion: autoscaling/v1

kind: HorizontalPodAutoscaler

metadata:

name: web-deployment-nginx-test

spec:

scaleTargetRef:

apiVersion: apps/v1

kind: Deployment

name: web-deployment-nginx-test

minReplicas: 2 # 最小Pod数量

maxReplicas: 10 # 最大Pod数量

targetCPUUtilizationPercentage: 30 # CPU到百分之30使用扩缩容。

7.创建完毕后测试。

while :;do wget -q -O- http://nginx-hpa;done

8.随着不断访问,流量渐渐上来了。会触发扩缩容。

kubectl get hpa -w

NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE

web-deployment-nginx-test Deployment/web-deployment-nginx-test 0%/30% 2 10 2 90m

web-deployment-nginx-test Deployment/web-deployment-nginx-test 76%/30% 2 10 2 90m

web-deployment-nginx-test Deployment/web-deployment-nginx-test 76%/30% 2 10 4 91m

web-deployment-nginx-test Deployment/web-deployment-nginx-test 55%/30% 2 10 6 91m

web-deployment-nginx-test Deployment/web-deployment-nginx-test 50%/30% 2 10 6 91m

9.停止压测。因为默认情况下,每30s检测一次指标,只要检测到了配置HPA的目标值,则会计算出预期的工作负载的副本数,再进行扩缩容操作。同时,为了避免过于频繁的扩缩容,默认在5min内没有重新扩缩容的情况下,才会触发扩缩容。 不过,HPA本身的算法相对比较保守,可能并不适用于很多场景。例如,一个快速的流量突发场景,如果正处在5min内的HPA稳定期,这个时候根据HPA的策略,会导致无法扩容。 另外,在一些Serverless场景下,有缩容到0然后冷启动的需求,但HPA默认不支持。

kubectl get pod -w

web-deployment-nginx-test-54f8c5b657-c2wc4 1/1 Running 0 44m

web-deployment-nginx-test-54f8c5b657-c54w4 0/1 ContainerCreating 0 1s

web-deployment-nginx-test-54f8c5b657-cgf74 0/1 ContainerCreating 0 16s

web-deployment-nginx-test-54f8c5b657-k4mpc 0/1 ContainerCreating 0 1s

web-deployment-nginx-test-54f8c5b657-qv9f2 1/1 Running 0 16s

web-deployment-nginx-test-54f8c5b657-v5zfr 1/1 Running 0 3m4s

web-deployment-nginx-test-54f8c5b657-cgf74 1/1 Running 0 27s

kubernetes之HPA的更多相关文章

  1. 基于Custom-metrics-apiserver实现Kubernetes的HPA(内含踩坑)

    前言 这里要说一下Prometheus的检控指标从哪里来,它有3个渠道: 主机监控,也就是部署了Node Exporter组件的主机,它以DaemonSet或者系统进程的形式运行,Prometheus ...

  2. 基于Kubernetes的hpa实现pod实例数量的自动伸缩

    Pod 是在 Kubernetes 体系中,承载用户业务负载的一种资源.Pod 们运行的好坏,是用户们最为关心的事情.在业务流量高峰时,手动快速扩展 Pod 的实例数量,算是玩转 Kubernetes ...

  3. Kubernetes 弹性伸缩HPA功能增强Advanced Horizontal Pod Autoscaler -介绍部署篇

    背景 WHAT(做什么) Advanced Horizontal Pod Autoscaler(简称:AHPA)是kubernetes中HPA的功能增强. 在兼容原生HPA功能基础上,增加预测.执行模 ...

  4. Kubernetes(二)架构及资源关系简单总结

    Kubernetes架构 先引用一下官方的架构图: 对于本文来说,我觉得这张图有点复杂了,但是我又懒得自己画了,就用这张吧.Kubernetes是一个集群,和传统的集群相似,它也是有一个主节点和若干个 ...

  5. Kubernetes之Pod使用

    一.什么是Podkubernetes中的一切都可以理解为是一种资源对象,pod,rc,service,都可以理解是 一种资源对象.pod的组成示意图如下,由一个叫”pause“的根容器,加上一个或多个 ...

  6. kubernetes 降本增效标准指南| 容器化计算资源利用率现象剖析

    作者:詹雪娇,腾讯云容器产品经理,目前主要负责腾讯云集群运维中心的产品工作. 张鹏,腾讯云容器产品工程师,拥有多年云原生项目开发落地经验.目前主要负责腾讯云TKE集群和运维中心开发工作. 引言 降本增 ...

  7. kubernetes 降本增效标准指南|理解弹性,应用弹性

    弹性伸缩在云计算领域的简述 弹性伸缩又称自动伸缩,是云计算场景下一种常见的方法,弹性伸缩可以根据服务器上的负载.按一定的规则.进行弹性的扩缩容服务器. 弹性伸缩在不同场景下的含义: 对于服务运行在自建 ...

  8. 蚂蚁金服 Service Mesh 渐进式迁移方案|Service Mesh Meetup 实录

    小蚂蚁说: 本文是基于在 Service Mesher Meetup 上海站的主题分享<蚂蚁金服 Service Mesh 渐进式迁移方案>内容整理,完整的分享 PPT 获取方式见文章底部 ...

  9. k8s 应用优先级,驱逐,波动,动态资源调整

    k8s 应用优先级,驱逐,波动,动态资源调整 应用优先级 Requests 和 Limits 的配置除了表明资源情况和限制资源使用之外,还有一个隐藏的作用:它决定了 Pod 的 QoS 等级. 上一节 ...

随机推荐

  1. ONNXRuntime学习笔记(二)

    继上一篇计划的实践项目,这篇记录我训练模型相关的工作. 首先要确定总体目标:训练一个pytorch模型,CIFAR-100数据集测试集acc达到90%:部署后推理效率达到50ms/张, 部署平台为wi ...

  2. selenium模块 phantomJs 谷歌无可视界面

    参考微博: 什么是selenium 一款基于浏览器自动化的模块 什么是浏览器自动化 通过脚本程序或者python代码,这组程序或者代码表示一些行为动作,selenium可以让这些行为动作映射到浏览器中 ...

  3. Python3获取5000个元素的单字符表

    技术背景 此前考虑过一个问题,有没有办法获取到python里面所有定义好的单字符的表,比如我们获取5000个不一样的单字符,但是常用的chr(number)的方法里面包含了太多的非字母条目,比如缩进换 ...

  4. 接口测试使用Python装饰器

    写接口case时,有时需要对cae做一些共性的操作,最典型的场景如:获取case执行时间.打印log等. 有没有一种办法来集中处理共性操作从而避免在每个case中都写相同的代码(如:每个case都需要 ...

  5. CAD图与互联网地图网页端相互叠加显示技术分析和实现

    需求分析 之前相关的博文中介绍了如果在Web网页端展示CAD图形(唯杰地图云端图纸管理平台 https://vjmap.com/app/cloud),当一些CAD图纸有实际地理坐标位置时,如地形图等, ...

  6. 聊一聊 HBase 是如何写入数据的?

    hi,大家好,我是大D.今天继续了解下 HBase 是如何写入数据的,然后再讲解一下一个比较经典的面试题. Region Server 寻址 HBase Client 访问 ZooKeeper: 获取 ...

  7. 面试突击54:MySQL 常用引擎有哪些?

    MySQL 有很多存储引擎(也叫数据引擎),所谓的存储引擎是指用于存储.处理和保护数据的核心服务.也就是存储引擎是数据库的底层软件组织.在 MySQL 中可以使用"show engines& ...

  8. python发QQ邮件

    python发qq邮件相对比较简单,网上教程一大把:固定套路,后面封装看自己怎么方便可以怎样进行封装:原版代码如下: """ # -*- coding : utf-8 - ...

  9. 【FAQ】运动健康服务REST API接口使用过程中常见问题和解决方法总结

    华为运动健康服务(HUAWEI Health Kit)为三方生态应用提供了REST API接口,通过其接口可访问数据库,为用户提供运动健康类数据服务.在实际的集成过程中,开发者们可能会遇到各种问题,这 ...

  10. JS:对象调方法1

    找调用者 1.如果有this,就先看this在哪个函数中,就是离this最近的function,没有就是window 2.找到函数后,辨别哪个是调用者 例1: 点击查看代码 function fn() ...