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. VMware配置与管理DNS服务器

    一,安装DNS服务器角色 1,点击[开始]→[管理工具]→[服务器管理器]→"仪表板"选项的[添加角色和功能] 持续单击[下一步],直到出现"选择服务器角色"窗 ...

  2. Linux命令篇 - grep 命令

    grep grep searches the named input FILEs (or standard input if no files are named, or if a single hy ...

  3. line-height和height关系

    如图所示,line-height = font-size + 上下本行距.上下半行距总是相等.font-size居于中间.当font-size值固定时,line-height越大,半行距越大.所以当l ...

  4. mybatis入门,CRUD,万能Map,模糊查询

    第一个Mybatis程序 核心配置文件mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?& ...

  5. 字符编码,存储引擎,MySQL字段类型,MySQL字段约束条件

    字符编码 查看MySQL默认编码命令:\s """ 如果是5.X系列 显示的编码有多种 latin1 gbk 如果是8.X系列 显示的统一是utf8mb4 utf8mb4 ...

  6. 记录在EF Core级联更新时出现的错误The database operation was expected to affect 1 row(s), but actually affected 0 row(s) (低级错误导致)

    错误提示:The database operation was expected to affect 1 row(s), but actually affected 0 row(s); data ma ...

  7. 用crash tool观察ARM64 Linux地址转换

    初学者学习Linux系统地址转换时,如果只是学习理论,又或者研读代码,那可能感觉比较枯燥.此时如果可以利用某些工具实际观察一下地址转换的过程,那可能会给枯燥的内核学习带来些微的乐趣.crash too ...

  8. [源码解析] TensorFlow 分布式之 ClusterCoordinator

    [源码解析] TensorFlow 分布式之 ClusterCoordinator 目录 [源码解析] TensorFlow 分布式之 ClusterCoordinator 1. 思路 1.1 使用 ...

  9. axios的请求参数格式(get、post、put、delete)

    1.get请求方式: axios.get(url[, config]) // [字符拼接型]axios.get(url?id=123&status=0') // 等同于 axios.get(u ...

  10. 《Effective C++》阅读总结(三):资源管理

    C++中的资源管理非常重要,在将资源加载到内存后,便可以使用资源了,当我们不再需要资源时,我们要保证其正确的释放,才能将其占用的内存空间归还给操作系统,不正确的释放很容易造成内存泄漏.本章以资源管理类 ...