Horizontal Pod Autoscaling 可以根据 CPU 利用率自动伸缩一个 ReplicaSet、Deployment 或者中的 Pod 数量 cat hpa-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata: name: hpa-web spec: selector: matchLabels: app: hpa-web replicas: 1 template: metadata: labels: app: hpa-web spec: containers: - name: hpa-web image: gcr.io/google_containers/hpa-example imagePullPolicy #autoscaling-algorithm kubectl autoscale deployment hpa-web --cpu-percent=50 --min=1 --max=10 增加负载,
上面简单说了一下 pod 的基本知识点,待到后面会使用到 pod 的一些高阶知识点的时候,还可以再细细琢磨底层原理 我们接着继续学习 Lable , RC,HPA 的相关知识点 Label 是什么? HPA 就是 Horizontal Pod Autoscal ,pod 的横向扩容,他也是 K8S 的一种资源对象 HPA 的简单原理 HAP 通过追踪和分析 RC 的 pod 的负载变化情况,酌情调整目标 pod 扩容和缩容 第一种是我们使用命令的方式对 RC,Deployment 进行扩容和缩容 kubectl scale rc/deployment 服务名 --replicas 数量 第二种是使用 HPA : Service metadata: name: mynginx-svc spec: ports: - port: 80 selector: app: nginx 写一个 hpa metadata: name: mynginx-hpa spec: scaletargetRef: apiversion: app/v1beta1 kind: deployment
如果我们不知道怎么编写的话,可以查看上面命令行创建的HPA的YAML文件: $ kubectl get hpa hpa-demo -o yaml apiVersion: autoscaling/v1 kind hpa-demo horizontalpodautoscaler.autoscaling "hpa-demo" deleted $ kubectl autoscale deployment hpa-demo kubectl describe hpa hpa-demo Name: hpa-demo Namespace describe hpa nginx-hpa Name: nginx-hpa Namespace: $ kubectl describe hpa nginx-custom-hpa Name: nginx-custom-hpa
使用HPA,可以根据应用程序的需求动态调整Pod数量,从而实现更好的负载均衡和资源利用率。创建HPA创建HPA需要指定以下参数:需要水平扩展的Deployment或ReplicaSet的名称。 如果设置为70,则HPA将尝试保持平均CPU使用率在70%左右。 监控HPA可以使用以下命令查看HPA的状态:kubectl get hpa此命令将返回HPA的当前状态,包括目标Deployment或ReplicaSet的名称、当前副本数、目标副本数和当前CPU使用率 调整HPA参数可以使用以下命令更新HPA的参数:kubectl edit hpa example-hpa此命令将打开HPA定义,允许您更改参数。例如,您可以更改目标CPU使用率百分比或最大副本数量。 如果HPA已启用,则HPA将在稍后尝试将Pod副本数量调整为最适合应用程序需求的数量。
memory: 100Mi limits: cpu: 1000m memory: 1024Mi 来看Hpa 部署后,来看Hpa和pod数,如下List-3和List-4,都是1. emp_no=091078 再来看下Hpa和pod数变为了8,随着访问量增多,cpu使用率提升,Hpa自动将pod进行扩容了。 List-6 #hpa的复制数变为了8 mjduan@mjduan:~/.kube$ kubectl get hpa -n test NAME 和pod数,变少了,因为访问量减少,k8s自动按Hpa的规则将pod减少了。
HPA Controller 介绍 关于Kubernetes Horizontal Pod Autoscaler(简称HPA)的概念和使用介绍,请参考以下官方文档链接,在这里我不再赘述。 在每个HPA Controller的处理周期中,kube-controller-manager都去查询HPA中定义的metrics的utilization。 计算伸缩比例算法: 对于resource metrics,比如CPU,HPA Controller获取HPA中指定的metrics,如果HPA中设定了target utilization,则HPA 注意:如果HPA对应的某些pods中的容器没有定义对应的resource request,则HPA不会对这些pods进行scale。 HPA与rc, deployment, pod的关系如下图所示。 HPA通过Scale sub-resource接口,对RC和Deployment的replicas进行控制。
HPA Controller 介绍 关于Kubernetes Horizontal Pod Autoscaler(简称HPA)的概念和使用介绍,请参考以下官方文档链接,在这里我不再赘述。 在每个HPA Controller的处理周期中,kube-controller-manager都去查询HPA中定义的metrics的utilization。 计算伸缩比例算法: 对于resource metrics,比如CPU,HPA Controller获取HPA中指定的metrics,如果HPA中设定了target utilization,则HPA 注意:如果HPA对应的某些pods中的容器没有定义对应的resource request,则HPA不会对这些pods进行scale。 HPA与rc, deployment, pod的关系如下图所示。 HPA通过Scale sub-resource接口,对RC和Deployment的replicas进行控制。
HPA由Kubernetes API资源和控制器实现。 HPA使用前提条件: 集群中部署了Metrics Server插件, 可以获取到Pod的CPU和内存利用率。 Pod部署的Yaml文件中必须设置资源限制和资源请求。 以下对K8S集群使用HPA进行Pod自动伸缩做个测试记录 1. 创建HPA限制 设置kevin-t的 deployment的最大最小副本数,HPA对应pod的CPU和内存指标做限制。 查看创建的HPA [root@k8s-master01 work]# kubectl get hpa NAME REFERENCE TARGETS
超级节点pod 的 GPU 监控是默认显示的,可以直接看,如下图: 配置 GPU 指标的 HPA 使用场景 在业务使用 GPU 过程中,当业务处理量变大时,可能因 GPU 资源不足而导致业务出错,如下: See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF 如何使用 可以根据 GPU 指标项通过 YAML 来配置 HPA, 譬如针对 GPU 资源的使用情况配置 HPA,相关配置示例如下: apiVersion: autoscaling/v2beta2 kind: HorizontalPodAutoscaler metadata AverageValue scaleTargetRef: apiVersion: apps/v1beta2 kind: Deployment name: nginx 更多指标参考HPA
newInformer是HPA的核心代码入口。 (hpa) if err ! (hpa) if err ! scale, err := a.scaleNamespacer.Scales(hpa.Namespace).Get(hpa.Spec.ScaleTargetRef.Kind, hpa.Spec.ScaleTargetRef.Name hpa.Spec.MinReplicas !
为此,Kubernetes 也为我们提供了这样的一个资源对象:Horizontal Pod Autoscaling(Pod 水平自动伸缩),简称HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理: 图片 通过 kubectl autoscale 命令来创建一个 HPA 资源对象,HPA Controller默认 Metrics Server 在 HPA 的第一个版本中,我们需要 Heapster 提供 CPU 和内存指标,在 HPA v2 过后就需要安装 Metrcis Server 了,Metrics Server HPA 会根据设定的 cpu 使用率(10%)动态的增加或者减少 Pod 数量。 当然我们依然还是可以通过创建 YAML 文件的形式来创建 HPA 资源对象。 这是因为我们上面创建的 Pod 对象没有添加 request 资源声明,这样导致 HPA 读取不到 CPU 指标信息,所以如果要想让 HPA 生效,对应的 Pod 资源必须添加 requests 资源声明
Horizontal Pod Autoscaler(HPA) 概述 HPA是Horizontal Pod Autoscaler的缩写,它在Kubernetes中允许根据应用程序的负载动态调整Pod的副本数量 原理 HPA 的原理基于两个核心概念:指标(Metrics)和目标值(Target Value)。 指标: HPA 使用预定义的或自定义的指标(例如 CPU 使用率、内存使用率)来监控应用程序的负载。 目标值: HPA 需要设定一个目标值,表示期望的指标水平。当监测到应用程序的实际指标超过或低于这个目标值时,HPA 将触发相应的伸缩操作。 使用场景 HPA 在以下场景中特别有用: 流量波动: 当应用程序面临流量波动的时候,需要在使用高峰期动态扩展副本,低谷的时候再缩减相应副本时,HPA是能够自动完成这一过程的,比如每天中午的忙时扩展,午夜闲时自动收编 HPA和PDB作为Kubernetes中两个关键的概念,用于应对不同的场景和挑战。
默认HPA可以满足一些简单场景,对于生产环境并不一定适合,本文主要分析HPA的不足与优化方式。 HPA Resource类型不足 默认HPA提供了Resource类型,通过CPU/MEM使用率指标(由metrics-server提供原始指标)来扩缩应用。 性能问题 单线程架构 默认的hpa-controller是单个Goroutine执行的,随着集群规模的增多,势必会成为性能瓶颈,目前默认hpa资源同步周期会15s,假设每个metric请求延时为100ms 调用链路 在hpa controller中一次hpa资源同步,需要调用多次apiserver接口,主要链路如下 通过scaleForResourceMappings得到scale资源 调用computeReplicasForMetrics 总结 Kubernetes提供原生的HPA只能满足一部分场景,如果要上生产环境,必须对其做一些优化,本文总结了当前HPA存在的不足,例如在性能、使用率计算方面,并提供了解决思路。
说明一下: 运行了一个副本数为3的deployment 暴露出一个名为nginxsvc的service 指定了`revisionHistoryLimit`表示保留历史版本的个数 因为要通过资源负载模拟HPA Running 0 17s nginx-deployment-8558b4659-w5tlq 1/1 Running 0 8m56s 定义一个HPA abcontainer-58c67cfb87-g4j8q -n learning -it -- bash 压力测试 ab -c 5000 -n 2000000 http://tomcat-svc:8080/ 查看HPA
https://docs.openshift.com/container-platform/3.11/dev_guide/pod_autoscaling.html
导语 GUIDE ╲ HPA是一个集 组织图谱、细胞图谱、病理图谱、大脑图谱、血液图谱、代谢图谱 为一体的数据资源,小编不允许你错过这个资源宝库! HPA数据库介绍 Human Protein Atlas 数据库,目前收录了超过26000种抗体,所有结果均有免疫组化染色,并经过专业人员的确认。 HPA收录了18种血细胞的RNA表达信息,包括B细胞、T细胞、NK细胞、单核细胞、粒细胞、树突状细胞等,并对主要的细胞谱系进行分类。 此外,HPA还对“人体分泌体”进行了分析,包括对预测可以分泌到人体血液的基因进行注释,以及对预测可以分泌到人体其他部位的蛋白质的注释,并对蛋白质浓度进行估计。 06 点击METABOLIC ATLAS,进入到代谢图谱 HPA提供了120个代谢通路,可以看到每个蛋白参与了哪些代谢过程,每个代谢通路均提供了不同区域mRNA表达的热图。
# Horizontal Pod Autoscaler(HPA) # 概述 HPA是Horizontal Pod Autoscaler的缩写,它在Kubernetes中允许根据应用程序的负载动态调整Pod 指标: HPA 使用预定义的或自定义的指标(例如 CPU 使用率、内存使用率)来监控应用程序的负载。这些指标反映了应用程序当前的性能状况。 目标值: HPA 需要设定一个目标值,表示期望的指标水平。 当监测到应用程序的实际指标超过或低于这个目标值时,HPA 将触发相应的伸缩操作。 # 使用场景 HPA 在以下场景中特别有用: 流量波动: 当应用程序面临流量波动的时候,需要在使用高峰期动态扩展副本,低谷的时候再缩减相应副本时,HPA是能够自动完成这一过程的,比如每天中午的忙时扩展, # 总结 HPA和VPA是Kubernetes中两种主要的自动扩缩容机制。
步骤3:测试HPA现在,我们可以测试HPA是否按预期工作。为此,我们可以使用Apache Bench(ab)来模拟负载。 的状态:kubectl get hpa您将看到类似于以下输出:NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGEnginx-hpa Deployment/nginx-deploy 0%/50% 1 10 1 2m在开始测试时 在发送一些请求后,HPA将启动新的Pod副本,以处理负载。在完成测试后,HPA将收缩Pod副本数量,以减少资源的浪费。 service nginx-servicekubectl delete hpa nginx-hpa这些命令将删除部署、服务和HPA,以便您可以从集群中删除示例应用程序。
概述在Kubernetes中,HPA(Horizontal Pod Autoscaler)是一种自动扩缩容应用程序的方式,可以根据应用程序负载动态调整Pod副本数量。 HPA是一个非常有用的功能,它可以帮助您实现自动水平扩展和收缩应用程序,并确保应用程序始终能够处理负载。示例在本示例中,我们将创建一个简单的web应用程序,并使用HPA来自动扩缩容。 使用以下命令创建Deployment和Service:kubectl apply -f nginx.yaml步骤2:创建HPA现在,我们将创建一个HPA,以根据CPU使用率自动扩缩容Deployment ”的HPA,它将监视“nginx-deployment”的CPU使用率,并尝试保持CPU使用率在50%左右。 使用以下命令创建HPA:kubectl apply -f nginx-hpa.yaml
HPA全称是Human Protein Atls, 利用转录组学和蛋白质组学技术,从RNA和蛋白水平研究人类不同组织和器官中的蛋白表达情况,网址如下 https://www.proteinatlas.org 在HPA中,又进一步划分成了以下3个子类 ? 1. 通过HPA数据库,可以方便的探究蛋白编码基因在正常和肿瘤组织/器官中的表达情况。 ·end·