2.4.3. 使用 CLI 根据 CPU 使用率创建 pod 横向自动扩展


您可以为现有的 DeploymentDeploymentConfigReplicaSet、ReplicaSet 或 StatefulSet 对象创建一个 pod 横向自动扩展(HPA),用于自动扩展与该对象关联的 pod,以维护您指定的 CPU 用量。

HPA 会在最小和最大数量之间增加和减少副本数,以保持所有 pod 的指定 CPU 使用率。

为 CPU 使用率自动扩展时,您可以使用 oc autoscale 命令,并指定要在任意给定时间运行的 pod 的最小和最大数量,以及 pod 的目标平均 CPU 使用率。如果未指定最小值,则 OpenShift Container Platform 服务器会为 pod 赋予一个默认值。要自动缩放特定 CPU 值,创建一个带有目标 CPU 和 pod 限制的 HorizontalPodAutoscaler 对象。

先决条件

要使用 pod 横向自动扩展,您的集群管理员必须已经正确配置了集群指标。您可以使用 oc describe PodMetrics <pod-name> 命令来判断是否已配置了指标。如果配置了指标,输出类似于以下示例,其中 Usage 下列出了 CpuMemory

$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Copy to Clipboard Toggle word wrap

输出示例

Name:         openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Namespace:    openshift-kube-scheduler
Labels:       <none>
Annotations:  <none>
API Version:  metrics.k8s.io/v1beta1
Containers:
  Name:  wait-for-host-port
  Usage:
    Memory:  0
  Name:      scheduler
  Usage:
    Cpu:     8m
    Memory:  45440Ki
Kind:        PodMetrics
Metadata:
  Creation Timestamp:  2019-05-23T18:47:56Z
  Self Link:           /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Timestamp:             2019-05-23T18:47:56Z
Window:                1m0s
Events:                <none>
Copy to Clipboard Toggle word wrap

流程

为 CPU 使用率创建 pod 横向自动扩展

  1. 执行以下之一:

    • 要根据 CPU 使用率百分比来缩放,请为现有对象创建一个 HorizontalPodAutoscaler 对象:

      $ oc autoscale <object_type>/<name> \
      1
      
        --min <number> \
      2
      
        --max <number> \
      3
      
        --cpu-percent=<percent> 
      4
      Copy to Clipboard Toggle word wrap
      1
      指定要自动扩展的对象的类型和名称。对象必须存在,并是一个 DeploymentDeploymentConfig/dcReplicaSet/rsReplicaSet /rcStatefulSet
      2
      另外,还可以指定缩减时的最小副本数量。
      3
      指定扩展时的最大副本数量。
      4
      指定所有 pod 的目标平均 CPU 使用率(以请求 CPU 的百分比表示)。如果未指定或为负数,则会使用默认的自动缩放策略。

      例如,以下命令显示 image-registry DeploymentConfig 对象的自动扩展。初始部署需要 3 个 pod。HPA 对象将最小值增加到 5,如果 pod 的 CPU 用量达到 75%,会将 pod 数最高增加到 7:

      $ oc autoscale dc/image-registry --min=5 --max=7 --cpu-percent=75
      Copy to Clipboard Toggle word wrap
    • 要扩展特定 CPU 值,请为现有对象创建一个类似如下的 YAML 文件:

      1. 创建一个类似以下示例的 YAML 文件:

        apiVersion: autoscaling/v2beta2 
        1
        
        kind: HorizontalPodAutoscaler
        metadata:
          name: cpu-autoscale 
        2
        
          namespace: default
        spec:
          scaleTargetRef:
            apiVersion: v1 
        3
        
            kind: ReplicaSet 
        4
        
            name: example 
        5
        
          minReplicas: 1 
        6
        
          maxReplicas: 10 
        7
        
          metrics: 
        8
        
          - type: Resource
            resource:
              name: cpu 
        9
        
              target:
                type: AverageValue 
        10
        
                averageValue: 500m 
        11
        Copy to Clipboard Toggle word wrap
        1
        使用 autoscaling/v2beta2 API。
        2
        指定此 pod 横向自动扩展对象的名称。
        3
        指定要缩放对象的 API 版本。
        • 对于 ReplicationController,使用 v1
        • 对于 DeploymentConfig,使用 apps.openshift.io/v1
        • 对于 DeploymentReplicaSet (Statefulset 对象)使用 apps/v1
        4
        指定对象的类型。对象必须是 DeploymentDeploymentConfig/dcReplicaSet/rsReplicationController/rcStatefulSet
        5
        指定要缩放的对象名称。对象必须存在。
        6
        指定缩减时的最小副本数量。
        7
        指定扩展时的最大副本数量。
        8
        对于内存使用率,使用 metrics 参数。
        9
        为 CPU 使用率指定 cpu
        10
        设置为 AverageValue
        11
        使用目标 CPU 值设置为 averageValue
      2. 创建 Pod 横向自动扩展:

        $ oc create -f <file-name>.yaml
        Copy to Clipboard Toggle word wrap
  2. 验证 pod 横向自动扩展是否已创建:

    $ oc get hpa cpu-autoscale
    Copy to Clipboard Toggle word wrap

    输出示例

    NAME            REFERENCE                       TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    cpu-autoscale   ReplicationController/example   173m/500m       1         10        1          20m
    Copy to Clipboard Toggle word wrap

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat