首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >K8S原来如此简单(五)Metrics Server与HPA

K8S原来如此简单(五)Metrics Server与HPA

作者头像
Chester Chen
修改于 2022-08-18 07:14:28
修改于 2022-08-18 07:14:28
87600
代码可运行
举报
文章被收录于专栏:chester技术分享chester技术分享
运行总次数:0
代码可运行

什么是HPA

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

我们前面有通过kubectl scale命令手动扩展我们的服务,生产环境中我们希望k8s能够根据一些指标信息自动扩展服务。

这时我们可以利用k8s的HPA(水平扩展)来根据 CPU利用率等指标自动扩缩Deployment、ReplicaSet 或 StatefulSet 中的 Pod 数量。

HPA原理

HPA控制器通过Metrics Server的API(Heapster的API或聚合API)获取指标数据,基于用户定义的扩缩容规则进行计算,得到目标Pod副本数量。

当目标Pod副本数量与 当前副本数量不同时,HPA控制器就向Pod的副本控制器 (Deployment、RC或ReplicaSet)发起scale操作,调整Pod的副本数量, 完成扩缩容操作。

MetricsServer

在说metricsserver之前,我们来看一个查看资源消耗情况的命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
查看Node资源消耗: 
kubectl top node k8s-node1 
查看Pod资源消耗: 
kubectl top pod k8s-node1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


需要注意的是,使用这个命令我们需要安装metrics server,否则会提示
Metrics API不可用。

安装metrics server

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

查看metrics安装结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl get pod --all-namespaces |grep metrics

查看pod资源使用率

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl top pod chesterdeployment-75c64cc8b6-k4jqw -n chesterns
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
安装好之后,我们可以看到已经可以正常使用kubectl top命令了。下面我们
开始演示通过hpa来模拟根据cpu自动水平扩展。


仍然使用之前课程的deployment,需要修改deployment的副本数为1

apiVersion: apps/v1
kind: Deployment
metadata:
  name: chesterdeployment
  namespace: chesterns
  labels:
    app: chesterapi
spec:
  replicas: 1
  selector:
    matchLabels:
      app: chesterapi
  template:
    metadata:
      labels:
        app: chesterapi
    spec:
     containers:
     - name: oneapi
       image: registry.cn-beijing.aliyuncs.com/chester-k8s/oneapi:latest
       ports:
       - containerPort: 5000
       livenessProbe:
         httpGet:
           path: /test
           port: 5000
应用deployment
kubectl apply -f deployment.yaml
在我们的oneapi里有一个highcpu的接口,可以帮助我们实现高cpu操作

    [HttpGet("highcpu")]
    public string HighCpu(int minutes)
    {
        var now = DateTime.Now;
        while (DateTime.Now - now <= TimeSpan.FromMinutes(minutes))
        {
            _logger.LogInformation(DateTime.Now.ToString());
        }
        return "ok";
    }

我们调用这个接口,模拟高消耗cpu

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl clusterip:5000/test/highcpu?minutes=1

再次查看pod资源使用率,可以跟调用之前比对,明显发现cpu变高

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl top pod chesterdeployment-75c64cc8b6-k4jqw -n chesterns
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制


创建HPA

下面我们创建hpa,让其实现自动扩展
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: chesterhpa
  namespace: chesterns
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: chesterdeployment
  minReplicas: 1
  maxReplicas: 3
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: AverageValue
        averageValue: 200m

重新调用接口模拟高cpu

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
curl clusterip:5000/test/highcpu?minutes=3

