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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前言 弹性伸缩是开发者使用容器过程中非常关注的特性,如果从资源类型的角度来讲,可以分为物理资源的弹性伸缩与容器资源的弹性伸缩。在本篇中,主要向大家介绍的是容器资源的弹性伸缩,在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

相关实践学习
巧用云服务器ECS制作节日贺卡
本场景带您体验如何在一台CentOS 7操作系统的ECS实例上,通过搭建web服务器,上传源码到web容器,制作节日贺卡网页。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 运维 Kubernetes
容器数据保护:基于容器服务 Kubernetes 版(ACK)备份中心实现K8s存储卷一键备份与恢复
阿里云ACK备份中心提供一站式容器化业务灾备及迁移方案,减少数据丢失风险,确保业务稳定运行。
|
2月前
|
安全 持续交付 云计算
课时5:阿里云容器服务:最原生的集成Docker和云服务
阿里云容器服务以服务化形式构建容器基础设施,大幅提升开发效率,简化应用部署流程。通过Docker容器和DevOps工具(如Jenkins),实现自动化部署与迭代,优化企业内部复杂部署问题。该服务支持GPU调度、混合云架构无缝迁移,并与阿里云产品体系无缝集成,提供安全防护、网络负载均衡等多重功能支持。凭借微服务架构,帮助企业突破业务瓶颈,提高资源利用率,轻松应对海量流量。
课时5:阿里云容器服务:最原生的集成Docker和云服务
|
3月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
2月前
|
人工智能 Kubernetes Serverless
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
阿里云向全球客户推出创新容器计算服务ACS,可降低算力成本高达55%
|
3月前
|
弹性计算 监控 持续交付
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
面对热点事件,阿里云如何通过云上弹性与容器服务帮助客户应对流量洪峰
|
3月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
20天前
|
关系型数据库 MySQL Docker
|
2月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
131 16
|
2月前
|
监控 关系型数据库 MySQL
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
zabbix7.0.9安装-以宝塔安装形式-非docker容器安装方法-系统采用AlmaLinux9系统-最佳匹配操作系统提供稳定运行环境-安装教程完整版本-优雅草卓伊凡
160 30
|
2月前
|
存储 虚拟化 Docker

相关产品

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