美文网首页
Kubernetes HPA 的理解

Kubernetes HPA 的理解

作者: Secret_Sun | 来源:发表于2020-09-30 15:40 被阅读0次

    什么是 HPA?

    • Pod 水平自动扩缩(Horizontal Pod Autoscaler) 可以基于 CPU 利用率自动扩缩 ReplicationController、Deployment 和 ReplicaSet 中的 Pod 数量。 除了 CPU 利用率,也可以基于其他应程序提供的自定义度量指标 来执行自动扩缩。 Pod 自动扩缩不适用于无法扩缩的对象,比如 DaemonSet。「VPA 可以默认放弃,如果还有对外服务如果只能垂直升,那写的都是啥?」
      Horizontal Pod Autoscaler

    实现原理

    • Pod 由控制器 kube-controller-manager 周期性的进行管理,每个周期按照 HorizontalPodAutoscaler 给到的指标确认利用率/度量值后与设置好的target对比后,将会进行资源利用率/原始数计算后给到扩容比例
      • --horizontal-pod-autoscaler-sync-period: 默认 30s HPA 审核应用使用资源情况或自定义指标的频率
      • --horizontal-pod-autoscaler-downscale-delay: 默认 5m0s 缩容操作完成后,HPA 必须等待多长时间才能进行另外一次缩容操作
      • --horizontal-pod-autoscaler-upscale-delay: 默认 3m0s 扩容操作完成后,HPA 必须等待多长时间才能进行另外一次扩容操作
    • 需要注意如果是自定义度量值的话就是纯数字的对比了,不是百分比了。


      期望副本数 = ceil[(当前指标 / 期望指标) * 当前副本数]
    • TargetUtilization 和 Target 的为目标利用率和目标利用值(平均值或总量值)
    • 设置 Cpu 利用率为 40% 假设存在一个叫 A 的 Deployment,包含 3 个 Pod,每个副本的 Request 值是 1 核,当前获取的每个 Pod 的 Cpu 使用值为 0.5,0.8,0.7,则当前 Pod 的总 Cpu 利用率 x=(0.5+0.7+0.8)/(3 * 1)=66.7%;根据上面公式 targetPods=(66.7%)/(40%)*3=5
    • 以网络接收字节数 Receive_bytes_total 为指标计算, 目标平均值 targetAverageValue 为 100,假设存在一个叫 A 的 Deployment,包含 3个 Pod,当前获取的每个 Pod 的 Receive_bytes_total 使用值为120,150,20,则当前 Pod 的 Receive_bytes_total 总平均使用值 x = (130+150+200)/3 = 160,根据上面公式 TargetPods = (160/100)*3 = 5
    • Package podautoscaler
    • podautoscaler > replica_calculator.go 「整不明白先看 replica_calculator_test.go
    • 核心方法
    流程

    优雅使用

    价值

    • 成本:配合 Cluster Autoscaling + CronHpa/Custom Hpa 「我厂已有大佬实现,麻烦收下膝盖!!!」,可以非常好的控制成本,老省钱了「降本提效」
    • 稳定性:发挥监控数据的价值提前自动化的扩容好服务 「好美 好美」
    • 效率:无研发介入、无 infra 介入,全自动「真香」

    相关文章

      网友评论

          本文标题:Kubernetes HPA 的理解

          本文链接:https://www.haomeiwen.com/subject/rvwuuktx.html