设置工作负载自动水平伸缩
所有文档

          容器引擎 CCE

          设置工作负载自动水平伸缩

          HPA (Horizontal Pod Autoscaling) 简介

          HPA 可以根据 CPU 利用率或者一些应用程序提供的度量指标自动伸缩一个 Deployment 或者 Replica Set 中 Pod 的数量,能更好的应对突发流量等场景。

          本文介绍在百度智能云云容器引擎 (CCE) 中如何使用 HPA 对应用自动扩缩容。

          验证 HPA

          为演示 HPA,本文将使用一个基于 php-apache 镜像的定制 Docker 镜像。镜像中包括一个 index.php 页面,其中包含一些可以运行 CPU 密集计算任务的代码。 示例 Dockerfile 如下

          FROM php:5-apache
          
          ADD index.php /var/www/html/index.php
          
          RUN chmod a+rx index.php

          示例 index.php 文件如下

          <?php
          $x = 0.0001;
          for ($i = 0; $i <= 1000000; $i++) {
          	$x += sqrt($x);
          }
          echo "OK!";
          ?>

          前提条件

          1. 已通过 CCE 部署一个 Kubernetes 集群
          2. 已配置 kubectl,可以在本机访问 Kubernetes 集群

          1. 部署和运行

          首先,部署一个 Deployment 运行上述 Docker 镜像并将其暴露成为一个 Kubernetes 服务(Service)

          kubectl run php-apache --image=hpa-example --requests=cpu=200m --expose --port=80
          
          service "php-apache" created
          deployment "php-apache" created

          2. 创建 HPA

          kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
          deployment "php-apache" autoscaled
          
          
          创建出来后,当前监控值为unknown,执行第3步后,等待1-2分钟,这里会变为正常的百分比
          [root@instance-2tpjy37t ~]# kubectl get hpa
          NAME         REFERENCE               TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
          php-apache   Deployment/php-apache   <unknown>/50%   1         10         1          5s

          对应 YAML 如下:

          apiVersion: autoscaling/v2alpha1
          kind: HorizontalPodAutoscaler
          metadata:
            name: php-apache
            namespace: default
          spec:
            scaleTargetRef:
              apiVersion: apps/v1beta1
              kind: Deployment
              name: php-apache
            minReplicas: 1
            maxReplicas: 10
            metrics:
            - type: Resource
              resource:
                name: cpu
                targetAverageUtilization: 50

          字段解释:

          • scaleTargetRef : HPA 自动扩缩容的目标对象
          • minReplicas :最小 Pod 数量
          • maxReplicas :允许的最大 Pod 数量
          • metrics :度量指标
          • targetAverageUtilization:即设定的资源利用率,超过设定值时触发水平扩展

          HPA 目前支持 3 种类型的度量指标,详情参考kubernetes Horizontal Pod Autoscaler

          • 预定义指标:Pod 的 CPU 和内存使用率(内置支持)
          • 自定义 Pod 指标:应用程序提供的监控指标(需部署监控、自定义 metric server)
          • 自定义 Object 指标:和 Pod 同一个命名空间中的其它资源的监控指标(需部署监控、自定义 metric server)

          3. 向 php-apache 服务增加负载,验证自动扩缩容

          启动一个容器,并通过一个循环向php-apache服务器发送无限的查询请求(请在另一个终端中运行以下命令)

          kubectl run -i --tty load-generator --image=busybox /bin/sh
           
          Hit enter for command prompt
           
          $ while true; do wget -q -O- http://php-apache.default.svc.cluster.local; done
           
          输出:
          OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!OK!!OK!OK!OK!OK

          4. 观察 HPA 的变化

          负载升高后,Deployment 的副本数量(Replicas)会开始增加

          [root@instance-2tpjy37t ~]# kubectl get hpa
          NAME         REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
          php-apache   Deployment/php-apache   332%/50%   1         10         7          19m
          
          [root@instance-2tpjy37t ~]# kubectl get deployment php-apache
          NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
          php-apache   7         7         7            7           19m

          5. 停止负载

          在生成负载的容器的终端中,输入<ctrl> + c来终止负载的产生。 然后再次查看负载状态(等待几分钟时间)

          [root@instance-2tpjy37t ~]# kubectl get hpa
          NAME         REFERENCE                     TARGET       MINPODS   MAXPODS   REPLICAS   AGE
          php-apache   Deployment/php-apache/scale   0% / 50%     1         10        1          11m
          
          # 负载降低后,Pod 数量也随之减少
          [root@instance-2tpjy37t ~]# kubectl get deployment php-apache
          NAME         DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
          php-apache   1         1         1            1           27m
          上一篇
          查看容器组
          下一篇
          使用私有镜像创建工作负载