CPU 利用率
作为开发人员,您可以使用水平 Pod 自动缩放器 (HPA) 指定 OpenShift Container Platform 如何根据从属于该复制控制器或部署配置的 Pod 收集的指标自动增加或减少复制控制器或部署配置的规模。您可以为任何部署、部署配置、副本集、复制控制器或有状态集创建 HPA。
有关基于自定义指标缩放 Pod 的信息,请参阅 根据自定义指标自动缩放 Pod。
除非您需要其他对象提供的特定功能或行为,否则建议使用 |
您可以创建水平 Pod 自动缩放器来指定要运行的 Pod 的最小和最大数量,以及 Pod 应定位的 CPU 利用率或内存利用率。
创建水平 Pod 自动缩放器后,OpenShift Container Platform 开始查询 Pod 上的 CPU 和/或内存资源指标。当这些指标可用时,水平 Pod 自动缩放器计算当前指标利用率与所需指标利用率的比率,并相应地向上或向下缩放。查询和缩放以定期间隔发生,但在指标可用之前可能需要一到两分钟。
对于复制控制器,此缩放直接对应于复制控制器的副本。对于部署配置,缩放直接对应于部署配置的副本数。请注意,自动缩放仅适用于处于Complete
阶段的最新部署。
OpenShift Container Platform 会自动考虑资源并在资源激增(例如启动期间)期间防止不必要的自动缩放。处于unready
状态的 Pod 在向上缩放时具有0 CPU
使用率,并且自动缩放器在向下缩放时会忽略这些 Pod。没有已知指标的 Pod 在向上缩放时具有0% CPU
使用率,在向下缩放时具有100% CPU
使用率。这允许在 HPA 决策期间获得更高的稳定性。要使用此功能,您必须配置就绪检查以确定新的 Pod 是否可以使用。
要使用水平 Pod 自动缩放器,您的集群管理员必须已正确配置集群指标。
水平 Pod 自动缩放器支持以下指标
指标 | 描述 | API 版本 |
---|---|---|
CPU 利用率 |
使用的 CPU 内核数。可用于计算 Pod 请求的 CPU 百分比。 |
|
内存利用率 |
使用的内存量。可用于计算 Pod 请求的内存百分比。 |
|
对于基于内存的自动缩放,内存使用量必须与副本数成比例地增加和减少。平均而言
使用 OpenShift Container Platform Web 控制台检查应用程序的内存行为,并在使用基于内存的自动缩放之前确保您的应用程序满足这些要求。 |
以下示例显示了image-registry
Deployment
对象的自动缩放。初始部署需要 3 个 Pod。HPA 对象将最小值增加到 5。如果 Pod 上的 CPU 使用率达到 75%,则 Pod 将增加到 7。
$ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
horizontalpodautoscaler.autoscaling/image-registry autoscaled
image-registry
Deployment
对象的样本 HPA,minReplicas
设置为 3apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: image-registry
namespace: default
spec:
maxReplicas: 7
minReplicas: 3
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: image-registry
targetCPUUtilizationPercentage: 75
status:
currentReplicas: 5
desiredReplicas: 0
查看部署的新状态
$ oc get deployment image-registry
部署中现在有 5 个 Pod
NAME REVISION DESIRED CURRENT TRIGGERED BY
image-registry 1 5 5 config
水平 Pod 自动缩放器 (HPA) 扩展了 Pod 自动缩放的概念。HPA 允许您创建和管理一组负载均衡节点。当超过给定的 CPU 或内存阈值时,HPA 会自动增加或减少 Pod 的数量。
水平pod自动伸缩器(HPA)是Kubernetes自动伸缩API组中的一个API资源。自动伸缩器作为一个控制循环工作,默认同步周期为15秒。在此期间,控制器管理器会查询CPU和内存利用率(或两者),并将查询结果与HPA的YAML文件中定义的指标进行比较。控制器管理器从资源指标API获取每个pod的资源指标(例如CPU或内存),这些指标针对HPA目标的每个pod。
如果设置了利用率目标值,控制器会计算每个pod中容器的等效资源请求的利用率百分比。然后,控制器对所有目标pod的利用率取平均值,并生成一个比率,该比率用于缩放所需副本的数量。HPA配置为从metrics.k8s.io
(由指标服务器提供)获取指标。由于指标评估的动态特性,在一组副本的伸缩过程中,副本数量可能会发生波动。
要实现HPA,所有目标pod都必须在其容器上设置资源请求。 |
调度器使用您为pod中的容器指定的资源请求来决定将pod放置在哪个节点上。kubelet强制执行您为容器指定的资源限制,以确保容器不允许使用超过指定限制的资源。kubelet还会专门为该容器预留该系统资源的请求量。
在pod规范中,必须指定资源请求,例如CPU和内存。HPA使用此规范来确定资源利用率,然后向上或向下缩放目标。
例如,HPA对象使用以下指标源
type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 60
在此示例中,HPA将伸缩目标中pod的平均利用率保持在60%。利用率是当前资源使用量与pod请求资源之比。
HPA根据OpenShift Container Platform集群中pod的观察到的CPU或内存利用率值做出伸缩决策。利用率值计算为每个pod资源请求的百分比。缺少资源请求值会影响HPA的最佳性能。
在水平pod自动伸缩过程中,可能会发生快速伸缩事件,且没有时间间隔。配置冷却时间可防止频繁的副本波动。您可以通过配置stabilizationWindowSeconds
字段来指定冷却时间。稳定窗口用于限制当用于伸缩的指标持续波动时副本数量的波动。自动伸缩算法使用此窗口来推断先前的期望状态,并避免对工作负载规模进行不必要的更改。
例如,为scaleDown
字段指定稳定窗口
behavior:
scaleDown:
stabilizationWindowSeconds: 300
在上面的示例中,考虑了过去5分钟内的所有期望状态。这近似于一个滚动最大值,并避免了伸缩算法频繁删除pod,仅仅是为了在片刻之后触发重新创建等效pod的情况。
autoscaling/v2
API允许您向水平pod自动伸缩器添加*伸缩策略*。伸缩策略控制OpenShift Container Platform水平pod自动伸缩器(HPA)如何伸缩pod。伸缩策略允许您通过设置特定数量或特定百分比来限制HPA在指定时间段内向上或向下伸缩pod的速率。您还可以定义一个*稳定窗口*,如果指标在波动,则使用先前计算的期望状态来控制伸缩。您可以为相同的伸缩方向创建多个策略,并根据变化量确定使用哪个策略。您还可以通过定时迭代来限制伸缩。HPA在一个迭代期间伸缩pod,然后根据需要在进一步的迭代中执行伸缩。
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-resource-metrics-memory
namespace: default
spec:
behavior:
scaleDown: (1)
policies: (2)
- type: Pods (3)
value: 4 (4)
periodSeconds: 60 (5)
- type: Percent
value: 10 (6)
periodSeconds: 60
selectPolicy: Min (7)
stabilizationWindowSeconds: 300 (8)
scaleUp: (9)
policies:
- type: Pods
value: 5 (10)
periodSeconds: 70
- type: Percent
value: 12 (11)
periodSeconds: 80
selectPolicy: Max
stabilizationWindowSeconds: 0
...
1 | 指定伸缩策略的方向,scaleDown 或scaleUp 。此示例创建用于缩减的策略。 |
2 | 定义伸缩策略。 |
3 | 确定策略是在每次迭代中按特定数量的pod还是按pod的百分比进行伸缩。默认值为pods 。 |
4 | 限制每次迭代期间的伸缩量,无论是pod的数量还是pod的百分比。按pod数量缩减没有默认值。 |
5 | 确定伸缩迭代的长度。默认值为15秒。 |
6 | 按百分比缩减的默认值为100%。 |
7 | 如果定义了多个策略,则确定首先使用哪个策略。指定Max 以使用允许最大变化量的策略,指定Min 以使用允许最小变化量的策略,或指定Disabled 以防止HPA在该策略方向上进行伸缩。默认值为Max 。 |
8 | 确定HPA应该回顾期望状态的时间段。默认值为0 。 |
9 | 此示例创建用于扩容的策略。 |
10 | 按pod数量限制扩容量。按pod数量扩容的默认值为4%。 |
11 | 按pod百分比限制扩容量。按百分比扩容的默认值为100%。 |
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: hpa-resource-metrics-memory
namespace: default
spec:
...
minReplicas: 20
...
behavior:
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 4
periodSeconds: 30
- type: Percent
value: 10
periodSeconds: 60
selectPolicy: Max
scaleUp:
selectPolicy: Disabled
在此示例中,当pod数量大于40时,将使用基于百分比的策略进行缩减,因为该策略导致更大的变化,这是selectPolicy
所要求的。
如果有80个pod副本,在第一次迭代中,HPA会减少8个pod,这是80个pod的10%(基于type: Percent
和value: 10
参数),持续一分钟(periodSeconds: 60
)。对于下一次迭代,pod数量为72。HPA计算出剩余pod的10%是7.2,它将其四舍五入为8,并缩减8个pod。在每次后续迭代中,将根据剩余pod的数量重新计算要缩减的pod数量。当pod数量低于40时,将应用基于pod的策略,因为基于pod的数量大于基于百分比的数量。HPA一次减少4个pod(type: Pods
和value: 4
),持续30秒(periodSeconds: 30
),直到剩余20个副本(minReplicas
)。
selectPolicy: Disabled
参数阻止HPA扩容pod。如果需要,您可以通过调整副本集或部署集中的副本数量来手动扩容。
如果设置,您可以使用oc edit
命令查看伸缩策略
$ oc edit hpa hpa-resource-metrics-memory
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
annotations:
autoscaling.alpha.kubernetes.io/behavior:\
'{"ScaleUp":{"StabilizationWindowSeconds":0,"SelectPolicy":"Max","Policies":[{"Type":"Pods","Value":4,"PeriodSeconds":15},{"Type":"Percent","Value":100,"PeriodSeconds":15}]},\
"ScaleDown":{"StabilizationWindowSeconds":300,"SelectPolicy":"Min","Policies":[{"Type":"Pods","Value":4,"PeriodSeconds":60},{"Type":"Percent","Value":10,"PeriodSeconds":60}]}}'
...
在Web控制台中,您可以创建一个水平pod自动伸缩器(HPA),该伸缩器指定您要在Deployment
或DeploymentConfig
对象上运行的pod的最小和最大数量。您还可以定义pod应达到的CPU或内存使用量。
无法将HPA添加到作为Operator支持的服务、Knative服务或Helm chart一部分的部署。 |
在 Web 控制台中创建 HPA
在**拓扑**视图中,单击节点以显示侧面板。
从**操作**下拉列表中,选择**添加水平 Pod 自动缩放器**以打开**添加水平 Pod 自动缩放器**表单。
在**添加水平 Pod 自动缩放器**表单中,定义名称、最小和最大 Pod 限制、CPU 和内存使用率,然后单击**保存**。
如果 CPU 和内存使用率的任何值缺失,则会显示警告。 |
在 Web 控制台中编辑 HPA
在**拓扑**视图中,单击节点以显示侧面板。
从**操作**下拉列表中,选择**编辑水平 Pod 自动缩放器**以打开**编辑水平 Pod 自动缩放器**表单。
在**编辑水平 Pod 自动缩放器**表单中,编辑最小和最大 Pod 限制以及 CPU 和内存使用率,然后单击**保存**。
在 Web 控制台中创建或编辑水平 Pod 自动缩放器时,您可以从**表单视图**切换到**YAML 视图**。 |
在 Web 控制台中删除 HPA
在**拓扑**视图中,单击节点以显示侧面板。
从**操作**下拉列表中,选择**删除水平 Pod 自动缩放器**。
在确认弹出窗口中,单击**删除**以删除 HPA。
使用 OpenShift Container Platform CLI,您可以创建一个水平 Pod 自动缩放器 (HPA) 来自动缩放现有的Deployment
、DeploymentConfig
、ReplicaSet
、ReplicationController
或StatefulSet
对象。HPA 会缩放与该对象关联的 Pod,以维持您指定的 CPU 使用率。
除非您需要其他对象提供的特定功能或行为,否则建议使用 |
HPA 会增加和减少最小和最大数量之间的副本数量,以维持所有 Pod 的指定 CPU 利用率。
当针对 CPU 利用率进行自动缩放时,您可以使用oc autoscale
命令并指定您希望在任何给定时间运行的 Pod 的最小和最大数量以及 Pod 应达到的平均 CPU 利用率。如果您未指定最小值,则 Pod 将从 OpenShift Container Platform 服务器获取默认值。
要针对特定 CPU 值进行自动缩放,请创建一个具有目标 CPU 和 Pod 限制的HorizontalPodAutoscaler
对象。
要使用水平 Pod 自动缩放器,您的集群管理员必须已正确配置集群指标。您可以使用oc describe PodMetrics <pod-name>
命令来确定是否已配置指标。如果已配置指标,则输出将类似于以下内容,其中Cpu
和Memory
显示在Usage
下。
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
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>
创建用于 CPU 利用率的水平 Pod 自动缩放器
执行以下操作之一
要根据 CPU 利用率百分比进行缩放,请为现有对象创建一个HorizontalPodAutoscaler
对象
$ oc autoscale <object_type>/<name> \(1)
--min <number> \(2)
--max <number> \(3)
--cpu-percent=<percent> (4)
1 | 指定要自动缩放的对象的类型和名称。该对象必须存在,并且必须是Deployment 、DeploymentConfig /dc 、ReplicaSet /rs 、ReplicationController /rc 或StatefulSet 。 |
2 | 可选:在缩减规模时指定最小副本数。 |
3 | 在扩容时指定最大副本数。 |
4 | 指定所有 Pod 上的目标平均 CPU 利用率,表示为请求 CPU 的百分比。如果未指定或为负数,则使用默认自动缩放策略。 |
例如,以下命令显示了对image-registry
Deployment
对象的自动缩放。初始部署需要 3 个 Pod。HPA 对象将最小值增加到 5。如果 Pod 上的 CPU 使用率达到 75%,则 Pod 将增加到 7。
$ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
要针对特定 CPU 值进行缩放,请为现有对象创建一个类似于以下内容的 YAML 文件
创建一个类似于以下内容的 YAML 文件
apiVersion: autoscaling/v2 (1)
kind: HorizontalPodAutoscaler
metadata:
name: cpu-autoscale (2)
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1 (3)
kind: Deployment (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)
1 | 使用autoscaling/v2 API。 |
2 | 为这个水平 Pod 自动缩放器对象指定一个名称。 |
3 | 指定要缩放的对象的 API 版本
|
4 | 指定对象的类型。该对象必须是Deployment 、DeploymentConfig /dc 、ReplicaSet /rs 、ReplicationController /rc 或StatefulSet 。 |
5 | 指定要缩放的对象的名称。该对象必须存在。 |
6 | 在缩减规模时指定最小副本数。 |
7 | 在扩容时指定最大副本数。 |
8 | 将metrics 参数用于内存利用率。 |
9 | 为 CPU 利用率指定cpu 。 |
10 | 设置为AverageValue 。 |
11 | 使用目标 CPU 值设置为averageValue 。 |
创建水平 Pod 自动缩放器
$ oc create -f <file-name>.yaml
验证是否已创建水平 Pod 自动缩放器
$ oc get hpa cpu-autoscale
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
cpu-autoscale Deployment/example 173m/500m 1 10 1 20m
使用 OpenShift Container Platform CLI,您可以创建一个水平 Pod 自动缩放器 (HPA) 来自动缩放现有的Deployment
、DeploymentConfig
、ReplicaSet
、ReplicationController
或StatefulSet
对象。HPA 会缩放与该对象关联的 Pod,以维持您指定的平均内存利用率,无论是直接值还是请求内存的百分比。
除非您需要其他对象提供的特定功能或行为,否则建议使用 |
HPA 会增加和减少最小和最大数量之间的副本数量,以维持所有 Pod 的指定内存利用率。
对于内存利用率,您可以指定 Pod 的最小和最大数量以及 Pod 应达到的平均内存利用率。如果您未指定最小值,则 Pod 将从 OpenShift Container Platform 服务器获取默认值。
要使用水平 Pod 自动缩放器,您的集群管理员必须已正确配置集群指标。您可以使用oc describe PodMetrics <pod-name>
命令来确定是否已配置指标。如果已配置指标,则输出将类似于以下内容,其中Cpu
和Memory
显示在Usage
下。
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-129-223.compute.internal -n openshift-kube-scheduler
Name: openshift-kube-scheduler-ip-10-0-129-223.compute.internal
Namespace: openshift-kube-scheduler
Labels: <none>
Annotations: <none>
API Version: metrics.k8s.io/v1beta1
Containers:
Name: wait-for-host-port
Usage:
Cpu: 0
Memory: 0
Name: scheduler
Usage:
Cpu: 8m
Memory: 45440Ki
Kind: PodMetrics
Metadata:
Creation Timestamp: 2020-02-14T22:21:14Z
Self Link: /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-129-223.compute.internal
Timestamp: 2020-02-14T22:21:14Z
Window: 5m0s
Events: <none>
创建用于内存利用率的水平 Pod 自动缩放器
为以下各项之一创建一个 YAML 文件
要针对特定内存值进行缩放,请为现有对象创建一个类似于以下内容的HorizontalPodAutoscaler
对象
apiVersion: autoscaling/v2 (1)
kind: HorizontalPodAutoscaler
metadata:
name: hpa-resource-metrics-memory (2)
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1 (3)
kind: Deployment (4)
name: example (5)
minReplicas: 1 (6)
maxReplicas: 10 (7)
metrics: (8)
- type: Resource
resource:
name: memory (9)
target:
type: AverageValue (10)
averageValue: 500Mi (11)
behavior: (12)
scaleDown:
stabilizationWindowSeconds: 300
policies:
- type: Pods
value: 4
periodSeconds: 60
- type: Percent
value: 10
periodSeconds: 60
selectPolicy: Max
1 | 使用autoscaling/v2 API。 |
2 | 为这个水平 Pod 自动缩放器对象指定一个名称。 |
3 | 指定要缩放的对象的 API 版本
|
4 | 指定对象的类型。该对象必须是Deployment 、DeploymentConfig 、ReplicaSet 、ReplicationController 或StatefulSet 。 |
5 | 指定要缩放的对象的名称。该对象必须存在。 |
6 | 在缩减规模时指定最小副本数。 |
7 | 在扩容时指定最大副本数。 |
8 | 将metrics 参数用于内存利用率。 |
9 | 为内存利用率指定memory 。 |
10 | 将类型设置为AverageValue 。 |
11 | 指定averageValue 和特定内存值。 |
12 | 可选:指定缩放策略以控制向上或向下缩放的速度。 |
要按百分比进行缩放,请为现有对象创建一个类似于以下内容的HorizontalPodAutoscaler
对象
apiVersion: autoscaling/v2 (1)
kind: HorizontalPodAutoscaler
metadata:
name: memory-autoscale (2)
namespace: default
spec:
scaleTargetRef:
apiVersion: apps/v1 (3)
kind: Deployment (4)
name: example (5)
minReplicas: 1 (6)
maxReplicas: 10 (7)
metrics: (8)
- type: Resource
resource:
name: memory (9)
target:
type: Utilization (10)
averageUtilization: 50 (11)
behavior: (12)
scaleUp:
stabilizationWindowSeconds: 180
policies:
- type: Pods
value: 6
periodSeconds: 120
- type: Percent
value: 10
periodSeconds: 120
selectPolicy: Max
1 | 使用autoscaling/v2 API。 |
2 | 为这个水平 Pod 自动缩放器对象指定一个名称。 |
3 | 指定要缩放的对象的 API 版本
|
4 | 指定对象的类型。该对象必须是Deployment 、DeploymentConfig 、ReplicaSet 、ReplicationController 或StatefulSet 。 |
5 | 指定要缩放的对象的名称。该对象必须存在。 |
6 | 在缩减规模时指定最小副本数。 |
7 | 在扩容时指定最大副本数。 |
8 | 将metrics 参数用于内存利用率。 |
9 | 为内存利用率指定memory 。 |
10 | 设置为Utilization 。 |
11 | 指定averageUtilization 以及所有 Pod 的目标平均内存利用率,表示为请求内存的百分比。目标 Pod 必须配置内存请求。 |
12 | 可选:指定缩放策略以控制向上或向下缩放的速度。 |
创建水平 Pod 自动缩放器
$ oc create -f <file-name>.yaml
例如
$ oc create -f hpa.yaml
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
验证是否已创建水平 Pod 自动缩放器
$ oc get hpa hpa-resource-metrics-memory
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20m
$ oc describe hpa hpa-resource-metrics-memory
Name: hpa-resource-metrics-memory
Namespace: default
Labels: <none>
Annotations: <none>
CreationTimestamp: Wed, 04 Mar 2020 16:31:37 +0530
Reference: Deployment/example
Metrics: ( current / target )
resource memory on pods: 2441216 / 500Mi
Min replicas: 1
Max replicas: 10
ReplicationController 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 memory resource
ScalingLimited False DesiredWithinRange the desired count is within the acceptable range
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal SuccessfulRescale 6m34s horizontal-pod-autoscaler New size: 1; reason: All metrics below target
您可以使用设置的状态条件来确定水平 Pod 自动伸缩器 (HPA) 是否能够进行伸缩,以及它当前是否以任何方式受到限制。
HPA 状态条件可在自动伸缩 API 的v2
版本中使用。
HPA 返回以下状态条件:
AbleToScale
条件指示 HPA 是否能够获取和更新指标,以及任何与回退相关的条件是否会阻止伸缩。
True
条件表示允许伸缩。
False
条件表示由于指定的原因不允许伸缩。
ScalingActive
条件指示 HPA 是否已启用(例如,目标的副本数量不为零)并且能够计算所需的指标。
True
条件表示指标工作正常。
False
条件通常表示获取指标时出现问题。
ScalingLimited
条件指示所需伸缩规模已达到水平 Pod 自动伸缩器的最大值或最小值上限。
True
条件表示您需要提高或降低最小或最大副本数才能进行伸缩。
False
条件表示允许请求的伸缩。
$ oc describe hpa cm-test
Name: cm-test
Namespace: prom
Labels: <none>
Annotations: <none>
CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000
Reference: ReplicationController/cm-test
Metrics: ( current / target )
"http_requests" on pods: 66m / 500m
Min replicas: 1
Max replicas: 4
ReplicationController pods: 1 current / 1 desired
Conditions: (1)
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request
ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
Events:
1 | 水平 Pod 自动伸缩器状态消息。 |
以下是一个无法伸缩的 Pod 示例
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale False FailedGetScale the HPA controller was unable to get the target's current scale: no matches for kind "ReplicationController" in group "apps"
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedGetScale 6s (x3 over 36s) horizontal-pod-autoscaler no matches for kind "ReplicationController" in group "apps"
以下是一个无法获取所需指标进行伸缩的 Pod 示例
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale
ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API
以下是一个请求的自动伸缩小于所需最小值的 Pod 示例
Conditions:
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request
ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
您可以查看水平 Pod 自动伸缩器 (HPA) 在 Pod 上设置的状态条件。
HPA 状态条件可在自动伸缩 API 的 |
要使用水平 Pod 自动缩放器,您的集群管理员必须已正确配置集群指标。您可以使用oc describe PodMetrics <pod-name>
命令来确定是否已配置指标。如果已配置指标,则输出将类似于以下内容,其中Cpu
和Memory
显示在Usage
下。
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
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>
要查看 Pod 上的状态条件,请使用以下命令以及 Pod 的名称:
$ oc describe hpa <pod-name>
例如
$ oc describe hpa cm-test
这些条件显示在输出的Conditions
字段中。
Name: cm-test
Namespace: prom
Labels: <none>
Annotations: <none>
CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000
Reference: ReplicationController/cm-test
Metrics: ( current / target )
"http_requests" on pods: 66m / 500m
Min replicas: 1
Max replicas: 4
ReplicationController pods: 1 current / 1 desired
Conditions: (1)
Type Status Reason Message
---- ------ ------ -------
AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale
ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request
ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable range
有关复制控制器和部署控制器的更多信息,请参阅了解部署和部署配置。
有关 HPA 用法的示例,请参阅基于内存利用率的 Quarkus 应用程序的水平 Pod 自动伸缩。