zoukankan      html  css  js  c++  java
  • k8s HPA与弹性伸缩

    开启HPA(HorizontalPodAutoscaler)的命令:
    kubectl autoscale deployment/rs foo --min=2 --max=5 --cpu-percent=80
    API aggregation layer已开启、相应的API已注册后,HPA控制器会从一系列的API中请求指标数据
    • 资源指标会使用 metrics.k8s.io API,一般由metrics-server提供。 
    • 用户指标会使用 custom.metrics.k8s.io API。 
    • 外部指标会使用 external.metrics.k8s.io API。
    apiVersion: autoscaling/v2beta2
    kind: HorizontalPodAutoscaler
    metadata:
      name: php-apache
    spec:
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: php-apache
      minReplicas: 1
      maxReplicas: 10
      metrics:
      - type: Resource
        resource:
          name: cpu
          target:
            type: Utilization
            averageUtilization: 50
      - type: Pods
        pods:
          metric:
            name: packets-per-second
          target:
            type: AverageValue
            averageValue: 1k
      - type: Object
        object:
          metric:
            name: requests-per-second
          describedObject:
            apiVersion: networking.k8s.io/v1beta1
            kind: Ingress
            name: main-route
          target:
            type: Value
            value: 2k
      - type: External
        external:
          metric:
            name: queue_messages_ready
            selector: "queue=worker_tasks"
          target:
            type: AverageValue
            averageValue: 30
    metrics中的type字段有四种类型的值:
    • Resource
    metrics.k8s.io API存在时,支持CPU、内存两种资源度量指标
    支持averageUtilization(平均使用率)和averageValue(平均值)
    • Pods
    指的是伸缩对象(statefulSet、replicaController、replicaSet)底下的Pods的指标,
    数据需要第三方的adapter提供,并且只允许averageValue类型的目标值。
    • Object
    object metrics用于描述一个在相同namespace的其他对象
    数据需要第三方adapter提供,只支持Value和AverageValue类型的目标值。
    • External
    指的是k8s外部的指标,
    数据同样需要第三方的adapter提供,只支持Value和AverageValue类型的目标值。
     
    算法:
    根据获得的指标,应用相应的算法算出一个伸缩系数,
    系数是指标的期望值与目前值的比值,如果大于1表示扩容,小于1表示缩容。
    --horizontal-pod-autoscaler-tolerance参数全局配置的容忍值,默认为0.1,如果计算出的缩放比例接近1±容忍值,将会放弃本次缩放。
    系数乘以目前pod数量获得期望pod数量。
      期望副本数 = ceil[当前副本数 * ( 当前指标 / 期望指标 )]
    检查最终的Pod数量是否在HPA设定的数量范围的区间,如果超过最大值或不足最小值都会修改为最大值或最小值。
    然后向k8s发出请求,修改伸缩对象的子对象scale的Pod数量
     
    HPA控制器执行缩放操作之前,会记录缩放建议(scale recommendation)。 控制器会在设定时间内考虑所有的建议信息,并从中选择得分最高的建议。 
    时间可通过kube-controller-manager的启动参数--horizontal-pod-autoscaler-downscale-stabilization 进行配置,默认为5分钟
     
    --horizontal-pod-autoscaler-initial-readiness-delay 参数(默认为30s),用于设置Pod准备时间, 在此时间内的Pod被认为未就绪。 
    --horizontal-pod-autoscaler-cpu-initialization-period参数(默认为5分钟),用于设置Pod的初始化时间, 在此时间内的资源指标不会被采纳。 一个HPA支持多个指标的监控,HPA会循环获取所有的指标,计算每一个指标所提议的副本数量。扩容时算最小值,缩容时算最大值一个伸缩对象在k8s中允许对应多个HPA而不会报错,但HPA彼此不知道自己监控的是同一个伸缩对象,会互相冲突。
  • 相关阅读:
    双心ping GUI工具1.0
    判断手机连接的是fdd还是tdd的办法
    能在CAD2004以下版本里面打开2007以上版本文件的外挂
    关闭阿里旺旺后台服务
    map 后 PE 蓝屏原因专题讨论(e820cycles参数)
    关于e820cycles参数
    在XP下把win7安装到VHD,内存足够大可以RAMOS
    抛弃优启Grub4dos和PE大多数时间可以这样用
    考拉输入法1.1-古董级小巧连打输入法
    小韦XP 和win2003装电信天翼3G无线上网卡
  • 原文地址:https://www.cnblogs.com/yangyuliufeng/p/14227398.html
Copyright © 2011-2022 走看看