searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

CCE One注册集群Pod水平自动伸缩

2025-12-12 05:35:46
2
0

前提条件

  • 已创建注册集群,具体操作参见 订购注册集群 章节。若已有集群,无需重复操作。

  • 已安装cube-prometheus组件,开通应用性能监控服务,监控指标上报。参见 Prometheus监控开启监控服务。

  • 已安装metrics-server插件,获取基础资源度量指标。插件安装请前往插件市场

  • 已安装cube-metrics-adapter插件,获取自定义度量指标。插件安装请前往插件市场

伸缩规则

支持两种类型指标:

  • 基础资源度量指标,默认情况下仅支持CPU、内存这两种资源指标,不仅支持资源百分比也支持平均值;

  • 自定义度量指标,包含Pod度量和Object度量两大类。

通过控制台创建HPA

  •  登录分布式容器云平台控制台,在集群管理页面,点击目标集群;

  • 在集群详情页面左侧导航栏,选择插件市场,根据需要的指标对象类型,安装对应的metrics-server插件、cube-metrics-adapter插件。

  • 插件安装成功之后,在集群详情页面左侧导航栏,选择工作负载->无状态->更多->水平伸缩,选择伸缩的配置。

  • 选择度量指标,支持两种类型:资源度量指标、自定义度量指标(Pod度量、Obeject度量)。

通过Kubectl命令创建HPA
通过基础资源度量指标(CPU、内存)进行Pod的水平自动伸缩
  • 安装cube-prometheus插件,上报监控指标;

  • 安装metrics-server插件获取基础资源度量指标,测试是否正确安装,返回基础度量指标:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/xxx |jq .

以CPU配置为例,声明工作负载和HPA对象,配置如下:

---
apiVersion: v1
kind: Service
metadata:
  name: hap-nginx
spec:
  type: NodePort
  ports:
    - name: "http"
      port: 80
      targetPort: 80
      nodePort: 30080
  selector:
    service: hap-nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hap-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      service: hap-nginx
  template:
    metadata:
      labels:
        service: hap-nginx
    spec:
      containers:
        - name: hap-nginx
          image: registry-crs-huadong1.ctyun.cn/library/nginx:alpine
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
            limits:
              cpu: 200m
              memory: 200Mi

HPA对象

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hap-nginx
spec:
  maxReplicas: 5 # 最大扩容到5个副本(pod)
  minReplicas: 1 # 最小扩容1个副本(pod)
  metrics:
  - resource:
      name: cpu
      target:
        averageUtilization: 40 # CPU 平均资源使用率达到40%就开始扩容,低于40%就是缩容
        # 设置内存
        # AverageValue:40
        type: Utilization
    type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hap-nginx

使用ab工具进行压测

yum install httpd -y
ab -n 1000000 -c 100 http://

查看pod动态扩容

kubectl get po -w |grep hpa
通过预置的自定义指标(网络、磁盘等)进行Pod的水平自动伸缩
  • 安装cube-prometheus插件,开通应用性能服务。

  • 在插件市场 安装cube-metrics-adapter插件,测试是否正确安装,返回已配置的自定义指标:

kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 | jq .
  • 声明工作负载和HPA对象,以CPU利用率自定义指标为例

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-nginx
  namespace: default
spec:
  minReplicas: 1
  maxReplicas: 5
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-nginx
  metrics:
  - type: Pods
    pods:
      metric:
        name: k8s_pod_rate_cpu_core_used_node
      target:
        averageValue: 50
        type: AverageValue
预置指标列表

CPU预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_cpu_core_used Pod

CPU使用量

sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod)
k8s_pod_rate_cpu_core_used_node Pod

CPU利用率(占节点)

% (label_replace(sum(rate(container_cpu_usage_seconds_total{name =~ ".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod,instance,namespace), "node", "$1", "instance", "(.*)")) / on(node) group_left sum(kube_node_status_allocatable{resource="cpu"}) by (node) * 100
k8s_pod_rate_cpu_core_used_request Pod

CPU利用率(占request)

% sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod) / (sum (kube_pod_container_resource_requests{resource="cpu",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_cpu_core_used_limit Pod

CPU利用率(占limit)

% sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod) / (sum (kube_pod_container_resource_limits{resource="cpu",pod=~"$Pod",namespace="$namespace"}) by (pod))*100

 

 

内存预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_mem_usage_bytes Pod 内存使用量 Byte sum (container_memory_usage_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod)
k8s_pod_mem_no_cache_bytes Pod 内存使用量(不含Cache) Byte sum (container_memory_working_set_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod)
k8s_pod_rate_mem_usage_node Pod 内存利用率(占节点) % (label_replace(sum(container_memory_usage_bytes{name =~ ".+",pod=~"$Pod",namespace="$namespace") by (pod,instance,namespace), "node", "$1", "instance", "(.*)")) / on(node) group_left sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100
k8s_pod_rate_mem_no_cache_node Pod 内存利用率(占节点,不含Cache) % (label_replace(sum(container_memory_working_set_bytes{name =~ ".+",pod=~"$Pod",namespace="$namespace"}) by (pod,instance,namespace), "node", "$1", "instance", "(.*)")) / on(node) group_left sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100
k8s_pod_rate_mem_usage_request Pod 内存利用率(占request) % sum (container_memory_usage_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_requests{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_mem_no_cache_request Pod 内存利用率(占request,不含Cache % sum (container_memory_working_set_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_requests{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_mem_usage_limit Pod 内存利用率(占limit) % sum (container_memory_usage_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_limits{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_mem_no_cache_limit Pod 内存利用率(占limit,不含Cache) % sum (container_memory_working_set_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_limits{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100

 

 

网络预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_network_receive_bytes_bw Pod 网络入带宽 Byte/s sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod)
k8s_pod_network_transmit_bytes_bw Pod 网络出带宽 Byte/s sum(irate(container_network_transmit_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_receive_bytes Pod 网络入流量 Byte/s sum(rate(container_network_receive_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_transmit_bytes Pod 网络出流量 Byte/s sum(rate(container_network_transmit_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_receive_packets Pod 网络入包量 个/s sum(irate(container_network_receive_packets_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_transmit_packets Pod 网络出包量 个/s sum(irate(container_network_transmit_packets_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)

 

 

硬盘预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_fs_read_times Pod 硬盘读IOPS 次/s sum (irate(container_fs_reads_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_fs_write_times Pod 硬盘写IOPS 次/s sum (irate(container_fs_writes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_fs_read_bytes Pod 硬盘读流量 Byte/s sum (rate(container_fs_reads_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m]))by (pod)
k8s_pod_fs_write_bytes Pod 硬盘写流量 Byte/s sum (rate(container_fs_writes_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)

 

 如需自定义指标,请确保指标已通过cube-prometheus采集上报到应用性能服务(APM),在安装cube-metrics-adapter插件时,在values.yaml内自定义指标内容。

0条评论
0 / 1000
游****龙
6文章数
1粉丝数
游****龙
6 文章 | 1 粉丝
原创

CCE One注册集群Pod水平自动伸缩

2025-12-12 05:35:46
2
0

前提条件

  • 已创建注册集群,具体操作参见 订购注册集群 章节。若已有集群,无需重复操作。

  • 已安装cube-prometheus组件,开通应用性能监控服务,监控指标上报。参见 Prometheus监控开启监控服务。

  • 已安装metrics-server插件,获取基础资源度量指标。插件安装请前往插件市场

  • 已安装cube-metrics-adapter插件,获取自定义度量指标。插件安装请前往插件市场

伸缩规则

支持两种类型指标:

  • 基础资源度量指标,默认情况下仅支持CPU、内存这两种资源指标,不仅支持资源百分比也支持平均值;

  • 自定义度量指标,包含Pod度量和Object度量两大类。

通过控制台创建HPA

  •  登录分布式容器云平台控制台,在集群管理页面,点击目标集群;

  • 在集群详情页面左侧导航栏,选择插件市场,根据需要的指标对象类型,安装对应的metrics-server插件、cube-metrics-adapter插件。

  • 插件安装成功之后,在集群详情页面左侧导航栏,选择工作负载->无状态->更多->水平伸缩,选择伸缩的配置。

  • 选择度量指标,支持两种类型:资源度量指标、自定义度量指标(Pod度量、Obeject度量)。

通过Kubectl命令创建HPA
通过基础资源度量指标(CPU、内存)进行Pod的水平自动伸缩
  • 安装cube-prometheus插件,上报监控指标;

  • 安装metrics-server插件获取基础资源度量指标,测试是否正确安装,返回基础度量指标:

kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes/xxx |jq .

以CPU配置为例,声明工作负载和HPA对象,配置如下:

---
apiVersion: v1
kind: Service
metadata:
  name: hap-nginx
spec:
  type: NodePort
  ports:
    - name: "http"
      port: 80
      targetPort: 80
      nodePort: 30080
  selector:
    service: hap-nginx
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hap-nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      service: hap-nginx
  template:
    metadata:
      labels:
        service: hap-nginx
    spec:
      containers:
        - name: hap-nginx
          image: registry-crs-huadong1.ctyun.cn/library/nginx:alpine
          resources:
            requests:
              cpu: 100m
              memory: 100Mi
            limits:
              cpu: 200m
              memory: 200Mi

HPA对象

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hap-nginx
spec:
  maxReplicas: 5 # 最大扩容到5个副本(pod)
  minReplicas: 1 # 最小扩容1个副本(pod)
  metrics:
  - resource:
      name: cpu
      target:
        averageUtilization: 40 # CPU 平均资源使用率达到40%就开始扩容,低于40%就是缩容
        # 设置内存
        # AverageValue:40
        type: Utilization
    type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hap-nginx

使用ab工具进行压测

yum install httpd -y
ab -n 1000000 -c 100 http://

查看pod动态扩容

kubectl get po -w |grep hpa
通过预置的自定义指标(网络、磁盘等)进行Pod的水平自动伸缩
  • 安装cube-prometheus插件,开通应用性能服务。

  • 在插件市场 安装cube-metrics-adapter插件,测试是否正确安装,返回已配置的自定义指标:

kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 | jq .
  • 声明工作负载和HPA对象,以CPU利用率自定义指标为例

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-nginx
  namespace: default
spec:
  minReplicas: 1
  maxReplicas: 5
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-nginx
  metrics:
  - type: Pods
    pods:
      metric:
        name: k8s_pod_rate_cpu_core_used_node
      target:
        averageValue: 50
        type: AverageValue
预置指标列表

CPU预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_cpu_core_used Pod

CPU使用量

sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod)
k8s_pod_rate_cpu_core_used_node Pod

CPU利用率(占节点)

% (label_replace(sum(rate(container_cpu_usage_seconds_total{name =~ ".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod,instance,namespace), "node", "$1", "instance", "(.*)")) / on(node) group_left sum(kube_node_status_allocatable{resource="cpu"}) by (node) * 100
k8s_pod_rate_cpu_core_used_request Pod

CPU利用率(占request)

% sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod) / (sum (kube_pod_container_resource_requests{resource="cpu",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_cpu_core_used_limit Pod

CPU利用率(占limit)

% sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod) / (sum (kube_pod_container_resource_limits{resource="cpu",pod=~"$Pod",namespace="$namespace"}) by (pod))*100

 

 

内存预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_mem_usage_bytes Pod 内存使用量 Byte sum (container_memory_usage_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod)
k8s_pod_mem_no_cache_bytes Pod 内存使用量(不含Cache) Byte sum (container_memory_working_set_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod)
k8s_pod_rate_mem_usage_node Pod 内存利用率(占节点) % (label_replace(sum(container_memory_usage_bytes{name =~ ".+",pod=~"$Pod",namespace="$namespace") by (pod,instance,namespace), "node", "$1", "instance", "(.*)")) / on(node) group_left sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100
k8s_pod_rate_mem_no_cache_node Pod 内存利用率(占节点,不含Cache) % (label_replace(sum(container_memory_working_set_bytes{name =~ ".+",pod=~"$Pod",namespace="$namespace"}) by (pod,instance,namespace), "node", "$1", "instance", "(.*)")) / on(node) group_left sum(kube_node_status_allocatable{resource="memory"}) by (node) * 100
k8s_pod_rate_mem_usage_request Pod 内存利用率(占request) % sum (container_memory_usage_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_requests{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_mem_no_cache_request Pod 内存利用率(占request,不含Cache % sum (container_memory_working_set_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_requests{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_mem_usage_limit Pod 内存利用率(占limit) % sum (container_memory_usage_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_limits{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100
k8s_pod_rate_mem_no_cache_limit Pod 内存利用率(占limit,不含Cache) % sum (container_memory_working_set_bytes{image=~".+",pod=~"$Pod",namespace="$namespace"}) by (pod) / (sum (kube_pod_container_resource_limits{resource="memory",pod=~"$Pod",namespace="$namespace"}) by (pod))*100

 

 

网络预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_network_receive_bytes_bw Pod 网络入带宽 Byte/s sum(rate(container_cpu_usage_seconds_total{image=~".+",pod=~"$Pod",namespace="$namespace"}[5m])) by (pod)
k8s_pod_network_transmit_bytes_bw Pod 网络出带宽 Byte/s sum(irate(container_network_transmit_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_receive_bytes Pod 网络入流量 Byte/s sum(rate(container_network_receive_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_transmit_bytes Pod 网络出流量 Byte/s sum(rate(container_network_transmit_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_receive_packets Pod 网络入包量 个/s sum(irate(container_network_receive_packets_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_network_transmit_packets Pod 网络出包量 个/s sum(irate(container_network_transmit_packets_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)

 

 

硬盘预置指标

 

指标名称 指标对象 指标含义 指标单位 计算公式
k8s_pod_fs_read_times Pod 硬盘读IOPS 次/s sum (irate(container_fs_reads_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_fs_write_times Pod 硬盘写IOPS 次/s sum (irate(container_fs_writes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)
k8s_pod_fs_read_bytes Pod 硬盘读流量 Byte/s sum (rate(container_fs_reads_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m]))by (pod)
k8s_pod_fs_write_bytes Pod 硬盘写流量 Byte/s sum (rate(container_fs_writes_bytes_total{image=~".+", namespace=~"$namespace", pod=~"$pod"}[5m])) by (pod)

 

 如需自定义指标,请确保指标已通过cube-prometheus采集上报到应用性能服务(APM),在安装cube-metrics-adapter插件时,在values.yaml内自定义指标内容。

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0