活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 818 天翼云云智盛典 NEW 爆款云主机低至1.5折起,Token套餐低至9.9元/月起
  • 安全隔离版OpenClaw NEW OpenClaw云服务器专属“龙虾“套餐低至1.5折起
  • 聚力AI赋能 天翼云大模型专项 大模型特惠专区·Token Plan 轻享包低至9.9元起
  • 青云志云端助力计划 NEW 一站式科研助手,海外资源安全访问平台,助力青年翼展宏图,平步青云
  • 企业出海解决方案 NEW 助力您的业务扬帆出海,通达全球!
  • 天翼云信创专区 NEW “一云多芯、一云多态”,国产化软件全面适配,国产操作系统及硬件芯片支持丰富
  • 云上钜惠 爆款云主机全场特惠,2核4G只要1.8折起!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

息壤智算

领先开放的智算服务平台,提供算力、平台、数据、模型、应用“五位一体”智算服务体系,构建全流程的AI基础设施能力
星辰TokenHub
  • 模型广场
  • 体验中心
  • 服务接入
星辰MaaS平台
  • 星辰MaaS智能体平台
  • 星辰大模型
大模型
  • glm-5.3-flash
  • GLM-5.2
  • deepseek-v4-pro-0813
  • deepseek-v4-flash-0731-new
  • qwen3.8-flash
AI Store
  • 算力市场
  • 模型市场
  • 应用市场
应用托管
  • 天翼云DramaFlow2.0
  • 应用实例
科研助手
  • 开发机
  • 并行计算
训推服务
  • 模型开发
  • 训练任务
  • 服务部署
智能体引擎
  • 智能体引擎
可信数据空间
  • 可信数据空间
公共算力服务
  • 裸金属
  • 定制裸金属
智算一体机
  • 智算一体机
模型适配专家服务
  • 模型适配专家服务
算力服务商
  • 入驻算力服务商

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入AI Store公有云生态专区智云上海应用生态专区
建站工具
  • 新域名服务
  • SSL证书
  • 翼建站
企业办公
  • 智教云电脑
  • WPS 365 天翼云版
灾备迁移
  • 云管家2.0
  • 翼备份(SaaS版)
  • 琥珀数据压缩归档服务
智慧教育
  • 智擎思政平台(个人版)
  • 智擎研学平台(个人基础版)

定价

协助您快速了解云产品计费模式、价格详情,轻松预估上云成本
价格计算器
  • 动态测算产品价格
定价策略
  • 快速了解计费模式

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
天翼云培训认证
  • 天翼云学堂
天翼信创云专区
  • 信创云专区
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
培训与认证
  • 天翼云学堂
  • 天翼云认证
开源社区
  • 魔乐社区
  • OpenTeleDB

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 服务保障
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家
我要反馈
  • 建议与反馈
  • 用户体验官
