hpa自动扩容

官方文档

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

HPA是什么

Kubernetes有一个HPA(Horizontal Pod Autoscaler)的资源,可以实现基于CPU使用率的Pod自动伸缩的功能。

(1)HPA基于Master Node上的kube-controller-manager服务启动参数horizontal-pod-autoscaler-sync-period定义的时长(默认为30秒),周期性的检测Pod的CPU使用率。

如果需要设置horizontal-pod-autoscaler-sync-period可以在Master Node上的/etc/default/kube-controller-manager中修改。

(2)HPA 与之前的 RC、Deployment 一样,也属于一种 Kubernetes 资源对象。通过追踪分析 RC 控制的所有目标 Pod 的负载变化情况,来确定是否需要针对性地调整目标Pod的副本数,这是HPA的实现原理。

(3)metrics-server 也需要部署到集群中, 它可以通过 resource metrics API 对外提供度量数据。

Horizontal Pod Autoscaler 演练

Horizontal Pod Autoscaler 可以根据 CPU 利用率自动扩缩 ReplicationController、 Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量 (也可以基于其他应用程序提供的度量指标,目前这一功能处于 beta 版本)。

本文将引领你了解如何为 php-apache 服务器配置和使用 Horizontal Pod Autoscaler。 与 Horizontal Pod Autoscaler 相关的更多信息请参阅 Horizontal Pod Autoscaler 用户指南

参数

  1. minReplicas 最小pod实例数
  2. maxReplicas 最大pod实例数
  3. metrics 用于计算所需的Pod副本数量的指标列表
  4. resource 核心指标,包含cpu和内存两种(被弹性伸缩的pod对象中容器的requestslimits中定义的指标。)
  5. object k8s内置对象的特定指标(需自己实现适配器)
  6. pods 应用被弹性伸缩的pod对象的特定指标(例如,每个pod每秒处理的事务数)(需自己实现适配器)
  7. external k8s内置对象的自定义指标(需自己实现适配器)

案例:监控cpu,内存,每秒数据包自动扩容

  1. apiVersion: autoscaling/v2beta1 #(支持cpu,memory,及自定义)
  2. kind: HorizontalPodAutoscaler
  3. metadata:
  4. name: bikesvc
  5. namespace: sg-bs
  6. spec:
  7. minReplicas: 1
  8. maxReplicas: 10
  9. scaleTargetRef:
  10. apiVersion: apps/v1
  11. kind: Deployment
  12. name: bikesvc
  13. metrics:
  14. - type: Resource
  15. resource:
  16. name: memory # 内存占用率(百分比)
  17. targetAverageUtilization: 80
  18. - type: Resource
  19. resource:
  20. name: cpu # cpu占用率(百分比)
  21. targetAverageUtilization: 80
  22. # - type: Pods
  23. # pods:
  24. # metricName: packets-per-second # (每秒数据包)
  25. # targetAverageValue: 1
  26. - type: Object
  27. object:
  28. metricName: packets-per-second # (每秒数据包)
  29. target:
  30. kind: Deployment
  31. name: bikesvc
  32. targetValue: 1000

度量指标

pod清单案例-pod定义cup内存指标

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: test
  5. spec:
  6. selector:
  7. matchLabels:
  8. app: nginx
  9. template:
  10. metadata:
  11. labels:
  12. app: nginx
  13. spec:
  14. nodeName: sg-15
  15. containers:
  16. - name: nginx
  17. image: nginx
  18. resources:
  19. requests:
  20. cpu: 125m # 向集群申请cpu
  21. memory: 1024Mi # 向集群申请内存

cpu度量指标

  1. - type: Resource
  2. resource:
  3. name: cpu # cpu占用率(百分比)
  4. targetAverageUtilization: 80

memory内存度量指标

  1. - type: Resource
  2. resource:
  3. name: memory # 内存占用率(百分比)
  4. targetAverageUtilization: 80

