阿里云容器计算服务ACS支持通过控制台界面和kubectl的方式快速创建支持HPA(Horizontal Pod Autoscaling)的应用,实现容器资源的弹性伸缩。本文介绍如何在ACS集群中创建支持HPA的应用并验证HPA的伸缩效果。
前提条件
- 已创建ACS集群。具体操作,请参见创建ACS集群。 
- 已使用kubectl连接Kubernetes集群。具体操作,请参见获取集群kubeconfig并通过kubectl工具连接集群。 
创建HPA应用
通过控制台创建
- 登录容器计算服务控制台,在左侧导航栏选择集群列表。 
- 在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择。 
- 在无状态页面,单击使用镜像创建。 
- 在应用基本信息页填写应用的名称等信息,然后单击下一步。 - 配置项 - 描述 - 命名空间 - 在页面顶部设置应用部署所处的命名空间,默认使用default命名空间。 - 应用名称 - 设置应用的名称。 - 副本数量 - 即应用包含的Pod数量,默认数量为2。 - 工作负载 - 定义资源对象的类型,可选择无状态、有状态、任务、定时任务。 - 标签 - 为该应用添加一个标签,标识该应用。 - 注解 - 为该应用添加一个注解(Annotation)。 - 实例类型 - Pod的实例类型,可选择通用型、BestEffort、性能型。 
- 在容器配置页进行容器设置,选择镜像,并设置所需的资源。然后单击下一步。详情请参见容器配置。 说明- 您必须为Deployment设置所需资源,否则无法进行容器自动伸缩。 
- 在高级设置页的访问设置区域,单击服务的创建,设置服务的相关信息,详情请参见高级配置。 
- 在高级设置页选中指标伸缩的开启,设置伸缩的条件和配置。 - 指标:支持CPU和内存,需要和设置的所需资源类型相同。 
- 触发条件:资源使用率的百分比,超过该使用量,容器开始扩容。有关Pod水平自动扩缩的算法,请参见算法细节。 
- 最大副本数:该Deployment可扩容的容器数量上限。 
- 最小副本数:该Deployment可缩容的容器数量下限。 
 
- 单击右下角的创建,一个支持HPA的Deployment就已经创建完毕。 
通过kubectl命令创建
您也可通过编排模板来手动创建HPA,并将其绑定到要伸缩的Deployment对象上,通过kubectl命令实现容器自动伸缩配置。
下面针对一个Nginx应用进行举例。
- 创建并复制以下内容到nginx.yaml中。 - Deployment的编排模板如下。 - apiVersion: apps/v1 kind: Deployment metadata: name: nginx labels: app: nginx spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/nginx:1.7.9 # replace it with your exactly <image_name:tags> ports: - containerPort: 80 resources: requests: ##必须设置,不然HPA无法运行。 cpu: 500m
- 执行以下命令,创建Nginx应用。 - kubectl apply -f nginx.yaml
- 创建并复制以下内容到hpa.yaml中,用于创建HPA。 - 通过scaleTargetRef设置当前HPA绑定的对象,在本例中绑定名为nginx的Deployment。 - apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: nginx-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: nginx minReplicas: 1 # Deployment可缩容的容器数量下限,需设置为大于等于1的整数。 maxReplicas: 10 # 该Deployment可扩容的容器数量上限,需大于minReplicas。 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50 # 目标资源的平均使用率,即资源使用量的平均值与其请求量之间的比例。
- 执行以下命令,创建HPA。 - kubectl apply -f hpa.yaml
- 等待HPA创建后,再次执行 - kubectl describe hpa <HPA的名称>命令。- 可以看到以下信息,则表示HPA已经正常运行。 - Type Reason Age From Message ---- ------ ---- ---- ------- Normal SuccessfulRescale 4m53s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
相关文档
容器定时伸缩请参见容器定时伸缩(CronHPA)。