查看hpa状态,即可发现实现了自动扩展

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl describe hpa chesterhpa -n chesterns
kubectl get pods --namespace=chesterns
kubectl top pod  -n chesterns
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 chester技术分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
K8s pod 动态弹性扩缩容(HPA )部署!步骤齐全,少走坑路
Horizontal Pod Autoscaler(HPA,Pod水平自动伸缩),根据平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标自动调整 Deployment 、ReplicaSet 或 StatefulSet 或其他类似资源,实现部署的自动扩展和缩减,让部署的规模接近于实际服务的负载。HPA不适用于无法缩放的对象,例如DaemonSet。
民工哥
2022/10/27
7.7K0
K8s pod 动态弹性扩缩容(HPA )部署!步骤齐全,少走坑路
K8S之HPA自动扩缩容机制
kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个毕竟是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象: Horizontal Pod Autoscaling(Pod 水平自动伸缩) ,简称 HPA ,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量
tunsuy
2023/08/19
1.2K0
K8S之HPA自动扩缩容机制
kubernetes(十六) k8s 弹性伸缩
常规的做法是给集群资源预留保障集群可用,通常20%左右。这种方式看似没什么问题,但放到Kubernetes中,就会发现如下2个问题。
alexhuiwang
2020/09/23
4K0
kubernetes(十六) k8s 弹性伸缩
K8S原来如此简单(三)Pod+Deployment
Pod 是一组容器集合,是可以在 Kubernetes 中创建和管理的、最小的可部署的计算单元。这些容器共享存储、网络。
Chester Chen
2022/08/18
7290
K8S原来如此简单(三)Pod+Deployment
13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
Pod 水平自动扩缩全名是Horizontal Pod Autoscaler简称HPA。它可以基于 CPU 利用率或其他指标自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。
luozhiyun
2020/10/10
2.8K0
13.深入k8s:Pod 水平自动扩缩HPA及其源码分析
使用k8s-prometheus-adapter实现HPA
当HPA请求metrics时,kube-aggregator(apiservice的controller)会将请求转发到adapter,adapter作为kubernentes集群的pod,实现了Kubernetes resource metrics API and custom metrics API,它会根据配置的rules从Prometheus抓取并处理metrics,在处理(如重命名metrics等)完后将metric通过custom metrics API返回给HPA。最后HPA通过获取的metrics的value对Deployment/ReplicaSet进行扩缩容。
charlieroro
2020/03/24
6K0
k8s中pod的自动扩缩容
Kubernetes从1.1版本开始, 新增了名为Horizontal Pod Autoscaler(HPA) 的控制器, 用于实现基于CPU使用率进行自动Pod扩缩容的功能。 HPA控制器基于Master的kube-controller-manager服务启动参数–horizontal-pod-autoscaler-sync-period定义的探测周期(默认值为15s) , 周期性地监测目标Pod的资源性能指标, 并与HPA资源对象中的扩缩容条件进行对比, 在满足条件时对Pod副本数量进行调整。Kubernetes在早期版本中, 只能基于Pod的CPU使用率进行自动扩缩容操作, 关于CPU使用率的数据来源于Heapster组件。 Kubernetes从1.6版本开始, 引入了基于应用自定义性能指标的HPA机制, 并在1.9版本之后逐步成熟。
dogfei
2020/08/06
3.7K0
k8s中pod的自动扩缩容
再战 k8s(13):Pod 的扩缩容
实际生产系统, 会遇到某个服务需要扩容的场景,也可能会遇到由于资源紧张或者工作负载降低而需要减少服务实例数量的场景。
看、未来
2022/05/06
9060
再战 k8s(13):Pod 的扩缩容
云原生-什么是HPA和PDB、VPA
HPA是Horizontal Pod Autoscaler的缩写,它在Kubernetes中允许根据应用程序的负载动态调整Pod的副本数量,从而使得应用程序能够自动扩展或收缩,以适应变化的工作负载,进而提高资源利用率和应用程序的性能。
章工运维
2024/02/29
8460
Kubernetes HPA 详解
在前面的学习中我们使用用一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个毕竟是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:HorizontalPodAutoscaling(Pod水平自动伸缩),简称 HPA,HPA 通过监控分析一些控制器控制的所有 Pod 的负载变化情况来确定是否需要调整 Pod 的副本数量,这是 HPA 最基本的原理:
我是阳明
2020/06/15
4.6K0
Kubernetes HPA 详解
k8s滚动升级和扩缩容
用于实现基于CPU使用率进行自动Pod扩缩容的功能。HPA控制器基于Master的kube-controller-manager服务启动参数--horizontal-pod-autoscaler-sync-period定义的探测周期(默认值为 15s),周期性地监测目标Pod的资源性能指标,并与HPA资源对象中的扩缩容条件进行对比,在满足条件时对Pod副本数量进行调整.
丁D
2022/08/12
1.8K0
云原生|什么是HPA和PDB?
最近的项目,Kubernetes的人员要做系统维护的时候,需要修改我容器化应用的PDB,一直问我是否可以改动。
琉璃康康
2023/11/28
4690
云原生|什么是HPA和PDB?
k8s 中 pod 的自动扩缩容
Horizontal Pod Autoscaler(HPA)控制器, 用于实现基于 CPU 使用率进行自动 Pod 扩缩容的功能。HPA 控制器基于 Master 的 kube-controller-manager 服务启动参数 --horizontal-pod-autoscaler-sync-period 定义的探测周期(默认值为 15s) , 周期性地监测目标 Pod 的资源性能指标, 并与 HPA 资源对象中的扩缩容条件进行对比, 在满足条件时对 Pod 副本数量进行调整。
yxxhero
2022/05/31
1.3K0
k8s 中 pod 的自动扩缩容
基于事件驱动的Kubernetes弹性伸缩工具keda
本规范描述了ScaledObject自定义资源定义,用于定义 KEDA 应如何扩展您的应用程序以及触发器是什么。
码农小辉
2022/09/07
1.9K0
《Kubernetes》- 认识下Pod的管理者?
大家好,我是小菜,前面几篇文章我们已经从 k8s 集群的搭建然后到 k8s 中NameSpace 再说到了 k8s 中 Pod 的使用,如果还干到意犹未尽,那么接下来的 Pod 控制器 同样是一道硬菜!死鬼~看完记得给我来个三连哦!
蔡不菜丶
2021/05/18
6410
《Kubernetes》- 认识下Pod的管理者?
Kubernetes(k8s)-自动扩缩工作负载(HPA)
作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
运维小路
2025/03/28
1700
Kubernetes(k8s)-自动扩缩工作负载(HPA)
使用NSX高级负载均衡度量值水平扩缩(HPA)容器实例
承接上一篇, 使用NSX高级负载均衡(以下简称ALB)度量值触发后端虚拟机池水平扩缩, 本篇讲讲容器环境中使用ALB度量值触发容器的水平扩缩(HPA: Horizontal Pod Autoscaler). 我们的目标是监控ALB上某个L7 VS(Virtual Service)或Pool的度量值, 当度量值达到某个预设值时, 触发HPA, 扩展Pod实例.
我是阳明
2021/06/25
8360
使用NSX高级负载均衡度量值水平扩缩(HPA)容器实例
K8S原来如此简单(六)Pod调度
我们前面部署的pod调度取决于kube-scheduler,它会根据自己的算法,集群的状态来选择合适的node部署我们的pod。
Chester Chen
2022/08/18
4270
k8s群集之动态扩缩容——HPA
HPA的全称为Horizontal Pod Autoscaling,它可以根据当前pod资源的使用率(如CPU、磁盘、内存等),进行副本数的动态的扩容与缩容,以便减轻各个pod的压力。当pod负载达到一定的阈值后,会根据扩缩容的策略生成更多新的pod来分担压力,当pod的使用比较空闲时,在稳定空闲一段时间后,还会自动减少pod的副本数量。
小手冰凉
2020/09/15
2.9K0
浅谈 Kubernetes Metrics Server
1、Metrics Servrer 原理介绍 1.1、Metrics Server 概念和功能 概念 Metrics Server 是 Kubernetes 集群核心监控数据的聚合器,Metrics Server 从 Kubelet 收集资源指标,并通过 Merics API 在 Kubernetes APIServer 中提供给缩放资源对象 HPA 使用。也可以通过 Metrics API 提供的 Kubectl top 查看 Pod 资源占用情况,从而实现对资源的自动缩放。 功能 主要是基于 Kuber
用户5166556
2020/06/01
4.7K0
相关推荐
K8s pod 动态弹性扩缩容(HPA )部署!步骤齐全,少走坑路
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验