pod度量指标

  1. 第一种可选的度量指标类型是 Pod 度量指标。这些指标从某一方面描述了 Pod 在不同 Pod 之间进行平均,并通过与一个目标值比对来确定副本的数量。 它们的工作方式与资源度量指标非常相像,只是它们仅支持 target 类型为 AverageValue
  2. - type: Pods
  3. pods:
  4. metricName: packets-per-second # (每秒数据包)
  5. targetAverageValue: 1000

Object度量指标

  1. 第二种可选的度量指标类型是对象(Object)度量指标。这些度量指标用于描述 在相同名字空间中的别的对象,而非 Pods 请注意这些度量指标不一定来自某对象,它们仅用于描述这些对象。 对象度量指标支持的 target 类型包括 Value AverageValue 如果是 Value 类型,target 值将直接与 API 返回的度量指标比较, 而对于 AverageValue 类型,API 返回的度量值将按照 Pod 数量拆分, 然后再与 target 值比较。 下面的 YAML 文件展示了一个表示 requests-per-second 的度量指标。
  2. - type: Object
  3. object:
  4. metricName: packets-per-second # (每秒数据包)
  5. target:
  6. kind: Deployment
  7. name: bikesvc
  8. targetValue: 1000

基于更特别的度量值来扩缩

​ 许多度量流水线允许你通过名称或附加的 标签 来描述度量指标。 对于所有非资源类型度量指标(Pod、Object 和后面将介绍的 External), 可以额外指定一个标签选择算符。例如,如果你希望收集包含 verb 标签的 http_requests 度量指标,可以按如下所示设置度量指标块,使得扩缩操作仅针对 GET 请求执行:

  1. type: Object
  2. object:
  3. metric:
  4. name: `http_requests` # http请求
  5. selector: `verb=GET` # 标签筛选

查看hpa状态详情

  1. > kubectl describe hpa -n sg-bs
  2. Name: bikesvc
  3. Namespace: sg-bs
  4. Labels: <none>
  5. Annotations: CreationTimestamp: Fri, 03 Dec 2021 03:35:20 +0000
  6. Reference: Deployment/bikesvc
  7. Metrics: ( current / target )
  8. resource memory on pods (as a percentage of request): 31% (42299392) / 80%
  9. "packets-per-second" on Deployment/bikesvc (target value): <unknown> / 1
  10. resource cpu on pods (as a percentage of request): 34% (87m) / 80%
  11. Min replicas: 1
  12. Max replicas: 10
  13. Deployment pods: 1 current / 1 desired
  14. Conditions:
  15. Type Status Reason Message
  16. ---- ------ ------ -------
  17. AbleToScale True ReadyForNewScale recommended size matches current size
  18. ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from memory resource utilization (percentage of request)
  19. ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
  20. Events:
  21. Type Reason Age From Message
  22. ---- ------ ---- ---- -------
  23. Warning FailedGetObjectMetric 106s (x80 over 21m) horizontal-pod-autoscaler unable to get metric packets-per-second: Deployment on sg-bs bikesvc/unable to fetch metrics from custom metrics API: no custom metrics API (custom.metrics.k8s.io) registered
  1. 对于上面展示的这个 HorizontalPodAutoscaler,我们可以看出有若干状态条件处于健康状态。 首先,AbleToScale 表明 HPA 是否可以获取和更新扩缩信息,以及是否存在阻止扩缩的各种回退条件。 其次,ScalingActive 表明 HPA 是否被启用(即目标的副本数量不为零) 以及是否能够完成扩缩计算。 当这一状态为 False 时,通常表明获取度量指标存在问题。 最后一个条件 ScalingLimitted 表明所需扩缩的值被 HorizontalPodAutoscaler 所定义的最大或者最小值所限制(即已经达到最大或者最小扩缩值)。 这通常表明你可能需要调整 HorizontalPodAutoscaler 所定义的最大或者最小副本数量的限制了。

