容器集群弹性伸缩

520 阅读2分钟

水平自动扩缩容-HPA

指标获取

  • metrics service,可以根据资源使用率cpu、memory,来进行扩容或缩容。
  • custom metrics server, 可以通过监控获取的其他指标(每秒请求量等)来进行自动的扩容或缩容。
  • 自定义指标,可以自定义一些指标来进行扩缩容。

算法

  • 1、pod的水平扩缩,是根据当前指标和期望指标来计算扩缩比列的。如果计算出的扩缩比例接近 1.0 (根据--horizontal-pod-autoscaler-tolerance 参数全局配置的容忍值,默认为 0.1), 将会放弃本次扩缩。
  • 2、当设置多个指标事件,会选择幅度最大的扩缩比列
期望的副本数=当前副本数*(当前指标/期望指标)

图:自动扩缩容工作流程图

HPA.png

扩缩容策略

  • 扩缩容的速率:每60秒,扩缩容6个pod;每60秒,扩缩容比列6%;
spec:    
    behavior:
      scaleDown:
        policies:
        - type: Pods
          value: 6
          periodSeconds: 60
        - type: Percent
          value: 6
          periodSeconds: 60
  • 稳定窗口:自动扩缩算法使用稳定窗口来考虑过去计算的期望状态,以防止扩缩;如:过去 5 分钟的所有期望状态都会被考虑。
spec:
  scaleDown:
    stabilizationWindowSeconds: 300
  • 禁用缩容:selectPolicy 的值 Disabled 会关闭对给定方向的缩容。
spec:
  behavior:
    scaleDown:
      selectPolicy: Disabled

示例一:当cpu平均使用超过80%,则自动扩容,最少一个Pod,最多10个。

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hy-risk-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hy-risk
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 80
                        

垂直自动扩缩容-VPA

  • 垂直扩缩容:是一种调整pod分配资源的方式,来进行扩缩容的方法。

集群节点扩缩容

  • 节点扩缩容:缩容是一件比较麻烦的事件,但目前多数的云厂商的服务都可以支持节点的自动扩缩容。通过对节点某些指标进行监控来判断是否需要进行扩容,缩容等。