Pod弹性伸缩

最近更新时间:2020-10-21 15:38:57

Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现POD水平自动伸缩的功能,可以根据CPU使用率或者其他自定义的指标自动扩展部署中的Pod数量。

自动伸缩算法

HPA组件会每隔30s从集群中的Metrics Server组件获取pod的监控指标(如果设置了目标利用率,则需要计算监控指标与每个pod中容器的resource request的百分比;如果设置了目标原始值,则直接使用该原始metrics值),根据工作负载当前副本数和该指标的目标值计算出期望副本数,作为工作负载的期望副本数,具体计算公式如下:

扩缩容算法:期望副本数量=采集的使用率/用户自定义使用率*当前pod数量

支持设置多个弹性伸缩的策略,HPA会根据每个指标的目标值,分别计算出目标副本数,然后取最大的一个作为最终目标副本数。

容器服务控制台操作说明

新建HPA

可以通过以下两种方式新建HPA。

方式一:通过单击新建HPA

1、进入容器服务控制台,点击左侧导航栏中的【自动伸缩】-【HPA】,进入HPA列表页,单击【新建】按钮,如下图所示:

Pod弹性伸缩

2、在“新建HPA”页面,根据以下提示进行HPA配置,如下图所示:

Pod弹性伸缩

  • 名称:输入要创建HPA的名称。
  • 命名空间:请根据实际需求进行选择。
  • 关联Deployment:请根据实际需求进行选择。
  • 触发策略:HPA功能依赖的策略指标。
  • 实例范围:请根据实际需求进行选择,实例数量会在设定的范围内自动调节,不会超出该设定范围。

注: 当前支持设置的触发策略指标:

  • CPU利用率:容器CPU使用量和CPU request值的比率
  • CPU使用量:容器CPU使用量(核)
  • 内存使用率:容器内存的使用量和内存 request值的比率
  • 内存使用量:容器内存使用量(MiB)

3、单击【创建】,完成HPA创建。

方式二:通过创建部署时,设置pod的弹性伸缩

1、进入容器服务控制台,点击左侧导航栏中的【工作负载】-【Deployment】,进入Deployment列表页,单击【新建】按钮,如下图所示:

Pod弹性伸缩

2、在“新建Deployment”页面,选择“自动调节”并根据以下提示进行设置,如下图所示:

Pod弹性伸缩

  • 触发策略:HPA功能依赖的策略指标。
  • 实例范围:请根据实际需求进行选择,实例数量会在设定的范围内自动调节,不会超出该设定范围。

3、单击【创建】,完成HPA创建。

调整HPA配置

可以通过以下三种方式调整HPA配置。

方式一:通过单击调整配置修改

1、进入容器服务控制台,点击左侧导航栏中的【自动伸缩】-【HPA】,进入HPA列表页,单击【调整配置】,如下图所示:

Pod弹性伸缩

2、在出现的弹窗中,根据实际需求进行调整,并单击【确定】,即可调整HPA配置。

方式二:通过编辑YAML更新

1、进入容器服务控制台,点击左侧导航栏中的【自动伸缩】-【HPA】,进入HPA列表页,单击【编辑YAML】,如下图所示:

Pod弹性伸缩

2、在“编辑YAML”页面,根据实际需求进行调整,并单击【确定】,即可调整HPA配置。

方式三:通过调节实例数量时,调整pod的弹性伸缩

1、进入容器服务控制台,点击左侧导航栏中的【工作负载】-【Deployment】,进入Deployment列表页,单击【调节实例数量】,如下图所示:

Pod弹性伸缩

2、在出现的弹窗中,选择“自动调节”并根据实际需求进行调整,单击【确定】即可调整HPA设置。

查看HPA相关信息

1、进入容器服务控制台,点击左侧导航栏中的【自动伸缩】-【HPA】,进入HPA列表页,单击需要查看HPA信息的名称。

2、进入HPA详情页,可以选择“详情”、“事件”、“YAML”进行相关信息查看。

删除HPA

1、进入容器服务控制台,点击左侧导航栏中的【自动伸缩】-【HPA】,进入HPA列表页,单击【删除】,如下图所示:

Pod弹性伸缩

2、在出现的弹窗中,点击【确认】即可删除HPA。

Kubectl 命令操作说明

可以通过 YAML 文件创建和编辑 HPA 。以下为配置文件的示例:

hpa-example.yaml示例:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-example
  namespace: default
spec:
  minReplicas: 1                    #最小副本数
  maxReplicas: 3                    #最大副本数
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50       #当CPU使用率为50时触发HPA,实例范围为1-3
  scaleTargetRef:
    apiVersion: apps/v1beta2
    kind: Deployment
    name: nginx

创建hpa-example.yaml

# kubectl apply -f hpa-example.yaml

注意事项

  • 当使用cpu/内存使用率作为伸缩策略指标时,请务必设置容器request的值,否则不支持
  • HPA在计算目标副本数时会有一个 10% 的波动因子,如果在波动范围内,HPA 并不会调整副本数目。
  • HPA在每一次作出决策后的一段时间内,将不再进行扩展决策。对于扩容而言,这个时间段为3分钟,缩容为5分钟
  • 保证用户请求的负载均衡

金山云,开启您的云计算之旅

免费注册