上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE 设置工作负载自动水平伸缩
容器引擎服务CCE
百度智能云容器引擎服务 CCE 设置工作负载自动水平伸缩

文档简介:
HPA 可以根据 CPU 利用率或者一些应用程序提供的度量指标自动伸缩一个 Deployment 或者 Replica Set 中 Pod 的数量,能更好的应对突发流量等场景。 本文介绍在百度智能云云容器引擎 (CCE) 中如何使用 HPA 对应用自动扩缩容。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

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
相似文档
  • 私有镜像指位于私有仓库中的Docker镜像,用户需要使用仓库用户名密码登入(docker login)后才能拉取。在CCE集群中,需要为Pod配置imagePullSecrets,才能够在集群中使用私有镜像启动Pod中的容器。
  • 本文介绍通过安装、配置 cce-image-plugin 拉取 CCR 私有仓库的镜像,从而省去在集群资源 YAML 中显式配置 ImagePullSecret 的重复工作。作用机制参考:通过 serviceAccount 配置pod的imagepullsecrets。
  • 用户可以通过百度智能云提供的 yaml 文件模板创建和修改服务,同时也能在页面中对服务的端点信息,关联容器组(Pod)信息等进行查看和操作,对服务(Service)的生命周期进行管理,同时允许用户通过 yaml 文件随时对已经部署的服务进行修改。
  • 本文档会详细介绍如何在CCE下创建类型是 LoadBalancer 的 Service。 注:以下 annotation 对 1.16.3 以下版本可能不生效,辛苦工单联系管理员处理。 当用户创建类型是 LoadBalancer 的 Service,默认情况下,CCE 会联动的创建 BLB,并为此 BLB 绑定 EIP。
  • 直连 Pod 模式 LoadBalancer Service 以 Pod 的 IP 地址作为其后端服务器。 当访问直连 Pod 模式 LoadBalancer Service 时,Service ,请求只需经过一次负载均衡操作即可被转发到具体的 Pod 上。 这种模式的 Service 具有以下优势: 保留请求的源 IP; 少一次请求转发,系统具有更高的性能。 Pod 层面更均匀的负载均衡。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部