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

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

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
2月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
310 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
23天前
|
存储 弹性计算 运维
阿里云容器服务Kubernetes版(ACK)部署与管理体验评测
阿里云容器服务Kubernetes版(ACK)是一个功能全面的托管Kubernetes服务,它为企业提供了快速、灵活的云上应用管理能力。
89 2
|
2月前
|
Kubernetes 监控 调度
阿里云容器服务ACK
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)提供高性能、可伸缩的容器应用管理服务,支持企业级Kubernetes容器化应用的生命周期管理。在ACK中,利用cGPU(Containerized GPU)技术可以实现GPU资源的共享,提高GPU利用率,降低整体成本。
110 6
|
2月前
|
运维 Kubernetes Serverless
阿里云容器服务
小陈在大刘的指导下学习Kubernetes,发现搭建和维护Kubernetes集群有一定难度。大刘建议小陈考虑使用阿里云的容器服务ACK,它基于Kubernetes,但进行了云原生优化,简化了集群管理和运维工作。ACK有三种形态:专有版、托管版和Serverless版。小陈认为ACK Serverless更适合,因为它无需运维,开箱即用,适合专注于业务开发。ACK Serverless基于弹性容器实例ECI,提供无服务器的容器运行环境,支持Kubernetes兼容,降低了使用门槛。
|
2月前
|
弹性计算 运维 Kubernetes
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
轻量应用服务器是深受个人和普通企业用户亲耐的一款轻量级云服务器产品,提供精品应用一键部署,支持一站式的域名、网站、安全、运维、应用管理等服务,极大优化搭建简单应用的体验,降低了入门级用户使用云计算产品的门槛。轻量容器服务是专为学生、个人开发者等用户打造的轻量级容器服务,帮助您在云上快速了解容器和Kubernetes(简称K8s)相关的基础概念和轻松进行入门实践。本文为大家介绍一下阿里云轻量应用服务器与轻量容器服务的区别以及收费标准,以供参考。
阿里云轻量应用服务器与轻量容器服务简介与区别及收费标准参考
|
2月前
|
人工智能 运维 Kubernetes
期待已久!阿里云容器服务 ACK AI 助手正式上线
期待已久!阿里云容器服务 ACK AI 助手正式上线
|
2月前
|
容器
阿里云容器服务 ACK 产品技术动态(202312)
阿里云容器服务 ACK 产品技术动态(202312)
|
2月前
|
运维 Kubernetes 监控
阿里云容器服务ACK报警中心快速构建运维体系最佳实践
根据CNCF社区发布的年度统计,Kubernetes已经成为主流工业界的云原生基础设施平台。在Kubernetes上的真实业务环境,建立成熟稳定的运维体系至关重要,然而用户在“正值壮年”的Kubernetes生态中往往会遇到:容器监控体系复杂,学习成本高,监控报警配置碎片化严重;传统运维体系不能生搬套用;问题如何快速路由到正确的运维人员等等问题。本文介绍基于阿里云容器服务ACK报警中心如何快速构建成熟的运维体系,继承专业容器服务领域运维能力与经验沉淀。
110 0
阿里云容器服务ACK报警中心快速构建运维体系最佳实践
|
2月前
|
弹性计算 监控 开发工具
【阿里云弹性计算】实战教程:如何高效利用阿里云ECS弹性伸缩应对业务高峰
【5月更文挑战第20天】本文介绍了如何使用阿里云ECS弹性伸缩服务应对业务高峰。通过自动调整云资源规模,弹性伸缩在流量增加时扩展实例,流量减少时收缩实例,实现成本与性能的优化。步骤包括开通服务、创建伸缩组、设定规则和监控指标。文中还提供了一个Python脚本示例,并强调了优化策略,如应用无状态设计、考虑冷却时间和结合云监控。通过实践和调整,企业可以有效应对业务波动。
103 5

相关产品

  • 容器计算服务