• 【无标题】


    HPA控制过程和控制原理
    K8s中的MetricsServer会持续采集Pod的指标数据,HPA 控制器通过 Metrics Server 的 API(Heapster 的 API 或聚合 API)获取这些数据,基于用户定义的扩缩容规则进行计算,得到目标 Pod 副本数量。当目标 Pod 副本数量与当前副本数量不同时,HPA 控制器就向 Pod 的副本控制器(Deployment、RC 或 ReplicaSet)发起 scale 操作,然后副本控制器会调整 Pod 的副本数量,完成扩缩容操作。

    HPA版本
    目前版本有:autoscaling/v1、autoscaling/v2beta1和autoscaling/v2beta2 三个大版本 。

    autoscaling/v1只支持CPU一个指标的弹性伸缩

    autoscaling/v2beta1支持自定义指标

    autoscaling/v2beta2支持外部指标

    hpa示例
    以autoscaling/v2beta2为例:

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
    name: web
    namespace: default
    spec:
    behavior:
    scaleDown:
    policies:
    periodSeconds: 15
    type: Percent
    value: 100
    stabilizationWindowSeconds: 300
    scaleUp:
    policies:
    - type: Percent
    value: 100
    periodSeconds: 15
    - type: Pods
    value: 4
    periodSeconds: 15
    selectPolicy: Max
    stabilizationWindowSeconds: 0
    maxReplicas: 10
    minReplicas: 1
    scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: d1
    metrics:
    - type: Resource
    resource:
    name: cpu
    target:
    type: Utilization
    averageUtilization: 50
    - type: ContainerResource
    containerResource:
    container: C1
    name: memory
    target:
    type: AverageValue
    averageValue: 300Mi
    - type: Pods
    pods:
    metric:
    name: Pods_second
    selector:
    - matchExpressions:
    - key: zone
    operator: In
    values:
    - foo
    - bar
    target:
    type: AverageValue
    averageValue: 1k
    - type: External
    external:
    metric:
    name: External_second
    selector: “queue=worker_tasks”
    target:
    type: Value
    value: 20
    - type: Object
    object:
    describedObject:
    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    name: main-route
    metric:
    name: ingress_test
    target:
    type: Value
    value: 2k
    HPA名词解释
    maxReplicas: 是autoscaler可以扩展到的副本数的上限。

    minReplicas: 是自动缩放程序将复制到的副本数的下限,默认是1

    scaleTargetRef: 需要动态伸缩的scale所在的K8S资源。

    metrics
    指动态伸缩的控制指标,

    有以下几种类型

    resource:指的是当前伸缩对象下的pod的指标。target.type只支持Utilization和AverageValue类型的阈值
    containerResource:指的是当前伸缩对象下的container的cpu和memory指标,只支持Utilization和AverageValue类型的阈值
    pods: 指的是伸缩对象Pods的指标,数据需要第三方的adapter提供,只允许AverageValue类型的阈值
    external:指的是k8s外部的指标,数据同样需要第三方的adapter提供。只支持Value和AverageValue类型的阈值
    object: 指的是指定k8s内部对象的指标,数据需要第三方adapter提供,例如Ingress。只支持Value和AverageValue类型的阈值
    metrics的目标值有以下几类:

    averageUtilization: 当整体的资源利用率超过这个百分比的时候,会进行扩容
    averageValue: 当指标的平均值或资源的平均利用率超过这个的时候,会进行扩容
    Value: 当指标的值超过这个的时候,会进行扩容
    pods、external、object支持使用筛选器进行筛选,允许进行条件选择。

    behavior
    用来精确控制HPA的扩容和缩容的速度

    behavior中包括:scaleDown:(缩容速度策略)和scaleU()扩容速度策略)

    上面的实例中:

    缩容按照百分比,每15秒最多减少currentReplicas*100%个副本(但最终不可小于minReplicas),且缩容后的最终副本不得低于过去300s内计算的历史副本数的最大值

    扩容则采用快速扩容,不考虑历史计算值(窗口时间为0),每15秒副本翻倍或者每15秒新增4个副本(取最大值),即:max(2*currentReplicas,4)

    使用CPU指标缩放
    使用cpu指标缩放时,必须要启动K8S-api聚合

    k8s api 聚合
    k8s 1.7 版本设计了APIAggregator组件(其实APIAggreator组件还包括代理后端服务等功能),来实现外部服务的集成,这样开发人员不用修改k8s代码,也可以来自定义服务信息。k8s允许第三方应用把自己注册到apiserver中,且依然使用APIserver的HTTP URL进行访问操作 。api聚合层主要就是将拓展api的访问请求转发到用户服务上。

    比如当你访问 apis/http://metrics.k8s.io/v1beta1 的时候,实际上访问到的是一个叫作 kube-aggregator 的代理。而 kube-apiserver,正是这个代理的一个后端;而 Metrics Server,则是另一个后端 。其实他的作用主要就是为了拓展k8s的api功能。

    使用kubeadm部署的集群默认会开启该功能,二进制方式部署的需要增加一些启动参数在kube-apiserver.conf文件中,再重启apiserver服务即可

    –requestheader-client-ca-file=/opt/kubernetes/ssl/ca.pem \ #指定的根证书,需要访问聚合层需要的认证,可信任的Ca。
    –requestheader-allowed-names=kubernetes \ #客户端证书常用名称列表。允许在–requestheader-username-headers指定的标头中提供用户名,如果为空,则允许在–requestheader-client-ca文件中通过当局验证的任何客户端证书
    –requestheader-extra-headers-prefix=X-Remote-Extra- \ #和下面的两个一起都是请求头里面用于识别是否可信的字段
    –requestheader-group-headers=X-Remote-Group
    –requestheader-username-headers=X-Remote-User
    –enable-aggregator-routing=true \ #启用聚合层的路由
    –proxy-client-cert-file=/opt/kubernetes/ssl/server.pem --proxy-client-key-file=/opt/kubernetes/ssl/server-key.pem \ # 用于证明aggregator或kube-apiserver在请求期间发出呼叫的身份的客户端证书和用于证明聚合器或kube-apiserver的身份的客户端证书的私钥 可以用上面的ca单独颁发,也可以直接用apiserver的证书,只要是ca颁发的就可以
    #上面的参数在kube-admin文件中也是有的。
    Metrics Server
    Metric server是由用户开发的一个api server,集群范围的资源使用情况的指标监控器。

    Metric server本身不是k8s的组成部分,是托管运行在k8s上的一个pod。

    Metric server从每个节点上Kubelet公开的API收集指标。

    Metrics server通过Kubernetes聚合器注册在Master APIServer中。

    用户可通过Metrics API在Kubernetes中获得资源使用率指标,例如容器CPU和内存使用率。这些指标既可以由用户直接访问(例如,通过使用kubectl top命令),也可以由集群中的控制器(例如,Horizontal Pod Autoscaler)使用。

    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: main-data-after
      namespace: oss-mahao-touming-pro
    spec:
      behavior: 
        scaleDown: 
          policies: 
          - type: Percent   #百分比,缩容是采用百分比的方式,还可以采用指定pods数量的方式
            periodSeconds: 120   #指定缩容一次的时间,定义为120s,缩容100%
            value: 100        #指定periodSeconds时间的扩缩容的数量,或百分比
          stabilizationWindowSeconds: 300  #缩容时的狂口时间
        scaleUp: 
          policies:
          - type: Percent
            value: 100
            periodSeconds: 30
          - type: Pods
            value: 4
            periodSeconds: 30
          selectPolicy: Max
          stabilizationWindowSeconds: 0
      maxReplicas: 10
      minReplicas: 1
      scaleTargetRef: 
        apiVersion: apps/v1
        kind: Deployment
        name: main-data-after
      metrics: 
      - type: Resource 
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
      - type: Resource
        resource:
          name: memory
          target:
            type: Utilization
            averageUtilization: 5
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
  • 相关阅读:
    day062:平衡二叉树——左旋、右旋
    初识nuxt3
    java 整理
    Sql语句的执行流程
    最新 Java 高频面试集锦,让你“金九银十”轻松斩获offer
    ubuntu20.04屏幕亮度无法调节的解决方法->安装 brightness-controller-simple 软件
    window下生成某个文件夹的所有文件和文件夹的目录
    C语言--每日五道选择题--Day8
    1数据结构的分类,算法效率的度量
    【编程不良人】Redis后端实战学习笔记01---NoSQL简介、分类、应用场景;Redis特点、安装、相关指令
  • 原文地址:https://blog.csdn.net/shiqiang002/article/details/126358347