信息公告
  • 客户公告

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2026智能云生态大会
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 息壤智算
  • 产品
  • 解决方案
  • 应用商城
  • 定价
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      云容器引擎 专有版/托管版

      云容器引擎 专有版/托管版

      • 云容器引擎 专有版/托管版

      无数据

        • 产品动态
        • DeepSeek专题
        • DeepSeek专题导航
        • 图解:DeepSeek与公有云深度融合
        • 从基础设施到智能中枢:DeepSeek如何重塑公有云服务价值链
        • 高性能GPU云主机助力DeepSeek深度应用
        • 实践指南:DeepSeek驱动高效能云生态
        • GPU云主机/弹性云主机:零基础搭建DeepSeek云端环境指南
        • GPU物理机:物理机搭建DeepSeek指南
        • 智算容器:云容器引擎与DeepSeek融合实践
        • DeepSeek-R1蒸馏模型部署
        • 函数计算:天翼云函数计算与DeepSeek大模型
        • Q&A:典型问题解析与策略应对
        • 产品介绍
        • 产品定义
        • 产品优势
        • 产品功能
        • 应用场景
        • 与自建Kubernetes对比
        • 基本概念
        • 使用限制
        • 计费说明
        • 计费项及其计费方式
        • 价格
        • 续费、到期与欠费
        • 退订
        • 快速入门
        • 创建一个应用集群
        • 订购集群
        • 退订集群
        • 创建一个无状态工作负载
        • 创建工作负载及服务
        • 查看容器实例事件
        • 查看容器实例日志
        • 查看容器实例监控
        • 使用容器镜像服务发布容器应用
        • 用户指南
        • 高危操作及解决方案
        • 概览
        • 集群
        • 集群概述
        • 集群概览
        • 基本信息
        • 连接信息
        • 集群资源
        • Kubernetes版本发布记录
        • Kubernetes 1.31版本说明
        • Kubernetes 1.29版本说明
        • Kubernetes 1.27版本说明
        • Kubernetes 1.25版本说明
        • (停止维护)Kubernetes 1.23版本说明
        • 新建集群
        • 搭建IPv4/IPv6双栈集群
        • 集群安全组规划配置
        • iptables与IPVS如何选择
        • 创建高可用集群
        • 制作节点自定义镜像
        • 自定义集群APIServer证书SAN
        • 使用ServiceAccount Token卷投影
        • 删除集群
        • 升级集群
        • 自动变更规格
        • 节点与节点池
        • 节点容器运行时说明
        • 节点操作系统说明
        • 节点
        • 节点标签
        • 节点管理
        • 监控节点
        • 节点资源预留策略
        • 节点重置
        • 纳管节点
        • 节点异常问题排查
        • 虚拟节点
        • 指定ECS和ECI的资源分配
        • 节点池概述
        • 节点池
        • 升级节点池
        • 扩缩容节点池
        • 修复节点操作系统CVE漏洞
        • 自定义节点池kubelet配置
        • 节点池节点恢复
        • 节点池管理
        • 命名空间
        • 管理命名空间
        • 设置资源配额与限制
        • 工作负载(新版)
        • 工作负载概述
        • 创建无状态负载(Deployment)
        • 创建有状态负载(StatefulSet)
        • 创建守护进程(DaemonSet)
        • 创建普通任务(Job)
        • 创建定时任务(CronJob)
        • 使用cube-volcano
        • 设置容器健康检查
        • 设置容器生命周期
        • 添加环境变量
        • 配置负载调度策略
        • 负载调度策略概述
        • 设置负载的节点选择器(nodeSelector)
        • 设置节点亲和调度(nodeAffinity)
        • 设置工作负载亲和/反亲和调度(podAffinity/podAntiAffinity)
        • 配置负载容忍策略
        • 负载网络配置
        • 工作负载(旧版)
        • 无状态
        • 有状态
        • 守护进程
        • 任务
        • 定时任务
        • 容器组
        • 自定义资源
        • 设置容器规格
        • 设置调度策略
        • 网络
        • 网络概述
        • 集群网络概述
        • Service
        • Ingress
        • 服务发现DNS
        • 容器网络插件
        • Calico网络插件
        • Cubecni网络插件
        • 使用Cubecni网络插件
        • 为Pod配独占网卡和固定IP及独立子网、安全组
        • 节点维度的网络配置
        • 网络策略
        • Service管理
        • Service概述
        • 负载均衡类型Service的注意事项
        • LoadBalancer类型Service
        • 通过Annotation配置负载均衡类型的服务
        • Ingress管理
        • Ingress概述
        • NGINX Ingress Controller
        • ELB Ingress Controller
        • IngressFAQ
        • Ingress常见错误信息及故障排查方法
        • 服务发现DNS
        • DNS概述
        • CoreDNS介绍
        • DNS策略
        • NodeLocal DNSCache加速
        • DNS FAQ
        • DNS最佳实践
        • POD联网使用案例
        • 配置管理
        • 配置项
        • 保密字典
        • 镜像拉取凭证
        • 应用管理
        • 应用发布
        • 应用灰度发布
        • 应用原地升级
        • Pod异常问题排查
        • 存储
        • 存储概述
        • 存储基础知识
        • cstor-csi插件
        • 云硬盘存储(CT-EVS)
        • 云硬盘概述
        • 使用云盘动态存储卷
        • 使用云盘静态存储卷
        • 快照与备份
        • 弹性文件存储(CT-SFS)
        • 弹性文件概述
        • 使用SFS动态存储卷
        • 使用SFS静态存储卷
        • 对象存储(CT-ZOS)
        • 对象存储概述
        • 使用ZOS动态存储卷
        • 使用ZOS静态存储卷
        • 本地存储
        • 本地存储概述
        • 使用HostPath存储卷
        • 使用LocalPV动态存储卷
        • 使用LocalPV静态存储卷
        • 使用LVM动态存储卷
        • 并行文件(CT-HPFS)
        • 并行文件概述
        • 使用HPFS动态存储卷
        • 使用HPFS静态存储卷
        • 海量文件
        • 海量文件概述
        • 使用OceanFS动态存储卷(sharePath模式)
        • 使用OceanFS动态存储卷(subPath模式)
        • 使用OceanFS静态存储卷(sharePath模式)
        • 使用OceanFS静态存储卷(subPath模式)
        • 插件
        • 插件概述
        • 插件市场
        • 插件实例
        • 插件FAQ
        • 安全管理
        • 角色
        • 子账号授权
        • RBAC授权
        • 容器安全策略
        • 运维管理
        • 监控
        • 黑盒监控
        • 基础资源监控
        • 集群拓扑监控
        • 指标告警
        • 日志
        • 开启APIServer审计日志
        • 事件中心
        • 集群巡检
        • 故障诊断
        • 故障诊断概述
        • Service诊断
        • 节点诊断
        • Pod诊断
        • Ingress诊断
        • 智能诊断
        • 云审计
        • 集群备份
        • ETCD备份
        • 集群备份
        • 集群定时备份
        • ETCD备份保存到对象存储
        • 模板市场
        • 模板市场
        • 模板实例
        • 弹性伸缩
        • 弹性伸缩概述
        • 工作负载弹性伸缩
        • 容器定时伸缩(CronHPA)
        • 容器水平伸缩(HPA)
        • 容器垂直伸缩(VPA)
        • 节点弹性伸缩
        • 节点伸缩原理
        • 启用节点自动伸缩
        • 节点弹性伸缩策略
        • 调度
        • 在离线混部
        • 在离线混部概述
        • 在离线混部插件安装与卸载
        • 在离线应用优先级管理
        • 超卖调度与离线应用CPU压制
        • 高优先级应用的CPU独占与隔离
        • 容器磁盘读写限速
        • 容器网络限速
        • 成本分析
        • 成本分析概述
        • 启用成本分析功能
        • 最佳实践
        • 客户案例
        • 某交投能源充电桩项目
        • 某量子云平台迁移项目
        • 迁移
        • 将K8S集群迁移到云容器引擎集群
        • 容灾
        • 应用高可用部署推荐
        • 集群高可靠推荐配置
        • 开启控制面过载保护
        • 安全
        • 密钥Secret的安全使用
        • 集群
        • 集群规格推荐规划
        • 搭建IPv4/IPv6双栈集群
        • 通过kubectl连接多集群
        • 节点和节点池
        • 操作系统升级
        • 使用等保加固版本CTyunOS镜像
        • 节点池最佳实践
        • 存储
        • 容器化Web访问MySQL
        • 自定义存储资源对象
        • 使用存储子目录为工作负载提供存储
        • 使用延迟绑定的存储类实现跨AZ调度
        • 有状态工作负载配置存储实践
        • 云容器引擎容器存储选型
        • 网络
        • 集群网络地址段规划实践
        • 负载均衡
        • 会话保持
        • Ingress
        • 如何将Ingress服务暴露到公网
        • CoreDNS配置优化实践
        • Cubecni插件扩容Pod子网
        • 容器内获取客户端源IP
        • ELB访问控制配置
        • 部署多个Nginx Ingress Controller
        • 工作负载
        • 使用容器镜像服务发布应用
        • Pod水平自动扩缩(HPA)
        • 发布
        • 服务发布
        • Service实现灰度发布和蓝绿发布
        • Nginx Ingress实现灰度发布和蓝绿发布
        • 容器
        • 合理分配容器资源
        • 获取容器Core Dump
        • 容器升级业务不中断
        • 容器与节点时区同步
        • 容器中域名解析的最佳实践
        • 使用hostAliases配置Pod /etc/hosts
        • x86和ARM镜像的混合部署
        • 通过特权容器配置内核参数
        • 权限
        • 集群命名空间RBAC授权
        • 通过配置kubeconfig文件实现集群权限精细化管理
        • API参考
        • API使用说明
        • 附录
        • 云容器引擎资源池
        • 如何获取接口URI中参数
        • password字段加密的方法
        • 节点规格和节点镜像
        • kubelet配置
        • Kubernetes版本与资源API版本对应表
        • 如何调用API
        • 认证鉴权
        • 构造请求
        • API
        • 2023-03-28
        • 节点与节点池
        • 查询节点详情
        • 历史API
        • 资源
        • 查询Event列表
        • 查询集群服务网段
        • 常见问题
        • 计费
        • 订购
        • 节点
        • 集群
        • 工作负载
        • Pod异常问题排查
        • 启动实例失败时的重试机制是怎样的?
        • 存储管理
        • CSI插件
        • API&kubectl
        • 用户如何访问集群API Server?
        • 如果不配置集群管理权限,是否可以使用kubectl命令呢?
        • 网络
        • Ingress相关问题
        • Service相关问题
        • 网络插件相关问题
        • 监控
        • 域名DNS
        • DNS解析异常问题排查
        • 其他
        • 节点NTP时间不同步怎么排查?
        • 节点已经绑定EIP,仍无法访问公网yum源进行安装更新?
        • 接入集群如何通过IPv6接入管控实例
        • 安全合规
        • 安全责任共担模型
        • 视频专区
        • 相关协议
        • 服务协议
        • 服务等级协议
          无相关产品

          本页目录

          帮助中心 云容器引擎 专有版/托管版 用户指南 弹性伸缩 工作负载弹性伸缩 容器水平伸缩(HPA)
          容器水平伸缩(HPA)
          更新时间 2026-09-02 09:32:50
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2026-09-02 09:32:50
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本节介绍了:容器水平伸缩(HPA)的用户指南。

          容器水平伸缩

          云容器引擎支持在控制台界面上快速创建支持HPA的应用,实现容器资源的弹性伸缩。您也可通过定义HPA(Horizontal Pod Autoscaling)的YAML来进行配置。

          注意

          HPA依赖于cube-metrics-server插件搜集当前集群中的资源指标数据,开启HPA前请先安装cube-metrics-server插件。

          背景信息

          HorizontalPodAutoscaler(HPA)的API版本在不同 Kubernetes 版本中经历了多次演进。以下为各API版本号与Kubernetes版本的对应关系。

          HPA版本引入标记废弃彻底删除
          v2beta21.121.231.26
          v21.23--

          如果您的集群版本低于Kubernetes 1.23,请使用v2beta2版本的HPA。

          apiVersion: autoscaling/v2beta2
          kind: HorizontalPodAutoscaler
          metadata:
          name: nginx

          如果您的集群版本高于或等于1.23,请使用v2版本的HPA。

          apiVersion: autoscaling/v2
          kind: HorizontalPodAutoscaler
          metadata:
          name: nginx

          从v1.18开始,K8s v2beta2 API允许通过HPA的behavior字段配置扩缩行为。在behavior字段中的scaleUp和scaleDown分别指定扩容和缩容行为。当您在使用HPA时,希望只进行扩容或者只进行缩容的Pod伸缩,则可以通过开启指标伸缩,单击禁止缩容或者禁止扩容来实现。

          • 默认值:均不禁止

          • 禁止扩容:selectPolicy的值Disabled会关闭给定方向的扩容。因此使用以下策略,将会阻止扩容。

          behavior:
            scaleUp:
              selectPolicy: Disabled
          • 禁用缩容:selectPolicy的值Disabled会关闭给定方向的缩容。因此使用以下策略,将会阻止缩容。

          behavior:
            scaleDown:
              selectPolicy: Disabled

          伸缩规则

          HPA总体支持两种度量指标,一种为系统默认指标,支持CPU利用率、内存利用率这两种资源百分比指标;另一种为自定义度量指标,包含Pod度量跟Object度量两大类。

          资源度量指标

          以CPU为例,配置示意如下:

           - type: Resource
              resource:
                name: cpu
                target:
                  type: Utilization
                  averageUtilization: 50

          自定义度量指标

          使用自定义度量指标为工作负载配置HPA时,最重要的前提是:工作负载对应的Pod通过/metrics接口暴露自定义指标。若工作负载(如nginx、redis、tomcat等)本身不支持该功能,则需借助Sidecar或Exporter方式来实现指标暴露。

          注意

          自定义度量指标依赖于cube-metrics-adapter插件搜集自定义指标上报,如需使用自定义度量指标,请先安装cube-metrics-adapter插件。

          根据自定义指标的来源及归属对象,可将其划分为Pod度量指标和Object度量指标。

          Pod度量指标与Pod绑定,HPA会获取所有目标Pod的该指标值并计算算术平均数,再与设定的目标值进行比较。该指标与资源度量指标相似,但仅支持平均值。配置示意如下:

          type: Pods
          pods:
            metric:
              name: packets-per-second
            target:
              type: AverageValue
              averageValue: 1k

          Object度量用于描述同一命名空间中除Pod之外的其他Kubernetes对象(如Service或Ingress),该对象的指标为单一的绝对值,HPA会直接将其与设定的目标值进行比较,而不进行副本数均摊计算,配置示意如下:

          type: Object
          object:
            metric:
              name: requests-per-second
            describedObject:
              apiVersion: v1
              kind: Service
              name: main-route
            target:
              type: Value
              value: 2k

          通过控制台创建HPA

          在策略列表页创建HPA

          1. 登录云容器引擎管理控制台。

          2. 在控制台左侧导航栏,单击集群。

          3. 在集群列表页面,单击目标集群名称。

          4. 在集群管理页左侧导航栏,选择策略,在策略列表页点击创建HPA策略。

          为已有应用开启HPA

          1. 登录云容器引擎管理控制台。

          2. 在控制台左侧导航栏,单击集群。

          3. 在集群列表页面,单击目标集群名称。

          4. 在集群管理页左侧导航栏,选择工作负载 - 无状态。

          5. 在无状态列表页面选择对应工作负载的操作栏中的更多 - 弹性伸缩。

          6. 在创建对话框中,设置伸缩的配置。

          通过kubectl命令创建HPA

          您可通过编排模板来手动创建HPA,并将其绑定到要伸缩的Deployment对象上,通过kubectl命令实现容器自动伸缩配置。

          下面针对一个Nginx应用进行举例。

          1、创建并复制以下内容到nginx.yml中。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-hangzhou7.crs-internal.ctyun.cn/artifact-hub/nginx:1.26-alpine-slim           # 使用对应资源池的镜像仓库地址代替
                  ports:
                  - containerPort: 80
                  resources:
                    requests:                         # 必须设置,不然HPA无法运行。
                      cpu: 100m

          2、执行以下命令,创建Nginx应用。

          kubectl create -f nginx.yml

          3、创建HPA。通过scaleTargetRef设置当前HPA绑定的对象,在本例中绑定名叫nginx的Deployment。

          apiVersion: autoscaling/v2    # 根据Kubernetes集群版本确定apiVersion,低于1.23版本时请使用autoscaling/v2beta2,高于或等于1.23版本时请使用autoscaling/v2
          kind: HorizontalPodAutoscaler
          metadata:
            name: nginx   # 建议HPA名称与对应工作负载名称保持一致
          spec:
            scaleTargetRef:
              apiVersion: apps/v1
              kind: Deployment
              name: nginx
            minReplicas: 1
            maxReplicas: 10
            metrics:
            - type: Resource
              resource:
                name: cpu
                target:
                  type: Utilization
                  averageUtilization: 50

          4、创建好HPA后,再次执行 kubectl describe hpa -n default nginx -hpa 命令,可以看到Metrics (current / target)有具体的数值,说明HPA正常运行。

          # kubectl describe hpa nginx
          Name:                                                  nginx
          Namespace:                                             default
          Labels:                                                <none>
          Annotations:                                           <none>
          CreationTimestamp:                                     Wed, 03 Jun 2026 20:25:06 +0800
          Reference:                                             Deployment/nginx
          Metrics:                                               ( current / target )
            resource cpu on pods  (as a percentage of request):  0% (0) / 50%
          Min replicas:                                          1
          Max replicas:                                          10
          Deployment pods:                                       1 current / 1 desired
          Conditions:
            Type            Status  Reason            Message
            ----            ------  ------            -------
            AbleToScale     True    ReadyForNewScale  recommended size matches current size
            ScalingActive   True    ValidMetricFound  the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
            ScalingLimited  True    TooFewReplicas    the desired replica count is less than the minimum replica count
          Events:

          配置缩容到0的HPA

          在默认情况下,HPA的minReplicas 最小值为1,意味着即使工作负载完全没有流量,也至少需要保持1个 Pod在运行。

          缩容到 0 是指允许 HPA 在满足特定条件时,将工作负载的副本数缩减为 0,即完全停止所有 Pod。这对于以下场景具有重要价值:

          • 成本优化:在非生产环境或非工作时间,完全停止无流量的服务,可大幅降低云资源成本。

          • 资源节约:开发和测试集群中,闲置的应用不再占用计算资源。

          • 事件驱动架构:仅在消息队列或外部事件触发时才启动服务,实现“按需启动”。

          HPA 缩容到 0 需要通过 HPAScaleToZero 功能门控启用,Kubernetes 在 v1.23 版本中引入该功能门控(Alpha 特性),默认不开启。直到 Kubernetes v1.36,该功能门控才改为默认开启。当前云容器引擎仅支持白名单用户为托管版集群配置门控特性,如需使用缩容到 0 功能特性,请提工单申请开放。

          实现缩容到 0 的核心难点在于“从 0 扩容”。当 Pod 数为 0 时,基于 Pod 自身的指标(如 CPU、内存,或 Pod 级别的自定义指标)将无法获取。因此,HPA 的指标源必须是与 Pod 生命周期解耦的独立对象,如:Object 指标。

          指标类型数据来源与 Pod 生命周期的关系缩容到 0 支持
          Resource(CPU/内存)Pod 自身耦合(Pod消失则指标消失)不支持
          PodsPod 自身暴露的指标耦合(Pod消失则指标消失)不支持
          Object独立对象(如Service、Ingress)解耦(对象独立于 Pod 存在)支持
          External外部系统(如消息队列、云厂商 API)解耦(完全独立)支持

          为了使 HPA 能够设置minReplicas=0 以及从 0 扩容到 1,必须使用一个独立于 Pod 生命周期、持续存在的资源(如 Service)作为指标的“锚点”。即使后端 Pod 全部缩容到 0,该锚点对象依然存在,HPA 可以持续查询其指标值。当指标上升时,HPA 便能感知并触发扩容。

          以网关-后端服务场景为例:

          业务使用了 traefik 作为网关,网关后端有 backend 业务工作负载,当 backend 业务工作负载CPU使用率为 0、且 traefik 网关中最近 30s 业务流量为 0 时,通过 HPA 触发缩容到 0,traefik 网关中最近 30s 业务流量不为 0 时,通过 HPA 从 0 恢复到 1。

          整体架构如下:

          各组件职责如下:

          1、无状态工作负载 backend,使用了alpine 镜像,启动参数为"sleep infinity",用于模拟后端业务,基于自身 CPU 使用率和 traefik 网关流量改变副本数。

          2、无状态工作负载 traefik,使用了 traefik:v3 镜像,启动命令为如下:

          --entrypoints.web.address=:8080        # 监听 8080 端口,提供 web 服务入口 
          --entrypoints.metrics.address=:9100    # 监听 9100 端口,提供 /metrics 指标暴露
          --metrics.prometheus=true              # 开启监控指标暴露
          --metrics.prometheus.entrypoint=metrics # 监控指标访问端点
          --metrics.prometheus.addentrypointslabels=true
          --metrics.prometheus.addserviceslabels=true

          traefik 监听 9100 端口,提供 /metrics 指标暴露,同时监听 8080 端口,提供 web 服务入口。

          3、服务 traefik-svc,监听 8080 端口和 9100 端口,通过 selector 绑定无状态工作负载 traefik,同时作为 Object 指标锚点,即使 backend 业务负载 Pod 缩容到 0,该 Service 对象依然存在。

          4、cube-metrics-server 插件,负责搜集容器的 CPU、内存指标。

          5、cube-metrics-adapter 插件,负责自定义指标的转换,允许用户通过编辑 cube-metrics-server 的 configmap 添加自定义指标。

          6、cube-prometheus插件,负责将采集到的指标数据上报到应用性能监控 APM 侧进行存储。

          总结操作如下:

          1、提工单申请加入白名单,支持在控制台页面为托管集群配置功能门控。

          2、给 kube-apiserver、kube-controller-manager 开启功能门控。

          3、安装 cube-metrics-server 、cube-metrics-adapter 和 cube-prometheus 插件。

          4、创建 traefik 无状态工作负载和 Service。

          5、创建 backend 无状态工作负载。

          6、配置 cube-metrics-adapter 上报自定义指标。

          7、创建 HPA 并触发缩容到 0。

          具体操作如下:

          1、提工单申请加入白名单,支持在控制台页面为托管集群配置功能门控

          在工单-新建工单中发起工单,填写申请将xx租户加入到配置集群门控白名单中

          2、给 kube-apiserver、kube-controller-manager 开启功能门控。

          点击托管集群名称,进入集群菜单页,切换到配置中心-Kubernetes 原始配置。

          对集群服务器配置,选择 HPAScaleToZero=true,点击确认配置。稍等片刻更新完毕后,再对集群控制器配置进行相同操作。

          3、安装 cube-metrics-server、cube-metrics-adapter 和 cube-prometheus 插件

          在插件市场中搜索 cube-metrics-adapter、cube-metrics-server 和 cube-prometheus 插件并安装,参考插件安装

          稍等片刻后检查插件状态为已安装,插件相关 pod 均为 Running 状态且日志中无异常报错,在监控页面能看到监控数据,说明插件安装正常。

          4、创建 traefik 无状态工作负载和 Service

          在工作负载-无状态页面,切换到 default 命名空间,点击新增Yaml,填写以下 yaml 内容,创建名为 traefik 的无状态工作负载。

          apiVersion: apps/v1
          kind: Deployment
          metadata:
            labels:
              appgroup: traefik
              version: v1
            name: traefik
            namespace: default
          spec:
            progressDeadlineSeconds: 600
            replicas: 1
            revisionHistoryLimit: 10
            selector:
              matchLabels:
                app: traefik
                version: v1
            strategy:
              rollingUpdate:
                maxSurge: 25%
                maxUnavailable: 25%
              type: RollingUpdate
            template:
              metadata:
                creationTimestamp: null
                labels:
                  app: traefik
                  version: v1
              spec:
                containers:
                - args:
                  - --metrics.prometheus=true
                  - --entrypoints.metrics.address=:9100
                  - --metrics.prometheus.entrypoint=metrics
                  - --entrypoints.web.address=:8080
                  - --metrics.prometheus.addentrypointslabels=true
                  - --metrics.prometheus.addserviceslabels=true
                  command:
                  - traefik
                  image: registry-vpc-crs-huadong1.cnsp-internal.ctyun.cn/artifact-hub/traefik:v3
                  imagePullPolicy: IfNotPresent
                  name: traefik
                  ports:
                  - containerPort: 8080
                    protocol: TCP
                  - containerPort: 9100
                    protocol: TCP
                  resources:
                    limits:
                      cpu: 200m
                      memory: 64Mi
                    requests:
                      cpu: 200m
                      memory: 64Mi
                  securityContext:
                    allowPrivilegeEscalation: false
                    capabilities: {}
                    privileged: false
                    readOnlyRootFilesystem: false
                    runAsNonRoot: false
                  terminationMessagePath: /dev/termination-log
                  terminationMessagePolicy: File
                dnsPolicy: ClusterFirst
                restartPolicy: Always
                schedulerName: default-scheduler
                securityContext: {}
                terminationGracePeriodSeconds: 30

          在网络-服务页面,切换到 default 命名空间,点击新增Yaml,填写以下 yaml 内容,创建名为 traefik-svc 的 Service,绑定到 traefik 无状态工作负载。(注:Service 的label workload: traefik 是为了后续创建ServiceMonitor时使用)

          apiVersion: v1
          kind: Service
          metadata:
            labels:
              workload: traefik
            name: traefik-svc
            namespace: default
          spec:
            ports:
            - name: "8080"
              port: 8080
              protocol: TCP
              targetPort: 8080
            - name: "9100"
              port: 9100
              protocol: TCP
              targetPort: 9100
            selector:
              app: traefik
              version: v1
            sessionAffinity: None
            type: ClusterIP

          检查工作负载的 pod 状态为 Running,且 Service 的 endpoint 正常指向工作负载的 Pod 地址。

          通过工作负载-容器组,远程登录进入到pod中。

          执行以下命令进行测试:

          # wget -qO- http://127.0.0.1:8080/
          wget: server returned error: HTTP/1.1 404 Not Found  # 正常输出 404,说明 8080 web 端口已经在监听
          
          # wget -qO- http://traefik-svc:9100/metrics | grep traefik_entrypoint_requests_total
          # HELP traefik_entrypoint_requests_total How many HTTP requests processed on an entrypoint, partitioned by status code, protocol, and method.
          # TYPE traefik_entrypoint_requests_total counter
          traefik_entrypoint_requests_total{code="404",entrypoint="web",method="GET",protocol="http"} 1      # 正常输出指标,指标值为1,说明当前web端点共有1次请求

          5、创建 backend 工作负载

          按步骤 4 中同样方法在 default 命名空间下创建名为 backend 的工作负载,该负载有 3 个 pod 副本。

          apiVersion: apps/v1
          kind: Deployment
          metadata:
            name: backend
            namespace: default
          spec:
            replicas: 3
            selector:
              matchLabels:
                app.kubernetes.io/name: backend
            template:
              metadata:
                labels:
                  app.kubernetes.io/name: backend
              spec:
                containers:
                - args:
                  - -c
                  - sleep infinity
                  command:
                  - /bin/sh
                  image: registry-vpc-crs-huadong1.cnsp-internal.ctyun.cn/artifact-hub/alpine:3.21
                  name: backend
                  resources:
                    limits:
                      cpu: 50m
                      memory: 64Mi
                    requests:
                      cpu: 50m
                      memory: 64Mi

          在有 kubectl 权限的节点上执行 kubectl top pod,可以看到三个业务 pod 的 cpu 使用率均为 0。

          # kubectl get pod
          NAME                       READY   STATUS    RESTARTS   AGE
          backend-5cff4c8976-fjv46   1/1     Running   0          14m
          backend-5cff4c8976-ls9zw   1/1     Running   0          14m
          backend-5cff4c8976-rj68q   1/1     Running   0          14m
          traefik-67b6768b7d-2tcfp   1/1     Running   0          19m
          
          # kubectl top pod backend-5cff4c8976-fjv46 
          NAME                       CPU(cores)   MEMORY(bytes)   
          backend-5cff4c8976-fjv46   0m           0Mi             
          # kubectl top pod backend-5cff4c8976-ls9zw 
          NAME                       CPU(cores)   MEMORY(bytes)   
          backend-5cff4c8976-ls9zw   0m           0Mi             
          # kubectl top pod backend-5cff4c8976-rj68q
          NAME                       CPU(cores)   MEMORY(bytes)   
          backend-5cff4c8976-rj68q   0m           0Mi 

          6、配置 cube-metrics-adapter 的 ConfigMap

          在左侧菜单栏选择配置管理-配置项,切换到 kube-system 命名空间,搜索 cube-metrics-adapter,然后点击编辑。

          把 config.yaml 中内容复制到文本编辑器中,并在 rules: 下增加以下配置

          需要增加的配置(在实际业务场景中,需要按实际业务情况进行调整):

          - seriesQuery: 'traefik_entrypoint_requests_total{entrypoint="web"}'
              resources:
                overrides:
                  namespace: {resource: "namespace"}
                  service: {resource: "service"}
              name:
                matches: "traefik_entrypoint_requests_total"
                as: "requests_per_30s"
              metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[30s])) by (<<.GroupBy>>) * 30

          更新后的变量值内容:

          把更新后的变量值内容填回输入框中进行替换,点击确定,更新 ConfigMap。

          到工作负载-无状态中,选择 kube-system 命名空间,搜索 cube-metrics-adapter 工作负载,点击滚动重启。

          到应用性能监控 Apm 控制台中,选择左侧 Prometheus监控-接入管理,输入集群名称进行搜索,点击指标采集进入配置页面。

          切换到 Service Monitor,点击新增,输入以下配置:

          apiVersion: monitoring.coreos.com/v1
          kind: ServiceMonitor
          metadata:
            name: service-monitor  # 按需更改 ServiceMonitor 自定义资源的名称
            namespace: default  # 按需更改 ServiceMonitor 自定义资源的所在的命名空间
            annotations:
              arms.prometheus.io/discovery: 'true'
          spec:
            endpoints:
            - interval: 15s    # 按需更改指标采集间隔
              port: '9100'     # 指标采集端口名称,需要与 traefik-svc Service 的指标采集端口的名称保持一致
              path: /metrics   # 指标采集路径,需要与 traefik-svc Service 的指标采集路径保持一致
            namespaceSelector:
              matchNames:
                - default     # Service 所在命名空间,需要与 traefik-svc Service 所在命名空间保持一致
            selector:
              matchExpressions:
                - key: workload  # Service 标签 key,需要与 traefik-svc Service 的 label 的 key 保持一致
                  operator: In
                  values:
                    - traefik    # Service 标签 value,需要与 traefik-svc Service 的 label 的 value 保持一致

          保存后查看 apm-prome 命名空间下 target-allocator pod 日志,能看到有类似的日志输出:

          {"level":"info","ts":"2026-08-18T11:09:10Z","logger":"allocator","msg":"add target item","allocator":"consistent-hashing","target_hash":"serviceMonitor/default/service-monitor/0192.168.3.47:91004fd2cad7ccfcf73e","job_name":"serviceMonitor/default/service-monitor/0","collectors count":1}

          1~3 分钟后,匹配 Service 数量和匹配 Target 数量也变成 1。

          在指标探索页面输入 traefik_entrypoint_requests_total 能看到有指标数据,说明指标数据成功上报。

          7、创建 HPA 并触发缩容到 0。

          在策略菜单中,切换到 default 命名空间。

          方式一:通过 Yaml 方式创建 HPA,点击 Yaml创建,输入以下 HPA yaml。

          apiVersion: autoscaling/v2
          kind: HorizontalPodAutoscaler
          metadata:
            name: hpa-to-zero   # hpa 资源名称
            namespace: default  # hpa 资源所在命名空间
          spec:
            behavior:
              scaleDown:
                policies:      # 缩容配置
                - periodSeconds: 60             # 缩容动作的时间窗口,60 秒内最多只允许执行一次扩缩容动作
                  type: Pods                    # 缩容操作维度,按 pod 维度进行缩容
                  value: 1                      # 每次缩容 1 个 pod
                selectPolicy: Min               # 如有多条缩容策略,选择副本数最小的作为最终副本数
                stabilizationWindowSeconds: 60  # 稳定窗口,观察过去的 60 秒的平均指标数据,再决定是否需要再次扩缩容
              scaleUp:
                policies:
                - periodSeconds: 15
                  type: Pods
                  value: 2
                selectPolicy: Max
                stabilizationWindowSeconds: 0
            maxReplicas: 5
            metrics:
            - resource:
                name: cpu
                target:
                  averageUtilization: "50"  # CPU 平均利用率,超过 50% 时考虑扩容,低于 50% 时考虑缩容
                  type: Utilization
              type: Resource
            - object:
                describedObject:    # Object 指标关联的对象,需要与 HPA 在同一命名空间下
                  apiVersion: v1
                  kind: Service
                  name: traefik-svc
                metric:
                  name: requests_per_30s  # Object 指标,对应于cube-metrics-adapter ConfigMap 新增配置中的 as 字段
                target:
                  averageValue: "3"   # 30 秒内平均请求量,超过 3 时考虑扩容,低于 3 时考虑缩容
                  type: AverageValue
              type: Object
            minReplicas: 0
            scaleTargetRef:    # 弹性扩缩容作用对象
              apiVersion: apps/v1
              kind: Deployment
              name: backend

          方式二:通过控制台页面创建 HPA,选择关联的工作负载为 backend,实例范围为 0 到 5,按实际需要配置扩缩容配置。

          配置系统策略,新增 CPU 利用率,设置为 10%,新增自定义指标,指标名称对应于 cube-metrics-adapter ConfigMap 新增配置中的 as 字段值,指标类型选择Object,并输入 traefik-svc, 计算方式为平均值,期望值为 3,点击确定保存。

          创建完 HPA 资源后,describe hpa 可以看到 pod 逐渐缩容到 0

          在 hpa 页面的事件中也能看到成功触发副本数缩容到0。

          如果多次在 traefik 的 pod 中访问 web 端点 http://127.0.0.1:8080/,提高最近30秒访问频率,则会成功触发 backend 扩容。

           

           

           

           

           

           

           

          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  容器定时伸缩(CronHPA)
          下一篇 :  容器垂直伸缩(VPA)
          搜索 关闭
          ©2026 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2026天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明