如果 Google Kubernetes Engine (GKE) 中的 Pod 纵向自动扩缩未按预期运行,您的工作负载可能无法正确扩缩。这些问题可能会阻碍应用处理负载,从而导致性能问题或服务中断。您可能会看到 Pod 未使用新的资源建议重启,或者建议与实际用量不符。
您可以使用本文档解决 VerticalPodAutoscaler 配置或意外建议方面的常见问题。按照这些问题排查步骤操作,有助于确保您的应用根据需求高效可靠地扩缩。
对于配置 VerticalPodAutoscaler 资源并需要确保其应用正确扩缩的应用开发者,此信息非常重要。它还可以帮助平台管理员和运维人员排查影响自动扩缩的工作负载的集群配置问题。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅 常见的 GKE 用户角色和任务。
诊断 VerticalPodAutoscaler 问题
如需诊断 VerticalPodAutoscaler 的问题,请使用 kubectl 或 Google Cloud 控制台检查其状态和
配置。
描述 VerticalPodAutoscaler
如需查看实时计算结果和近期伸缩决策,请使用 kubectl describe vpa 命令:
kubectl describe vpa VPA_NAME -n NAMESPACE_NAME
替换以下内容:
VPA_NAME:VerticalPodAutoscaler 的名称。NAMESPACE_NAME:VerticalPodAutoscaler 的命名空间。
输出类似于以下内容:
Name: sample-deployment-vpa
Namespace: default
API Version: autoscaling.k8s.io/v1
Kind: VerticalPodAutoscaler
# Multiple lines are omitted here
Spec:
Target Ref:
API Version: apps/v1
Kind: Deployment
Name: sample-deployment
Update Policy:
Update Mode: Auto
Status:
Conditions:
Last Transition Time: 2025-10-09T10:00:00Z
Message: VPA is fetching history in order to provide recommendation
Reason: FetchingHistory
Status: True
Type: FetchingHistory
Last Transition Time: 2025-10-09T10:05:00Z
Message: VPA pod metrics aren't available yet
Reason: NoMetrics
Status: True
Type: LowConfidence
Last Transition Time: 2025-10-09T10:10:00Z
Message: VPA is able to provide a recommendation
Reason: RecommendationProvided
Status: True
Type: RecommendationProvided
Recommendation:
Container Recommendations:
Container Name: sample-container
Lower Bound:
Cpu: 100m
Memory: 128Mi
Target:
Cpu: 200m
Memory: 256Mi
Upper Bound:
Cpu: 500m
Memory: 512Mi
Events: <none>
在输出中,查看以下主要部分:
Spec:显示配置详细信息,包括targetRef字段(目标工作负载)和updatePolicy字段(如何应用更新)。Status:显示Conditions部分(运行状况)和Recommendation部分(为每个容器生成的 CPU 和内存资源值)。Events:列出与 VerticalPodAutoscaler 对象相关的近期操作或错误。
查看 VerticalPodAutoscaler 清单
如需查看 VerticalPodAutoscaler 的完整配置和状态,请使用 kubectl 或 Google Cloud 控制台检查其
YAML 清单:
控制台
在 Google Cloud 控制台中,前往对象浏览器页面。
点击对象种类 过滤条件列表。
清除所有现有选择。
选择 VerticalPodAutoscaler ,然后点击确定 。
在过滤后的列表中,选择 autoscaling.k8s.io API 组。
选择 VerticalPodAutoscaler 对象种类。
点击要检查的 VerticalPodAutoscaler 的名称。
kubectl
kubectl get vpa VPA_NAME \
-n NAMESPACE_NAME \
-o yaml
替换以下内容:
VPA_NAME:VerticalPodAutoscaler 的名称。NAMESPACE_NAME:VerticalPodAutoscaler 的命名空间。
在 Google Cloud 控制台中检查 VerticalPodAutoscaler 状态
如需在 Google Cloud 控制台中检查工作负载的 VerticalPodAutoscaler 状态,请执行以下操作:
前往工作负载 页面。
点击工作负载的名称。
前往详细信息 标签页,然后找到自动扩缩器 部分。
查看纵向 Pod 自动扩缩器 行,了解有关指标收集和配置运行状况的状态消息。
收集决策日志
如需详细了解 VerticalPodAutoscaler 的计算和决策,请在 Cloud Logging 中启用 Pod 纵向自动扩缩器决策日志 (预览版)。
这些日志会捕获 UPDATE_RECOMMENDATION、EVICT_POD、APPLY_RECOMMENDATION_IN_PLACE 和 APPLY_RECOMMENDATION_ON_EVICTION 等事件。
如需启用和检查决策日志,请参阅 收集 Pod 纵向自动扩缩器事件日志。
排查 VerticalPodAutoscaler 建议问题
以下部分介绍了 VerticalPodAutoscaler 无法生成建议或生成的建议与预期不同的问题。
VerticalPodAutoscaler 未提供建议
症状:
- VerticalPodAutoscaler 清单中的
Status.Recommendation字段为空。 - VerticalPodAutoscaler 清单中的条件显示
NoPodsMatched、FetchingHistory或LowConfidence状态条件。
原因:
- 目标不正确:VerticalPodAutoscaler 清单中的
spec.targetRef字段未指向同一命名空间中的现有工作负载。 - 初始指标收集:VerticalPodAutoscaler 是最近创建的,仍在收集历史资源用量数据。
metrics-server组件问题 :VerticalPodAutoscaler 依赖于metrics-server组件中的指标。如果metrics-server组件无法正常运行,VerticalPodAutoscaler 将无法检索用量数据。- 没有正在运行的 Pod:目标工作负载没有正在运行或就绪的 Pod,供 VerticalPodAutoscaler 观察。
解决方法:
验证
targetRef字段:检查spec.targetRef部分中kind、name、 和apiVersion字段的值。确保所有值都与目标工作负载匹配。如需确认工作负载存在,请运行以下命令:kubectl get KIND WORKLOAD_NAME \ -n NAMESPACE_NAME替换以下内容:
KIND:工作负载类型,例如deployment或statefulset。WORKLOAD_NAME:工作负载的名称。NAMESPACE_NAME:工作负载的命名空间。
留出指标收集时间:新的 VerticalPodAutoscaler 资源 需要时间来收集数据。监控
Status.Conditions字段,以了解是否转换为RecommendationProvided状态条件。检查
metrics-server组件:验证
metrics-server组件的 Pod 是否正在运行:kubectl get pods -n kube-system | grep metrics-server如果 Pod 未运行或重启次数较多,请检查其日志:
kubectl logs -n kube-system -l k8s-app=metrics-server包含
error、failed或unable to fetch等字词的日志条目表示指标收集存在问题。
确保 Pod 正在运行:验证目标工作负载是否至少有一个正在运行且就绪的 Pod。
VerticalPodAutoscaler 建议出乎意料
症状:
Status.Recommendation部分中的 CPU 或内存值高于或低于预期。- 建议与观察到的工作负载资源消耗不一致。
原因:
- 工作负载行为发生变化:VerticalPodAutoscaler 建议基于历史用量。应用消耗模式的近期变化可能尚未反映出来。
- 工作负载特征:生命周期较短的作业或用量模式高度不稳定的工作负载可能无法获得最佳建议。
- VerticalPodAutoscaler 资源冲突:可能会配置多个 VerticalPodAutoscaler 资源以同一工作负载为目标。
解决方法:
- 留出调整时间:在应用更改后,让 VerticalPodAutoscaler 有时间学习新的用量模式。
- 评估适用性:评估 VerticalPodAutoscaler 或 Pod 横向自动扩缩器是否最适合工作负载类型。
检查是否存在冲突的 VerticalPodAutoscaler 资源:
列出集群中的所有 VerticalPodAutoscaler 资源:
kubectl get vpa --all-namespaces检查每个资源的
spec.targetRef字段。如果多个 VerticalPodAutoscaler 资源以同一工作负载为目标,请移除或调整冲突的资源,以便只有一个 VerticalPodAutoscaler 以给定工作负载为目标。
排查 Pod 资源更新问题
以下部分介绍了存在建议但未应用于目标 Pod 的问题。
Pod 资源请求未更新
症状:
- VerticalPodAutoscaler 清单的
Status部分显示建议,但 Pod 清单中的resources.requests字段未更新。 - Pod 未重启以在使用
Auto或Recreate更新模式时应用建议。
原因:
- **
updateMode字段为Off**:当spec.updatePolicy.updateMode字段设置为Off时,VerticalPodAutoscaler 会生成建议,但 不会应用这些建议。 - 工作负载只有一个副本:在
Auto或Recreate更新模式下, VerticalPodAutoscaler 会避免驱逐单副本工作负载,以防止 停机。
解决方法:
- 检查
updateMode字段:修改 VerticalPodAutoscaler 清单 将spec.updatePolicy.updateMode字段设置为Auto、Recreate或InPlaceOrRecreate。 - 增加副本数量:对于使用
Auto或Recreate更新模式的工作负载,请确保 Deployment 或 StatefulSet 有多个 副本。
就地更新失败或仍处于延迟状态
症状:
- 就地调整容器大小失败或仍处于延迟状态。
原因:
- 节点容量不足:如果节点没有足够的容量来满足更新后的资源请求,则就地调整大小操作会延迟。
解决方法:
验证延迟调整大小状态和节点容量:
如果调整大小操作延迟超过 5 分钟,VerticalPodAutoscaler 会回退到驱逐并重新创建 Pod 以应用建议。如需检查延迟更新的状态,请执行以下操作:
检查 Pod 注解,以查看
vpaInPlaceUpdated注解是否设置为"true":metadata: annotations: vpaInPlaceUpdated: "true" vpaUpdates: 'Pod resources updated by sample-deployment-vpa: container 0: cpu request, memory request'通过检查
status.conditions字段中的延迟调整大小事件来检查延迟状态:status: conditions: - type: PodResizePending status: "True" reason: Deferred message: "Node didn't have enough resource: ..."检查 Pod 的 Kubernetes 事件:
kubectl get events -n NAMESPACE_NAME --field-selector involvedObject.kind=Pod,involvedObject.name=POD_NAME替换以下内容:
NAMESPACE_NAME:Pod 的命名空间。POD_NAME:Pod 的名称。
查找具有以下任一原因的事件:
ResizedPod(就地更新成功)或EvictedByVPA(回退到重新创建)。
后续步骤
如果您在文档中找不到问题的解决方案,请参阅获取支持以获取进一步的帮助,包括以下主题的建议:
- 请与 Cloud Customer Care 联系,以提交支持请求。
- 通过在 StackOverflow 上提问并使用
google-kubernetes-engine标记搜索类似问题,从社区获得支持。您还可以加入#kubernetes-engineSlack 频道 以获得更多社区支持。 - 使用 公开问题跟踪器提交问题或功能请求。