阿里云容器服务使用HPA弹性伸缩容器

简介: 前言 弹性伸缩是开发者使用容器过程中非常关注的特性,如果从资源类型的角度来讲,可以分为物理资源的弹性伸缩与容器资源的弹性伸缩。在本篇中,主要向大家介绍的是容器资源的弹性伸缩,在Kubernetes中,HPA(Horizontal Pod Autoscaling)是用来抽象容器水平弹性伸缩的概念。

前言

弹性伸缩是开发者使用容器过程中非常关注的特性,如果从资源类型的角度来讲,可以分为物理资源的弹性伸缩与容器资源的弹性伸缩。在本篇中,主要向大家介绍的是容器资源的弹性伸缩,在Kubernetes中,HPA(Horizontal Pod Autoscaling)是用来抽象容器水平弹性伸缩的概念。开发者可以通过定义HPA的yaml配置,快速实现容器水平伸缩。

原理

lALPBY0V45V4xWfNAeDNAho_538_480_png_620x10000q90g
在Kubernetes中,Pod的负载是通过Heapster进行采集的(新版本中可以通过Metrics Server进行采集),HPA Controller通过定期(定期轮询的时间通过–horizontal-pod-autoscaler-sync-period选项来设置,默认的时间为30秒)查询Pod当前系统的负载来自动水平扩容,如果系统负载超过预定值,就开始增加Pod的个数,如果低于某个值,就自动减少Pod的个数。

使用方式

下面我们针对一个Nginx应用进行举例:

apiVersion: apps/v1beta2 # for versions before 1.8.0 use apps/v1beta1
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: nginx:1.7.9 # replace it with your exactly <image_name:tags>
        ports:
        - containerPort: 80
        resources:
          requests:
            cpu: 500m

创建HPA,通过scaleTargetRef设置当前HPA绑定的对象,在本例中绑定是名叫nginxDeployment

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1beta2
    kind: Deployment
    name: nginx
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      targetAverageUtilization: 50

注意:HPA需要给Pod设置request资源,如果没有request资源,HPA是不会运行的,kubectl describe hpa [name]会发现有类似如下的warnning。

Warning  FailedGetResourceMetric       2m (x6 over 4m)  horizontal-pod-autoscaler  missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5897-mqzs7

Warning  FailedComputeMetricsReplicas  2m (x6 over 4m)  horizontal-pod-autoscaler  failed to get cpu utilization: missing request for cpu on container nginx in pod default/nginx-deployment-basic-75675f5

创建好HPA后,我们再次执行kubectl describe hpa [name]命令,可以看到如下信息,则表示HPA已经正常运行。

Normal   SuccessfulRescale             39s              horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

此时当Nginx的Pod的利用率超过如上图所示的50%的利用率时,则会进行水平扩容,低于50%的时候会进行缩容。

使用容器服务部署支持HPA的Deployment

在阿里云容器服务中,已经集成了HPA,开发者可以非常简单的通过UI进行创建。

  1. 点击左侧菜单的部署,选择镜像创建
    lALPBY0V45V_bfrNAtjNBMw_1228_728_png_620x10000q90g
  2. 填写应用的名称和相应的配置信息,设置资源的所需资源。
    lALPBY0V45V_bmHNAtjNBMw_1228_728_png_620x10000q90g
  3. 勾选自动伸缩的开启,设置伸缩的条件和配置。
    lALPBY0V45V_bojNAtjNBMw_1228_728_png_620x10000q90g
  4. 此时一个支持HPA的Deployment就已经创建完毕了,可以在部署的详情中查看伸缩组信息。
    lALPBY0V45V_brfNAzzNBMw_1228_828_png_620x10000q90g
  5. 验证弹性伸缩,通过给Pod进行CPU压测,可以发现Pod在半分钟内即可完成水平的扩展。
    lALPBY0V45V_bvfNAzzNBMw_1228_828_png_620x10000q90g

最后

HPA是Kubernetes中最常使用的伸缩方式,除此之外,HPA还可以结合autoscaler同时使用,当HPA弹出的容器无法进行调度的时候,autoscaler会自动弹出节点,并将HPA所期望的容器运行在弹出的节点上。关于autoscaler的部分,可以参考阿里云上弹性伸缩kubernetes集群 - autoscaler

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
弹性计算 人工智能 Serverless
阿里云ACK One:注册集群云上节点池(CPU/GPU)自动弹性伸缩,助力企业业务高效扩展
在当今数字化时代,企业业务的快速增长对IT基础设施提出了更高要求。然而,传统IDC数据中心却在业务存在扩容慢、缩容难等问题。为此,阿里云推出ACK One注册集群架构,通过云上节点池(CPU/GPU)自动弹性伸缩等特性,为企业带来全新突破。
|
人工智能 运维 Kubernetes
阿里云容器服务AI助手2.0 - 新一代容器智能运维能力
2024年11月,阿里云容器服务团队进一步深度融合现有运维可观测体系,在场景上覆盖了K8s用户的全生命周期,正式推出升级版AI助手2.0,旨在更好地为用户使用和运维K8S保驾护航。
|
11月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
SQL 弹性计算 分布式计算
阿里云 EMR 发布托管弹性伸缩功能,支持自动调整集群大小,最高降本60%
阿里云开源大数据平台 E-MapReduce 重磅推出托管弹性伸缩功能,基于 EMR 托管弹性伸缩功能,您可以指定集群的最小和最大计算限制,EMR 会持续对与集群上运行的工作负载相关的关键指标进行采样,自动调整集群大小,以获得最佳性能和资源利用率。
598 15
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
阿里云容器服务ACK提供强大的产品能力,支持弹性、调度、可观测、成本治理和安全合规。针对拥有IDC或三方资源的企业,ACK One分布式云容器平台能够有效解决资源管理、多云多集群管理及边缘计算等挑战,实现云上云下统一管理,提升业务效率与稳定性。
|
运维 Kubernetes 调度
阿里云容器服务 ACK One 分布式云容器企业落地实践
3年前的云栖大会,我们发布分布式云容器平台ACK One,随着3年的发展,很高兴看到ACK One在混合云,分布式云领域帮助到越来越多的客户,今天给大家汇报下ACK One 3年来的发展演进,以及如何帮助客户解决分布式领域多云多集群管理的挑战。
阿里云容器服务 ACK One 分布式云容器企业落地实践
|
弹性计算 运维 负载均衡
基于阿里云容器服务Kubernetes版(ACK)| 容器化管理云上应用
【8月更文挑战第3天】基于阿里云容器服务Kubernetes版(ACK)| 容器化管理云上应用
|
人工智能 运维 安全
阿里云容器服务ACK:高效管理云上应用的容器化解决方案
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)为开发者提供了一套全面的容器化管理解决方案,旨在简化云上应用的部署、运维和管理。本文将深入探讨ACK的功能、优势及应用场景,为开发者展现容器化技术在云环境下的强大能力。
1177 0
|
网络协议 网络安全 网络架构
【Azure 容器应用】在中国区Azure上创建的容器服务默认应用域名不全
【Azure 容器应用】在中国区Azure上创建的容器服务默认应用域名不全
177 0
|
Kubernetes 网络协议 网络安全
在K8S中,容器提供一个服务,外部访问慢,到底是容器网络问题?还是容器服务问题?这种怎么排查?
在K8S中,容器提供一个服务,外部访问慢,到底是容器网络问题?还是容器服务问题?这种怎么排查?

相关产品

  • 容器计算服务
  • 容器服务Kubernetes版