码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • K8S原来如此简单(五)Metrics Server与HPA


    目录

    • 什么是HPA
    • HPA原理
    • MetricsServer
    • 创建HPA

     

    正文

    回到顶部

    什么是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之前,我们来看一个查看资源消耗情况的命令

    查看Node资源消耗: 
    kubectl top node k8s-node1 
    查看Pod资源消耗: 
    kubectl top pod k8s-node1

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

     

    安装metrics server

    kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

     

    查看metrics安装结果

    kubectl get pod --all-namespaces |grep metrics

     

    查看pod资源使用率

    kubectl top pod chesterdeployment-75c64cc8b6-k4jqw -n chesterns

     

    安装好之后,我们可以看到已经可以正常使用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操作

    curl clusterip:5000/test/highcpu?minutes=1

     

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

    kubectl top pod chesterdeployment-75c64cc8b6-k4jqw -n chesterns
    回到顶部

    创建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

    curl clusterip:5000/test/highcpu?minutes=3

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

    kubectl describe hpa chesterhpa -n chesterns
    kubectl get pods --namespace=chesterns
    kubectl top pod  -n chesterns​

    C#/.net/.net core QQ群:953553560


                    
  • 相关阅读:
    都说行情不好,自考本科的我却拿到了年包50W+的offer
    FB、WhatsApp群发消息在2022年到底有多热门?
    Go并发编程之一
    运筹帷幄决胜千里,Python3.10原生协程asyncio工业级真实协程异步消费任务调度实践
    【C++】C 语言 和 C++ 语言中 const 关键字分析 ② ( const 常量分配内存时机 | const 常量在编译阶段分配内存 )
    【C++】STL —— String类不会怎么办? 看文档(万字详解)
    深度学习应用篇-计算机视觉-OCR光学字符识别[7]:OCR综述、常用CRNN识别方法、DBNet、CTPN检测方法等、评估指标、应用场景
    智慧矿山:让AI算法提高未戴安全带识别率!
    WSL中ubuntu安装mysql数据库
    DBeaver 安装及配置离线驱动
  • 原文地址:https://www.cnblogs.com/chenyishi/p/16050011.html
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号