k8s-hpa自动横向扩容的更多相关文章

  1. k8s HPA自动收缩

    HPA自动收缩 autoscale 自动调整一个 Deployment, ReplicaSet, 或者 ReplicationController 的副本数量 #创建一个replicaset测试 [r ...

  2. Elasticsearch 横向扩容以及容错机制

    写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...

  3. Elasticsearch由浅入深(二)ES基础分布式架构、横向扩容、容错机制

    Elasticsearch的基础分布式架构 Elasticsearch对复杂分布式机制的透明隐藏特性 Elasticsearch是一套分布式系统,分布式是为了应对大数据量. Elasticsearch ...

  4. [转帖]在 k8s 中自动为域名配置 https

    在 k8s 中自动为域名配置 https https://juejin.im/post/5db8d94be51d4529f73e2833 随着 web 的发展,https 对于现代网站来说是必不可少的 ...

  5. 1.利用consul实现k8s服务自动发现

    标题 : 1.利用consul实现k8s服务自动发现 目录 : 微服务架构设计 序号 : 1 ] } } ] } } ​ - consul自身支持ACL,但目前,Helm图表不支持其中一些功能,需要额 ...

  6. K8S(17)二进制的1.15版本部署hpa自动伸缩

    K8S(17)二进制部署的K8S(1.15)部署hpa功能 目录 K8S(17)二进制部署的K8S(1.15)部署hpa功能 零.参考文件: 一.生成metrics-proxy证书 二.修改apise ...

  7. minikube metrics-server HPA 自动扩缩容错误

    minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下 ...

  8. 虚拟机(Visual Machine)的云平台的自动伸缩扩容(auto-scaling)技术

    云计算平台中允许客户依据应用的负载进行云计算资源的弹性动态伸缩(理想的情况是实现一个用多少付费多少的模型,最大限度地降低用户的运营成本) 在进行讨论之前,先对几个名词进行定义 1)客户:使用云服务的人 ...

  9. Kubernetes自动横向伸缩集群节点以及介绍PDB资源

    在kubernetes中,有HPA在需要的时候创建更多的pod实例.但万一所有的节点都满了,放不下更多pod了,怎么办?显然这个问题并不局限于Autoscaler创建新pod实例的场景.即便是手动创建 ...

随机推荐

  1. hdu 2571 命运(水DP)

    题意: M*N的grid,每个格上有一个整数. 小明从左上角(1,1)打算走到右下角(M,N). 每次可以向下走一格,或向右走一格,或向右走到当前所在列的倍数的列的位置上.即:若当前位置是(i,j), ...

  2. 一、安装zabbix监控(源码编方式)

    首先介绍一下zabbix的运行原理和运行条件. Zabbix监控原理 Zabbix 通过C/S 模式采集数据,通过B/S模式在web 端展示和配置.  被监控端:主机通过安装agent 方式采集数据, ...

  3. httprunner3源码解读(1)简单介绍源码模块内容

    前言 最近想着搭建一个API测试平台,基础的注册登录功能已经完成,就差测试框架的选型,最后还是选择了httprunner,github上已经有很多开源的httprunner测试平台,但是看了下都是基于 ...

  4. .Net Core微服务——网关(2):ocelot集成consul

    有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略, ...

  5. redis学习笔记(详细)——高级篇

    redis学习笔记(详细)--初级篇 redis学习笔记(详细)--高级篇 redis配置文件介绍 linux环境下配置大于编程 redis 的配置文件位于 Redis 安装目录下,文件名为 redi ...

  6. IDEA中三种注释方式的快捷键

    三种注释方式   行注释.块注释.方法或类说明注释. 一.快捷键:Ctrl + /   使用Ctrl+ /, 添加行注释,再次使用,去掉行注释 二.演示代码 if (hallSites != null ...

  7. Part 19 AngularJS Services

    What is a service in AngularJSBefore we talk about what a service is in Angular. Let's talk about a ...

  8. Java 初始化与清理

    用构造器确保初始化 如何自定义构造器(constructor)? 构造器方法的名称与类名相同,并且没有返回值. 需要注意,在定义构方法时,方法名前面不要添加任何的类型说明符,格式:类名(){},构造方 ...

  9. 使用nacos作为配置中心统一管理配置

    基础环境 引入所需依赖包 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>s ...

  10. PAT A1091——BFS

    Acute Stroke One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. ...